2001-01-02 Michael Snyder <msnyder@cleaver.cygnus.com>
[deliverable/binutils-gdb.git] / gdb / i386gnu-nat.c
index bc13229d9909eca32105a2d5c1c86ed33b045813..fca14e47114dbc94bac655a0d576f7ea4cd6ae1b 100644 (file)
@@ -1,5 +1,5 @@
 /* Low level interface to i386 running the GNU Hurd.
-   Copyright (C) 1992, 1995, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1995, 1996, 2000 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,7 +22,7 @@
 #include "inferior.h"
 #include "floatformat.h"
 
-#include <assert.h>
+#include "gdb_assert.h"
 #include <stdio.h>
 #include <errno.h>
 
@@ -265,6 +265,7 @@ gnu_store_registers (int regno)
       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));
@@ -276,6 +277,10 @@ gnu_store_registers (int regno)
          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.  */
        {
@@ -316,9 +321,13 @@ gnu_store_registers (int regno)
        {
          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
This page took 0.025029 seconds and 4 git commands to generate.