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 | f73a15e424e2c7de26a8481e608a1785a21295d9 (patch) | |
tree | 03423215e14f3cf177556d94eb5fc0d0f9e28658 /gdb/i386obsd-nat.c | |
parent | 71782a75978b11ff468bb1527a99769bc8d55c54 (diff) | |
download | gdb-f73a15e424e2c7de26a8481e608a1785a21295d9.zip gdb-f73a15e424e2c7de26a8481e608a1785a21295d9.tar.gz gdb-f73a15e424e2c7de26a8481e608a1785a21295d9.tar.bz2 |
* 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 1c45865..1585efb 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); } |