Commit bdb0b0f6 by Mark Wielaard Committed by Mark Wielaard

Don't add DW_AT_low_pc if the CU has no associated code.

        * 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
parent 9d701248
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> 2011-04-01 Bernd Schmidt <bernds@codesourcery.com>
* dwarf2out.h (dwarf2out_frame_debug_init): Declare. * dwarf2out.h (dwarf2out_frame_debug_init): Declare.
......
...@@ -23588,23 +23588,18 @@ dwarf2out_finish (const char *filename) ...@@ -23588,23 +23588,18 @@ dwarf2out_finish (const char *filename)
if (!have_multiple_function_sections if (!have_multiple_function_sections
|| (dwarf_version < 3 && dwarf_strict)) || (dwarf_version < 3 && dwarf_strict))
{ {
/* 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_low_pc, text_section_label);
add_AT_lbl_id (comp_unit_die (), DW_AT_high_pc, text_end_label); add_AT_lbl_id (comp_unit_die (), DW_AT_high_pc, text_end_label);
} }
}
else else
{ {
unsigned fde_idx = 0; unsigned fde_idx = 0;
bool range_list_added = false; 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) if (text_section_used)
add_ranges_by_labels (comp_unit_die (), text_section_label, add_ranges_by_labels (comp_unit_die (), text_section_label,
text_end_label, &range_list_added); text_end_label, &range_list_added);
...@@ -23625,8 +23620,19 @@ dwarf2out_finish (const char *filename) ...@@ -23625,8 +23620,19 @@ dwarf2out_finish (const char *filename)
} }
if (range_list_added) if (range_list_added)
{
/* 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); add_ranges (NULL);
} }
}
if (debug_info_level >= DINFO_LEVEL_NORMAL) if (debug_info_level >= DINFO_LEVEL_NORMAL)
add_AT_lineptr (comp_unit_die (), DW_AT_stmt_list, add_AT_lineptr (comp_unit_die (), DW_AT_stmt_list,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment