2004-05-01 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Sat, 1 May 2004 15:10:15 +0000 (15:10 +0000)
committerAndrew Cagney <cagney@redhat.com>
Sat, 1 May 2004 15:10:15 +0000 (15:10 +0000)
* Makefile.in (m68klinux-nat.o): Update dependencies.
* m68klinux-tdep.c: Include "trad-frame.h" and "frame-unwind.h".
(m68k_linux_sigtramp_frame_cache)
(m68k_linux_sigtramp_frame_this_id)
(m68k_linux_sigtramp_frame_prev_register)
(m68k_linux_sigtramp_frame_unwind)
(m68k_linux_sigtramp_frame_sniffer)
(struct m68k_linux_sigtramp_info, m68k_linux_init_abi): Code from
m68k-tdep.h and m68k-tdep.c, add "linux" to function and variable
names, use trad-frame.h.
* m68k-tdep.h (struct gdbarch_tdep): Delete get_sigtramp_info.
(struct m68k_sigtramp_info): Delete.
* m68k-tdep.c (m68k_sigtramp_frame_cache)
(m68k_sigtramp_frame_this_id, m68k_sigtramp_frame_prev_register)
(m68k_sigtramp_frame_unwind, m68k_sigtramp_frame_sniffer)
(m68k_gdbarch_init): Delete all the sigtramp code, moved to
"m68klinux-tdep.c".

gdb/ChangeLog
gdb/Makefile.in
gdb/m68k-tdep.c
gdb/m68k-tdep.h
gdb/m68klinux-tdep.c

index 0dde7729c59df2c572de6320917c4baf97997506..f0ee01654d0b9dbc484280c7e33cd18011beddba 100644 (file)
@@ -1,5 +1,23 @@
 2004-05-01  Andrew Cagney  <cagney@redhat.com>
 
+       * Makefile.in (m68klinux-nat.o): Update dependencies.
+       * m68klinux-tdep.c: Include "trad-frame.h" and "frame-unwind.h".
+       (m68k_linux_sigtramp_frame_cache)
+       (m68k_linux_sigtramp_frame_this_id)
+       (m68k_linux_sigtramp_frame_prev_register)
+       (m68k_linux_sigtramp_frame_unwind)
+       (m68k_linux_sigtramp_frame_sniffer)
+       (struct m68k_linux_sigtramp_info, m68k_linux_init_abi): Code from
+       m68k-tdep.h and m68k-tdep.c, add "linux" to function and variable
+       names, use trad-frame.h.
+       * m68k-tdep.h (struct gdbarch_tdep): Delete get_sigtramp_info.
+       (struct m68k_sigtramp_info): Delete.
+       * m68k-tdep.c (m68k_sigtramp_frame_cache)
+       (m68k_sigtramp_frame_this_id, m68k_sigtramp_frame_prev_register)
+       (m68k_sigtramp_frame_unwind, m68k_sigtramp_frame_sniffer)
+       (m68k_gdbarch_init): Delete all the sigtramp code, moved to
+       "m68klinux-tdep.c".
+
        * infrun.c (check_sigtramp2): Delete check for
        DEPRECATED_PC_IN_SIGTRAMP and INNER_THAN.
 
index 8a8ed9e92f2e7dc820f240680c1b5502ddc42b89..fd1e23ea43c46634b6df027e07981045e0d41a4e 100644 (file)
@@ -2014,7 +2014,7 @@ m68hc11-tdep.o: m68hc11-tdep.c $(defs_h) $(frame_h) $(frame_unwind_h) \
 m68klinux-nat.o: m68klinux-nat.c $(defs_h) $(frame_h) $(inferior_h) \
        $(language_h) $(gdbcore_h) $(gdb_string_h) $(regcache_h) \
        $(m68k_tdep_h) $(gdb_stat_h) $(floatformat_h) $(target_h) \
-       $(gregset_h)
+       $(gregset_h) $(trad_frame_h) $(frame_unwind_h)
 m68klinux-tdep.o: m68klinux-tdep.c $(defs_h) $(gdbcore_h) $(doublest_h) \
        $(floatformat_h) $(frame_h) $(target_h) $(gdb_string_h) \
        $(gdbtypes_h) $(osabi_h) $(regcache_h) $(objfiles_h) $(symtab_h) \
index bd5f9f1a4ab89d5d099adc7a7ba0956019d17c0b..66f21fe2bcadc6f83d9d309a730bbfa95720d900 100644 (file)
@@ -761,85 +761,6 @@ m68k_frame_sniffer (struct frame_info *next_frame)
   return &m68k_frame_unwind;
 }
 \f
-/* Signal trampolines.  */
-
-static struct m68k_frame_cache *
-m68k_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache)
-{
-  struct m68k_frame_cache *cache;
-  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
-  struct m68k_sigtramp_info info;
-  char buf[4];
-  int i;
-
-  if (*this_cache)
-    return *this_cache;
-
-  cache = m68k_alloc_frame_cache ();
-
-  frame_unwind_register (next_frame, M68K_SP_REGNUM, buf);
-  cache->base = extract_unsigned_integer (buf, 4) - 4;
-
-  info = tdep->get_sigtramp_info (next_frame);
-
-  for (i = 0; i < M68K_NUM_REGS; i++)
-    if (info.sc_reg_offset[i] != -1)
-      cache->saved_regs[i] = info.sigcontext_addr + info.sc_reg_offset[i];
-
-  *this_cache = cache;
-  return cache;
-}
-
-static void
-m68k_sigtramp_frame_this_id (struct frame_info *next_frame, void **this_cache,
-                            struct frame_id *this_id)
-{
-  struct m68k_frame_cache *cache =
-    m68k_sigtramp_frame_cache (next_frame, this_cache);
-
-  /* See the end of m68k_push_dummy_call.  */
-  *this_id = frame_id_build (cache->base + 8, frame_pc_unwind (next_frame));
-}
-
-static void
-m68k_sigtramp_frame_prev_register (struct frame_info *next_frame,
-                                  void **this_cache,
-                                  int regnum, int *optimizedp,
-                                  enum lval_type *lvalp, CORE_ADDR *addrp,
-                                  int *realnump, void *valuep)
-{
-  /* Make sure we've initialized the cache.  */
-  m68k_sigtramp_frame_cache (next_frame, this_cache);
-
-  m68k_frame_prev_register (next_frame, this_cache, regnum,
-                           optimizedp, lvalp, addrp, realnump, valuep);
-}
-
-static const struct frame_unwind m68k_sigtramp_frame_unwind =
-{
-  SIGTRAMP_FRAME,
-  m68k_sigtramp_frame_this_id,
-  m68k_sigtramp_frame_prev_register
-};
-
-static const struct frame_unwind *
-m68k_sigtramp_frame_sniffer (struct frame_info *next_frame)
-{
-  CORE_ADDR pc = frame_pc_unwind (next_frame);
-  char *name;
-
-  /* We shouldn't even bother to try if the OSABI didn't register
-     a get_sigtramp_info handler.  */
-  if (!gdbarch_tdep (current_gdbarch)->get_sigtramp_info)
-    return NULL;
-
-  find_pc_partial_function (pc, &name, NULL, NULL);
-  if (DEPRECATED_PC_IN_SIGTRAMP (pc, name))
-    return &m68k_sigtramp_frame_unwind;
-
-  return NULL;
-}
-\f
 static CORE_ADDR
 m68k_frame_base_address (struct frame_info *next_frame, void **this_cache)
 {
@@ -1091,7 +1012,6 @@ m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 #else
   tdep->jb_pc = -1;
 #endif
-  tdep->get_sigtramp_info = NULL;
   tdep->struct_return = pcc_struct_return;
 
   /* Frame unwinder.  */
@@ -1112,7 +1032,6 @@ m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   if (tdep->jb_pc >= 0)
     set_gdbarch_get_longjmp_target (gdbarch, m68k_get_longjmp_target);
 
-  frame_unwind_append_sniffer (gdbarch, m68k_sigtramp_frame_sniffer);
   frame_unwind_append_sniffer (gdbarch, m68k_frame_sniffer);
 
   return gdbarch;
index bf00cf05a1fb951b1963bbd274a1111c17349d27..be28d8863912efd590ef76a066b8c1f29faae290 100644 (file)
@@ -49,15 +49,6 @@ enum m68k_regnum
 /* Size of the largest register.  */
 #define M68K_MAX_REGISTER_SIZE 12
 
-struct m68k_sigtramp_info
-{
-  /* Address of sigcontext.  */
-  CORE_ADDR sigcontext_addr;
-
-  /* Offset of registers in `struct sigcontext'.  */
-  int *sc_reg_offset;
-};
-
 /* Convention for returning structures.  */
 
 enum struct_return
@@ -76,9 +67,6 @@ struct gdbarch_tdep
   /* The size of each entry in the jump buffer.  */
   size_t jb_elt_size;
 
-  /* Get info about sigtramp.  */
-  struct m68k_sigtramp_info (*get_sigtramp_info) (struct frame_info *);
-
   /* Convention for returning structures.  */
   enum struct_return struct_return;
 };
index 109195138f4e3bf82569658a473b2b69fc1d25ee..c174daa85ecaff836cee287b76cd7491c7c3810a 100644 (file)
@@ -33,6 +33,8 @@
 #include "objfiles.h"
 #include "symtab.h"
 #include "m68k-tdep.h"
+#include "trad-frame.h"
+#include "frame-unwind.h"
 \f
 /* Offsets (in target ints) into jmp_buf.  */
 
@@ -160,12 +162,21 @@ static int m68k_linux_ucontext_reg_offset[M68K_NUM_REGS] =
 
 /* Get info about saved registers in sigtramp.  */
 
-static struct m68k_sigtramp_info
+struct m68k_linux_sigtramp_info
+{
+  /* Address of sigcontext.  */
+  CORE_ADDR sigcontext_addr;
+
+  /* Offset of registers in `struct sigcontext'.  */
+  int *sc_reg_offset;
+};
+
+static struct m68k_linux_sigtramp_info
 m68k_linux_get_sigtramp_info (struct frame_info *next_frame)
 {
   CORE_ADDR sp;
   char buf[4];
-  struct m68k_sigtramp_info info;
+  struct m68k_linux_sigtramp_info info;
 
   frame_unwind_register (next_frame, M68K_SP_REGNUM, buf);
   sp = extract_unsigned_integer (buf, 4);
@@ -180,6 +191,90 @@ m68k_linux_get_sigtramp_info (struct frame_info *next_frame)
   return info;
 }
 
+/* Signal trampolines.  */
+
+static struct trad_frame_cache *
+m68k_linux_sigtramp_frame_cache (struct frame_info *next_frame,
+                                void **this_cache)
+{
+  struct frame_id this_id;
+  struct trad_frame_cache *cache;
+  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+  struct m68k_linux_sigtramp_info info;
+  char buf[4];
+  int i;
+
+  if (*this_cache)
+    return *this_cache;
+
+  cache = trad_frame_cache_zalloc (next_frame);
+
+  /* FIXME: cagney/2004-05-01: This is is long standing broken code.
+     The frame ID's code address should be the start-address of the
+     signal trampoline and not the current PC within that
+     trampoline.  */
+  frame_unwind_register (next_frame, M68K_SP_REGNUM, buf);
+  /* See the end of m68k_push_dummy_call.  */
+  this_id = frame_id_build (extract_unsigned_integer (buf, 4) - 4 + 8,
+                           frame_pc_unwind (next_frame));
+  trad_frame_set_id (cache, this_id);
+
+  info = m68k_linux_get_sigtramp_info (next_frame);
+
+  for (i = 0; i < M68K_NUM_REGS; i++)
+    if (info.sc_reg_offset[i] != -1)
+      trad_frame_set_reg_addr (cache, i,
+                              info.sigcontext_addr + info.sc_reg_offset[i]);
+
+  *this_cache = cache;
+  return cache;
+}
+
+static void
+m68k_linux_sigtramp_frame_this_id (struct frame_info *next_frame,
+                                  void **this_cache,
+                                  struct frame_id *this_id)
+{
+  struct trad_frame_cache *cache =
+    m68k_linux_sigtramp_frame_cache (next_frame, this_cache);
+  trad_frame_get_id (cache, this_id);
+}
+
+static void
+m68k_linux_sigtramp_frame_prev_register (struct frame_info *next_frame,
+                                        void **this_cache,
+                                        int regnum, int *optimizedp,
+                                        enum lval_type *lvalp,
+                                        CORE_ADDR *addrp,
+                                        int *realnump, void *valuep)
+{
+  /* Make sure we've initialized the cache.  */
+  struct trad_frame_cache *cache =
+    m68k_linux_sigtramp_frame_cache (next_frame, this_cache);
+  trad_frame_get_register (cache, next_frame, regnum, optimizedp, lvalp,
+                          addrp, realnump, valuep);
+}
+
+static const struct frame_unwind m68k_linux_sigtramp_frame_unwind =
+{
+  SIGTRAMP_FRAME,
+  m68k_linux_sigtramp_frame_this_id,
+  m68k_linux_sigtramp_frame_prev_register
+};
+
+static const struct frame_unwind *
+m68k_linux_sigtramp_frame_sniffer (struct frame_info *next_frame)
+{
+  CORE_ADDR pc = frame_pc_unwind (next_frame);
+  char *name;
+
+  find_pc_partial_function (pc, &name, NULL, NULL);
+  if (m68k_linux_pc_in_sigtramp (pc, name))
+    return &m68k_linux_sigtramp_frame_unwind;
+
+  return NULL;
+}
+
 /* Extract from an array REGBUF containing the (raw) register state, a
    function return value of TYPE, and copy that, in virtual format,
    into VALBUF.  */
@@ -289,14 +384,13 @@ m68k_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 
   tdep->jb_pc = M68K_LINUX_JB_PC;
   tdep->jb_elt_size = M68K_LINUX_JB_ELEMENT_SIZE;
-  tdep->get_sigtramp_info = m68k_linux_get_sigtramp_info;
   tdep->struct_return = reg_struct_return;
 
   set_gdbarch_extract_return_value (gdbarch, m68k_linux_extract_return_value);
   set_gdbarch_store_return_value (gdbarch, m68k_linux_store_return_value);
   set_gdbarch_deprecated_extract_struct_value_address (gdbarch, m68k_linux_extract_struct_value_address);
 
-  set_gdbarch_deprecated_pc_in_sigtramp (gdbarch, m68k_linux_pc_in_sigtramp);
+  frame_unwind_append_sniffer (gdbarch, m68k_linux_sigtramp_frame_sniffer);
 
   /* Shared library handling.  */
   set_gdbarch_in_solib_call_trampoline (gdbarch, in_plt_section);