summaryrefslogtreecommitdiffstats
path: root/winsup
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2011-11-24 21:54:41 +0000
committerChristopher Faylor <me@cgf.cx>2011-11-24 21:54:41 +0000
commit505bce274fe261526833f77f7bf24b33542da151 (patch)
tree4312d6a08df4742a6a6b100d07a5c30239b40901 /winsup
parente553226cfadf92a3f394a4dc40b6471d62070173 (diff)
downloadcygnal-505bce274fe261526833f77f7bf24b33542da151.tar.gz
cygnal-505bce274fe261526833f77f7bf24b33542da151.tar.bz2
cygnal-505bce274fe261526833f77f7bf24b33542da151.zip
* strace.cc (attach_process): Use NT_SUCCESS to figure out if
NtSetInformationProcess succeeded. (handle_output_debug_string): Put back DebugActiveProcess since it seems to still be needed (on my system at least). Detect new format _STRACE_INTERFACE_ACTIVATE_ADDR which informs whether this is a forked process or not. Use that to decide if forkdebug should be handled.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/utils/ChangeLog9
-rw-r--r--winsup/utils/strace.cc10
2 files changed, 16 insertions, 3 deletions
diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog
index 64d572f9f..51025892f 100644
--- a/winsup/utils/ChangeLog
+++ b/winsup/utils/ChangeLog
@@ -1,3 +1,12 @@
+2011-11-24 Christopher Faylor <me.cygwin2011@cgf.cx>
+
+ * strace.cc (attach_process): Use NT_SUCCESS to figure out if
+ NtSetInformationProcess succeeded.
+ (handle_output_debug_string): Put back DebugActiveProcess since it
+ seems to still be needed (on my system at least). Detect new format
+ _STRACE_INTERFACE_ACTIVATE_ADDR which informs whether this is a forked
+ process or not. Use that to decide if forkdebug should be handled.
+
2011-11-14 Christopher Faylor <me.cygwin2011@cgf.cx>
* strace.cc (handle_output_debug_string): Disable code which attempted
diff --git a/winsup/utils/strace.cc b/winsup/utils/strace.cc
index 2aea8a982..c84fede85 100644
--- a/winsup/utils/strace.cc
+++ b/winsup/utils/strace.cc
@@ -314,8 +314,8 @@ attach_process (pid_t pid)
/* Try to turn off DEBUG_ONLY_THIS_PROCESS so we can follow forks */
/* This is only supported on XP and later */
ULONG DebugFlags = DEBUG_PROCESS_DETACH_ON_EXIT;
- NTSTATUS status = NtSetInformationProcess(h, ProcessDebugFlags, &DebugFlags, sizeof(DebugFlags));
- if (status)
+ NTSTATUS status = NtSetInformationProcess (h, ProcessDebugFlags, &DebugFlags, sizeof (DebugFlags));
+ if (!NT_SUCCESS (status))
warn (0, "Could not clear DEBUG_ONLY_THIS_PROCESS (%x), will not trace child processes", status);
CloseHandle(h);
@@ -486,12 +486,16 @@ handle_output_debug_string (DWORD id, LPVOID p, unsigned mask, FILE *ofile)
if (special == _STRACE_CHILD_PID)
{
+ DebugActiveProcess (n);
return;
}
if (special == _STRACE_INTERFACE_ACTIVATE_ADDR)
{
- if (!WriteProcessMemory (hchild, (LPVOID) n, &strace_active,
+ s = strtok (NULL, " ");
+ if (*s && *s == '1' && !forkdebug)
+ /* don't activate since we are not following forks */;
+ else if (!WriteProcessMemory (hchild, (LPVOID) n, &strace_active,
sizeof (strace_active), &nbytes))
error (0, "couldn't write strace flag to subprocess at %p, "
"windows error %d", n, GetLastError ());