summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2011-04-01 17:35:13 +0000
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2011-04-01 17:35:13 +0000
commit0a9bd7c9a2b290041592a1b057a16f25d6c6519f (patch)
tree532d37509c7c76c048160bbd1881315d0f778614
parent2ee49f28c3be2b3826049e40af96b899fec44eca (diff)
downloadgcc-0a9bd7c9a2b290041592a1b057a16f25d6c6519f.tar.gz
* dwarf2out.h (dwarf2out_frame_debug_init): Declare.
* dwarf2out.c (dwarf2out_frame_debug_init): New function, broken out of ... (dwarf2out_frame_debug): ... here. Don't handle a NULL argument. * final.c (final_start_function): Call the new function rather than using a NULL argument for dwarf2out_frame_debug. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@171839 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/dwarf2out.c66
-rw-r--r--gcc/dwarf2out.h3
-rw-r--r--gcc/final.c2
4 files changed, 46 insertions, 34 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c720f82d558..e9fc81a7d0f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2011-04-01 Bernd Schmidt <bernds@codesourcery.com>
+
+ * dwarf2out.h (dwarf2out_frame_debug_init): Declare.
+ * dwarf2out.c (dwarf2out_frame_debug_init): New function, broken
+ out of ...
+ (dwarf2out_frame_debug): ... here. Don't handle a NULL argument.
+ * final.c (final_start_function): Call the new function rather
+ than using a NULL argument for dwarf2out_frame_debug.
+
2011-04-01 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
* config/spu/t-spu-elf (dp-bit.c): Use > instead of >>.
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 4b7afe49364..8371b5e4a9c 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -2788,38 +2788,6 @@ dwarf2out_frame_debug (rtx insn, bool after_p)
rtx note, n;
bool handled_one = false;
- if (insn == NULL_RTX)
- {
- size_t i;
-
- /* Flush any queued register saves. */
- dwarf2out_flush_queued_reg_saves ();
-
- /* Set up state for generating call frame debug info. */
- lookup_cfa (&cfa);
- gcc_assert (cfa.reg
- == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
-
- cfa.reg = STACK_POINTER_REGNUM;
- cfa_store = cfa;
- cfa_temp.reg = -1;
- cfa_temp.offset = 0;
-
- for (i = 0; i < num_regs_saved_in_regs; i++)
- {
- regs_saved_in_regs[i].orig_reg = NULL_RTX;
- regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
- }
- num_regs_saved_in_regs = 0;
-
- if (barrier_args_size)
- {
- XDELETEVEC (barrier_args_size);
- barrier_args_size = NULL;
- }
- return;
- }
-
if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
dwarf2out_flush_queued_reg_saves ();
@@ -2937,6 +2905,40 @@ dwarf2out_frame_debug (rtx insn, bool after_p)
dwarf2out_flush_queued_reg_saves ();
}
+/* Called once at the start of final to initialize some data for the
+ current function. */
+void
+dwarf2out_frame_debug_init (void)
+{
+ size_t i;
+
+ /* Flush any queued register saves. */
+ dwarf2out_flush_queued_reg_saves ();
+
+ /* Set up state for generating call frame debug info. */
+ lookup_cfa (&cfa);
+ gcc_assert (cfa.reg
+ == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
+
+ cfa.reg = STACK_POINTER_REGNUM;
+ cfa_store = cfa;
+ cfa_temp.reg = -1;
+ cfa_temp.offset = 0;
+
+ for (i = 0; i < num_regs_saved_in_regs; i++)
+ {
+ regs_saved_in_regs[i].orig_reg = NULL_RTX;
+ regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
+ }
+ num_regs_saved_in_regs = 0;
+
+ if (barrier_args_size)
+ {
+ XDELETEVEC (barrier_args_size);
+ barrier_args_size = NULL;
+ }
+}
+
/* Determine if we need to save and restore CFI information around this
epilogue. If SIBCALL is true, then this is a sibcall epilogue. If
we do need to save/restore, then emit the save now, and insert a
diff --git a/gcc/dwarf2out.h b/gcc/dwarf2out.h
index d5b958dd66c..7f5ac1351ae 100644
--- a/gcc/dwarf2out.h
+++ b/gcc/dwarf2out.h
@@ -1,5 +1,5 @@
/* dwarf2out.h - Various declarations for functions found in dwarf2out.c
- Copyright (C) 1998, 1999, 2000, 2003, 2007, 2010
+ Copyright (C) 1998, 1999, 2000, 2003, 2007, 2010, 2011
Free Software Foundation, Inc.
This file is part of GCC.
@@ -20,6 +20,7 @@ along with GCC; see the file COPYING3. If not see
extern void dwarf2out_decl (tree);
extern void dwarf2out_frame_debug (rtx, bool);
+extern void dwarf2out_frame_debug_init (void);
extern void dwarf2out_cfi_begin_epilogue (rtx);
extern void dwarf2out_frame_debug_restore_state (void);
extern void dwarf2out_flush_queued_reg_saves (void);
diff --git a/gcc/final.c b/gcc/final.c
index 8296169968a..cc7234c9b2d 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -1561,7 +1561,7 @@ final_start_function (rtx first ATTRIBUTE_UNUSED, FILE *file,
#if defined (HAVE_prologue)
if (dwarf2out_do_frame ())
- dwarf2out_frame_debug (NULL_RTX, false);
+ dwarf2out_frame_debug_init ();
#endif
/* If debugging, assign block numbers to all of the blocks in this