From ffa1f5b9c37e9a64289e1badaaf1e3633d43ad8e Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 3 Feb 1998 01:20:27 +0000 Subject: [PATCH] * alpha-nat.c (fetch_aout_core_registers): Rename from fetch_core_registers. (fetch_elf_core_registers): New function. (supply_gregset): Use ALPHA_REGSET_BASE. (supply_fpregset): Likewise. (fill_fpregset): Likewise. (alpha_aout_core_fns): Rename from alpha_core_fns. (alpha_elf_core_fns): New. * config/alpha/alpha-linux.mh (NATDEPFILES): solib.o not osfsolib.o. Disable MMALLOC. * config/alpha/nm-linux.h (SVR4_SHARED_LIBS): Define if ELF. (TARGET_ELF64): Likewise. (ALPHA_REGSET_BASE): New. * config/alpha/nm-osf.h (ALPHA_REGSET_BASE): New. * config/alpha/tm-alphalinux.h: Include tm-sysv4.h. * solib.c (elf_locate_base): Add TARGET_ELF64 support. (info_sharedlibary_command): Likewise. * configure.host: Match alpha*. * configure.tgt: Likewise. --- gdb/alpha-nat.c | 58 +++++++++++++++++++++++++++----- gdb/config/alpha/tm-alphalinux.h | 3 ++ gdb/configure.host | 9 ++--- gdb/configure.tgt | 6 ++-- 4 files changed, 60 insertions(+), 16 deletions(-) diff --git a/gdb/alpha-nat.c b/gdb/alpha-nat.c index cb6da8a5b5..4da9cbeadb 100644 --- a/gdb/alpha-nat.c +++ b/gdb/alpha-nat.c @@ -81,7 +81,7 @@ get_longjmp_target (pc) */ static void -fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr) +fetch_aout_core_registers (core_reg_sect, core_reg_size, which, reg_addr) char *core_reg_sect; unsigned core_reg_size; int which; @@ -132,6 +132,38 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr) } } +static void +fetch_elf_core_registers (core_reg_sect, core_reg_size, which, reg_addr) + char *core_reg_sect; + unsigned core_reg_size; + int which; + CORE_ADDR reg_addr; +{ + if (core_reg_size < 32*8) + { + error ("Core file register section too small (%u bytes).", core_reg_size); + return; + } + + if (which == 2) + { + /* The FPU Registers. */ + memcpy (®isters[REGISTER_BYTE (FP0_REGNUM)], core_reg_sect, 31*8); + memset (®isters[REGISTER_BYTE (FP0_REGNUM+31)], 0, 8); + memset (®ister_valid[FP0_REGNUM], 1, 32); + } + else + { + /* The General Registers. */ + memcpy (®isters[REGISTER_BYTE (V0_REGNUM)], core_reg_sect, 31*8); + memcpy (®isters[REGISTER_BYTE (PC_REGNUM)], core_reg_sect+31*8, 8); + memset (®isters[REGISTER_BYTE (ZERO_REGNUM)], 0, 8); + memset (®ister_valid[V0_REGNUM], 1, 32); + register_valid[PC_REGNUM] = 1; + } +} + + /* Map gdb internal register number to a ptrace ``address''. These ``addresses'' are defined in */ @@ -157,7 +189,7 @@ kernel_u_size () return (sizeof (struct user)); } -#ifdef USE_PROC_FS +#if defined(USE_PROC_FS) || defined(HAVE_GREGSET_T) #include /* @@ -169,7 +201,7 @@ supply_gregset (gregsetp) gregset_t *gregsetp; { register int regi; - register long *regp = gregsetp->regs; + register long *regp = ALPHA_REGSET_BASE (gregsetp); static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0}; for (regi = 0; regi < 31; regi++) @@ -188,7 +220,7 @@ fill_gregset (gregsetp, regno) int regno; { int regi; - register long *regp = gregsetp->regs; + register long *regp = ALPHA_REGSET_BASE (gregsetp); for (regi = 0; regi < 31; regi++) if ((regno == -1) || (regno == regi)) @@ -208,7 +240,7 @@ supply_fpregset (fpregsetp) fpregset_t *fpregsetp; { register int regi; - register long *regp = fpregsetp->regs; + register long *regp = ALPHA_REGSET_BASE (fpregsetp); for (regi = 0; regi < 32; regi++) supply_register (regi + FP0_REGNUM, (char *)(regp + regi)); @@ -220,7 +252,7 @@ fill_fpregset (fpregsetp, regno) int regno; { int regi; - register long *regp = fpregsetp->regs; + register long *regp = ALPHA_REGSET_BASE (fpregsetp); for (regi = FP0_REGNUM; regi < FP0_REGNUM + 32; regi++) { @@ -236,15 +268,23 @@ fill_fpregset (fpregsetp, regno) /* Register that we are able to handle alpha core file formats. */ -static struct core_fns alpha_core_fns = +static struct core_fns alpha_aout_core_fns = { bfd_target_aout_flavour, - fetch_core_registers, + fetch_aout_core_registers, + NULL +}; + +static struct core_fns alpha_elf_core_fns = +{ + bfd_target_elf_flavour, + fetch_elf_core_registers, NULL }; void _initialize_core_alpha () { - add_core_fns (&alpha_core_fns); + add_core_fns (&alpha_aout_core_fns); + add_core_fns (&alpha_elf_core_fns); } diff --git a/gdb/config/alpha/tm-alphalinux.h b/gdb/config/alpha/tm-alphalinux.h index 682aca6567..d836a7054c 100644 --- a/gdb/config/alpha/tm-alphalinux.h +++ b/gdb/config/alpha/tm-alphalinux.h @@ -74,4 +74,7 @@ extern long alpha_linux_sigtramp_offset PARAMS ((CORE_ADDR)); #undef FRAME_PAST_SIGTRAMP_FRAME #define FRAME_PAST_SIGTRAMP_FRAME(frame, pc) (0) +/* We need this for the SOLIB_TRAMPOLINE stuff. */ +#include "tm-sysv4.h" + #endif /* TM_LINUXALPHA_H */ diff --git a/gdb/configure.host b/gdb/configure.host index d1e6c0a107..2414b4880c 100644 --- a/gdb/configure.host +++ b/gdb/configure.host @@ -10,6 +10,7 @@ case "${host_cpu}" in +alpha*) gdb_host_cpu=alpha ;; c[12]) gdb_host_cpu=convex ;; hppa*) gdb_host_cpu=pa ;; i[3456]86*) gdb_host_cpu=i386 ;; @@ -29,10 +30,10 @@ case "${host}" in a29k-*-*) gdb_host=ultra3 ;; -alpha-*-osf1*) gdb_host=alpha-osf1 ;; -alpha-*-osf2*) gdb_host=alpha-osf2 ;; -alpha-*-osf[3456789]*) gdb_host=alpha-osf3 ;; -alpha-*-linux*) gdb_host=alpha-linux ;; +alpha*-*-osf1*) gdb_host=alpha-osf1 ;; +alpha*-*-osf2*) gdb_host=alpha-osf2 ;; +alpha*-*-osf[3456789]*) gdb_host=alpha-osf3 ;; +alpha*-*-linux*) gdb_host=alpha-linux ;; arm-*-*) gdb_host=arm ;; diff --git a/gdb/configure.tgt b/gdb/configure.tgt index ce9bb1eb26..ec4f5aa203 100644 --- a/gdb/configure.tgt +++ b/gdb/configure.tgt @@ -12,7 +12,7 @@ case "${target_cpu}" in -alpha) gdb_target_cpu=alpha ;; +alpha*) gdb_target_cpu=alpha ;; c[12]) gdb_target_cpu=convex ;; hppa*) gdb_target_cpu=pa ;; i[3456]86*) gdb_target_cpu=i386 ;; @@ -43,8 +43,8 @@ a29k-*-sym1*) gdb_target=ultra3 ;; a29k-*-udi*) gdb_target=a29k-udi ;; a29k-*-vxworks*) gdb_target=vx29k ;; -alpha-*-osf*) gdb_target=alpha-osf1 ;; -alpha-*-linux*) gdb_target=alpha-linux ;; +alpha*-*-osf*) gdb_target=alpha-osf1 ;; +alpha*-*-linux*) gdb_target=alpha-linux ;; arc-*-*) gdb_target=arc ;; -- 2.34.1