* target.h (TARGET_VIRTUAL_FRAME_POINTER): Delete, multi-arched.
authorAndrew Cagney <cagney@redhat.com>
Sat, 11 Aug 2001 00:59:29 +0000 (00:59 +0000)
committerAndrew Cagney <cagney@redhat.com>
Sat, 11 Aug 2001 00:59:29 +0000 (00:59 +0000)
* gdbarch.sh (TARGET_VIRTUAL_FRAME_POINTER): Add.
* gdbarch.h, gdbarch.c: Regenerate.

* arch-utils.h (legacy_virtual_frame_pointer): Declare.
* arch-utils.c: Include "gdb_assert.h".
(legacy_virtual_frame_pointer): Define.
* Makefile.in (arch-utils.o): Depends on gdb_assert.h.

* tracepoint.c (encode_actions): Make frame_reg an int.  Make
frame_offset a LONGEST.
* ax-gdb.c (gen_frame_args_address): Ditto.
(gen_frame_locals_address): Ditto.
* mn10300-tdep.c (mn10300_gdbarch_init): Initialize
virtual_frame_pointer.
(mn10300_virtual_frame_pointer): Make static.  Update parameter
list to match function signature.
* config/mn10300/tm-mn10300.h (TARGET_VIRTUAL_FRAME_POINTER): Delete.

12 files changed:
gdb/ChangeLog
gdb/Makefile.in
gdb/arch-utils.c
gdb/arch-utils.h
gdb/ax-gdb.c
gdb/config/mn10300/tm-mn10300.h
gdb/gdbarch.c
gdb/gdbarch.h
gdb/gdbarch.sh
gdb/mn10300-tdep.c
gdb/target.h
gdb/tracepoint.c

index b6775a4bb83c2255bb5ba892e375a64225c03ee9..976e927aa07f33c53e64e556e3186b0f9598d9d3 100644 (file)
@@ -1,3 +1,24 @@
+2001-08-07  Andrew Cagney  <ac131313@redhat.com>
+
+       * target.h (TARGET_VIRTUAL_FRAME_POINTER): Delete, multi-arched.
+       * gdbarch.sh (TARGET_VIRTUAL_FRAME_POINTER): Add.
+       * gdbarch.h, gdbarch.c: Regenerate.
+
+       * arch-utils.h (legacy_virtual_frame_pointer): Declare.
+       * arch-utils.c: Include "gdb_assert.h".
+       (legacy_virtual_frame_pointer): Define.
+       * Makefile.in (arch-utils.o): Depends on gdb_assert.h.
+
+       * tracepoint.c (encode_actions): Make frame_reg an int.  Make
+       frame_offset a LONGEST.
+       * ax-gdb.c (gen_frame_args_address): Ditto.
+       (gen_frame_locals_address): Ditto.
+       * mn10300-tdep.c (mn10300_gdbarch_init): Initialize
+       virtual_frame_pointer.
+       (mn10300_virtual_frame_pointer): Make static.  Update parameter
+       list to match function signature.
+       * config/mn10300/tm-mn10300.h (TARGET_VIRTUAL_FRAME_POINTER): Delete.
+
 2001-08-10  Keith Seitz  <keiths@redhat.com>
 
        * gdb-events.sh: Add architecture_changed event.
index 14544eda2d4e2a807e4d28a2c36fdf0379c6dec7..7234e360e6a1b7e0539e24ed200cd17a03eff3ed 100644 (file)
@@ -1487,7 +1487,7 @@ tracepoint.o: tracepoint.c $(defs_h) $(symtab_h) $(frame_h) $(tracepoint_h) \
 gdbarch.o: gdbarch.c $(defs_h) $(bfd_h) $(gdbcmd_h)
 
 arch-utils.o: arch-utils.c $(defs_h) $(bfd_h) $(gdbcmd_h) \
-       $(arch_utils_h)
+       $(arch_utils_h) gdb_assert.h
 
 gdbtypes.o: gdbtypes.c $(bfd_h) complaints.h $(defs_h) $(expression_h) \
        $(gdbtypes_h) language.h objfiles.h $(symfile_h) $(symtab_h) $(target_h) \
index 3da3c2713a6ce34dcaeff179d371733f7a58feba..93da7c86ca940efaf69833efd9a18bab024e5b7f 100644 (file)
@@ -38,6 +38,7 @@
 #include "annotate.h"
 #endif
 #include "regcache.h"
+#include "gdb_assert.h"
 
 #include "version.h"
 
@@ -322,6 +323,19 @@ cannot_register_not (int regnum)
 {
   return 0;
 }
+
+/* Legacy version of target_virtual_frame_pointer().  Assumes that
+   there is an FP_REGNUM and that it is the same, cooked or raw.  */
+
+void
+legacy_virtual_frame_pointer (CORE_ADDR pc,
+                             int *frame_regnum,
+                             LONGEST *frame_offset)
+{
+  gdb_assert (FP_REGNUM >= 0);
+  *frame_regnum = FP_REGNUM;
+  *frame_offset = 0;
+}
 \f
 /* Functions to manipulate the endianness of the target.  */
 
index 071b5305ef88b0f316b8e0b99b4204d82cc4f3a4..3a986afa7e8c44da3c82bc79dccc4a44b1480465 100644 (file)
@@ -122,4 +122,9 @@ void init_frame_pc_default (int fromleaf, struct frame_info *prev);
 
 int cannot_register_not (int regnum);
 
+/* Legacy version of target_virtual_frame_pointer().  Assumes that
+   there is an FP_REGNUM and that it is the same, cooked or raw.  */
+
+extern gdbarch_virtual_frame_pointer_ftype legacy_virtual_frame_pointer;
+
 #endif
index 3fe66772ae920bd099673d6bb18e7941387fa01c..75424546a7b1de478383689a314dda0c7a2f0a35 100644 (file)
@@ -454,7 +454,8 @@ gen_left_shift (struct agent_expr *ax, int distance)
 static void
 gen_frame_args_address (struct agent_expr *ax)
 {
-  long frame_reg, frame_offset;
+  int frame_reg;
+  LONGEST frame_offset;
 
   TARGET_VIRTUAL_FRAME_POINTER (ax->scope, &frame_reg, &frame_offset);
   ax_reg (ax, frame_reg);
@@ -467,7 +468,8 @@ gen_frame_args_address (struct agent_expr *ax)
 static void
 gen_frame_locals_address (struct agent_expr *ax)
 {
-  long frame_reg, frame_offset;
+  int frame_reg;
+  LONGEST frame_offset;
 
   TARGET_VIRTUAL_FRAME_POINTER (ax->scope, &frame_reg, &frame_offset);
   ax_reg (ax, frame_reg);
index 5178015eeb827fe27e57e8f39b27a8acdbecb93f..7931d6d01a0b78be836ae2d99cbf1743a29ad80c 100644 (file)
@@ -73,8 +73,3 @@ enum movm_register_bits {
 };
 
 #define INIT_FRAME_PC          /* Not necessary */
-
-/* Cons up virtual frame pointer for trace */
-extern void mn10300_virtual_frame_pointer (CORE_ADDR, long *, long *);
-#define TARGET_VIRTUAL_FRAME_POINTER(PC, REGP, OFFP) \
-       mn10300_virtual_frame_pointer ((PC), (REGP), (OFFP))
index be5cccf9e2906669d1a34424e6a7f6c8773b6930..21645d9c866a708956de986b228c79c21144bbfd 100644 (file)
@@ -150,6 +150,7 @@ struct gdbarch
   gdbarch_write_fp_ftype *write_fp;
   gdbarch_read_sp_ftype *read_sp;
   gdbarch_write_sp_ftype *write_sp;
+  gdbarch_virtual_frame_pointer_ftype *virtual_frame_pointer;
   gdbarch_register_read_ftype *register_read;
   gdbarch_register_write_ftype *register_write;
   int num_regs;
@@ -331,6 +332,7 @@ struct gdbarch startup_gdbarch =
   0,
   0,
   0,
+  0,
   generic_get_saved_register,
   0,
   0,
@@ -429,6 +431,7 @@ gdbarch_alloc (const struct gdbarch_info *info,
   gdbarch->write_fp = generic_target_write_fp;
   gdbarch->read_sp = generic_target_read_sp;
   gdbarch->write_sp = generic_target_write_sp;
+  gdbarch->virtual_frame_pointer = legacy_virtual_frame_pointer;
   gdbarch->num_regs = -1;
   gdbarch->sp_regnum = -1;
   gdbarch->fp_regnum = -1;
@@ -534,6 +537,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
   /* Skip verify of write_fp, invalid_p == 0 */
   /* Skip verify of read_sp, invalid_p == 0 */
   /* Skip verify of write_sp, invalid_p == 0 */
+  /* Skip verify of virtual_frame_pointer, invalid_p == 0 */
   /* Skip verify of register_read, has predicate */
   /* Skip verify of register_write, has predicate */
   if ((GDB_MULTI_ARCH >= 2)
@@ -894,6 +898,13 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
                       "TARGET_WRITE_SP(val)",
                       XSTRING (TARGET_WRITE_SP (val)));
 #endif
+#if defined (TARGET_VIRTUAL_FRAME_POINTER) && GDB_MULTI_ARCH
+  /* Macro might contain `[{}]' when not multi-arch */
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: %s # %s\n",
+                      "TARGET_VIRTUAL_FRAME_POINTER(pc, frame_regnum, frame_offset)",
+                      XSTRING (TARGET_VIRTUAL_FRAME_POINTER (pc, frame_regnum, frame_offset)));
+#endif
 #ifdef NUM_REGS
   fprintf_unfiltered (file,
                       "gdbarch_dump: NUM_REGS # %s\n",
@@ -1564,6 +1575,13 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
                         "gdbarch_dump: TARGET_WRITE_SP = 0x%08lx\n",
                         (long) current_gdbarch->write_sp
                         /*TARGET_WRITE_SP ()*/);
+#endif
+#ifdef TARGET_VIRTUAL_FRAME_POINTER
+  if (GDB_MULTI_ARCH)
+    fprintf_unfiltered (file,
+                        "gdbarch_dump: TARGET_VIRTUAL_FRAME_POINTER = 0x%08lx\n",
+                        (long) current_gdbarch->virtual_frame_pointer
+                        /*TARGET_VIRTUAL_FRAME_POINTER ()*/);
 #endif
   if (GDB_MULTI_ARCH)
     fprintf_unfiltered (file,
@@ -2497,6 +2515,24 @@ set_gdbarch_write_sp (struct gdbarch *gdbarch,
   gdbarch->write_sp = write_sp;
 }
 
+void
+gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset)
+{
+  if (gdbarch->virtual_frame_pointer == 0)
+    internal_error (__FILE__, __LINE__,
+                    "gdbarch: gdbarch_virtual_frame_pointer invalid");
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_virtual_frame_pointer called\n");
+  gdbarch->virtual_frame_pointer (pc, frame_regnum, frame_offset);
+}
+
+void
+set_gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch,
+                                   gdbarch_virtual_frame_pointer_ftype virtual_frame_pointer)
+{
+  gdbarch->virtual_frame_pointer = virtual_frame_pointer;
+}
+
 int
 gdbarch_register_read_p (struct gdbarch *gdbarch)
 {
index 287ec83e48e2cc6f540e96a35141abddb63d341f..69ad8e72460577ef2e19a8d2f3de91df472b5327 100644 (file)
@@ -400,6 +400,27 @@ extern void set_gdbarch_write_sp (struct gdbarch *gdbarch, gdbarch_write_sp_ftyp
 #endif
 #endif
 
+/* Function for getting target's idea of a frame pointer.  FIXME: GDB's
+   whole scheme for dealing with "frames" and "frame pointers" needs a
+   serious shakedown. */
+
+/* Default (function) for non- multi-arch platforms. */
+#if (!GDB_MULTI_ARCH) && !defined (TARGET_VIRTUAL_FRAME_POINTER)
+#define TARGET_VIRTUAL_FRAME_POINTER(pc, frame_regnum, frame_offset) (legacy_virtual_frame_pointer (pc, frame_regnum, frame_offset))
+#endif
+
+typedef void (gdbarch_virtual_frame_pointer_ftype) (CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset);
+extern void gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset);
+extern void set_gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, gdbarch_virtual_frame_pointer_ftype *virtual_frame_pointer);
+#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_VIRTUAL_FRAME_POINTER)
+#error "Non multi-arch definition of TARGET_VIRTUAL_FRAME_POINTER"
+#endif
+#if GDB_MULTI_ARCH
+#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_VIRTUAL_FRAME_POINTER)
+#define TARGET_VIRTUAL_FRAME_POINTER(pc, frame_regnum, frame_offset) (gdbarch_virtual_frame_pointer (current_gdbarch, pc, frame_regnum, frame_offset))
+#endif
+#endif
+
 extern int gdbarch_register_read_p (struct gdbarch *gdbarch);
 
 typedef void (gdbarch_register_read_ftype) (struct gdbarch *gdbarch, int regnum, char *buf);
index 3b0387efb130b008a2be6f4f6c83f5d0f06bd322..a8c908989d79fd14777b71089d08161594968da1 100755 (executable)
@@ -388,6 +388,10 @@ f::TARGET_READ_FP:CORE_ADDR:read_fp:void:::0:generic_target_read_fp::0
 f::TARGET_WRITE_FP:void:write_fp:CORE_ADDR val:val::0:generic_target_write_fp::0
 f::TARGET_READ_SP:CORE_ADDR:read_sp:void:::0:generic_target_read_sp::0
 f::TARGET_WRITE_SP:void:write_sp:CORE_ADDR val:val::0:generic_target_write_sp::0
+# Function for getting target's idea of a frame pointer.  FIXME: GDB's
+# whole scheme for dealing with "frames" and "frame pointers" needs a
+# serious shakedown.
+f::TARGET_VIRTUAL_FRAME_POINTER:void:virtual_frame_pointer:CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset:pc, frame_regnum, frame_offset::0:legacy_virtual_frame_pointer::0
 #
 M:::void:register_read:int regnum, char *buf:regnum, buf:
 M:::void:register_write:int regnum, char *buf:regnum, buf:
index dd7674edc8d5faf7848056ebb214a4ca90e51ec2..53f6ec9019e8369b5056fda1f7f714c53edaa952 100644 (file)
@@ -844,8 +844,10 @@ mn10300_frame_init_saved_regs (struct frame_info *frame)
    plus any necessary offset to be applied to the register before
    any frame pointer offsets.  */
 
-void
-mn10300_virtual_frame_pointer (CORE_ADDR pc, long *reg, long *offset)
+static void
+mn10300_virtual_frame_pointer (CORE_ADDR pc,
+                              int *reg,
+                              LONGEST *offset)
 {
   struct frame_info *dummy = analyze_dummy_frame (pc, 0);
   /* Set up a dummy frame_info, Analyze the prolog and fill in the
@@ -1073,6 +1075,7 @@ mn10300_gdbarch_init (struct gdbarch_info info,
   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, mn10300_dwarf2_reg_to_regnum);
   set_gdbarch_do_registers_info (gdbarch, mn10300_do_registers_info);
   set_gdbarch_fp_regnum (gdbarch, 31);
+  set_gdbarch_virtual_frame_pointer (gdbarch, mn10300_virtual_frame_pointer);
 
   /* Breakpoints.  */
   set_gdbarch_breakpoint_from_pc (gdbarch, mn10300_breakpoint_from_pc);
index 457308c3c60a54587f209651ed2eb11b217a56f5..7c97ba619d3465e2985e2f533a0b6c2f11ffd6ef 100644 (file)
@@ -1253,12 +1253,4 @@ extern void push_remote_target (char *name, int from_tty);
 /* Blank target vector entries are initialized to target_ignore. */
 void target_ignore (void);
 
-/* Macro for getting target's idea of a frame pointer.
-   FIXME: GDB's whole scheme for dealing with "frames" and
-   "frame pointers" needs a serious shakedown.  */
-#ifndef TARGET_VIRTUAL_FRAME_POINTER
-#define TARGET_VIRTUAL_FRAME_POINTER(ADDR, REGP, OFFP) \
-   do { *(REGP) = FP_REGNUM; *(OFFP) =  0; } while (0)
-#endif /* TARGET_VIRTUAL_FRAME_POINTER */
-
 #endif /* !defined (TARGET_H) */
index 692c9a20e9cb04e01144aa8432bb6a710a36ced9..6351377d26ef210013d1e928562d2957a63cc774 100644 (file)
@@ -1488,7 +1488,8 @@ encode_actions (struct tracepoint *t, char ***tdp_actions,
   struct collection_list *collect;
   struct cmd_list_element *cmd;
   struct agent_expr *aexpr;
-  long frame_reg, frame_offset;
+  int frame_reg;
+  LONGEST frame_offset;
 
 
   clear_collection_list (&tracepoint_list);