/* Native support for the SGI Iris running IRIX version 5, for GDB.
- Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998,
- 1999, 2000, 2001, 2002, 2004, 2006, 2007, 2008
- Free Software Foundation, Inc.
+ Copyright (C) 1988-1996, 1998-2002, 2004, 2006-2012 Free Software
+ Foundation, Inc.
Contributed by Alessandro Forin(af@cs.cmu.edu) at CMU
and by Per Bothner(bothner@cs.wisc.edu) at U.Wisconsin.
#include "gdbcore.h"
#include "target.h"
#include "regcache.h"
+#include "procfs.h"
#include "gdb_string.h"
#include <sys/time.h>
#include <sys/procfs.h>
#include <setjmp.h> /* For JB_XXX. */
-/* Prototypes for supply_gregset etc. */
+/* Prototypes for supply_gregset etc. */
#include "gregset.h"
#include "mips-tdep.h"
greg_t *regp = &(*gregsetp)[0];
gdb_byte buf[MAX_REGISTER_SIZE];
struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
/* Under Irix6, if GDB is built with N32 ABI and is debugging an O32
executable, we have to sign extend the registers to 64 bits before
{
size = register_size (gdbarch, regi);
regcache_raw_collect (regcache, regi, buf);
- *(regp + regi) = extract_signed_integer (buf, size);
+ *(regp + regi) = extract_signed_integer (buf, size, byte_order);
}
- if ((regno == -1) || (regno == gdbarch_pc_regnum (gdbarch)))
+ if ((regno == -1) || (regno == mips_regnum (gdbarch)->pc))
{
regi = mips_regnum (gdbarch)->pc;
size = register_size (gdbarch, regi);
regcache_raw_collect (regcache, regi, buf);
- *(regp + CTX_EPC) = extract_signed_integer (buf, size);
+ *(regp + CTX_EPC) = extract_signed_integer (buf, size, byte_order);
}
if ((regno == -1) || (regno == mips_regnum (gdbarch)->cause))
regi = mips_regnum (gdbarch)->cause;
size = register_size (gdbarch, regi);
regcache_raw_collect (regcache, regi, buf);
- *(regp + CTX_CAUSE) = extract_signed_integer (buf, size);
+ *(regp + CTX_CAUSE) = extract_signed_integer (buf, size, byte_order);
}
if ((regno == -1) || (regno == mips_regnum (gdbarch)->hi))
regi = mips_regnum (gdbarch)->hi;
size = register_size (gdbarch, regi);
regcache_raw_collect (regcache, regi, buf);
- *(regp + CTX_MDHI) = extract_signed_integer (buf, size);
+ *(regp + CTX_MDHI) = extract_signed_integer (buf, size, byte_order);
}
if ((regno == -1) || (regno == mips_regnum (gdbarch)->lo))
regi = mips_regnum (gdbarch)->lo;
size = register_size (gdbarch, regi);
regcache_raw_collect (regcache, regi, buf);
- *(regp + CTX_MDLO) = extract_signed_integer (buf, size);
+ *(regp + CTX_MDLO) = extract_signed_integer (buf, size, byte_order);
}
}
char fsrbuf[8];
struct gdbarch *gdbarch = get_regcache_arch (regcache);
- /* FIXME, this is wrong for the N32 ABI which has 64 bit FP regs. */
+ /* FIXME, this is wrong for the N32 ABI which has 64 bit FP regs. */
for (regi = 0; regi < 32; regi++)
regcache_raw_supply (regcache, gdbarch_fp0_regnum (gdbarch) + regi,
- (const char *) &fpregsetp->fp_r.fp_regs[regi]);
+ (const char *) &fpregsetp->__fp_r.__fp_regs[regi]);
/* We can't supply the FSR register directly to the regcache,
because there is a size issue: On one hand, fpregsetp->fp_csr
So we use a buffer of the correct size and copy into it the register
value at the proper location. */
memset (fsrbuf, 0, 4);
- memcpy (fsrbuf + 4, &fpregsetp->fp_csr, 4);
+ memcpy (fsrbuf + 4, &fpregsetp->__fp_csr, 4);
regcache_raw_supply (regcache,
mips_regnum (gdbarch)->fp_control_status, fsrbuf);
- /* FIXME: how can we supply FCRIR? SGI doesn't tell us. */
+ /* FIXME: how can we supply FCRIR? SGI doesn't tell us. */
regcache_raw_supply (regcache,
mips_regnum (gdbarch)->fp_implementation_revision,
zerobuf);
}
void
-fill_fpregset (const struct regcache *regcache, fpregset_t *fpregsetp, int regno)
+fill_fpregset (const struct regcache *regcache,
+ fpregset_t *fpregsetp, int regno)
{
int regi;
char *from, *to;
struct gdbarch *gdbarch = get_regcache_arch (regcache);
- /* FIXME, this is wrong for the N32 ABI which has 64 bit FP regs. */
+ /* FIXME, this is wrong for the N32 ABI which has 64 bit FP regs. */
for (regi = gdbarch_fp0_regnum (gdbarch);
regi < gdbarch_fp0_regnum (gdbarch) + 32; regi++)
{
if ((regno == -1) || (regno == regi))
{
- to = (char *) &(fpregsetp->fp_r.fp_regs[regi - gdbarch_fp0_regnum
- (gdbarch)]);
+ const int fp0_regnum = gdbarch_fp0_regnum (gdbarch);
+
+ to = (char *) &(fpregsetp->__fp_r.__fp_regs[regi - fp0_regnum]);
regcache_raw_collect (regcache, regi, to);
}
}
regcache_raw_collect (regcache,
mips_regnum (gdbarch)->fp_control_status, fsrbuf);
- memcpy (&fpregsetp->fp_csr, fsrbuf + 4, 4);
+ memcpy (&fpregsetp->__fp_csr, fsrbuf + 4, 4);
}
}
}
/* Register that we are able to handle irix5 core file formats.
- This really is bfd_target_unknown_flavour */
+ This really is bfd_target_unknown_flavour. */
static struct core_fns irix5_core_fns =
{
NULL /* next */
};
+/* Provide a prototype to silence -Wmissing-prototypes. */
+extern initialize_file_ftype _initialize_irix5_nat;
+
void
-_initialize_core_irix5 (void)
+_initialize_irix5_nat (void)
{
+ struct target_ops *t;
+
+ t = procfs_target ();
+ procfs_use_watchpoints (t);
+ add_target (t);
+
deprecated_add_core_fns (&irix5_core_fns);
}