aboutsummaryrefslogtreecommitdiff
path: root/gdb/alpha-nat.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>1998-02-03 01:20:27 +0000
committerRichard Henderson <rth@redhat.com>1998-02-03 01:20:27 +0000
commitffa1f5b9c37e9a64289e1badaaf1e3633d43ad8e (patch)
tree98c97badeb0515c98f25ab3d8fb7b09121276534 /gdb/alpha-nat.c
parent1eaf1cef93f67143cf3859e037c3630b77eb8129 (diff)
downloadgdb-ffa1f5b9c37e9a64289e1badaaf1e3633d43ad8e.zip
gdb-ffa1f5b9c37e9a64289e1badaaf1e3633d43ad8e.tar.gz
gdb-ffa1f5b9c37e9a64289e1badaaf1e3633d43ad8e.tar.bz2
* 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.
Diffstat (limited to 'gdb/alpha-nat.c')
-rw-r--r--gdb/alpha-nat.c58
1 files changed, 49 insertions, 9 deletions
diff --git a/gdb/alpha-nat.c b/gdb/alpha-nat.c
index cb6da8a..4da9cbe 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 (&registers[REGISTER_BYTE (FP0_REGNUM)], core_reg_sect, 31*8);
+ memset (&registers[REGISTER_BYTE (FP0_REGNUM+31)], 0, 8);
+ memset (&register_valid[FP0_REGNUM], 1, 32);
+ }
+ else
+ {
+ /* The General Registers. */
+ memcpy (&registers[REGISTER_BYTE (V0_REGNUM)], core_reg_sect, 31*8);
+ memcpy (&registers[REGISTER_BYTE (PC_REGNUM)], core_reg_sect+31*8, 8);
+ memset (&registers[REGISTER_BYTE (ZERO_REGNUM)], 0, 8);
+ memset (&register_valid[V0_REGNUM], 1, 32);
+ register_valid[PC_REGNUM] = 1;
+ }
+}
+
+
/* Map gdb internal register number to a ptrace ``address''.
These ``addresses'' are defined in <sys/ptrace.h> */
@@ -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 <sys/procfs.h>
/*
@@ -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);
}