From: Jim Wilson Date: Tue, 2 Mar 1993 21:10:49 +0000 (-0800) Subject: (expand_builtin, BUILT_IN_FRAME_ADDRESS case): Use new X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=46b68a3769fb5e5d0f18f7ef9211ce43274b08d2;p=gcc.git (expand_builtin, BUILT_IN_FRAME_ADDRESS case): Use new macros SETUP_FRAME_ADDRESSES and RETURN_ADDR_IN_PREVIOUS_FRAME. From-SVN: r3609 --- 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++) {