From f73a15e424e2c7de26a8481e608a1785a21295d9 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Wed, 6 Aug 2008 19:56:20 +0000 Subject: [PATCH] * i386obsd-nat.c (i386obsd_supply_pcb): Adjust for changes in OpenBSD 4.3. --- gdb/ChangeLog | 5 +++++ gdb/i386obsd-nat.c | 10 +++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8ad9ac4..7d1cac1 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 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); } -- 2.7.4