diff options
author | Stefan Schulze Frielinghaus <xxschulz@de.ibm.com> | 2008-10-29 19:33:45 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@gcc.gnu.org> | 2008-10-29 19:33:45 +0000 |
commit | 7310a2da1cb6abdaf82617b973855fa6131ae9dd (patch) | |
tree | 2c34acbf862418e277444a8ede49f1eee657fa78 /gcc/config/spu/spu.c | |
parent | cdd6a337c0e1c4a07a0a45686dcaa159e51f451c (diff) | |
download | gcc-7310a2da1cb6abdaf82617b973855fa6131ae9dd.zip gcc-7310a2da1cb6abdaf82617b973855fa6131ae9dd.tar.gz gcc-7310a2da1cb6abdaf82617b973855fa6131ae9dd.tar.bz2 |
configure.ac [spu-*-*]: Do not set skipdirs.
ChangeLog:
2008-10-29 Stefan Schulze Frielinghaus <xxschulz@de.ibm.com>
* configure.ac [spu-*-*]: Do not set skipdirs.
* configure: Re-generate.
gcc/ChangeLog:
2008-10-29 Stefan Schulze Frielinghaus <xxschulz@de.ibm.com>
* config/spu/spu.h (FRAME_GROWS_DOWNWARD): Define.
(INITIAL_FRAME_POINTER_OFFSET): Remove.
* config/spu/spu.c (spu_initial_elimination_offset): Calculate new
offset if eliminating soft frame pointer.
* config/spu/spu.md (stack_protect_set, stack_protect_test)
(stack_protect_test_si): Add initial machine description
for Stack Smashing Protector
From-SVN: r141437
Diffstat (limited to 'gcc/config/spu/spu.c')
-rw-r--r-- | gcc/config/spu/spu.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c index e3781d5..cd7f6ed 100644 --- a/gcc/config/spu/spu.c +++ b/gcc/config/spu/spu.c @@ -1759,8 +1759,8 @@ direct_return (void) The stack frame looks like this: +-------------+ | incoming | - AP | args | - +-------------+ + | args | + AP -> +-------------+ | $lr save | +-------------+ prev SP | back chain | @@ -1770,10 +1770,10 @@ direct_return (void) +-------------+ | ... | | saved regs | spu_saved_regs_size() bytes - +-------------+ + FP -> +-------------+ | ... | - FP | vars | get_frame_size() bytes - +-------------+ + | vars | get_frame_size() bytes + HFP -> +-------------+ | ... | | outgoing | | args | crtl->outgoing_args_size bytes @@ -1781,8 +1781,8 @@ direct_return (void) | $lr of next | | frame | +-------------+ - SP | back chain | - +-------------+ + | back chain | + SP -> +-------------+ */ void @@ -3671,15 +3671,16 @@ spu_initial_elimination_offset (int from, int to) || get_frame_size () || saved_regs_size) sp_offset = STACK_POINTER_OFFSET; if (from == FRAME_POINTER_REGNUM && to == STACK_POINTER_REGNUM) - return (sp_offset + crtl->outgoing_args_size); + return get_frame_size () + crtl->outgoing_args_size + sp_offset; else if (from == FRAME_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) - return 0; + return get_frame_size (); else if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM) return sp_offset + crtl->outgoing_args_size + get_frame_size () + saved_regs_size + STACK_POINTER_OFFSET; else if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) return get_frame_size () + saved_regs_size + sp_offset; - return 0; + else + gcc_unreachable (); } rtx |