/* Native-dependent code for OpenBSD/i386.
- Copyright (C) 2002, 2003, 2004, 2006, 2007, 2008, 2009
- Free Software Foundation, Inc.
+ Copyright (C) 2002-2015 Free Software Foundation, Inc.
This file is part of GDB.
#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 "obsd-nat.h"
#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:
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);
+ 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);
{
/* No, the pcb must have been last updated by savectx(). */
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);
+ 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);
}
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);