diff options
author | Mark Shinwell <shinwell@codesourcery.com> | 2006-06-12 12:56:52 +0000 |
---|---|---|
committer | Mark Shinwell <shinwell@gcc.gnu.org> | 2006-06-12 12:56:52 +0000 |
commit | dda69cbfb766b86ee8f9e04d0256f660ced51342 (patch) | |
tree | 0a00b7c5eddbe5d1b9ebfe19260878e50329d448 | |
parent | 0901c5a3d97937d6ef2f430baa98328b032e35c6 (diff) | |
download | gcc-dda69cbfb766b86ee8f9e04d0256f660ced51342.zip gcc-dda69cbfb766b86ee8f9e04d0256f660ced51342.tar.gz gcc-dda69cbfb766b86ee8f9e04d0256f660ced51342.tar.bz2 |
builtins.c (expand_builtin_return_addr): Only use frame_pointer_rtx when count == 0 and we are expanding...
gcc/
* builtins.c (expand_builtin_return_addr): Only use
frame_pointer_rtx when count == 0 and we are expanding
__builtin_return_address.
From-SVN: r114567
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/builtins.c | 14 |
2 files changed, 15 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 475c36f..4569635 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-06-12 Mark Shinwell <shinwell@codesourcery.com> + + * builtins.c (expand_builtin_return_addr): Only use + frame_pointer_rtx when count == 0 and we are expanding + __builtin_return_address. + 2006-06-12 Fred Fish <fnf@specifix.com> * config/mips/mips.c (mips_file_start): Create special section diff --git a/gcc/builtins.c b/gcc/builtins.c index 603106a..80f2fbb 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -509,12 +509,16 @@ expand_builtin_return_addr (enum built_in_function fndecl_code, int count) #else rtx tem; - /* For a zero count, we don't care what frame address we return, so frame - pointer elimination is OK, and using the soft frame pointer is OK. - For a nonzero count, we require a stable offset from the current frame - pointer to the previous one, so we must use the hard frame pointer, and + /* For a zero count with __builtin_return_address, we don't care what + frame address we return, because target-specific definitions will + override us. Therefore frame pointer elimination is OK, and using + the soft frame pointer is OK. + + For a non-zero count, or a zero count with __builtin_frame_address, + we require a stable offset from the current frame pointer to the + previous one, so we must use the hard frame pointer, and we must disable frame pointer elimination. */ - if (count == 0) + if (count == 0 && fndecl_code == BUILT_IN_RETURN_ADDRESS) tem = frame_pointer_rtx; else { |