public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [dwarf2cfi] Fix debug/49686
@ 2011-07-09 20:14 Richard Henderson
  0 siblings, 0 replies; only message in thread
From: Richard Henderson @ 2011-07-09 20:14 UTC (permalink / raw)
  To: GCC Patches

[-- Attachment #1: Type: text/plain, Size: 103 bytes --]

We were dropping the CFI notes inside the sequence
instead of in front of it.

Tested with sh-sim.

r~

[-- Attachment #2: z --]
[-- Type: text/plain, Size: 2435 bytes --]

	PR debug/49686
	* dwarf2cfi.c (dwarf2out_frame_debug): Don't set cfi_insn here...
	(create_cfi_notes): ... do it here instead.



diff --git a/gcc/dwarf2cfi.c b/gcc/dwarf2cfi.c
index 2625067..d96aa70 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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2011-07-09 20:00 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-07-09 20:14 [dwarf2cfi] Fix debug/49686 Richard Henderson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).