projects
/
platform
/
upstream
/
binutils.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix wrong source file name of cross-arm-binutils.
[platform/upstream/binutils.git]
/
gdb
/
i386obsd-nat.c
diff --git
a/gdb/i386obsd-nat.c
b/gdb/i386obsd-nat.c
index
8be811e
..
db97cb6
100644
(file)
--- a/
gdb/i386obsd-nat.c
+++ b/
gdb/i386obsd-nat.c
@@
-1,12
+1,12
@@
/* Native-dependent code for OpenBSD/i386.
/* Native-dependent code for OpenBSD/i386.
- Copyright (C) 2002
, 2003, 2004, 2006
Free Software Foundation, Inc.
+ Copyright (C) 2002
-2014
Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version
2
of the License, or
+ the Free Software Foundation; either version
3
of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
(at your option) any later version.
This program is distributed in the hope that it will be useful,
@@
-15,27
+15,27
@@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
#include "gdbcore.h"
#include "regcache.h"
#include "target.h"
#include "defs.h"
#include "gdbcore.h"
#include "regcache.h"
#include "target.h"
-#include <sys/param.h>
#include <sys/sysctl.h>
#include <machine/frame.h>
#include <machine/pcb.h>
#include "i386-tdep.h"
#include "i386bsd-nat.h"
#include <sys/sysctl.h>
#include <machine/frame.h>
#include <machine/pcb.h>
#include "i386-tdep.h"
#include "i386bsd-nat.h"
+#include "obsd-nat.h"
#include "bsd-kvm.h"
static int
i386obsd_supply_pcb (struct regcache *regcache, struct pcb *pcb)
{
#include "bsd-kvm.h"
static int
i386obsd_supply_pcb (struct regcache *regcache, struct pcb *pcb)
{
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
struct switchframe sf;
/* The following is true for OpenBSD 3.6:
struct switchframe sf;
/* The following is true for OpenBSD 3.6:
@@
-61,10
+61,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 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(). */
{
/* Yes, we have a frame that matches cpu_switch(). */
+ read_memory (pcb->pcb_esp, (gdb_byte *) &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);
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);
@@
-72,10
+73,13
@@
i386obsd_supply_pcb (struct regcache *regcache, struct pcb *pcb)
regcache_raw_supply (regcache, I386_EIP_REGNUM, &sf.sf_eip);
}
else
regcache_raw_supply (regcache, I386_EIP_REGNUM, &sf.sf_eip);
}
else
+#endif
{
/* No, the pcb must have been last updated by savectx(). */
{
/* No, the pcb must have been last updated by savectx(). */
- pcb->pcb_esp += 4;
- regcache_raw_supply (regcache, I386_EIP_REGNUM, &sf);
+ pcb->pcb_esp = pcb->pcb_ebp;
+ pcb->pcb_ebp = read_memory_integer(pcb->pcb_esp, 4, byte_order);
+ sf.sf_eip = read_memory_integer(pcb->pcb_esp + 4, 4, byte_order);
+ regcache_raw_supply (regcache, I386_EIP_REGNUM, &sf.sf_eip);
}
regcache_raw_supply (regcache, I386_EBP_REGNUM, &pcb->pcb_ebp);
}
regcache_raw_supply (regcache, I386_EBP_REGNUM, &pcb->pcb_ebp);
@@
-91,8
+95,8
@@
void _initialize_i386obsd_nat (void);
void
_initialize_i386obsd_nat (void)
{
void
_initialize_i386obsd_nat (void)
{
- /*
We've got nothing to add
to the common *BSD/i386 target. */
- add_target (i386bsd_target ());
+ /*
Add some extra features
to the common *BSD/i386 target. */
+
obsd_
add_target (i386bsd_target ());
/* Support debugging kernel virtual memory images. */
bsd_kvm_add_target (i386obsd_supply_pcb);
/* Support debugging kernel virtual memory images. */
bsd_kvm_add_target (i386obsd_supply_pcb);