* i386obsd-nat.c (i386obsd_supply_pcb): Adjust for changes in
authorMark Kettenis <kettenis@gnu.org>
Wed, 6 Aug 2008 19:56:20 +0000 (19:56 +0000)
committerMark Kettenis <kettenis@gnu.org>
Wed, 6 Aug 2008 19:56:20 +0000 (19:56 +0000)
OpenBSD 4.3.

gdb/ChangeLog
gdb/i386obsd-nat.c

index 8ad9ac4495c4a33782218710ef1de913c91be42a..7d1cac1257124fe865e79aaaba266d7b4a920e7e 100644 (file)
@@ -1,3 +1,8 @@
+2008-08-06  Mark Kettenis  <kettenis@gnu.org>
+
+       * i386obsd-nat.c (i386obsd_supply_pcb): Adjust for changes in
+       OpenBSD 4.3.
+
 2008-08-06  Vladimir Prus  <vladimir@codesourcery.com>
            Tom Tromey  <tromey@redhat.com>
            Thiago Jung Bauermann  <bauerman@br.ibm.com>
index 1c458652dd8043ebf2e440b1e175cec3e8768c21..1585efb94ba220f8207a010d5842fbcdbc03c6b7 100644 (file)
@@ -60,10 +60,11 @@ i386obsd_supply_pcb (struct regcache *regcache, struct pcb *pcb)
   /* Read the stack frame, and check its validity.  We do this by
      checking if the saved interrupt priority level in the stack frame
      looks reasonable..  */
-  read_memory (pcb->pcb_esp, (char *) &sf, sizeof sf);
-  if ((unsigned int) sf.sf_ppl < 0x100 && (sf.sf_ppl & 0xf) == 0)
+#ifdef PCB_SAVECTX
+  if ((pcb->pcb_flags & PCB_SAVECTX) == 0)
     {
       /* Yes, we have a frame that matches cpu_switch().  */
+      read_memory (pcb->pcb_esp, (char *) &sf, sizeof sf);
       pcb->pcb_esp += sizeof (struct switchframe);
       regcache_raw_supply (regcache, I386_EDI_REGNUM, &sf.sf_edi);
       regcache_raw_supply (regcache, I386_ESI_REGNUM, &sf.sf_esi);
@@ -71,9 +72,12 @@ i386obsd_supply_pcb (struct regcache *regcache, struct pcb *pcb)
       regcache_raw_supply (regcache, I386_EIP_REGNUM, &sf.sf_eip);
     }
   else
+#endif
     {
       /* No, the pcb must have been last updated by savectx().  */
-      pcb->pcb_esp += 4;
+      pcb->pcb_esp = pcb->pcb_ebp;
+      pcb->pcb_ebp = read_memory_integer(pcb->pcb_esp, 4);
+      sf.sf_eip = read_memory_integer(pcb->pcb_esp + 4, 4);
       regcache_raw_supply (regcache, I386_EIP_REGNUM, &sf);
     }