diff options
author | Mark Wielaard <mark@klomp.org> | 2020-10-06 17:41:19 +0200 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2020-10-08 17:17:00 +0200 |
commit | 3a9e6ee42acf1e3d00e4391ab1b1a56bb0b32ad2 (patch) | |
tree | 991e9c0e4571b7cd7048c5ad6c19b378d6a876bf | |
parent | baf4750feaa6a5fa502ae7bc0b90f31640af6f47 (diff) | |
download | gcc-3a9e6ee42acf1e3d00e4391ab1b1a56bb0b32ad2.zip gcc-3a9e6ee42acf1e3d00e4391ab1b1a56bb0b32ad2.tar.gz gcc-3a9e6ee42acf1e3d00e4391ab1b1a56bb0b32ad2.tar.bz2 |
debug: Make sure to output .file 0 when generating DWARF5.
When gas outputs DWARF5 .debug_line[_str] then we have to tell it the
comp_dir and main file name for the zero entry line table. Otherwise
gas has to guess at the CU compilation directory and file.
Before a gcc -gdwarf-5 ../src/hello.c line table looked like:
Directory table:
0 ../src (24)
1 ../src (24)
2 /usr/include (31)
File name table:
0 hello.c (16), 0
1 hello.c (16), 1
2 stdio.h (44), 2
With this patch it looks like:
Directory table:
0 /tmp/obj (0)
1 ../src (24)
2 /usr/include (31)
File name table:
0 ../src/hello.c (9), 0
1 hello.c (16), 1
2 stdio.h (44), 2
gcc/ChangeLog:
* dwarf2out.c (dwarf2out_finish): Emit .file 0 entry when
generating DWARF5 .debug_line table through gas.
-rw-r--r-- | gcc/dwarf2out.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 3036744..ba93a6c 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -31768,6 +31768,27 @@ dwarf2out_finish (const char *filename) ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label); if (! output_asm_line_debug_info ()) output_line_info (false); + else if (asm_outputs_debug_line_str ()) + { + /* When gas outputs DWARF5 .debug_line[_str] then we have to + tell it the comp_dir and main file name for the zero entry + line table. */ + const char *comp_dir, *filename0; + + comp_dir = comp_dir_string (); + if (comp_dir == NULL) + comp_dir = ""; + + filename0 = get_AT_string (comp_unit_die (), DW_AT_name); + if (filename0 == NULL) + filename0 = ""; + + fprintf (asm_out_file, "\t.file 0 "); + output_quoted_string (asm_out_file, remap_debug_filename (comp_dir)); + fputc (' ', asm_out_file); + output_quoted_string (asm_out_file, remap_debug_filename (filename0)); + fputc ('\n', asm_out_file); + } if (dwarf_split_debug_info && info_section_emitted) { |