Commit 579f2946 by Trevor Saunders Committed by Trevor Saunders

always define INITIAL_FRAME_ADDRESS_RTX

gcc/ChangeLog:

2015-10-10  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* builtins.c (expand_builtin_return_addr): Adjust.
	* defaults.h (INITIAL_FRAME_ADDRESS_RTX): New default definition.

From-SVN: r228685
parent 9c02b29a
2015-10-10 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
* builtins.c (expand_builtin_return_addr): Adjust.
* defaults.h (INITIAL_FRAME_ADDRESS_RTX): New default definition.
2015-10-10 Jan Hubicka <hubicka@ucw.cz> 2015-10-10 Jan Hubicka <hubicka@ucw.cz>
* tree.c (type_with_interoperable_signedness): New. * tree.c (type_with_interoperable_signedness): New.
...@@ -761,31 +761,28 @@ static rtx ...@@ -761,31 +761,28 @@ static rtx
expand_builtin_return_addr (enum built_in_function fndecl_code, int count) expand_builtin_return_addr (enum built_in_function fndecl_code, int count)
{ {
int i; int i;
#ifdef INITIAL_FRAME_ADDRESS_RTX
rtx tem = INITIAL_FRAME_ADDRESS_RTX; rtx tem = INITIAL_FRAME_ADDRESS_RTX;
#else if (tem == NULL_RTX)
rtx tem; {
/* For a zero count with __builtin_return_address, we don't care what
/* For a zero count with __builtin_return_address, we don't care what frame address we return, because target-specific definitions will
frame address we return, because target-specific definitions will override us. Therefore frame pointer elimination is OK, and using
override us. Therefore frame pointer elimination is OK, and using the soft frame pointer is OK.
the soft frame pointer is OK.
For a nonzero count, or a zero count with __builtin_frame_address,
For a nonzero count, or a zero count with __builtin_frame_address, we require a stable offset from the current frame pointer to the
we require a stable offset from the current frame pointer to the previous one, so we must use the hard frame pointer, and
previous one, so we must use the hard frame pointer, and we must disable frame pointer elimination. */
we must disable frame pointer elimination. */ if (count == 0 && fndecl_code == BUILT_IN_RETURN_ADDRESS)
if (count == 0 && fndecl_code == BUILT_IN_RETURN_ADDRESS) tem = frame_pointer_rtx;
tem = frame_pointer_rtx; else
else {
{ tem = hard_frame_pointer_rtx;
tem = hard_frame_pointer_rtx;
/* Tell reload not to eliminate the frame pointer. */ /* Tell reload not to eliminate the frame pointer. */
crtl->accesses_prior_frames = 1; crtl->accesses_prior_frames = 1;
}
} }
#endif
/* Some machines need special handling before we can access /* Some machines need special handling before we can access
arbitrary frames. For example, on the SPARC, we must first flush arbitrary frames. For example, on the SPARC, we must first flush
......
...@@ -1277,6 +1277,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ...@@ -1277,6 +1277,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#define CONSTANT_ALIGNMENT(EXP, ALIGN) ALIGN #define CONSTANT_ALIGNMENT(EXP, ALIGN) ALIGN
#endif #endif
#ifndef INITIAL_FRAME_ADDRESS_RTX
#define INITIAL_FRAME_ADDRESS_RTX NULL
#endif
#ifdef GCC_INSN_FLAGS_H #ifdef GCC_INSN_FLAGS_H
/* Dependent default target macro definitions /* Dependent default target macro definitions
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment