This revision was automatically updated to reflect the committed changes.
Closed by commit rGd6b3de72566f: [lldb] [llgs] Fix signo sent with
fork/vfork/vforkdone events (authored by mgorny).
Herald added a project: LLDB.
Changed prior to commit:
https://reviews.llvm.org/D127193?vs=438410&id=438755#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D127193/new/
https://reviews.llvm.org/D127193
Files:
lldb/include/lldb/Host/Debug.h
lldb/source/Plugins/Process/FreeBSD/NativeThreadFreeBSD.cpp
lldb/source/Plugins/Process/Linux/NativeThreadLinux.cpp
lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.cpp
lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.cpp
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp
lldb/test/API/tools/lldb-server/TestGdbRemoteFork.py
lldb/tools/debugserver/source/RNBRemote.cpp
Index: lldb/tools/debugserver/source/RNBRemote.cpp
===================================================================
--- lldb/tools/debugserver/source/RNBRemote.cpp
+++ lldb/tools/debugserver/source/RNBRemote.cpp
@@ -2704,7 +2704,7 @@
std::ostringstream ostrm;
// Output the T packet with the thread
ostrm << 'T';
- int signum = tid_stop_info.details.signal.signo;
+ int signum = tid_stop_info.signo;
DNBLogThreadedIf(
LOG_RNB_PROC, "%8d %s got signal signo = %u, exc_type = %u",
(uint32_t)m_comm.Timer().ElapsedMicroSeconds(true), __FUNCTION__,
@@ -5450,9 +5450,9 @@
break;
case eStopTypeSignal:
- if (tid_stop_info.details.signal.signo != 0) {
+ if (tid_stop_info.signo != 0) {
thread_dict_sp->AddIntegerItem("signal",
- tid_stop_info.details.signal.signo);
+ tid_stop_info.signo);
reason_value = "signal";
}
break;
Index: lldb/test/API/tools/lldb-server/TestGdbRemoteFork.py
===================================================================
--- lldb/test/API/tools/lldb-server/TestGdbRemoteFork.py
+++ lldb/test/API/tools/lldb-server/TestGdbRemoteFork.py
@@ -15,7 +15,7 @@
self.reset_test_sequence()
# continue and expect fork
- fork_regex = "[$]T.*;fork:p([0-9a-f]+)[.]([0-9a-f]+).*"
+ fork_regex = "[$]T05.*;fork:p([0-9a-f]+)[.]([0-9a-f]+).*"
self.test_sequence.add_log_lines([
"read packet: $c#00",
{"direction": "send", "regex": fork_regex,
@@ -49,7 +49,7 @@
self.reset_test_sequence()
# continue and expect fork
- fork_regex = "[$]T.*;{}:p([0-9a-f]+)[.]([0-9a-f]+).*".format(variant)
+ fork_regex = "[$]T05.*;{}:p([0-9a-f]+)[.]([0-9a-f]+).*".format(variant)
self.test_sequence.add_log_lines([
"read packet: $c#00",
{"direction": "send", "regex": fork_regex,
@@ -85,7 +85,7 @@
# resume the parent
self.test_sequence.add_log_lines([
"read packet: $c#00",
- {"direction": "send", "regex": r"[$]T.*vforkdone.*"},
+ {"direction": "send", "regex": r"[$]T05.*vforkdone.*"},
"read packet: $c#00",
{"direction": "send", "regex": r"[$]W00;process:[0-9a-f]+#.*"},
], True)
Index: lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp
===================================================================
--- lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp
+++ lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp
@@ -728,7 +728,7 @@
return llvm::make_error<llvm::StringError>(
"failed to get stop reason", llvm::inconvertibleErrorCode());
- const int signum = tid_stop_info.details.signal.signo;
+ const int signum = tid_stop_info.signo;
if (log) {
LLDB_LOGF(log,
"GDBRemoteCommunicationServerLLGS::%s pid %" PRIu64
@@ -804,7 +804,7 @@
// Output the T packet with the thread
response.PutChar('T');
- int signum = tid_stop_info.details.signal.signo;
+ int signum = tid_stop_info.signo;
LLDB_LOG(
log,
"pid {0}, tid {1}, got signal signo = {2}, reason = {3}, exc_type = {4}",
Index: lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.cpp
===================================================================
--- lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.cpp
+++ lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.cpp
@@ -253,13 +253,12 @@
ThreadStopInfo stop_info;
stop_info.reason = reason;
-
// No signal support on Windows but required to provide a 'valid' signum.
+ stop_info.signo = SIGTRAP;
+
if (reason == StopReason::eStopReasonException) {
stop_info.details.exception.type = 0;
stop_info.details.exception.data_count = 0;
- } else {
- stop_info.details.signal.signo = SIGTRAP;
}
thread.SetStopReason(stop_info, description);
Index: lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.cpp
===================================================================
--- lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.cpp
+++ lldb/source/Plugins/Process/NetBSD/NativeThreadNetBSD.cpp
@@ -81,7 +81,7 @@
SetStopped();
m_stop_info.reason = StopReason::eStopReasonSignal;
- m_stop_info.details.signal.signo = signo;
+ m_stop_info.signo = signo;
m_stop_description.clear();
if (info) {
@@ -100,19 +100,19 @@
void NativeThreadNetBSD::SetStoppedByBreakpoint() {
SetStopped();
m_stop_info.reason = StopReason::eStopReasonBreakpoint;
- m_stop_info.details.signal.signo = SIGTRAP;
+ m_stop_info.signo = SIGTRAP;
}
void NativeThreadNetBSD::SetStoppedByTrace() {
SetStopped();
m_stop_info.reason = StopReason::eStopReasonTrace;
- m_stop_info.details.signal.signo = SIGTRAP;
+ m_stop_info.signo = SIGTRAP;
}
void NativeThreadNetBSD::SetStoppedByExec() {
SetStopped();
m_stop_info.reason = StopReason::eStopReasonExec;
- m_stop_info.details.signal.signo = SIGTRAP;
+ m_stop_info.signo = SIGTRAP;
}
void NativeThreadNetBSD::SetStoppedByWatchpoint(uint32_t wp_index) {
@@ -127,7 +127,7 @@
SetStopped();
m_stop_description = ostr.str();
m_stop_info.reason = StopReason::eStopReasonWatchpoint;
- m_stop_info.details.signal.signo = SIGTRAP;
+ m_stop_info.signo = SIGTRAP;
}
void NativeThreadNetBSD::SetStoppedByFork(lldb::pid_t child_pid,
@@ -135,6 +135,7 @@
SetStopped();
m_stop_info.reason = StopReason::eStopReasonFork;
+ m_stop_info.signo = SIGTRAP;
m_stop_info.details.fork.child_pid = child_pid;
m_stop_info.details.fork.child_tid = child_tid;
}
@@ -144,6 +145,7 @@
SetStopped();
m_stop_info.reason = StopReason::eStopReasonVFork;
+ m_stop_info.signo = SIGTRAP;
m_stop_info.details.fork.child_pid = child_pid;
m_stop_info.details.fork.child_tid = child_tid;
}
@@ -152,13 +154,14 @@
SetStopped();
m_stop_info.reason = StopReason::eStopReasonVForkDone;
+ m_stop_info.signo = SIGTRAP;
}
void NativeThreadNetBSD::SetStoppedWithNoReason() {
SetStopped();
m_stop_info.reason = StopReason::eStopReasonNone;
- m_stop_info.details.signal.signo = 0;
+ m_stop_info.signo = 0;
}
void NativeThreadNetBSD::SetStopped() {
Index: lldb/source/Plugins/Process/Linux/NativeThreadLinux.cpp
===================================================================
--- lldb/source/Plugins/Process/Linux/NativeThreadLinux.cpp
+++ lldb/source/Plugins/Process/Linux/NativeThreadLinux.cpp
@@ -48,19 +48,19 @@
return;
case eStopReasonTrace:
log.Printf("%s: %s trace, stopping signal 0x%" PRIx32, __FUNCTION__, header,
- stop_info.details.signal.signo);
+ stop_info.signo);
return;
case eStopReasonBreakpoint:
log.Printf("%s: %s breakpoint, stopping signal 0x%" PRIx32, __FUNCTION__,
- header, stop_info.details.signal.signo);
+ header, stop_info.signo);
return;
case eStopReasonWatchpoint:
log.Printf("%s: %s watchpoint, stopping signal 0x%" PRIx32, __FUNCTION__,
- header, stop_info.details.signal.signo);
+ header, stop_info.signo);
return;
case eStopReasonSignal:
log.Printf("%s: %s signal 0x%02" PRIx32, __FUNCTION__, header,
- stop_info.details.signal.signo);
+ stop_info.signo);
return;
case eStopReasonException:
log.Printf("%s: %s exception type 0x%02" PRIx64, __FUNCTION__, header,
@@ -68,7 +68,7 @@
return;
case eStopReasonExec:
log.Printf("%s: %s exec, stopping signal 0x%" PRIx32, __FUNCTION__, header,
- stop_info.details.signal.signo);
+ stop_info.signo);
return;
case eStopReasonPlanComplete:
log.Printf("%s: %s plan complete", __FUNCTION__, header);
@@ -285,7 +285,7 @@
SetStopped();
m_stop_info.reason = StopReason::eStopReasonSignal;
- m_stop_info.details.signal.signo = signo;
+ m_stop_info.signo = signo;
m_stop_description.clear();
if (info) {
@@ -371,7 +371,7 @@
// If we are stopped by a signal, return the signo.
if (signo && m_state == StateType::eStateStopped &&
m_stop_info.reason == StopReason::eStopReasonSignal) {
- *signo = m_stop_info.details.signal.signo;
+ *signo = m_stop_info.signo;
}
// Regardless, we are stopped.
@@ -398,14 +398,14 @@
SetStopped();
m_stop_info.reason = StopReason::eStopReasonExec;
- m_stop_info.details.signal.signo = SIGSTOP;
+ m_stop_info.signo = SIGSTOP;
}
void NativeThreadLinux::SetStoppedByBreakpoint() {
SetStopped();
m_stop_info.reason = StopReason::eStopReasonBreakpoint;
- m_stop_info.details.signal.signo = SIGTRAP;
+ m_stop_info.signo = SIGTRAP;
m_stop_description.clear();
}
@@ -434,7 +434,7 @@
m_stop_description = ostr.str();
m_stop_info.reason = StopReason::eStopReasonWatchpoint;
- m_stop_info.details.signal.signo = SIGTRAP;
+ m_stop_info.signo = SIGTRAP;
}
bool NativeThreadLinux::IsStoppedAtBreakpoint() {
@@ -451,7 +451,7 @@
SetStopped();
m_stop_info.reason = StopReason::eStopReasonTrace;
- m_stop_info.details.signal.signo = SIGTRAP;
+ m_stop_info.signo = SIGTRAP;
}
void NativeThreadLinux::SetStoppedByFork(bool is_vfork, lldb::pid_t child_pid) {
@@ -459,6 +459,7 @@
m_stop_info.reason =
is_vfork ? StopReason::eStopReasonVFork : StopReason::eStopReasonFork;
+ m_stop_info.signo = SIGTRAP;
m_stop_info.details.fork.child_pid = child_pid;
m_stop_info.details.fork.child_tid = child_pid;
}
@@ -467,13 +468,14 @@
SetStopped();
m_stop_info.reason = StopReason::eStopReasonVForkDone;
+ m_stop_info.signo = SIGTRAP;
}
void NativeThreadLinux::SetStoppedWithNoReason() {
SetStopped();
m_stop_info.reason = StopReason::eStopReasonNone;
- m_stop_info.details.signal.signo = 0;
+ m_stop_info.signo = 0;
}
void NativeThreadLinux::SetStoppedByProcessorTrace(
@@ -481,7 +483,7 @@
SetStopped();
m_stop_info.reason = StopReason::eStopReasonProcessorTrace;
- m_stop_info.details.signal.signo = 0;
+ m_stop_info.signo = 0;
m_stop_description = description.str();
}
Index: lldb/source/Plugins/Process/FreeBSD/NativeThreadFreeBSD.cpp
===================================================================
--- lldb/source/Plugins/Process/FreeBSD/NativeThreadFreeBSD.cpp
+++ lldb/source/Plugins/Process/FreeBSD/NativeThreadFreeBSD.cpp
@@ -81,7 +81,7 @@
SetStopped();
m_stop_info.reason = StopReason::eStopReasonSignal;
- m_stop_info.details.signal.signo = signo;
+ m_stop_info.signo = signo;
m_stop_description.clear();
if (info) {
@@ -100,19 +100,19 @@
void NativeThreadFreeBSD::SetStoppedByBreakpoint() {
SetStopped();
m_stop_info.reason = StopReason::eStopReasonBreakpoint;
- m_stop_info.details.signal.signo = SIGTRAP;
+ m_stop_info.signo = SIGTRAP;
}
void NativeThreadFreeBSD::SetStoppedByTrace() {
SetStopped();
m_stop_info.reason = StopReason::eStopReasonTrace;
- m_stop_info.details.signal.signo = SIGTRAP;
+ m_stop_info.signo = SIGTRAP;
}
void NativeThreadFreeBSD::SetStoppedByExec() {
SetStopped();
m_stop_info.reason = StopReason::eStopReasonExec;
- m_stop_info.details.signal.signo = SIGTRAP;
+ m_stop_info.signo = SIGTRAP;
}
void NativeThreadFreeBSD::SetStoppedByWatchpoint(uint32_t wp_index) {
@@ -127,7 +127,7 @@
SetStopped();
m_stop_description = ostr.str();
m_stop_info.reason = StopReason::eStopReasonWatchpoint;
- m_stop_info.details.signal.signo = SIGTRAP;
+ m_stop_info.signo = SIGTRAP;
}
void NativeThreadFreeBSD::SetStoppedByFork(lldb::pid_t child_pid,
@@ -135,6 +135,7 @@
SetStopped();
m_stop_info.reason = StopReason::eStopReasonFork;
+ m_stop_info.signo = SIGTRAP;
m_stop_info.details.fork.child_pid = child_pid;
m_stop_info.details.fork.child_tid = child_tid;
}
@@ -144,6 +145,7 @@
SetStopped();
m_stop_info.reason = StopReason::eStopReasonVFork;
+ m_stop_info.signo = SIGTRAP;
m_stop_info.details.fork.child_pid = child_pid;
m_stop_info.details.fork.child_tid = child_tid;
}
@@ -152,13 +154,14 @@
SetStopped();
m_stop_info.reason = StopReason::eStopReasonVForkDone;
+ m_stop_info.signo = SIGTRAP;
}
void NativeThreadFreeBSD::SetStoppedWithNoReason() {
SetStopped();
m_stop_info.reason = StopReason::eStopReasonNone;
- m_stop_info.details.signal.signo = 0;
+ m_stop_info.signo = 0;
}
void NativeThreadFreeBSD::SetStopped() {
Index: lldb/include/lldb/Host/Debug.h
===================================================================
--- lldb/include/lldb/Host/Debug.h
+++ lldb/include/lldb/Host/Debug.h
@@ -130,12 +130,8 @@
struct ThreadStopInfo {
lldb::StopReason reason;
+ uint32_t signo;
union {
- // eStopReasonSignal
- struct {
- uint32_t signo;
- } signal;
-
// eStopReasonException
struct {
uint64_t type;
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits