re PR debug/46095 (ICE: in dwarf2out_frame_debug_expr, at dwarf2out.c:2341 with -fstack-protector)
PR debug/46095 * config/i386/i386.c (pro_epilogue_adjust_stack): Instead of marking r11 set RTX_FRAME_RELATED_P if offset is too large for style < 0, add REG_FRAME_RELATED_EXPR. * gcc.target/i386/pr46095.c: New test. From-SVN: r166767
This commit is contained in:
parent
61630b2768
commit
23d8fd35c4
4 changed files with 31 additions and 2 deletions
|
@ -1,5 +1,10 @@
|
|||
2010-11-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/46095
|
||||
* config/i386/i386.c (pro_epilogue_adjust_stack): Instead of
|
||||
marking r11 set RTX_FRAME_RELATED_P if offset is too large for
|
||||
style < 0, add REG_FRAME_RELATED_EXPR.
|
||||
|
||||
PR debug/46387
|
||||
* rtl.h (vt_equate_reg_base_value): New prototype.
|
||||
* alias.c (vt_equate_reg_base_value): New function.
|
||||
|
|
|
@ -9418,6 +9418,7 @@ pro_epilogue_adjust_stack (rtx dest, rtx src, rtx offset,
|
|||
{
|
||||
struct machine_function *m = cfun->machine;
|
||||
rtx insn;
|
||||
bool add_frame_related_expr = false;
|
||||
|
||||
if (! TARGET_64BIT)
|
||||
insn = gen_pro_epilogue_adjust_stack_si_add (dest, src, offset);
|
||||
|
@ -9438,7 +9439,7 @@ pro_epilogue_adjust_stack (rtx dest, rtx src, rtx offset,
|
|||
}
|
||||
insn = emit_insn (gen_rtx_SET (DImode, tmp, offset));
|
||||
if (style < 0)
|
||||
RTX_FRAME_RELATED_P (insn) = 1;
|
||||
add_frame_related_expr = true;
|
||||
|
||||
insn = gen_pro_epilogue_adjust_stack_di_add (dest, src, tmp);
|
||||
}
|
||||
|
@ -9461,7 +9462,15 @@ pro_epilogue_adjust_stack (rtx dest, rtx src, rtx offset,
|
|||
RTX_FRAME_RELATED_P (insn) = 1;
|
||||
}
|
||||
else if (style < 0)
|
||||
RTX_FRAME_RELATED_P (insn) = 1;
|
||||
{
|
||||
RTX_FRAME_RELATED_P (insn) = 1;
|
||||
if (add_frame_related_expr)
|
||||
{
|
||||
rtx r = gen_rtx_PLUS (Pmode, src, offset);
|
||||
r = gen_rtx_SET (VOIDmode, dest, r);
|
||||
add_reg_note (insn, REG_FRAME_RELATED_EXPR, r);
|
||||
}
|
||||
}
|
||||
|
||||
if (dest == stack_pointer_rtx)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2010-11-15 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/46095
|
||||
* gcc.target/i386/pr46095.c: New test.
|
||||
|
||||
PR debug/46387
|
||||
* gcc.dg/pr46387.c: New test.
|
||||
|
||||
|
|
12
gcc/testsuite/gcc.target/i386/pr46095.c
Normal file
12
gcc/testsuite/gcc.target/i386/pr46095.c
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* PR debug/46095 */
|
||||
/* { dg-do compile { target lp64 } } */
|
||||
/* { dg-options "-O -fschedule-insns2 -fno-omit-frame-pointer -fstack-protector" } */
|
||||
|
||||
extern void bar (char *);
|
||||
|
||||
void
|
||||
foo (void)
|
||||
{
|
||||
char c[0x80000000UL];
|
||||
bar (c);
|
||||
}
|
Loading…
Add table
Reference in a new issue