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
This commit is contained in:
parent
cdd6a337c0
commit
7310a2da1c
@ -1,3 +1,8 @@
|
||||
2008-10-29 Stefan Schulze Frielinghaus <xxschulz@de.ibm.com>
|
||||
|
||||
* configure.ac [spu-*-*]: Do not set skipdirs.
|
||||
* configure: Re-generate.
|
||||
|
||||
2008-10-29 Bernd Schmidt <bernd.schmidt@analog.com>
|
||||
|
||||
* MAINTAINERS (Various Maintainers): Add myself to reload.
|
||||
|
1
configure
vendored
1
configure
vendored
@ -2656,7 +2656,6 @@ case "${target}" in
|
||||
sparc-*-solaris* | sparc64-*-solaris* | sparcv9-*-solaris*)
|
||||
;;
|
||||
spu-*-*)
|
||||
skipdirs="target-libssp"
|
||||
;;
|
||||
v810-*-*)
|
||||
noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld target-libstdc++-v3 opcodes target-libgloss ${libgcj}"
|
||||
|
@ -892,7 +892,6 @@ case "${target}" in
|
||||
sparc-*-solaris* | sparc64-*-solaris* | sparcv9-*-solaris*)
|
||||
;;
|
||||
spu-*-*)
|
||||
skipdirs="target-libssp"
|
||||
;;
|
||||
v810-*-*)
|
||||
noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld target-libstdc++-v3 opcodes target-libgloss ${libgcj}"
|
||||
|
@ -1,3 +1,13 @@
|
||||
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
|
||||
|
||||
2008-10-29 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
|
||||
|
||||
PR 11492
|
||||
|
@ -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
|
||||
|
@ -251,6 +251,8 @@ targetm.resolve_overloaded_builtin = spu_resolve_overloaded_builtin; \
|
||||
|
||||
#define STACK_GROWS_DOWNWARD
|
||||
|
||||
#define FRAME_GROWS_DOWNWARD 1
|
||||
|
||||
#define STARTING_FRAME_OFFSET (0)
|
||||
|
||||
#define STACK_POINTER_OFFSET 32
|
||||
@ -312,8 +314,6 @@ targetm.resolve_overloaded_builtin = spu_resolve_overloaded_builtin; \
|
||||
|
||||
#define FRAME_POINTER_REQUIRED 0
|
||||
|
||||
#define INITIAL_FRAME_POINTER_OFFSET(DEPTH) ((DEPTH) = 0)
|
||||
|
||||
#define ELIMINABLE_REGS \
|
||||
{{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
|
||||
{ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
|
||||
|
@ -155,6 +155,8 @@
|
||||
(UNSPEC_DFTSV 51)
|
||||
(UNSPEC_FLOAT_EXTEND 52)
|
||||
(UNSPEC_FLOAT_TRUNCATE 53)
|
||||
(UNSPEC_SP_SET 54)
|
||||
(UNSPEC_SP_TEST 55)
|
||||
])
|
||||
|
||||
(include "predicates.md")
|
||||
@ -5188,4 +5190,51 @@ DONE;
|
||||
DONE;
|
||||
}")
|
||||
|
||||
(define_insn "stack_protect_set"
|
||||
[(set (match_operand:SI 0 "spu_mem_operand" "=m")
|
||||
(unspec:SI [(match_operand:SI 1 "spu_mem_operand" "m")] UNSPEC_SP_SET))
|
||||
(set (match_scratch:SI 2 "=&r") (const_int 0))]
|
||||
""
|
||||
"lq%p1\t%2,%1\;stq%p0\t%2,%0\;xor\t%2,%2,%2"
|
||||
[(set_attr "length" "12")
|
||||
(set_attr "type" "multi1")]
|
||||
)
|
||||
|
||||
(define_expand "stack_protect_test"
|
||||
[(match_operand 0 "spu_mem_operand" "")
|
||||
(match_operand 1 "spu_mem_operand" "")
|
||||
(match_operand 2 "" "")]
|
||||
""
|
||||
{
|
||||
rtx compare_result;
|
||||
rtx bcomp, loc_ref;
|
||||
|
||||
compare_result = gen_reg_rtx (SImode);
|
||||
|
||||
emit_insn (gen_stack_protect_test_si (compare_result,
|
||||
operands[0],
|
||||
operands[1]));
|
||||
|
||||
bcomp = gen_rtx_NE (SImode, compare_result, const0_rtx);
|
||||
|
||||
loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands[2]);
|
||||
|
||||
emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx,
|
||||
gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp,
|
||||
loc_ref, pc_rtx)));
|
||||
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_insn "stack_protect_test_si"
|
||||
[(set (match_operand:SI 0 "spu_reg_operand" "=&r")
|
||||
(unspec:SI [(match_operand:SI 1 "spu_mem_operand" "m")
|
||||
(match_operand:SI 2 "spu_mem_operand" "m")]
|
||||
UNSPEC_SP_TEST))
|
||||
(set (match_scratch:SI 3 "=&r") (const_int 0))]
|
||||
""
|
||||
"lq%p1\t%0,%1\;lq%p2\t%3,%2\;ceq\t%0,%0,%3\;xor\t%3,%3,%3"
|
||||
[(set_attr "length" "16")
|
||||
(set_attr "type" "multi1")]
|
||||
)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user