mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-03 21:34:46 +08:00
* win32-nat.c: Add some comments about below change.
This commit is contained in:
@ -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>
|
2003-12-25 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
Fix for PR threads/1048
|
Fix for PR threads/1048
|
||||||
|
@ -338,7 +338,8 @@ do_child_fetch_inferior_registers (int r)
|
|||||||
long l;
|
long l;
|
||||||
|
|
||||||
if (!current_thread)
|
if (!current_thread)
|
||||||
return;
|
return; /* Windows sometimes uses a non-existent thread id in its
|
||||||
|
events */
|
||||||
|
|
||||||
if (current_thread->reload_context)
|
if (current_thread->reload_context)
|
||||||
{
|
{
|
||||||
@ -382,6 +383,8 @@ static void
|
|||||||
child_fetch_inferior_registers (int r)
|
child_fetch_inferior_registers (int r)
|
||||||
{
|
{
|
||||||
current_thread = thread_rec (PIDGET (inferior_ptid), TRUE);
|
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)
|
if (current_thread)
|
||||||
do_child_fetch_inferior_registers (r);
|
do_child_fetch_inferior_registers (r);
|
||||||
}
|
}
|
||||||
@ -390,7 +393,7 @@ static void
|
|||||||
do_child_store_inferior_registers (int r)
|
do_child_store_inferior_registers (int r)
|
||||||
{
|
{
|
||||||
if (!current_thread)
|
if (!current_thread)
|
||||||
/* nothing to do */;
|
/* Windows sometimes uses a non-existent thread id in its events */;
|
||||||
else if (r >= 0)
|
else if (r >= 0)
|
||||||
regcache_collect (r, ((char *) ¤t_thread->context) + mappings[r]);
|
regcache_collect (r, ((char *) ¤t_thread->context) + mappings[r]);
|
||||||
else
|
else
|
||||||
@ -405,6 +408,8 @@ static void
|
|||||||
child_store_inferior_registers (int r)
|
child_store_inferior_registers (int r)
|
||||||
{
|
{
|
||||||
current_thread = thread_rec (PIDGET (inferior_ptid), TRUE);
|
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)
|
if (current_thread)
|
||||||
do_child_store_inferior_registers (r);
|
do_child_store_inferior_registers (r);
|
||||||
}
|
}
|
||||||
@ -1207,6 +1212,8 @@ child_continue (DWORD continue_status, int id)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Called in pathological case where Windows fails to send a
|
||||||
|
CREATE_PROCESS_DEBUG_EVENT after an attach. */
|
||||||
DWORD
|
DWORD
|
||||||
fake_create_process ()
|
fake_create_process ()
|
||||||
{
|
{
|
||||||
@ -1253,6 +1260,9 @@ get_child_debug_event (int pid, struct target_waitstatus *ourstatus)
|
|||||||
{
|
{
|
||||||
if (!saw_create && attach_flag)
|
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 ();
|
retval = ourstatus->value.related_pid = fake_create_process ();
|
||||||
saw_create++;
|
saw_create++;
|
||||||
}
|
}
|
||||||
|
@ -338,7 +338,8 @@ do_child_fetch_inferior_registers (int r)
|
|||||||
long l;
|
long l;
|
||||||
|
|
||||||
if (!current_thread)
|
if (!current_thread)
|
||||||
return;
|
return; /* Windows sometimes uses a non-existent thread id in its
|
||||||
|
events */
|
||||||
|
|
||||||
if (current_thread->reload_context)
|
if (current_thread->reload_context)
|
||||||
{
|
{
|
||||||
@ -382,6 +383,8 @@ static void
|
|||||||
child_fetch_inferior_registers (int r)
|
child_fetch_inferior_registers (int r)
|
||||||
{
|
{
|
||||||
current_thread = thread_rec (PIDGET (inferior_ptid), TRUE);
|
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)
|
if (current_thread)
|
||||||
do_child_fetch_inferior_registers (r);
|
do_child_fetch_inferior_registers (r);
|
||||||
}
|
}
|
||||||
@ -390,7 +393,7 @@ static void
|
|||||||
do_child_store_inferior_registers (int r)
|
do_child_store_inferior_registers (int r)
|
||||||
{
|
{
|
||||||
if (!current_thread)
|
if (!current_thread)
|
||||||
/* nothing to do */;
|
/* Windows sometimes uses a non-existent thread id in its events */;
|
||||||
else if (r >= 0)
|
else if (r >= 0)
|
||||||
regcache_collect (r, ((char *) ¤t_thread->context) + mappings[r]);
|
regcache_collect (r, ((char *) ¤t_thread->context) + mappings[r]);
|
||||||
else
|
else
|
||||||
@ -405,6 +408,8 @@ static void
|
|||||||
child_store_inferior_registers (int r)
|
child_store_inferior_registers (int r)
|
||||||
{
|
{
|
||||||
current_thread = thread_rec (PIDGET (inferior_ptid), TRUE);
|
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)
|
if (current_thread)
|
||||||
do_child_store_inferior_registers (r);
|
do_child_store_inferior_registers (r);
|
||||||
}
|
}
|
||||||
@ -1207,6 +1212,8 @@ child_continue (DWORD continue_status, int id)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Called in pathological case where Windows fails to send a
|
||||||
|
CREATE_PROCESS_DEBUG_EVENT after an attach. */
|
||||||
DWORD
|
DWORD
|
||||||
fake_create_process ()
|
fake_create_process ()
|
||||||
{
|
{
|
||||||
@ -1253,6 +1260,9 @@ get_child_debug_event (int pid, struct target_waitstatus *ourstatus)
|
|||||||
{
|
{
|
||||||
if (!saw_create && attach_flag)
|
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 ();
|
retval = ourstatus->value.related_pid = fake_create_process ();
|
||||||
saw_create++;
|
saw_create++;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user