diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-07-26 21:12:39 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-07-26 21:12:39 +0000 |
commit | 4d29a91aae48750c8fa96363ce1555b5ce678ca8 (patch) | |
tree | bd25d5376ab1105cc0cf4c82e057b9bf9b787ac2 /gcc/dwarf2out.c | |
parent | ca338b2737f3838ac04274cf9e71f53fdd54e0f4 (diff) | |
download | gcc-4d29a91aae48750c8fa96363ce1555b5ce678ca8.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@176811 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index d430753bfe5..8ea9f378786 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -20552,11 +20552,15 @@ output_macinfo_op (macinfo_entry *ref) size_t len; struct indirect_string_node *node; char label[MAX_ARTIFICIAL_LABEL_BYTES]; + struct dwarf_file_data *fd; switch (ref->code) { 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_uleb128 (ref->lineno, "Included from line number %lu", @@ -22637,6 +22641,16 @@ dwarf2out_finish (const char *filename) 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 even if there is no line information. Otherwise, on an empty translation unit, we will generate a present, but empty, @@ -22648,16 +22662,6 @@ dwarf2out_finish (const char *filename) if (! DWARF2_ASM_LINE_DEBUG_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 table too. */ if (debug_str_hash) |