]> Git Repo - binutils.git/commitdiff
Convert SAVE_DUMMY_FRAME_TOS to multi-arch.
authorAndrew Cagney <[email protected]>
Mon, 15 May 2000 06:27:18 +0000 (06:27 +0000)
committerAndrew Cagney <[email protected]>
Mon, 15 May 2000 06:27:18 +0000 (06:27 +0000)
gdb/ChangeLog
gdb/gdbarch.c
gdb/gdbarch.h
gdb/gdbarch.sh
gdb/valops.c

index 5e655b126b74d1f18a439eeb491eda15ef98c74b..27bc3187d2cfefbddfa795c505c444635469e765 100644 (file)
@@ -1,3 +1,11 @@
+Mon May 15 15:31:30 2000  Andrew Cagney  <[email protected]>
+
+       * valops.c (hand_function_call): Replace #ifdef
+       SAVE_DUMMY_FRAME_TOS with if SAVE_DUMMY_FRAME_TOS_P.
+
+       * gdbarch.sh (SAVE_DUMMY_FRAME_TOS): Add.
+       * gdbarch.h, gdbarch.c: Regenerate.
+
 Mon May 15 16:05:46 2000  Andrew Cagney  <[email protected]>
 
        * ax.h (make_cleanup_free_agent_expr): Add declaration.
index 557633d12e58439c760c4ef9749a79dbaf6033d1..bcad7b95bd73642ae4b86b03e992a16ed0aa3bb2 100644 (file)
@@ -219,6 +219,7 @@ struct gdbarch
   gdbarch_frame_num_args_ftype *frame_num_args;
   gdbarch_stack_align_ftype *stack_align;
   gdbarch_reg_struct_has_addr_ftype *reg_struct_has_addr;
+  gdbarch_save_dummy_frame_tos_ftype *save_dummy_frame_tos;
 };
 
 
@@ -329,6 +330,7 @@ struct gdbarch startup_gdbarch = {
   0,
   0,
   0,
+  0,
   /* startup_gdbarch() */
 };
 struct gdbarch *current_gdbarch = &startup_gdbarch;
@@ -634,6 +636,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
     internal_error ("gdbarch: verify_gdbarch: frame_num_args invalid");
   /* Skip verify of stack_align, has predicate */
   /* Skip verify of reg_struct_has_addr, has predicate */
+  /* Skip verify of save_dummy_frame_tos, has predicate */
 }
 
 
@@ -1175,6 +1178,12 @@ gdbarch_dump (void)
                       "gdbarch_update: REG_STRUCT_HAS_ADDR = 0x%08lx\n",
                       (long) current_gdbarch->reg_struct_has_addr
                       /*REG_STRUCT_HAS_ADDR ()*/);
+#endif
+#ifdef SAVE_DUMMY_FRAME_TOS
+  fprintf_unfiltered (gdb_stdlog,
+                      "gdbarch_update: SAVE_DUMMY_FRAME_TOS = 0x%08lx\n",
+                      (long) current_gdbarch->save_dummy_frame_tos
+                      /*SAVE_DUMMY_FRAME_TOS ()*/);
 #endif
   fprintf_unfiltered (gdb_stdlog,
                       "gdbarch_update: GDB_MULTI_ARCH = %d\n",
@@ -2788,6 +2797,29 @@ set_gdbarch_reg_struct_has_addr (struct gdbarch *gdbarch,
   gdbarch->reg_struct_has_addr = reg_struct_has_addr;
 }
 
+int
+gdbarch_save_dummy_frame_tos_p (struct gdbarch *gdbarch)
+{
+  return gdbarch->save_dummy_frame_tos != 0;
+}
+
+void
+gdbarch_save_dummy_frame_tos (struct gdbarch *gdbarch, CORE_ADDR sp)
+{
+  if (gdbarch->save_dummy_frame_tos == 0)
+    internal_error ("gdbarch: gdbarch_save_dummy_frame_tos invalid");
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_save_dummy_frame_tos called\n");
+  gdbarch->save_dummy_frame_tos (sp);
+}
+
+void
+set_gdbarch_save_dummy_frame_tos (struct gdbarch *gdbarch,
+                                  gdbarch_save_dummy_frame_tos_ftype save_dummy_frame_tos)
+{
+  gdbarch->save_dummy_frame_tos = save_dummy_frame_tos;
+}
+
 
 /* Keep a registrary of per-architecture data-pointers required by GDB
    modules. */
index dde7c515ed8b05b8ecee7d5b9ea9e70cb2fd2c1e..7121a224870d7e2f0b27f3ff260611092e95a027 100644 (file)
@@ -1062,6 +1062,35 @@ extern void set_gdbarch_reg_struct_has_addr (struct gdbarch *gdbarch, gdbarch_re
 #endif
 #endif
 
+#if defined (SAVE_DUMMY_FRAME_TOS)
+/* Legacy for systems yet to multi-arch SAVE_DUMMY_FRAME_TOS */
+#define SAVE_DUMMY_FRAME_TOS_P() (1)
+#endif
+
+/* Default predicate for non- multi-arch targets. */
+#if (GDB_MULTI_ARCH == 0) && !defined (SAVE_DUMMY_FRAME_TOS_P)
+#define SAVE_DUMMY_FRAME_TOS_P() (0)
+#endif
+
+extern int gdbarch_save_dummy_frame_tos_p (struct gdbarch *gdbarch);
+#if (GDB_MULTI_ARCH > 1) || !defined (SAVE_DUMMY_FRAME_TOS_P)
+#define SAVE_DUMMY_FRAME_TOS_P() (gdbarch_save_dummy_frame_tos_p (current_gdbarch))
+#endif
+
+/* Default (function) for non- multi-arch platforms. */
+#if (GDB_MULTI_ARCH == 0) && !defined (SAVE_DUMMY_FRAME_TOS)
+#define SAVE_DUMMY_FRAME_TOS(sp) (internal_error ("SAVE_DUMMY_FRAME_TOS"), 0)
+#endif
+
+typedef void (gdbarch_save_dummy_frame_tos_ftype) (CORE_ADDR sp);
+extern void gdbarch_save_dummy_frame_tos (struct gdbarch *gdbarch, CORE_ADDR sp);
+extern void set_gdbarch_save_dummy_frame_tos (struct gdbarch *gdbarch, gdbarch_save_dummy_frame_tos_ftype *save_dummy_frame_tos);
+#if GDB_MULTI_ARCH
+#if (GDB_MULTI_ARCH > 1) || !defined (SAVE_DUMMY_FRAME_TOS)
+#define SAVE_DUMMY_FRAME_TOS(sp) (gdbarch_save_dummy_frame_tos (current_gdbarch, sp))
+#endif
+#endif
+
 extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
 
 
index 499cf337e782857924a3cf946691439c296bd400..cbc7cf3aa37f2324b0df2db42ea09ebf69fc2f41 100755 (executable)
@@ -326,6 +326,7 @@ f:2:FRAME_NUM_ARGS:int:frame_num_args:struct frame_info *frame:frame::0:0
 #
 F:2:STACK_ALIGN:CORE_ADDR:stack_align:CORE_ADDR sp:sp::0:0
 F:2:REG_STRUCT_HAS_ADDR:int:reg_struct_has_addr:int gcc_p, struct type *type:gcc_p, type::0:0
+F:2:SAVE_DUMMY_FRAME_TOS:void:save_dummy_frame_tos:CORE_ADDR sp:sp::0:0
 EOF
   grep -v '^#'
 }
index 0632ede82087a8b9f48fde99175e0388eb1835ac..710c2be2e70fa7731b29b1fe735c2f14422a40b4 100644 (file)
@@ -1678,9 +1678,8 @@ You must use a pointer to function type variable. Command ignored.", arg_name);
      wouldn't happen.  (See store_inferior_registers in sparc-nat.c.)  */
   write_sp (sp);
 
-#ifdef SAVE_DUMMY_FRAME_TOS
-  SAVE_DUMMY_FRAME_TOS (sp);
-#endif
+  if (SAVE_DUMMY_FRAME_TOS_P ())
+    SAVE_DUMMY_FRAME_TOS (sp);
 
   {
     char retbuf[REGISTER_BYTES];
This page took 0.044673 seconds and 4 git commands to generate.