From 46b68a3769fb5e5d0f18f7ef9211ce43274b08d2 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Tue, 2 Mar 1993 13:10:49 -0800 Subject: [PATCH] (expand_builtin, BUILT_IN_FRAME_ADDRESS case): Use new macros SETUP_FRAME_ADDRESSES and RETURN_ADDR_IN_PREVIOUS_FRAME. From-SVN: r3609 --- gcc/expr.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gcc/expr.c b/gcc/expr.c index 0f63276e85d..aa98632678d 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -6301,6 +6301,23 @@ expand_builtin (exp, target, subtarget, mode, ignore) rtx tem = frame_pointer_rtx; int i; + /* Some machines need special handling before we can access arbitrary + frames. For example, on the sparc, we must first flush all + register windows to the stack. */ +#ifdef SETUP_FRAME_ADDRESSES + SETUP_FRAME_ADDRESSES (); +#endif + + /* On the sparc, the return address is not in the frame, it is + in a register. There is no way to access it off of the current + frame pointer, but it can be accessed off the previous frame + pointer by reading the value from the register window save + area. */ +#ifdef RETURN_ADDR_IN_PREVIOUS_FRAME + if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_RETURN_ADDRESS) + count--; +#endif + /* Scan back COUNT frames to the specified frame. */ for (i = 0; i < count; i++) { -- 2.30.2