[llvm-branch-commits] [lldb] r182517 - Merging r182153:

Bill Wendling isanbard at gmail.com
Wed May 22 14:22:46 PDT 2013


Author: void
Date: Wed May 22 16:22:46 2013
New Revision: 182517

URL: http://llvm.org/viewvc/llvm-project?rev=182517&view=rev
Log:
Merging r182153:
------------------------------------------------------------------------
r182153 | mkopec | 2013-05-17 12:27:47 -0700 (Fri, 17 May 2013) | 5 lines

ProcessMonitor improvements for Linux.
-Remove tracing of fork/vfork until we add support for tracing inferiors' children on Linux.
-Add trace exec option for ptrace so that we don't receive legacy SIGTRAP signals on execve calls.
-Add handling of SIGCHLD sent by kernel (for now, deliver the signal to the inferior).

------------------------------------------------------------------------

Modified:
    lldb/branches/release_33/   (props changed)
    lldb/branches/release_33/source/Plugins/Process/Linux/ProcessMonitor.cpp

Propchange: lldb/branches/release_33/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed May 22 16:22:46 2013
@@ -1,2 +1,2 @@
 /lldb/branches/apple/python-GIL:156467-162159
-/lldb/trunk:182066
+/lldb/trunk:182066,182153

Modified: lldb/branches/release_33/source/Plugins/Process/Linux/ProcessMonitor.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/release_33/source/Plugins/Process/Linux/ProcessMonitor.cpp?rev=182517&r1=182516&r2=182517&view=diff
==============================================================================
--- lldb/branches/release_33/source/Plugins/Process/Linux/ProcessMonitor.cpp (original)
+++ lldb/branches/release_33/source/Plugins/Process/Linux/ProcessMonitor.cpp Wed May 22 16:22:46 2013
@@ -1208,7 +1208,13 @@ ProcessMonitor::Launch(LaunchArgs *args)
     ptrace_opts |= PTRACE_O_TRACEEXIT;
 
     // Have the tracer trace threads which spawn in the inferior process.
-    ptrace_opts |= PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE;
+    // TODO: if we want to support tracing the inferiors' child, add the
+    // appropriate ptrace flags here (PTRACE_O_TRACEFORK, PTRACE_O_TRACEVFORK)
+    ptrace_opts |= PTRACE_O_TRACECLONE;
+
+    // Have the tracer notify us before execve returns
+    // (needed to disable legacy SIGTRAP generation)
+    ptrace_opts |= PTRACE_O_TRACEEXEC;
 
     if (PTRACE(PTRACE_SETOPTIONS, pid, NULL, (void*)ptrace_opts, 0) < 0)
     {
@@ -1390,8 +1396,11 @@ ProcessMonitor::MonitorSIGTRAP(ProcessMo
         assert(false && "Unexpected SIGTRAP code!");
         break;
 
-    case (SIGTRAP | (PTRACE_EVENT_FORK << 8)):
-    case (SIGTRAP | (PTRACE_EVENT_VFORK << 8)):
+    // TODO: these two cases are required if we want to support tracing
+    // of the inferiors' children
+    // case (SIGTRAP | (PTRACE_EVENT_FORK << 8)):
+    // case (SIGTRAP | (PTRACE_EVENT_VFORK << 8)):
+
     case (SIGTRAP | (PTRACE_EVENT_CLONE << 8)):
     {
         unsigned long tid = 0;
@@ -1401,6 +1410,11 @@ ProcessMonitor::MonitorSIGTRAP(ProcessMo
         break;
     }
 
+    case (SIGTRAP | (PTRACE_EVENT_EXEC << 8)):
+        // Don't follow the child by default and resume
+        monitor->Resume(pid, SIGCONT);
+        break;
+
     case (SIGTRAP | (PTRACE_EVENT_EXIT << 8)):
     {
         // The inferior process is about to exit.  Maintain the process in a
@@ -1478,6 +1492,17 @@ ProcessMonitor::MonitorSignal(ProcessMon
         return ProcessMessage::Crash(pid, reason, signo, fault_addr);
     }
 
+    if (signo == SIGCHLD) {
+        assert(monitor);
+        // TODO: Implement tracing of inferiors' children
+        // If we fail to deliver the signal then create a message with the signal
+        if (!monitor->Resume(pid, signo)) {
+            assert(0 && "SIGCHLD delivery failed");
+            message = ProcessMessage::Signal(pid, signo);
+        }
+        return message;
+    }
+
     // Everything else is "normal" and does not require any special action on
     // our part.
     return ProcessMessage::Signal(pid, signo);





More information about the llvm-branch-commits mailing list