mgorny created this revision. mgorny added reviewers: labath, emaste, krytarowski. mgorny requested review of this revision.
Update the SIGTRAP handler to account for the possibility of SIGTRAP being generated by the user, i.e. not having any specific debugging event associated with it. These instances of SIGTRAP are passed to the regular signal handler. https://reviews.llvm.org/D91007 Files: lldb/source/Plugins/Process/FreeBSDRemote/NativeProcessFreeBSD.cpp lldb/test/API/functionalities/signal/raise/TestRaise.py Index: lldb/test/API/functionalities/signal/raise/TestRaise.py =================================================================== --- lldb/test/API/functionalities/signal/raise/TestRaise.py +++ lldb/test/API/functionalities/signal/raise/TestRaise.py @@ -30,7 +30,6 @@ self.signal_test('SIGRTMIN', True) @skipIfNetBSD # Hangs on NetBSD - @skipIfFreeBSD # hangs def test_sigtrap(self): self.build() self.signal_test('SIGTRAP', True) Index: lldb/source/Plugins/Process/FreeBSDRemote/NativeProcessFreeBSD.cpp =================================================================== --- lldb/source/Plugins/Process/FreeBSDRemote/NativeProcessFreeBSD.cpp +++ lldb/source/Plugins/Process/FreeBSDRemote/NativeProcessFreeBSD.cpp @@ -192,7 +192,8 @@ } assert(info.pl_event == PL_EVENT_SIGNAL); - LLDB_LOG(log, "got SIGTRAP, pid = {0}, lwpid = {1}", pid, info.pl_lwpid); + LLDB_LOG(log, "got SIGTRAP, pid = {0}, lwpid = {1}, flags = {2:x}", + pid, info.pl_lwpid, info.pl_flags); NativeThreadFreeBSD *thread = nullptr; if (info.pl_flags & (PL_FLAG_BORN | PL_FLAG_EXITED)) { @@ -240,6 +241,8 @@ if (info.pl_flags & PL_FLAG_SI) { assert(info.pl_siginfo.si_signo == SIGTRAP); + LLDB_LOG(log, "SIGTRAP siginfo: si_code = {0}, pid = {1}", + info.pl_siginfo.si_code, info.pl_siginfo.si_pid); switch (info.pl_siginfo.si_code) { case TRAP_BRKPT: @@ -273,6 +276,11 @@ SetState(StateType::eStateStopped, true); break; + case SI_USER: + case SI_LWP: + // User-generated SIGTRAP + MonitorSignal(pid, SIGTRAP); + break; } } }
Index: lldb/test/API/functionalities/signal/raise/TestRaise.py =================================================================== --- lldb/test/API/functionalities/signal/raise/TestRaise.py +++ lldb/test/API/functionalities/signal/raise/TestRaise.py @@ -30,7 +30,6 @@ self.signal_test('SIGRTMIN', True) @skipIfNetBSD # Hangs on NetBSD - @skipIfFreeBSD # hangs def test_sigtrap(self): self.build() self.signal_test('SIGTRAP', True) Index: lldb/source/Plugins/Process/FreeBSDRemote/NativeProcessFreeBSD.cpp =================================================================== --- lldb/source/Plugins/Process/FreeBSDRemote/NativeProcessFreeBSD.cpp +++ lldb/source/Plugins/Process/FreeBSDRemote/NativeProcessFreeBSD.cpp @@ -192,7 +192,8 @@ } assert(info.pl_event == PL_EVENT_SIGNAL); - LLDB_LOG(log, "got SIGTRAP, pid = {0}, lwpid = {1}", pid, info.pl_lwpid); + LLDB_LOG(log, "got SIGTRAP, pid = {0}, lwpid = {1}, flags = {2:x}", + pid, info.pl_lwpid, info.pl_flags); NativeThreadFreeBSD *thread = nullptr; if (info.pl_flags & (PL_FLAG_BORN | PL_FLAG_EXITED)) { @@ -240,6 +241,8 @@ if (info.pl_flags & PL_FLAG_SI) { assert(info.pl_siginfo.si_signo == SIGTRAP); + LLDB_LOG(log, "SIGTRAP siginfo: si_code = {0}, pid = {1}", + info.pl_siginfo.si_code, info.pl_siginfo.si_pid); switch (info.pl_siginfo.si_code) { case TRAP_BRKPT: @@ -273,6 +276,11 @@ SetState(StateType::eStateStopped, true); break; + case SI_USER: + case SI_LWP: + // User-generated SIGTRAP + MonitorSignal(pid, SIGTRAP); + break; } } }
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits