* amd64nbsd-tdep.c (amd64nbsd_sigcontext_addr): Remove function.
authorMark Kettenis <kettenis@gnu.org>
Sat, 10 Apr 2004 11:40:05 +0000 (11:40 +0000)
committerMark Kettenis <kettenis@gnu.org>
Sat, 10 Apr 2004 11:40:05 +0000 (11:40 +0000)
(amd64nbsd_mcontext_addr): New function.
(amd64nbsd_init_abi): Initialize TDEP->sigcontext_addr as
amd64nbsd_mcontext_addr.  Directly initialize TDEP->sc_reg_offset
with amd64nbsd_r_reg_offset, instead of building it on the fly.

gdb/ChangeLog
gdb/amd64nbsd-tdep.c

index e1b0432cd29bafb38d83cea950c58746fe0279d1..02f04a6fbfc81b4b7e8452625ed62cfee3ad809d 100644 (file)
@@ -1,5 +1,11 @@
 2004-04-10  Mark Kettenis  <kettenis@gnu.org>
 
+       * amd64nbsd-tdep.c (amd64nbsd_sigcontext_addr): Remove function.
+       (amd64nbsd_mcontext_addr): New function.
+       (amd64nbsd_init_abi): Initialize TDEP->sigcontext_addr as
+       amd64nbsd_mcontext_addr.  Directly initialize TDEP->sc_reg_offset
+       with amd64nbsd_r_reg_offset, instead of building it on the fly.
+
        * corelow.c (core_xfer_partial): Fix coding standards violation.
        Add support for TARGET_OBJECT_WCOOKIE.
 
index cc90aeec5f3e005a7de305a540767d2194306943..ffa91100e9416955b96c385cfda2147d933cbafd 100644 (file)
@@ -47,18 +47,21 @@ amd64nbsd_sigtramp_p (struct frame_info *next_frame)
   return nbsd_pc_in_sigtramp (pc, name);
 }
 
-/* Assuming NEXT_FRAME is for a frame following a BSD sigtramp
-   routine, return the address of the associated sigcontext structure.  */
+/* Assuming NEXT_FRAME is preceded by a frame corresponding to a
+   NetBSD sigtramp routine, return the address of the associated
+   mcontext structure.  */
 
 static CORE_ADDR
-amd64nbsd_sigcontext_addr (struct frame_info *next_frame)
+amd64nbsd_mcontext_addr (struct frame_info *next_frame)
 {
-  CORE_ADDR sp;
+  CORE_ADDR addr;
 
-  /* The stack pointer points at `struct sigcontext' upon entry of a
+  /* The register %r15 points at `struct ucontext' upon entry of a
      signal trampoline.  */
-  sp = frame_unwind_register_unsigned (next_frame, AMD64_RSP_REGNUM);
-  return sp;
+  addr = frame_unwind_register_unsigned (next_frame, AMD64_R15_REGNUM);
+
+  /* The mcontext structure lives as offset 56 in `struct ucontext'.  */
+  return addr + 56;
 }
 \f
 /* NetBSD 2.0 or later.  */
@@ -99,8 +102,6 @@ static void
 amd64nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
-  int *sc_reg_offset;
-  int i;
 
   /* Initialize general-purpose register set details first.  */
   tdep->gregset_reg_offset = amd64nbsd_r_reg_offset;
@@ -113,21 +114,9 @@ amd64nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 
   /* NetBSD has its own convention for signal trampolines.  */
   tdep->sigtramp_p = amd64nbsd_sigtramp_p;
-  tdep->sigcontext_addr = amd64nbsd_sigcontext_addr;
-
-  /* Initialize the array with register offsets in `struct
-     sigcontext'.  This `struct sigcontext' has an sc_mcontext member
-     at offset 32, and in <machine/reg.h> we have an explicit comment
-     saying that `struct reg' is the same as mcontext.__gregs.  */
+  tdep->sigcontext_addr = amd64nbsd_mcontext_addr;
+  tdep->sc_reg_offset = amd64nbsd_r_reg_offset;
   tdep->sc_num_regs = ARRAY_SIZE (amd64nbsd_r_reg_offset);
-  tdep->sc_reg_offset = XCALLOC (tdep->sc_num_regs, int);
-  for (i = 0; i < tdep->sc_num_regs; i++)
-    {
-      if (amd64nbsd_r_reg_offset[i] < 0)
-       tdep->sc_reg_offset[i] = -1;
-      else
-       tdep->sc_reg_offset[i] = 32 + amd64nbsd_r_reg_offset[i];
-    }
 
   /* NetBSD uses SVR4-style shared libraries.  */
   set_solib_svr4_fetch_link_map_offsets