* alpha-nat.c (fetch_aout_core_registers): Rename from
authorRichard Henderson <rth@redhat.com>
Tue, 3 Feb 1998 01:20:27 +0000 (01:20 +0000)
committerRichard Henderson <rth@redhat.com>
Tue, 3 Feb 1998 01:20:27 +0000 (01:20 +0000)
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
gdb/config/alpha/tm-alphalinux.h
gdb/configure.host
gdb/configure.tgt

index cb6da8a5b5381d9b0a6d3be512be4ea17a69d6c8..4da9cbeadb07e6da355cc60979afbeb91c56484f 100644 (file)
@@ -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)
 \f
 /* 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);
 }
index 682aca65677e5f5b07b7ae3963b25f9e784f34e7..d836a7054c8f19a128ee0d0806a585c6dd240189 100644 (file)
@@ -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 */
index d1e6c0a10741fd2cba626647066c5d16facbb3ee..2414b4880c6a6fbc74a0460a412d66ab164380e3 100644 (file)
@@ -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 ;;
 
index ce9bb1eb26233186d1242b53ebe35dc9f5020aed..ec4f5aa2038033a3404b99518ec7c94c81fe898e 100644 (file)
@@ -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 ;;