dwarf2out.c (current_fde): New.
authorXuepeng Guo <xuepeng.guo@intel.com>
Tue, 27 May 2008 18:03:55 +0000 (18:03 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Tue, 27 May 2008 18:03:55 +0000 (11:03 -0700)
2008-05-27  Xuepeng Guo  <xuepeng.guo@intel.com>
    H.J. Lu  <hongjiu.lu@intel.com>

* dwarf2out.c (current_fde): New.
(add_cfi): Use it.
(lookup_cfa:): Likewise.
(dwarf2out_end_epilogue): Likewise.
(dwarf2out_note_section_used): Likewise.

Co-Authored-By: H.J. Lu <hongjiu.lu@intel.com>
From-SVN: r136043

gcc/ChangeLog
gcc/dwarf2out.c

index 60a0c8c2c9bd545e7f7dede1736a48a0639c4bc8..3b5fb98dc0192496d10e020a4a76bb25821644ee 100644 (file)
@@ -1,3 +1,12 @@
+2008-05-27  Xuepeng Guo  <xuepeng.guo@intel.com>
+           H.J. Lu  <hongjiu.lu@intel.com>
+
+       * dwarf2out.c (current_fde): New.
+       (add_cfi): Use it.
+       (lookup_cfa:): Likewise.
+       (dwarf2out_end_epilogue): Likewise.
+       (dwarf2out_note_section_used): Likewise.
+
 2008-05-27  Michael Matz  <matz@suse.de>
 
        PR c++/27975
index 145b8fefaef48196a5db7a8b16ed5556e932806c..76df897edf92aa544f3a6f520aeed6d873bf1746 100644 (file)
@@ -633,6 +633,14 @@ dwarf2out_cfi_label (void)
   return label;
 }
 
+/* Get the current fde_table entry we should use.  */
+
+static inline struct dw_fde_struct * 
+current_fde (void)
+{
+  return fde_table_in_use ? &fde_table[fde_table_in_use - 1] : NULL;
+}
+
 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
    or to the CIE if LABEL is NULL.  */
 
@@ -641,7 +649,9 @@ add_fde_cfi (const char *label, dw_cfi_ref cfi)
 {
   if (label)
     {
-      dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
+      dw_fde_ref fde = current_fde ();
+
+      gcc_assert (fde != NULL);
 
       if (*label == 0)
        label = dwarf2out_cfi_label ();
@@ -713,6 +723,7 @@ static void
 lookup_cfa (dw_cfa_location *loc)
 {
   dw_cfi_ref cfi;
+  dw_fde_ref fde;
 
   loc->reg = INVALID_REGNUM;
   loc->offset = 0;
@@ -722,12 +733,10 @@ lookup_cfa (dw_cfa_location *loc)
   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
     lookup_cfa_1 (cfi, loc);
 
-  if (fde_table_in_use)
-    {
-      dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
-      for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
-       lookup_cfa_1 (cfi, loc);
-    }
+  fde = current_fde ();
+  if (fde)
+    for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
+      lookup_cfa_1 (cfi, loc);
 }
 
 /* The current rule for calculating the DWARF2 canonical frame address.  */
@@ -2686,7 +2695,8 @@ dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
                               current_function_funcdef_no);
   ASM_OUTPUT_LABEL (asm_out_file, label);
-  fde = &fde_table[fde_table_in_use - 1];
+  fde = current_fde ();
+  gcc_assert (fde != NULL);
   fde->dw_fde_end = xstrdup (label);
 }
 
@@ -2739,11 +2749,10 @@ dwarf2out_note_section_used (void)
 void
 dwarf2out_switch_text_section (void)
 {
-  dw_fde_ref fde;
+  dw_fde_ref fde = current_fde ();
 
-  gcc_assert (cfun);
+  gcc_assert (cfun && fde);
 
-  fde = &fde_table[fde_table_in_use - 1];
   fde->dw_fde_switched_sections = true;
   fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
   fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
@@ -10985,7 +10994,8 @@ convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
   dw_cfa_location last_cfa, next_cfa;
   const char *start_label, *last_label, *section;
 
-  fde = &fde_table[fde_table_in_use - 1];
+  fde = current_fde ();
+  gcc_assert (fde != NULL);
 
   section = secname_for_decl (current_function_decl);
   list_tail = &list;