* arm-tdep.c (arm_frameless_function_invocation): Add some comments.
authorRichard Earnshaw <richard.earnshaw@arm.com>
Fri, 1 Feb 2002 13:39:43 +0000 (13:39 +0000)
committerRichard Earnshaw <richard.earnshaw@arm.com>
Fri, 1 Feb 2002 13:39:43 +0000 (13:39 +0000)
(arm_frame_args_address, arm_frame_locals_address): New functions.
(arm_frame_num_args): New function.
* config/tm-arm.h (FRAME_ARGS_ADDRESS): Call arm_frame_args_address.
(FRAME_LOCALS_ADDRESS): Call arm_frame_locals_address.
(FRMA_NUM_ARGS): Call arm_frame_num_args.

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

index 92de3bca0217da4fce2c0989de2c8d6776ca8b7a..6d6000cb04ea5bf8551996d3b515e5ab68f8a4d5 100644 (file)
@@ -1,3 +1,12 @@
+2002-02-01  Richard Earnshaw  <reanrsha@arm.com>
+
+       * arm-tdep.c (arm_frameless_function_invocation): Add some comments.
+       (arm_frame_args_address, arm_frame_locals_address): New functions.
+       (arm_frame_num_args): New function.
+       * config/tm-arm.h (FRAME_ARGS_ADDRESS): Call arm_frame_args_address.
+       (FRAME_LOCALS_ADDRESS): Call arm_frame_locals_address.
+       (FRMA_NUM_ARGS): Call arm_frame_num_args.
+
 2002-01-31  Michael Snyder  <msnyder@redhat.com>
 
        * breakpoint.c (break_at_finish_command): Export.
index 8fdb1e57e20b08c13bab1b3dcd7f3d505bb417e0..1539d0d17ec50fb3707d45f2fb6188982ef794e7 100644 (file)
@@ -297,12 +297,28 @@ arm_saved_pc_after_call (struct frame_info *frame)
   return ADDR_BITS_REMOVE (read_register (LR_REGNUM));
 }
 
+/* Determine whether the function invocation represented by FI has a
+   frame on the stack associated with it.  If it does return zero,
+   otherwise return 1.  */
+
 int
 arm_frameless_function_invocation (struct frame_info *fi)
 {
   CORE_ADDR func_start, after_prologue;
   int frameless;
 
+  /* Sometimes we have functions that do a little setup (like saving the
+     vN registers with the stmdb instruction, but DO NOT set up a frame.
+     The symbol table will report this as a prologue.  However, it is
+     important not to try to parse these partial frames as frames, or we
+     will get really confused.
+
+     So I will demand 3 instructions between the start & end of the
+     prologue before I call it a real prologue, i.e. at least
+       mov ip, sp,
+       stmdb sp!, {}
+       sub sp, ip, #4.  */
+
   func_start = (get_pc_function_start ((fi)->pc) + FUNCTION_START_OFFSET);
   after_prologue = SKIP_PROLOGUE (func_start);
 
@@ -314,6 +330,28 @@ arm_frameless_function_invocation (struct frame_info *fi)
   return frameless;
 }
 
+/* The address of the arguments in the frame.  */
+CORE_ADDR
+arm_frame_args_address (struct frame_info *fi)
+{
+  return fi->frame;
+}
+
+/* The address of the local variables in the frame.  */
+CORE_ADDR
+arm_frame_locals_address (struct frame_info *fi)
+{
+  return fi->frame;
+}
+
+/* The number of arguments being passed in the frame.  */
+int
+arm_frame_num_args (struct frame_info *fi)
+{
+  /* We have no way of knowing.  */
+  return -1;
+}
+
 /* A typical Thumb prologue looks like this:
    push    {r7, lr}
    add     sp, sp, #-28
index 941af9106e10a824517cf52da9313d9623677318..4a1648f5ccf55702bcb012b4de16e02b8674dff6 100644 (file)
@@ -330,48 +330,29 @@ CORE_ADDR arm_target_read_fp (void);
    However, if FRAME_CHAIN_VALID returns zero,
    it means the given frame is the outermost one and has no caller.  */
 
+CORE_ADDR arm_frame_chain (struct frame_info *);
 #define FRAME_CHAIN(thisframe) arm_frame_chain (thisframe)
-extern CORE_ADDR arm_frame_chain (struct frame_info *);
 
-extern int arm_frame_chain_valid (CORE_ADDR, struct frame_info *);
+int arm_frame_chain_valid (CORE_ADDR, struct frame_info *);
 #define FRAME_CHAIN_VALID(chain, thisframe) \
      arm_frame_chain_valid (chain, thisframe)
 
 /* Define other aspects of the stack frame.  */
 
-/* A macro that tells us whether the function invocation represented
-   by FI does not have a frame on the stack associated with it.  If it
-   does not, FRAMELESS is set to 1, else 0.
-
-   Sometimes we have functions that do a little setup (like saving the
-   vN registers with the stmdb instruction, but DO NOT set up a frame.
-   The symbol table will report this as a prologue.  However, it is
-   important not to try to parse these partial frames as frames, or we
-   will get really confused.
-
-   So I will demand 3 instructions between the start & end of the
-   prologue before I call it a real prologue, i.e. at least
-         mov ip, sp,
-        stmdb sp!, {}
-        sub sp, ip, #4. */
-
-extern int arm_frameless_function_invocation (struct frame_info *fi);
-#define FRAMELESS_FUNCTION_INVOCATION(FI) \
-(arm_frameless_function_invocation (FI))
+int arm_frameless_function_invocation (struct frame_info *fi);
+#define FRAMELESS_FUNCTION_INVOCATION(FI) arm_frameless_function_invocation(FI)
     
-/* Saved Pc.  */
+CORE_ADDR arm_frame_saved_pc (struct frame_info *);
+#define FRAME_SAVED_PC(FI)     arm_frame_saved_pc (FI)
 
-#define FRAME_SAVED_PC(FRAME)  arm_frame_saved_pc (FRAME)
-extern CORE_ADDR arm_frame_saved_pc (struct frame_info *);
+CORE_ADDR arm_frame_args_address(struct frame_info *);
+#define FRAME_ARGS_ADDRESS(FI) arm_frame_args_address(FI)
 
-#define FRAME_ARGS_ADDRESS(fi) (fi->frame)
+CORE_ADDR arm_frame_locals_address(struct frame_info *);
+#define FRAME_LOCALS_ADDRESS(FI) arm_frame_locals_address(FI)
 
-#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)
-
-/* Return number of args passed to a frame.
-   Can return -1, meaning no way to tell.  */
-
-#define FRAME_NUM_ARGS(fi) (-1)
+int arm_frame_num_args(struct frame_info *);
+#define FRAME_NUM_ARGS(FI) arm_frame_num_args(FI)
 
 /* Return number of bytes at start of arglist that are not really args. */
 
@@ -389,10 +370,9 @@ void arm_frame_init_saved_regs (struct frame_info *);
 
 /* Things needed for making the inferior call functions.  */
 
+CORE_ADDR arm_push_arguments (int, struct value **, CORE_ADDR, int, CORE_ADDR);
 #define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) \
-     sp = arm_push_arguments ((nargs), (args), (sp), (struct_return), (struct_addr))
-extern CORE_ADDR arm_push_arguments (int, struct value **, CORE_ADDR, int,
-                                    CORE_ADDR);
+     arm_push_arguments ((nargs), (args), (sp), (struct_return), (struct_addr))
 
 /* Push an empty stack frame, to record the current PC, etc.  */