* win32-nat.c: Add some comments about below change.
authorChristopher Faylor <me+cygwin@cgf.cx>
Fri, 26 Dec 2003 14:56:45 +0000 (14:56 +0000)
committerChristopher Faylor <me+cygwin@cgf.cx>
Fri, 26 Dec 2003 14:56:45 +0000 (14:56 +0000)
gdb/ChangeLog
gdb/win32-nat.c
gdb/windows-nat.c

index fc83580..a368b05 100644 (file)
@@ -1,3 +1,7 @@
+2003-12-26  Christopher Faylor  <cgf@redhat.com>
+
+       * win32-nat.c: Add some comments about below change.
+
 2003-12-25  Christopher Faylor  <cgf@redhat.com>
 
        Fix for PR threads/1048
index c28e26a..c37c1a8 100644 (file)
@@ -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 *) &current_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++;
            }
index c28e26a..c37c1a8 100644 (file)
@@ -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 *) &current_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++;
            }