/* Low level interface to i386 running the GNU Hurd.
- Copyright (C) 1992, 1995, 1996 Free Software Foundation, Inc.
+ Copyright 1992, 1995, 1996, 1998, 2000, 2001
+ Free Software Foundation, Inc.
This file is part of GDB.
#include "defs.h"
#include "inferior.h"
#include "floatformat.h"
+#include "regcache.h"
-#include <assert.h>
+#include "gdb_assert.h"
#include <stdio.h>
#include <errno.h>
/* Make sure we know about new threads. */
inf_update_procs (current_inferior);
- thread = inf_tid_to_thread (current_inferior, inferior_pid);
+ thread = inf_tid_to_thread (current_inferior, PIDGET (inferior_ptid));
if (!thread)
error ("Can't fetch registers from thread %d: No such thread",
- inferior_pid);
+ PIDGET (inferior_ptid));
if (regno < NUM_GREGS || regno == -1)
{
/* Make sure we know about new threads. */
inf_update_procs (current_inferior);
- thread = inf_tid_to_thread (current_inferior, inferior_pid);
+ thread = inf_tid_to_thread (current_inferior, PIDGET (inferior_ptid));
if (!thread)
error ("Couldn't store registers into thread %d: No such thread",
- inferior_pid);
+ PIDGET (inferior_ptid));
if (regno < NUM_GREGS || regno == -1)
{
thread_state_data_t old_state;
int was_aborted = thread->aborted;
int was_valid = thread->state_valid;
+ int trace;
if (!was_aborted && was_valid)
memcpy (&old_state, &thread->state, sizeof (old_state));
return;
}
+ /* Save the T bit. We might try to restore the %eflags register
+ below, but changing the T bit would seriously confuse GDB. */
+ trace = ((struct i386_thread_state *)state)->efl & 0x100;
+
if (!was_aborted && was_valid)
/* See which registers have changed after aborting the thread. */
{
{
proc_debug (thread, "storing register %s", REGISTER_NAME (regno));
- assert (register_valid[regno]);
+ gdb_assert (register_valid[regno]);
fill (state, regno);
}
+
+ /* Restore the T bit. */
+ ((struct i386_thread_state *)state)->efl &= ~0x100;
+ ((struct i386_thread_state *)state)->efl |= trace;
}
#undef fill