* armobsd-tdep.c: Include "trad-frame.h" and "tramp-frame.h".
authorMark Kettenis <kettenis@gnu.org>
Tue, 18 Jul 2006 21:10:28 +0000 (21:10 +0000)
committerMark Kettenis <kettenis@gnu.org>
Tue, 18 Jul 2006 21:10:28 +0000 (21:10 +0000)
(armobsd_sigframe_init): New function.
(armobsd_sigframe): New variable.
(armobsd_init_abi): Prepend armobsd_sigframe unwinder.
* Makefile.in (armobsd-tdep.o): Update dependencies.

gdb/ChangeLog
gdb/Makefile.in
gdb/armobsd-tdep.c

index fb1f2434a3f1fc5780497882adfcd2b09ff1b0cc..f1b80c5991092d4aa6a5d2dce0ad2cc1e5575388 100644 (file)
@@ -1,3 +1,11 @@
+2006-07-18  Mark Kettenis  <kettenis@gnu.org>
+
+       * armobsd-tdep.c: Include "trad-frame.h" and "tramp-frame.h".
+       (armobsd_sigframe_init): New function.
+       (armobsd_sigframe): New variable.
+       (armobsd_init_abi): Prepend armobsd_sigframe unwinder.
+       * Makefile.in (armobsd-tdep.o): Update dependencies.
+
 2006-07-18  Denis PILAT  <denis.pilat@st.com>
 
        * monitor.c: Remove unused prototypes.
index d0d1ab1f39755104d2054968cf44d792668d99c5..93a9fd864b7b4ed590e79dd1fe843cd82456cc72 100644 (file)
@@ -1783,8 +1783,8 @@ armnbsd-nat.o: armnbsd-nat.c $(defs_h) $(gdbcore_h) $(inferior_h) \
        $(regcache_h) $(target_h) $(gdb_string_h) $(arm_tdep_h) $(inf_ptrace_h)
 armnbsd-tdep.o: armnbsd-tdep.c $(defs_h) $(osabi_h) $(gdb_string_h) \
        $(arm_tdep_h) $(solib_svr4_h)
-armobsd-tdep.o: armobsd-tdep.c $(defs_h) $(osabi_h) \
-       $(obsd_tdep_h) $(arm_tdep_h) $(solib_svr4_h)
+armobsd-tdep.o: armobsd-tdep.c $(defs_h) $(osabi_h) $(trad_frame_h) \
+       $(tramp_frame_h) $(obsd_tdep_h) $(arm_tdep_h) $(solib_svr4_h)
 arm-tdep.o: arm-tdep.c $(defs_h) $(frame_h) $(inferior_h) $(gdbcmd_h) \
        $(gdbcore_h) $(gdb_string_h) $(dis_asm_h) $(regcache_h) \
        $(doublest_h) $(value_h) $(arch_utils_h) $(osabi_h) \
index 64c83384e93514e656a4128a3fae76f9942990a4..0f5e7a4007d3b42e9cc028e511090d21c29a85c2 100644 (file)
 
 #include "defs.h"
 #include "osabi.h"
+#include "trad-frame.h"
+#include "tramp-frame.h"
 
 #include "obsd-tdep.h"
 #include "arm-tdep.h"
 #include "solib-svr4.h"
 
+/* Signal trampolines.  */
+
+static void
+armobsd_sigframe_init (const struct tramp_frame *self,
+                      struct frame_info *next_frame,
+                      struct trad_frame_cache *cache,
+                      CORE_ADDR func)
+{
+  CORE_ADDR sp, sigcontext_addr, addr;
+  int regnum;
+
+  /* We find the appropriate instance of `struct sigcontext' at a
+     fixed offset in the signal frame.  */
+  sp = frame_unwind_register_signed (next_frame, ARM_SP_REGNUM);
+  sigcontext_addr = sp + 16;
+
+  /* PC.  */
+  trad_frame_set_reg_addr (cache, ARM_PC_REGNUM, sigcontext_addr + 76);
+
+  /* GPRs.  */
+  for (regnum = ARM_A1_REGNUM, addr = sigcontext_addr + 12;
+       regnum <= ARM_LR_REGNUM; regnum++, addr += 4)
+    trad_frame_set_reg_addr (cache, regnum, addr);
+
+  trad_frame_set_id (cache, frame_id_build (sp, func));
+}
+
+static const struct tramp_frame armobsd_sigframe =
+{
+  SIGTRAMP_FRAME,
+  4,
+  {
+    { 0xe28d0010, -1 },                /* add     r0, sp, #16 */
+    { 0xef000067, -1 },                /* swi     SYS_sigreturn */
+    { 0xef000001, -1 },                /* swi     SYS_exit */
+    { 0xeafffffc, -1 },                /* b       . - 8 */
+    { TRAMP_SENTINEL_INSN, -1 }
+  },
+  armobsd_sigframe_init
+};
+\f
+
 static void
 armobsd_init_abi (struct gdbarch_info info,
                  struct gdbarch *gdbarch)
@@ -35,6 +79,8 @@ armobsd_init_abi (struct gdbarch_info info,
   if (tdep->fp_model == ARM_FLOAT_AUTO)
     tdep->fp_model = ARM_FLOAT_SOFT_VFP;
 
+  tramp_frame_prepend_unwinder (gdbarch, &armobsd_sigframe);
+
   /* OpenBSD/arm uses SVR4-style shared libraries.  */
   set_solib_svr4_fetch_link_map_offsets
     (gdbarch, svr4_ilp32_fetch_link_map_offsets);
This page took 0.030529 seconds and 4 git commands to generate.