binutils-gdb/gdb/sh-linux-tdep.c

216 lines
6.3 KiB
C
Raw Normal View History

/* Target-dependent code for GNU/Linux Super-H.
Copyright (C) 2005-2020 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
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,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
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, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
#include "osabi.h"
#include "solib-svr4.h"
* config/tm-linux.h: Delete file. * config/alpha/alpha-linux.mt (DEPRECATED_TM_FILE): Set to tm-alpha.h. * config/alpha/tm-alphalinux.h: Delete file. * config/arm/linux.mt (DEPRECATED_TM_FILE): Set to tm-arm.h * config/arm/tm-linux.h: Delete file. * config/i386/tm-linux.h: Do not include "config/tm-linux.h". * config/ia64/tm-linux.h: Do not include "config/tm-linux.h". * config/m32r/linux.mt (DEPRECATED_TM_FILE): Remove. * config/mips/tm-linux.h: Do not include "config/tm-linux.h". * config/pa/linux.mt (DEPRECATED_TM_FILE): Set to tm-hppa.h. * config/pa/tm-linux.h: Delete file. * config/powerpc/tm-linux.h: Do not include "config/tm-linux.h". * config/s390/linux.mt (DEPRECATED_TM_FILE): Remove. * config/sh/linux.mt (DEPRECATED_TM_FILE): Set to tm-sh.h. * config/sh/tm-linux.h: Delete file. * alpha-linux-tdep.c: Include "symtab.h". (alpha_linux_init_abi): Call set_gdbarch_skip_trampoline_code. * i386-linux-tdep.c: Include "symtab.h". (i386_linux_init_abi): Call set_gdbarch_skip_trampoline_code. * ia64-linux-tdep.c: Include "symtab.h". (ia64_linux_init_abi): Call set_gdbarch_skip_trampoline_code. * m32r-linux-tdep.c: Include "symtab.h". (m32r_linux_init_abi): Call set_gdbarch_skip_trampoline_code. * mips-linux-tdep.c: Include "symtab.h". (mips_linux_init_abi): Call set_gdbarch_skip_trampoline_code. * sh-linux-tdep.c: Include "symtab.h". (sh_linux_init_abi): Call set_gdbarch_skip_trampoline_code. * s390-tdep.c (s390_gdbarch_init): Call set_gdbarch_skip_trampoline_code. * s390-nat.c: Do not include "tm.h". * Makefile.in (alpha-linux-tdep.o): Add dependency on $(symtab_h). (i386-linux-tdep.o): Likewise. (ia64-linux-tdep.o): Likewise. (m32r-linux-tdep.o): Likewise. (mips-linux-tdep.o): Likewise. (sh-linux-tdep.o): Likewise. (s390-nat.o): Remove dependency on $(tm_h).
2006-11-28 22:41:03 +01:00
#include "symtab.h"
#include "trad-frame.h"
#include "tramp-frame.h"
#include "glibc-tdep.h"
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.
2009-10-21 16:14:57 +02:00
#include "sh-tdep.h"
* corelow.c (core_pid_to_str): Default to using normal_pid_to_str instead of printing "Thread" here. * linux-tdep.c: Include inferior.h. (linux_core_pid_to_str): New. (linux_init_abi): New. * linux-tdep.h (linux_init_abi): Declare. * alpha-linux-tdep.c: Include linux-tdep.h. (alpha_linux_init_abi): Call linux_init_abi. * amd64-linux-tdep.c (amd64_linux_init_abi): Call linux_init_abi. * arm-linux-tdep.c (arm_linux_init_abi): Call linux_init_abi. * frv-linux-tdep.c: Include linux-tdep.h (frv_linux_init_abi): Call linux_init_abi. * hppa-linux-tdep.c: Include linux-tdep.h (hppa_linux_init_abi): Call linux_init_abi. * i386-linux-tdep.c (i386_linux_init_abi): Call linux_init_abi. * ia64-linux-tdep.c: Include linux-tdep.h. (ia64_linux_init_abi): Call linux_init_abi. * m32r-linux-tdep.c: Include linux-tdep.h. (m32r_linux_init_abi): Call linux_init_abi. * m68klinux-tdep.c: Include linux-tdep.h. (m68k_linux_init_abi): Call linux_init_abi. * microblaze-linux-tdep.c: Include linux-tdep.h. (microblaze_linux_init_abi): Call linux_init_abi. * mips-linux-tdep.c: Include linux-tdep.h. (mips_linux_init_abi): Call linux_init_abi. * mn10300-linux-tdep.c: Include linux-tdep.h. (am33_linux_init_osabi): Call linux_init_abi. Rename the 'gdbinfo' parameter to 'info'. * ppc-linux-tdep.c: Include linux-tdep.h. (ppc_linux_init_abi): Call linux_init_abi. * sh-linux-tdep.c: Include linux-tdep.h. (sh_linux_init_abi): Call linux_init_abi. * sparc-linux-tdep.c: Include linux-tdep.h. (sparc32_linux_init_abi): Call linux_init_abi. * sparc64-linux-tdep.c: Include linux-tdep.h. (sparc64_linux_init_abi): Call linux_init_abi. * xtensa-linux-tdep.c: Include linux-tdep.h. (xtensa_linux_init_abi): Call linux_init_abi. * i386-cygwin-tdep.c (i386_windows_core_pid_to_str): New. (i386_cygwin_init_abi): Install it as gdbarch_core_pid_to_str callback.
2010-08-04 17:27:57 +02:00
#include "linux-tdep.h"
Don't include gdbarch.h from defs.h I touched symtab.h and was surprised to see how many files were rebuilt. I looked into it a bit, and found that defs.h includes gdbarch.h, which in turn includes many things. gdbarch.h is only needed by a minority ofthe files in gdb, so this patch removes the include from defs.h and updates the fallout. I did "wc -l" on the files in build/gdb/.deps; this patch reduces the line count from 139935 to 137030; so there are definitely future build-time savings here. Note that while I configured with --enable-targets=all, it's possible that some *-nat.c file needs an update. I could not test all of these. The buildbot caught a few problems along these lines. gdb/ChangeLog 2019-07-10 Tom Tromey <tom@tromey.com> * defs.h: Don't include gdbarch.h. * aarch64-ravenscar-thread.c, aarch64-tdep.c, alpha-bsd-tdep.h, alpha-linux-tdep.c, alpha-mdebug-tdep.c, arch-utils.h, arm-tdep.h, ax-general.c, btrace.c, buildsym-legacy.c, buildsym.h, c-lang.c, cli/cli-decode.h, cli/cli-dump.c, cli/cli-script.h, cli/cli-style.h, coff-pe-read.h, compile/compile-c-support.c, compile/compile-cplus.h, compile/compile-loc2c.c, corefile.c, cp-valprint.c, cris-linux-tdep.c, ctf.c, d-lang.c, d-namespace.c, dcache.c, dicos-tdep.c, dictionary.c, disasm-selftests.c, dummy-frame.c, dummy-frame.h, dwarf2-frame-tailcall.c, dwarf2expr.c, expression.h, f-lang.c, frame-base.c, frame-unwind.c, frv-linux-tdep.c, gdbarch-selftests.c, gdbtypes.h, go-lang.c, hppa-nbsd-tdep.c, hppa-obsd-tdep.c, i386-dicos-tdep.c, i386-tdep.h, ia64-vms-tdep.c, interps.h, language.c, linux-record.c, location.h, m2-lang.c, m32r-linux-tdep.c, mem-break.c, memattr.c, mn10300-linux-tdep.c, nios2-linux-tdep.c, objfiles.h, opencl-lang.c, or1k-linux-tdep.c, p-lang.c, parser-defs.h, ppc-tdep.h, probe.h, python/py-record-btrace.c, record-btrace.c, record.h, regcache-dump.c, regcache.h, riscv-fbsd-tdep.c, riscv-linux-tdep.c, rust-exp.y, sh-linux-tdep.c, sh-nbsd-tdep.c, source-cache.c, sparc-nbsd-tdep.c, sparc-obsd-tdep.c, sparc-ravenscar-thread.c, sparc64-fbsd-tdep.c, std-regs.c, target-descriptions.h, target-float.c, tic6x-linux-tdep.c, tilegx-linux-tdep.c, top.c, tracefile.c, trad-frame.c, type-stack.h, ui-style.c, utils.c, utils.h, valarith.c, valprint.c, varobj.c, x86-tdep.c, xml-support.h, xtensa-linux-tdep.c, cli/cli-cmds.h: Update. * s390-linux-nat.c, procfs.c, inf-ptrace.c: Likewise.
2019-06-09 23:21:02 +02:00
#include "gdbarch.h"
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.
2009-10-21 16:14:57 +02:00
#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}
};
/* SH signal handler frame support. */
static void
sh_linux_sigtramp_cache (struct frame_info *this_frame,
struct trad_frame_cache *this_cache,
CORE_ADDR func, int regs_offset)
{
int i;
struct gdbarch *gdbarch = get_frame_arch (this_frame);
CORE_ADDR base = get_frame_register_unsigned (this_frame,
gdbarch_sp_regnum (gdbarch));
CORE_ADDR regs = base + regs_offset;
for (i = 0; i < 18; i++)
trad_frame_set_reg_addr (this_cache, i, regs + i * 4);
trad_frame_set_reg_addr (this_cache, SR_REGNUM, regs + 18 * 4);
trad_frame_set_reg_addr (this_cache, GBR_REGNUM, regs + 19 * 4);
trad_frame_set_reg_addr (this_cache, MACH_REGNUM, regs + 20 * 4);
trad_frame_set_reg_addr (this_cache, MACL_REGNUM, regs + 21 * 4);
/* Restore FP state if we have an FPU. */
if (gdbarch_fp0_regnum (gdbarch) != -1)
{
CORE_ADDR fpregs = regs + 22 * 4;
for (i = FR0_REGNUM; i <= FP_LAST_REGNUM; i++)
trad_frame_set_reg_addr (this_cache, i, fpregs + i * 4);
trad_frame_set_reg_addr (this_cache, FPSCR_REGNUM, fpregs + 32 * 4);
trad_frame_set_reg_addr (this_cache, FPUL_REGNUM, fpregs + 33 * 4);
}
/* Save a frame ID. */
trad_frame_set_id (this_cache, frame_id_build (base, func));
}
/* Implement struct tramp_frame "init" callbacks for signal
trampolines on 32-bit SH. */
static void
sh_linux_sigreturn_init (const struct tramp_frame *self,
struct frame_info *this_frame,
struct trad_frame_cache *this_cache,
CORE_ADDR func)
{
/* SH 32-bit sigframe: sigcontext at start of sigframe,
registers start after a single 'oldmask' word. */
sh_linux_sigtramp_cache (this_frame, this_cache, func, 4);
}
static void
sh_linux_rt_sigreturn_init (const struct tramp_frame *self,
struct frame_info *this_frame,
struct trad_frame_cache *this_cache,
CORE_ADDR func)
{
/* SH 32-bit rt_sigframe: starts with a siginfo (128 bytes), then
we can find sigcontext embedded within a ucontext (offset 20 bytes).
Then registers start after a single 'oldmask' word. */
sh_linux_sigtramp_cache (this_frame, this_cache, func,
128 /* sizeof (struct siginfo) */
+ 20 /* offsetof (struct ucontext, uc_mcontext) */
+ 4 /* oldmask word at start of sigcontext */);
}
/* Instruction patterns. */
#define SH_MOVW 0x9305
#define SH_TRAP 0xc300
#define SH_OR_R0_R0 0x200b
/* SH sigreturn syscall numbers. */
#define SH_NR_SIGRETURN 0x0077
#define SH_NR_RT_SIGRETURN 0x00ad
static struct tramp_frame sh_linux_sigreturn_tramp_frame = {
SIGTRAMP_FRAME,
2,
{
{ SH_MOVW, 0xffff },
{ SH_TRAP, 0xff00 }, /* #imm argument part filtered out. */
{ SH_OR_R0_R0, 0xffff },
{ SH_OR_R0_R0, 0xffff },
{ SH_OR_R0_R0, 0xffff },
{ SH_OR_R0_R0, 0xffff },
{ SH_OR_R0_R0, 0xffff },
{ SH_NR_SIGRETURN, 0xffff },
{ TRAMP_SENTINEL_INSN }
},
sh_linux_sigreturn_init
};
static struct tramp_frame sh_linux_rt_sigreturn_tramp_frame = {
SIGTRAMP_FRAME,
2,
{
{ SH_MOVW, 0xffff },
{ SH_TRAP, 0xff00 }, /* #imm argument part filtered out. */
{ SH_OR_R0_R0, 0xffff },
{ SH_OR_R0_R0, 0xffff },
{ SH_OR_R0_R0, 0xffff },
{ SH_OR_R0_R0, 0xffff },
{ SH_OR_R0_R0, 0xffff },
{ SH_NR_RT_SIGRETURN, 0xffff },
{ TRAMP_SENTINEL_INSN }
},
sh_linux_rt_sigreturn_init
};
static void
sh_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
* corelow.c (core_pid_to_str): Default to using normal_pid_to_str instead of printing "Thread" here. * linux-tdep.c: Include inferior.h. (linux_core_pid_to_str): New. (linux_init_abi): New. * linux-tdep.h (linux_init_abi): Declare. * alpha-linux-tdep.c: Include linux-tdep.h. (alpha_linux_init_abi): Call linux_init_abi. * amd64-linux-tdep.c (amd64_linux_init_abi): Call linux_init_abi. * arm-linux-tdep.c (arm_linux_init_abi): Call linux_init_abi. * frv-linux-tdep.c: Include linux-tdep.h (frv_linux_init_abi): Call linux_init_abi. * hppa-linux-tdep.c: Include linux-tdep.h (hppa_linux_init_abi): Call linux_init_abi. * i386-linux-tdep.c (i386_linux_init_abi): Call linux_init_abi. * ia64-linux-tdep.c: Include linux-tdep.h. (ia64_linux_init_abi): Call linux_init_abi. * m32r-linux-tdep.c: Include linux-tdep.h. (m32r_linux_init_abi): Call linux_init_abi. * m68klinux-tdep.c: Include linux-tdep.h. (m68k_linux_init_abi): Call linux_init_abi. * microblaze-linux-tdep.c: Include linux-tdep.h. (microblaze_linux_init_abi): Call linux_init_abi. * mips-linux-tdep.c: Include linux-tdep.h. (mips_linux_init_abi): Call linux_init_abi. * mn10300-linux-tdep.c: Include linux-tdep.h. (am33_linux_init_osabi): Call linux_init_abi. Rename the 'gdbinfo' parameter to 'info'. * ppc-linux-tdep.c: Include linux-tdep.h. (ppc_linux_init_abi): Call linux_init_abi. * sh-linux-tdep.c: Include linux-tdep.h. (sh_linux_init_abi): Call linux_init_abi. * sparc-linux-tdep.c: Include linux-tdep.h. (sparc32_linux_init_abi): Call linux_init_abi. * sparc64-linux-tdep.c: Include linux-tdep.h. (sparc64_linux_init_abi): Call linux_init_abi. * xtensa-linux-tdep.c: Include linux-tdep.h. (xtensa_linux_init_abi): Call linux_init_abi. * i386-cygwin-tdep.c (i386_windows_core_pid_to_str): New. (i386_cygwin_init_abi): Install it as gdbarch_core_pid_to_str callback.
2010-08-04 17:27:57 +02:00
linux_init_abi (info, gdbarch);
/* GNU/Linux uses SVR4-style shared libraries. */
* config/tm-linux.h: Delete file. * config/alpha/alpha-linux.mt (DEPRECATED_TM_FILE): Set to tm-alpha.h. * config/alpha/tm-alphalinux.h: Delete file. * config/arm/linux.mt (DEPRECATED_TM_FILE): Set to tm-arm.h * config/arm/tm-linux.h: Delete file. * config/i386/tm-linux.h: Do not include "config/tm-linux.h". * config/ia64/tm-linux.h: Do not include "config/tm-linux.h". * config/m32r/linux.mt (DEPRECATED_TM_FILE): Remove. * config/mips/tm-linux.h: Do not include "config/tm-linux.h". * config/pa/linux.mt (DEPRECATED_TM_FILE): Set to tm-hppa.h. * config/pa/tm-linux.h: Delete file. * config/powerpc/tm-linux.h: Do not include "config/tm-linux.h". * config/s390/linux.mt (DEPRECATED_TM_FILE): Remove. * config/sh/linux.mt (DEPRECATED_TM_FILE): Set to tm-sh.h. * config/sh/tm-linux.h: Delete file. * alpha-linux-tdep.c: Include "symtab.h". (alpha_linux_init_abi): Call set_gdbarch_skip_trampoline_code. * i386-linux-tdep.c: Include "symtab.h". (i386_linux_init_abi): Call set_gdbarch_skip_trampoline_code. * ia64-linux-tdep.c: Include "symtab.h". (ia64_linux_init_abi): Call set_gdbarch_skip_trampoline_code. * m32r-linux-tdep.c: Include "symtab.h". (m32r_linux_init_abi): Call set_gdbarch_skip_trampoline_code. * mips-linux-tdep.c: Include "symtab.h". (mips_linux_init_abi): Call set_gdbarch_skip_trampoline_code. * sh-linux-tdep.c: Include "symtab.h". (sh_linux_init_abi): Call set_gdbarch_skip_trampoline_code. * s390-tdep.c (s390_gdbarch_init): Call set_gdbarch_skip_trampoline_code. * s390-nat.c: Do not include "tm.h". * Makefile.in (alpha-linux-tdep.o): Add dependency on $(symtab_h). (i386-linux-tdep.o): Likewise. (ia64-linux-tdep.o): Likewise. (m32r-linux-tdep.o): Likewise. (mips-linux-tdep.o): Likewise. (sh-linux-tdep.o): Likewise. (s390-nat.o): Remove dependency on $(tm_h).
2006-11-28 22:41:03 +01:00
set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
set_solib_svr4_fetch_link_map_offsets
(gdbarch, svr4_ilp32_fetch_link_map_offsets);
set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
set_gdbarch_fetch_tls_load_module_address (gdbarch,
svr4_fetch_objfile_link_map);
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.
2009-10-21 16:14:57 +02:00
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
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.
2009-10-21 16:14:57 +02:00
/* Remember regset characteristics. The sizes should match
elf_gregset_t and elf_fpregset_t from Linux. */
tdep->core_gregmap = (struct sh_corefile_regmap *) gregs_table;
tdep->sizeof_gregset = 92;
tdep->core_fpregmap = (struct sh_corefile_regmap *) fpregs_table;
tdep->sizeof_fpregset = 136;
tramp_frame_prepend_unwinder (gdbarch, &sh_linux_sigreturn_tramp_frame);
tramp_frame_prepend_unwinder (gdbarch, &sh_linux_rt_sigreturn_tramp_frame);
}
void
_initialize_sh_linux_tdep (void)
{
gdbarch_register_osabi (bfd_arch_sh, 0, GDB_OSABI_LINUX, sh_linux_init_abi);
}