diff options
author | Andrew Stubbs <andrew.stubbs@st.com> | 2009-10-21 14:14:57 +0000 |
---|---|---|
committer | Andrew Stubbs <andrew.stubbs@st.com> | 2009-10-21 14:14:57 +0000 |
commit | c9ac0a72c9f06f2a4e3ed58667608b3008f7346d (patch) | |
tree | ed172cf022d43924a4ac718682f15f516019f82a /gdb/sh-linux-tdep.c | |
parent | 47607d6f7cc0b855499df28ad8d27e4b16349202 (diff) | |
download | gdb-c9ac0a72c9f06f2a4e3ed58667608b3008f7346d.zip gdb-c9ac0a72c9f06f2a4e3ed58667608b3008f7346d.tar.gz gdb-c9ac0a72c9f06f2a4e3ed58667608b3008f7346d.tar.bz2 |
2009-10-21 Andrew Stubbs <ams@codesourcery.com>
Joel Brobecker <brobecker@adacore.com>
* Makefile.in (HFILES_NO_SRCDIR): Remove shnbsd-tdep.h
* configure.tgt (sh*-*-linux*): Add corelow.o to gdb_target_obs.
* sh-linux-tdep.c: Include sh-tdep.h.
(REGSx16): New macro.
(gregs_table, fpregs_table): New variables.
(sh_linux_init_abi): Set core_gregmap and fpregmap.
* sh-tdep.c: Include regset.h.
(sh_corefile_supply_regset): New function.
(sh_corefile_collect_regset): New function.
(sh_corefile_gregset, sh_corefile_fpregset): New variables.
(sh_regset_from_core_section): New function.
(sh_gdbarch_init): Set up tdep value.
Call set_gdbarch_regset_from_core_section.
* sh-tdep.h (PC_REGNUM): New enum value.
(struct sh_corefile_regs): New type.
(sh_corefile_gregset): Export variable.
(sh_corefile_supply_regset): New prototype.
(sh_corefile_collect_regset): New prototype.
* shnbsd-tdep.c: Remove include of regcache.h, gdb_assert.h and
shnbsd-tdep.h.
(regmap): Use new definition using struct sh_corefile_regs.
(shnbsd_supply_gregset, shnbsd_collect_gregset): Delete.
(shnbsd_gregset): Delete.
(shnbsd_regset_from_core_section): Delete.
(shnbsd_supply_reg, shnbsd_fill_reg): Use new regset interface.
(shnbsd_init_abi): Set core_gregmap.
(shnbsd_supply_reg): Delete.
(shnbsd_fill_reg): Delete.
(SHNBSD_SIZEOF_GREGS): Move ...
* shnbsd-nat.c (SHNBSD_SIZEOF_GREGS): ... to here.
Remove include of shnbsd-tdep.h.
(shnbsd_fetch_inferior_registers): Replace shnbsd_supply_reg call
with sh_corefile_supply_regset.
(shnbsd_store_inferior_registers): Replace shnbsd_fill_reg call with
sh_corefile_collect_regset.
* shnbsd-tdep.h: Delete file.
Diffstat (limited to 'gdb/sh-linux-tdep.c')
-rw-r--r-- | gdb/sh-linux-tdep.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/gdb/sh-linux-tdep.c b/gdb/sh-linux-tdep.c index 46aad1d..4e9d18c 100644 --- a/gdb/sh-linux-tdep.c +++ b/gdb/sh-linux-tdep.c @@ -24,6 +24,50 @@ #include "symtab.h" #include "glibc-tdep.h" +#include "sh-tdep.h" + +#define REGSx16(base) \ + {(base), 0}, \ + {(base) + 1, 4}, \ + {(base) + 2, 8}, \ + {(base) + 3, 12}, \ + {(base) + 4, 16}, \ + {(base) + 5, 20}, \ + {(base) + 6, 24}, \ + {(base) + 7, 28}, \ + {(base) + 8, 32}, \ + {(base) + 9, 36}, \ + {(base) + 10, 40}, \ + {(base) + 11, 44}, \ + {(base) + 12, 48}, \ + {(base) + 13, 52}, \ + {(base) + 14, 56}, \ + {(base) + 15, 60} + +/* Describe the contents of the .reg section of the core file. */ + +static const struct sh_corefile_regmap gregs_table[] = +{ + REGSx16 (R0_REGNUM), + {PC_REGNUM, 64}, + {PR_REGNUM, 68}, + {SR_REGNUM, 72}, + {GBR_REGNUM, 76}, + {MACH_REGNUM, 80}, + {MACL_REGNUM, 84}, + {-1 /* Terminator. */, 0} +}; + +/* Describe the contents of the .reg2 section of the core file. */ + +static const struct sh_corefile_regmap fpregs_table[] = +{ + REGSx16 (FR0_REGNUM), + /* REGSx16 xfp_regs omitted. */ + {FPSCR_REGNUM, 128}, + {FPUL_REGNUM, 132}, + {-1 /* Terminator. */, 0} +}; static void sh_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) @@ -36,6 +80,15 @@ sh_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) set_gdbarch_fetch_tls_load_module_address (gdbarch, svr4_fetch_objfile_link_map); + + /* Core files are supported for 32-bit SH only, at present. */ + if (info.bfd_arch_info->mach != bfd_mach_sh5) + { + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + tdep->core_gregmap = (struct sh_corefile_regmap *)gregs_table; + tdep->core_fpregmap = (struct sh_corefile_regmap *)fpregs_table; + } } /* Provide a prototype to silence -Wmissing-prototypes. */ |