Don't add DW_AT_low_pc if the CU has no associated code.
authorMark Wielaard <mjw@redhat.com>
Fri, 1 Apr 2011 18:24:52 +0000 (18:24 +0000)
committerMark Wielaard <mark@gcc.gnu.org>
Fri, 1 Apr 2011 18:24:52 +0000 (18:24 +0000)
        * dwarf2out.c (dwarf2out_finish): Don't add low_pc and/or
        high_pc attribute if the CU has no associated code. Only output
        DW_AT_entry_pc for CU if not generating strict dwarf and
        dwarf_version < 4.

From-SVN: r171846

gcc/ChangeLog
gcc/dwarf2out.c

index 9ca1d953eafa178abc4478f05ca14a6bf0f00d37..bfaf388b089c3bc669a62a5e006269e1a1ec8705 100644 (file)
@@ -1,3 +1,10 @@
+2011-03-31  Mark Wielaard  <mjw@redhat.com>
+
+       * dwarf2out.c (dwarf2out_finish): Don't add low_pc and/or
+       high_pc attribute if the CU has no associated code. Only output
+       DW_AT_entry_pc for CU if not generating strict dwarf and
+       dwarf_version < 4.
+
 2011-04-01  Bernd Schmidt  <bernds@codesourcery.com>
 
        * dwarf2out.h (dwarf2out_frame_debug_init): Declare.
index 8371b5e4a9c87e09f67cb2b49214bbcba77f91ec..50d942974dd1b2bbfc75615225032f5f9a2a4a3e 100644 (file)
@@ -23588,23 +23588,18 @@ dwarf2out_finish (const char *filename)
   if (!have_multiple_function_sections 
       || (dwarf_version < 3 && dwarf_strict))
     {
-      add_AT_lbl_id (comp_unit_die (), DW_AT_low_pc, text_section_label);
-      add_AT_lbl_id (comp_unit_die (), DW_AT_high_pc, text_end_label);
+      /* Don't add if the CU has no associated code.  */
+      if (text_section_used)
+       {
+         add_AT_lbl_id (comp_unit_die (), DW_AT_low_pc, text_section_label);
+         add_AT_lbl_id (comp_unit_die (), DW_AT_high_pc, text_end_label);
+       }
     }
-
   else
     {
       unsigned fde_idx = 0;
       bool range_list_added = false;
 
-      /* We need to give .debug_loc and .debug_ranges an appropriate
-        "base address".  Use zero so that these addresses become
-        absolute.  Historically, we've emitted the unexpected
-        DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
-        Emit both to give time for other tools to adapt.  */
-      add_AT_addr (comp_unit_die (), DW_AT_low_pc, const0_rtx);
-      add_AT_addr (comp_unit_die (), DW_AT_entry_pc, const0_rtx);
-
       if (text_section_used)
        add_ranges_by_labels (comp_unit_die (), text_section_label,
                              text_end_label, &range_list_added);
@@ -23625,7 +23620,18 @@ dwarf2out_finish (const char *filename)
        }
 
       if (range_list_added)
-       add_ranges (NULL);
+       {
+         /* We need to give .debug_loc and .debug_ranges an appropriate
+            "base address".  Use zero so that these addresses become
+            absolute.  Historically, we've emitted the unexpected
+            DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
+            Emit both to give time for other tools to adapt.  */
+         add_AT_addr (comp_unit_die (), DW_AT_low_pc, const0_rtx);
+         if (! dwarf_strict && dwarf_version < 4)
+           add_AT_addr (comp_unit_die (), DW_AT_entry_pc, const0_rtx);
+
+         add_ranges (NULL);
+       }
     }
 
   if (debug_info_level >= DINFO_LEVEL_NORMAL)