summaryrefslogtreecommitdiff
path: root/gcc/dwarf2cfi.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2011-07-09 19:57:27 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2011-07-09 19:57:27 +0000
commita6b622eb03be06091ebe6995d778335dc84d8d2b (patch)
tree358bc24130084bd3459847b70ee6eecb6e8a8a5b /gcc/dwarf2cfi.c
parent06a49c5acaa2e0a62928d6406f7ad29cb1f653ca (diff)
downloadgcc-a6b622eb03be06091ebe6995d778335dc84d8d2b.tar.gz
PR debug/49686
* dwarf2cfi.c (dwarf2out_frame_debug): Don't set cfi_insn here... (create_cfi_notes): ... do it here instead. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@176091 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarf2cfi.c')
-rw-r--r--gcc/dwarf2cfi.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/gcc/dwarf2cfi.c b/gcc/dwarf2cfi.c
index 262506766e1..d96aa703878 100644
--- a/gcc/dwarf2cfi.c
+++ b/gcc/dwarf2cfi.c
@@ -2180,17 +2180,6 @@ dwarf2out_frame_debug (rtx insn, bool after_p)
bool handled_one = false;
bool need_flush = false;
- /* Remember where we are to insert notes. Do not separate tablejump
- insns from their ADDR_DIFF_VEC. Putting the note after the VEC
- should be ok. */
- if (after_p)
- {
- if (!tablejump_p (insn, NULL, &cfi_insn))
- cfi_insn = insn;
- }
- else
- cfi_insn = PREV_INSN (insn);
-
if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
dwarf2out_flush_queued_reg_saves ();
@@ -2201,7 +2190,6 @@ dwarf2out_frame_debug (rtx insn, bool after_p)
is still used to save registers. */
if (!ACCUMULATE_OUTGOING_ARGS)
dwarf2out_notice_stack_adjust (insn, after_p);
- cfi_insn = NULL;
return;
}
@@ -2323,7 +2311,6 @@ dwarf2out_frame_debug (rtx insn, bool after_p)
if (need_flush)
dwarf2out_flush_queued_reg_saves ();
- cfi_insn = NULL;
}
/* Examine CFI and return true if a cfi label and set_loc is needed
@@ -2432,6 +2419,8 @@ create_cfi_notes (void)
{
rtx pat;
+ cfi_insn = PREV_INSN (insn);
+
if (BARRIER_P (insn))
{
dwarf2out_frame_debug (insn, false);
@@ -2443,9 +2432,7 @@ create_cfi_notes (void)
switch (NOTE_KIND (insn))
{
case NOTE_INSN_PROLOGUE_END:
- cfi_insn = PREV_INSN (insn);
dwarf2out_flush_queued_reg_saves ();
- cfi_insn = NULL;
break;
case NOTE_INSN_EPILOGUE_BEG:
@@ -2457,7 +2444,6 @@ create_cfi_notes (void)
case NOTE_INSN_CFA_RESTORE_STATE:
cfi_insn = insn;
dwarf2out_frame_debug_restore_state ();
- cfi_insn = NULL;
break;
}
continue;
@@ -2484,8 +2470,15 @@ create_cfi_notes (void)
|| find_reg_note (insn, REG_CFA_FLUSH_QUEUE, NULL))
dwarf2out_frame_debug (insn, false);
+ /* Do not separate tablejump insns from their ADDR_DIFF_VEC.
+ Putting the note after the VEC should be ok. */
+ if (!tablejump_p (insn, NULL, &cfi_insn))
+ cfi_insn = insn;
+
dwarf2out_frame_debug (insn, true);
}
+
+ cfi_insn = NULL;
}
/* Determine if we need to save and restore CFI information around this