diff options
author | Christopher Faylor <me@cgf.cx> | 2011-11-24 21:54:41 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2011-11-24 21:54:41 +0000 |
commit | 505bce274fe261526833f77f7bf24b33542da151 (patch) | |
tree | 4312d6a08df4742a6a6b100d07a5c30239b40901 /winsup | |
parent | e553226cfadf92a3f394a4dc40b6471d62070173 (diff) | |
download | cygnal-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/ChangeLog | 9 | ||||
-rw-r--r-- | winsup/utils/strace.cc | 10 |
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 ()); |