* vax-tdep.c (vax_frame_saved_pc): New function.
authorJason Thorpe <thorpej@netbsd.org>
Mon, 22 Apr 2002 20:38:41 +0000 (20:38 +0000)
committerJason Thorpe <thorpej@netbsd.org>
Mon, 22 Apr 2002 20:38:41 +0000 (20:38 +0000)
(vax_frame_args_address_correct): Ditto.
(vax_frame_args_address): Ditto.
(vax_frame_locals_address): Ditto.
(vax_frame_num_args): Move code to be in proximity to
other frame-related functions.
* config/vax/tm-vax.h (INNER_THAN): Use core_addr_lessthan.
(FRAME_SAVED_PC): Use vax_frame_saved_pc.
(FRAME_ARGS_ADDRESS_CORRECT): Use vax_frame_args_address_correct.
(FRAME_ARGS_ADDRESS): Use vax_frame_args_address.
(FRAME_LOCALS_ADDRESS): Use vax_frame_locals_address.

gdb/ChangeLog
gdb/config/vax/tm-vax.h
gdb/vax-tdep.c

index dae2a02b42c9f9d2770abcaf057d956e4dd7417e..6785efb57294dc27efdbc8c5e6670f0adf40e82e 100644 (file)
@@ -1,3 +1,17 @@
+2002-04-22  Jason Thorpe  <thorpej@wasabisystems.com>
+
+       * vax-tdep.c (vax_frame_saved_pc): New function.
+       (vax_frame_args_address_correct): Ditto.
+       (vax_frame_args_address): Ditto.
+       (vax_frame_locals_address): Ditto.
+       (vax_frame_num_args): Move code to be in proximity to
+       other frame-related functions.
+       * config/vax/tm-vax.h (INNER_THAN): Use core_addr_lessthan.
+       (FRAME_SAVED_PC): Use vax_frame_saved_pc.
+       (FRAME_ARGS_ADDRESS_CORRECT): Use vax_frame_args_address_correct.
+       (FRAME_ARGS_ADDRESS): Use vax_frame_args_address.
+       (FRAME_LOCALS_ADDRESS): Use vax_frame_locals_address.
+
 2002-04-22  H.J. Lu  (hjl@gnu.org)
 
        * Makefile.in (FLAGS_TO_PASS): Add libdir, mandir, datadir and
index 90819f4d00bae1b145dd93b3810cae76a7f962e1..e8bab7efd9245ad3a73468cc18e034f9fc1bf5e0 100644 (file)
@@ -51,7 +51,7 @@ extern CORE_ADDR vax_skip_prologue (CORE_ADDR);
 
 /* Stack grows downward.  */
 
-#define INNER_THAN(lhs,rhs) ((lhs) < (rhs))
+#define INNER_THAN(lhs,rhs) core_addr_lessthan ((lhs), (rhs))
 
 /* Sequence of bytes for breakpoint instruction.  */
 
@@ -173,37 +173,21 @@ extern struct type *vax_register_virtual_type (int);
 /* Saved Pc.  Get it from sigcontext if within sigtramp.  */
 
 /* Offset to saved PC in sigcontext, from <sys/signal.h>.  */
+/* XXXJRT should go away */
 #define SIGCONTEXT_PC_OFFSET 12
 
-#define FRAME_SAVED_PC(FRAME) \
-  (((FRAME)->signal_handler_caller \
-    ? sigtramp_saved_pc (FRAME) \
-    : read_memory_integer ((FRAME)->frame + 16, 4)) \
-   )
-
-/* Cannot find the AP register value directly from the FP value.  Must
-   find it saved in the frame called by this one, or in the AP
-   register for the innermost frame.  However, there is no way to tell
-   the difference between the innermost frame and a frame for which we
-   just don't know the frame that it called (e.g. "info frame
-   0x7ffec789").  For the sake of argument suppose that the stack is
-   somewhat trashed (which is one reason that "info frame" exists).
-   So return 0 (indicating we don't know the address of
-   the arglist) if we don't know what frame this frame calls.  */
-#define FRAME_ARGS_ADDRESS_CORRECT(fi) \
- (((fi)->next                                  \
-   ? read_memory_integer ((fi)->next->frame + 8, 4)   \
-   : /* read_register (AP_REGNUM) */ 0))
-
-/* In most of GDB, getting the args address is too important to
-   just say "I don't know".  This is sometimes wrong for functions
-   that aren't on top of the stack, but c'est la vie.  */
-#define FRAME_ARGS_ADDRESS(fi) \
- (((fi)->next                                  \
-   ? read_memory_integer ((fi)->next->frame + 8, 4)   \
-   : read_register (AP_REGNUM) /* 0 */))
-
-#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)
+#define FRAME_SAVED_PC(FRAME) vax_frame_saved_pc ((FRAME))
+extern CORE_ADDR vax_frame_saved_pc (struct frame_info *);
+
+/* XXXJRT not yet under gdbarch control */
+#define FRAME_ARGS_ADDRESS_CORRECT(fi) vax_frame_args_address ((fi))
+extern CORE_ADDR vax_frame_args_address (struct frame_info *);
+
+#define FRAME_ARGS_ADDRESS(fi) vax_frame_args_address ((fi))
+extern CORE_ADDR vax_frame_args_address (struct frame_info *);
+
+#define FRAME_LOCALS_ADDRESS(fi) vax_frame_locals_address ((fi))
+extern CORE_ADDR vax_frame_locals_address (struct frame_info *);
 
 /* Return number of args passed to a frame.
    Can return -1, meaning no way to tell.  */
index 15cff5506a5ef0c55beb84db19ac9623127922be..8e4c083c8b5736a70c09ed01b1fa5bac6e9cd7b4 100644 (file)
@@ -126,6 +126,57 @@ vax_frame_init_saved_regs (struct frame_info *frame)
   frame->saved_regs[AP_REGNUM] = frame->frame + 8;
   frame->saved_regs[PS_REGNUM] = frame->frame + 4;
 }
+
+CORE_ADDR
+vax_frame_saved_pc (struct frame_info *frame)
+{
+  if (frame->signal_handler_caller)
+    return (sigtramp_saved_pc (frame)); /* XXXJRT */
+
+  return (read_memory_integer (frame->frame + 16, 4));
+}
+
+CORE_ADDR
+vax_frame_args_address_correct (struct frame_info *frame)
+{
+  /* Cannot find the AP register value directly from the FP value.  Must
+     find it saved in the frame called by this one, or in the AP register
+     for the innermost frame.  However, there is no way to tell the
+     difference between the innermost frame and a frame for which we
+     just don't know the frame that it called (e.g. "info frame 0x7ffec789").
+     For the sake of argument, suppose that the stack is somewhat trashed
+     (which is one reason that "info frame" exists).  So, return 0 (indicating
+     we don't know the address of the arglist) if we don't know what frame
+     this frame calls.  */
+  if (frame->next)
+    return (read_memory_integer (frame->next->frame + 8, 4));
+
+  return (0);
+}
+
+CORE_ADDR
+vax_frame_args_address (struct frame_info *frame)
+{
+  /* In most of GDB, getting the args address is too important to
+     just say "I don't know".  This is sometimes wrong for functions
+     that aren't on top of the stack, but c'est la vie.  */
+  if (frame->next)
+    return (read_memory_integer (frame->next->frame + 8, 4));
+
+  return (read_register (AP_REGNUM));
+}
+
+CORE_ADDR
+vax_frame_locals_address (struct frame_info *frame)
+{
+  return (frame->frame);
+}
+
+int
+vax_frame_num_args (struct frame_info *fi)
+{
+  return (0xff & read_memory_integer (FRAME_ARGS_ADDRESS (fi), 1));
+}
 \f
 /* Advance PC across any function entry prologue instructions
    to reach some "real" code.  */
@@ -156,16 +207,6 @@ vax_skip_prologue (CORE_ADDR pc)
   return pc;
 }
 
-/* Return number of args passed to a frame.
-   Can return -1, meaning no way to tell.  */
-
-int
-vax_frame_num_args (struct frame_info *fi)
-{
-  return (0xff & read_memory_integer (FRAME_ARGS_ADDRESS (fi), 1));
-}
-
-
 
 /* Print the vax instruction at address MEMADDR in debugged memory,
    from disassembler info INFO.