re PR target/32163 (Compiling with stack protector causes reigster spill failure)
PR target/32163 * config/sh/sh.md (symGOT_load): Don't schedule insns when the symbol is generated with the stack protector. From-SVN: r125292
This commit is contained in:
parent
2bccb817ce
commit
439211a08d
2 changed files with 20 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2007-06-03 Kaz Kojima <kkojima@gcc.gnu.org>
|
||||
|
||||
PR target/32163
|
||||
* config/sh/sh.md (symGOT_load): Don't schedule insns when
|
||||
the symbol is generated with the stack protector.
|
||||
|
||||
2007-06-03 Kazu Hirata <kazu@codesourcery.com>
|
||||
|
||||
* config/m68k/m68k.c (m68k_attribute_table): Add "interrupt".
|
||||
|
|
|
@ -8502,6 +8502,20 @@ label:
|
|||
operands[2],
|
||||
gen_rtx_REG (Pmode, PIC_REG)));
|
||||
|
||||
/* When stack protector inserts codes after the result is set to
|
||||
R0, @(rX, r12) will cause a spill failure for R0. Don't schedule
|
||||
insns to avoid combining (set A (plus rX r12)) and (set op0 (mem A))
|
||||
when rX is a GOT address for the guard symbol. Ugly but doesn't
|
||||
matter because this is a rare situation. */
|
||||
if (!TARGET_SHMEDIA
|
||||
&& flag_stack_protect
|
||||
&& GET_CODE (operands[1]) == CONST
|
||||
&& GET_CODE (XEXP (operands[1], 0)) == UNSPEC
|
||||
&& GET_CODE (XVECEXP (XEXP (operands[1], 0), 0, 0)) == SYMBOL_REF
|
||||
&& strcmp (XSTR (XVECEXP (XEXP (operands[1], 0), 0, 0), 0),
|
||||
\"__stack_chk_guard\") == 0)
|
||||
emit_insn (gen_blockage ());
|
||||
|
||||
/* N.B. This is not constant for a GOTPLT relocation. */
|
||||
mem = gen_rtx_MEM (Pmode, operands[3]);
|
||||
MEM_NOTRAP_P (mem) = 1;
|
||||
|
|
Loading…
Add table
Reference in a new issue