diff options
author | Mark Kettenis <kettenis@gnu.org> | 2008-08-06 19:56:20 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2008-08-06 19:56:20 +0000 |
commit | 23a1a6958130cfb51e9e1571c212b329b320bf20 (patch) | |
tree | 2fdac72e0382309c8db15aab8f1adfd33ef650e5 /gdb/i386obsd-nat.c | |
parent | d51cb09302cb538cf1131d4e13a6c998e3908256 (diff) | |
download | gdb-23a1a6958130cfb51e9e1571c212b329b320bf20.tar.gz |
* i386obsd-nat.c (i386obsd_supply_pcb): Adjust for changes in
OpenBSD 4.3.
Diffstat (limited to 'gdb/i386obsd-nat.c')
-rw-r--r-- | gdb/i386obsd-nat.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/gdb/i386obsd-nat.c b/gdb/i386obsd-nat.c index 1c458652dd8..1585efb94ba 100644 --- a/gdb/i386obsd-nat.c +++ b/gdb/i386obsd-nat.c @@ -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); } |