(FRAME_POINTER_REQUIRED): Require frame pointer if
authorDoug Evans <dje@gnu.org>
Wed, 19 Oct 1994 00:25:57 +0000 (00:25 +0000)
committerDoug Evans <dje@gnu.org>
Wed, 19 Oct 1994 00:25:57 +0000 (00:25 +0000)
non-leaf flat function.

From-SVN: r8309

gcc/config/sparc/sparc.h

index 03d9b5c039557ba197acd677b822d45d6a917ffc..b5f7d3499cc96f58a1457c57c5954257732bfe4f 100644 (file)
@@ -710,12 +710,14 @@ extern int sparc_mode_class[];
    Zero means the frame pointer need not be set up (and parms
    may be accessed via the stack pointer) in functions that seem suitable.
    This is computed in `reload', in reload1.c.
+   Used in flow.c, global.c, and reload1.c.
 
-   Used in flow.c, global.c, and reload1.c.  */
-extern int leaf_function;
-
+   Being a non-leaf function does not mean a frame pointer is needed in the
+   flat window model.  However, the debugger won't be able to backtrace through
+   us with out it.  */
 #define FRAME_POINTER_REQUIRED \
-  (TARGET_FRW ? (current_function_calls_alloca || current_function_varargs) \
+  (TARGET_FRW ? (current_function_calls_alloca || current_function_varargs \
+                || !leaf_function_p ()) \
    : ! (leaf_function_p () && only_leaf_regs_used ()))
 
 /* C statement to store the difference between the frame pointer
@@ -1515,6 +1517,7 @@ do {                                                                      \
    to do a "save" insn.  The decision about whether or not
    to do this is made in regclass.c.  */
 
+extern int leaf_function;
 #define FUNCTION_PROLOGUE(FILE, SIZE)                          \
   (TARGET_FRW ? sparc_flat_output_function_prologue (FILE, SIZE) \
    : output_function_prologue (FILE, SIZE, leaf_function))