Commit b56bc05b by Jakub Jelinek Committed by Jakub Jelinek

dwarf2out.c (output_macinfo_op): Ensure fd->filename points to GC allocated copy of the string.

	* dwarf2out.c (output_macinfo_op): Ensure fd->filename points
	to GC allocated copy of the string.
	(dwarf2out_finish): Emit .debug_macinfo or .debug_macro sections
	before .debug_line, not after it.

From-SVN: r176811
parent 625f85e9
2011-07-26 Jakub Jelinek <jakub@redhat.com>
* dwarf2out.c (output_macinfo_op): Ensure fd->filename points
to GC allocated copy of the string.
(dwarf2out_finish): Emit .debug_macinfo or .debug_macro sections
before .debug_line, not after it.
2011-07-26 Sebastian Pop <sebastian.pop@amd.com> 2011-07-26 Sebastian Pop <sebastian.pop@amd.com>
PR middle-end/47046 PR middle-end/47046
......
...@@ -20552,11 +20552,15 @@ output_macinfo_op (macinfo_entry *ref) ...@@ -20552,11 +20552,15 @@ output_macinfo_op (macinfo_entry *ref)
size_t len; size_t len;
struct indirect_string_node *node; struct indirect_string_node *node;
char label[MAX_ARTIFICIAL_LABEL_BYTES]; char label[MAX_ARTIFICIAL_LABEL_BYTES];
struct dwarf_file_data *fd;
switch (ref->code) switch (ref->code)
{ {
case DW_MACINFO_start_file: case DW_MACINFO_start_file:
file_num = maybe_emit_file (lookup_filename (ref->info)); fd = lookup_filename (ref->info);
if (fd->filename == ref->info)
fd->filename = ggc_strdup (fd->filename);
file_num = maybe_emit_file (fd);
dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file"); dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
dw2_asm_output_data_uleb128 (ref->lineno, dw2_asm_output_data_uleb128 (ref->lineno,
"Included from line number %lu", "Included from line number %lu",
...@@ -22637,6 +22641,16 @@ dwarf2out_finish (const char *filename) ...@@ -22637,6 +22641,16 @@ dwarf2out_finish (const char *filename)
output_ranges (); output_ranges ();
} }
/* Have to end the macro section. */
if (debug_info_level >= DINFO_LEVEL_VERBOSE)
{
switch_to_section (debug_macinfo_section);
ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
if (!VEC_empty (macinfo_entry, macinfo_table))
output_macinfo ();
dw2_asm_output_data (1, 0, "End compilation unit");
}
/* Output the source line correspondence table. We must do this /* Output the source line correspondence table. We must do this
even if there is no line information. Otherwise, on an empty even if there is no line information. Otherwise, on an empty
translation unit, we will generate a present, but empty, translation unit, we will generate a present, but empty,
...@@ -22648,16 +22662,6 @@ dwarf2out_finish (const char *filename) ...@@ -22648,16 +22662,6 @@ dwarf2out_finish (const char *filename)
if (! DWARF2_ASM_LINE_DEBUG_INFO) if (! DWARF2_ASM_LINE_DEBUG_INFO)
output_line_info (); output_line_info ();
/* Have to end the macro section. */
if (debug_info_level >= DINFO_LEVEL_VERBOSE)
{
switch_to_section (debug_macinfo_section);
ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
if (!VEC_empty (macinfo_entry, macinfo_table))
output_macinfo ();
dw2_asm_output_data (1, 0, "End compilation unit");
}
/* If we emitted any DW_FORM_strp form attribute, output the string /* If we emitted any DW_FORM_strp form attribute, output the string
table too. */ table too. */
if (debug_str_hash) if (debug_str_hash)
......
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