From: Mark Kettenis Date: Wed, 6 Aug 2008 19:56:20 +0000 (+0000) Subject: * i386obsd-nat.c (i386obsd_supply_pcb): Adjust for changes in X-Git-Tag: binutils-2_19-branchpoint~308 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f73a15e424e2c7de26a8481e608a1785a21295d9;p=thirdparty%2Fbinutils-gdb.git * i386obsd-nat.c (i386obsd_supply_pcb): Adjust for changes in OpenBSD 4.3. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8ad9ac4495c..7d1cac12571 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2008-08-06 Mark Kettenis + + * i386obsd-nat.c (i386obsd_supply_pcb): Adjust for changes in + OpenBSD 4.3. + 2008-08-06 Vladimir Prus Tom Tromey Thiago Jung Bauermann 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); }