diff options
author | Christopher Faylor <me+cygwin@cgf.cx> | 2003-12-26 14:56:45 +0000 |
---|---|---|
committer | Christopher Faylor <me+cygwin@cgf.cx> | 2003-12-26 14:56:45 +0000 |
commit | d6dc8049797b97d2d03fceabb17f4911334daa3e (patch) | |
tree | 687fdfd4d77b09adb6e5d925fc72b22eda61462f /gdb/windows-nat.c | |
parent | 3ade53336e08ff84a0b150acaafd41983c870472 (diff) | |
download | gdb-d6dc8049797b97d2d03fceabb17f4911334daa3e.zip gdb-d6dc8049797b97d2d03fceabb17f4911334daa3e.tar.gz gdb-d6dc8049797b97d2d03fceabb17f4911334daa3e.tar.bz2 |
* win32-nat.c: Add some comments about below change.
Diffstat (limited to 'gdb/windows-nat.c')
-rw-r--r-- | gdb/windows-nat.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index c28e26a..c37c1a8 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -338,7 +338,8 @@ do_child_fetch_inferior_registers (int r) long l; if (!current_thread) - return; + return; /* Windows sometimes uses a non-existent thread id in its + events */ if (current_thread->reload_context) { @@ -382,6 +383,8 @@ static void child_fetch_inferior_registers (int r) { current_thread = thread_rec (PIDGET (inferior_ptid), TRUE); + /* Check if current_thread exists. Windows sometimes uses a non-existent + thread id in its events */ if (current_thread) do_child_fetch_inferior_registers (r); } @@ -390,7 +393,7 @@ static void do_child_store_inferior_registers (int r) { if (!current_thread) - /* nothing to do */; + /* Windows sometimes uses a non-existent thread id in its events */; else if (r >= 0) regcache_collect (r, ((char *) ¤t_thread->context) + mappings[r]); else @@ -405,6 +408,8 @@ static void child_store_inferior_registers (int r) { current_thread = thread_rec (PIDGET (inferior_ptid), TRUE); + /* Check if current_thread exists. Windows sometimes uses a non-existent + thread id in its events */ if (current_thread) do_child_store_inferior_registers (r); } @@ -1207,6 +1212,8 @@ child_continue (DWORD continue_status, int id) return res; } +/* Called in pathological case where Windows fails to send a + CREATE_PROCESS_DEBUG_EVENT after an attach. */ DWORD fake_create_process () { @@ -1253,6 +1260,9 @@ get_child_debug_event (int pid, struct target_waitstatus *ourstatus) { if (!saw_create && attach_flag) { + /* Kludge around a Windows bug where first event is a create + thread event. Caused when attached process does not have + a main thread. */ retval = ourstatus->value.related_pid = fake_create_process (); saw_create++; } |