X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Firix5-nat.c;h=f0738d4febde805c314ca7e430da1af5912c4750;hb=de15c4ab2db92fc9d3ac4cc264c42914db8a134f;hp=58630bad9ba47e24700a3f60a3e7bf14459dc266;hpb=d611717af87a993a03d207a560849637e72d4719;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/irix5-nat.c b/gdb/irix5-nat.c index 58630bad9b..f0738d4feb 100644 --- a/gdb/irix5-nat.c +++ b/gdb/irix5-nat.c @@ -1,7 +1,8 @@ /* 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 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2004, 2006, 2007, 2008, 2009, 2010, 2011 + 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. @@ -28,13 +29,14 @@ #include "gdbcore.h" #include "target.h" #include "regcache.h" +#include "procfs.h" #include "gdb_string.h" #include #include #include /* For JB_XXX. */ -/* Prototypes for supply_gregset etc. */ +/* Prototypes for supply_gregset etc. */ #include "gregset.h" #include "mips-tdep.h" @@ -82,6 +84,7 @@ fill_gregset (const struct regcache *regcache, gregset_t *gregsetp, int regno) 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 @@ -92,15 +95,15 @@ fill_gregset (const struct regcache *regcache, gregset_t *gregsetp, int regno) { 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)) @@ -108,7 +111,7 @@ fill_gregset (const struct regcache *regcache, gregset_t *gregsetp, int regno) 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)) @@ -116,7 +119,7 @@ fill_gregset (const struct regcache *regcache, gregset_t *gregsetp, int regno) 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)) @@ -124,7 +127,7 @@ fill_gregset (const struct regcache *regcache, gregset_t *gregsetp, int regno) 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); } } @@ -144,11 +147,11 @@ supply_fpregset (struct regcache *regcache, const fpregset_t *fpregsetp) 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 @@ -156,33 +159,35 @@ supply_fpregset (struct regcache *regcache, const fpregset_t *fpregsetp) 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); } } @@ -200,7 +205,7 @@ fill_fpregset (const struct regcache *regcache, fpregset_t *fpregsetp, int regno 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); } } @@ -244,7 +249,7 @@ fetch_core_registers (struct regcache *regcache, } /* 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 = { @@ -255,8 +260,17 @@ 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); }