aboutsummaryrefslogtreecommitdiff
path: root/gas/dwarf2dbg.h
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2021-09-17 09:08:15 +0930
committerAlan Modra <amodra@gmail.com>2021-09-18 08:20:11 +0930
commit51298b330327a568358da069d9808f51c6cb1672 (patch)
treeb908c032df61054658e5a47a4479346f0a0c159f /gas/dwarf2dbg.h
parent5cdb4f14426a99ec8fcba843fa503efdc55fa078 (diff)
downloadgdb-51298b330327a568358da069d9808f51c6cb1672.zip
gdb-51298b330327a568358da069d9808f51c6cb1672.tar.gz
gdb-51298b330327a568358da069d9808f51c6cb1672.tar.bz2
PR28149, debug info with wrong file association
gcc-11 and gcc-12 pass -gdwarf-5 to gas, in order to prime gas for DWARF 5 level debug info. Unfortunately it seems there are cases where the compiler does not emit a .file or .loc dwarf debug directive before any machine instructions. (Note that the .file directive typically emitted as the first line of assembly output doesn't count as a dwarf debug directive. The dwarf .file has a file number before the file name string.) This patch delays allocation of file numbers for gas generated line debug info until the end of assembly, thus avoiding any clashes with compiler generated file numbers. Two fixes for test case source are necessary; A .loc can't use a file number that hasn't already been specified with .file. A followup patch will remove all the gas generated line info on seeing a .file directive. PR 28149 * dwarf2dbg.c (num_of_auto_assigned): Delete. (current): Update initialisation. (set_or_check_view): Replace all accesses to view with u.view. (dwarf2_consume_line_info): Likewise. (dwarf2_directive_loc): Likewise. Assert that we aren't generating line info. (dwarf2_gen_line_info_1): Don't call set_or_check_view on gas generated line entries. (dwarf2_gen_line_info): Set and track filenames for gas generated line entries. Simplify generation of labels. (get_directory_table_entry): Use filename_cmp when comparing dirs. (do_allocate_filenum): New function. (dwarf2_where): Set u.filename and filenum to -1 for gas generated line entries. (dwarf2_directive_filename): Remove num_of_auto_assigned handling. (process_entries): Update view field access. Call do_allocate_filenum. * dwarf2dbg.h (struct dwarf2_line_info): Add filename field in union aliasing view. * testsuite/gas/i386/dwarf2-line-3.s: Add .file directive. * testsuite/gas/i386/dwarf2-line-4.s: Likewise. * testsuite/gas/i386/dwarf2-line-4.d: Update expected output. * testsuite/gas/i386/dwarf4-line-1.d: Likewise. * testsuite/gas/i386/dwarf5-line-1.d: Likewise. * testsuite/gas/i386/dwarf5-line-2.d: Likewise.
Diffstat (limited to 'gas/dwarf2dbg.h')
-rw-r--r--gas/dwarf2dbg.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/gas/dwarf2dbg.h b/gas/dwarf2dbg.h
index 14d770c..700d9de 100644
--- a/gas/dwarf2dbg.h
+++ b/gas/dwarf2dbg.h
@@ -36,7 +36,12 @@ struct dwarf2_line_info
unsigned int isa;
unsigned int flags;
unsigned int discriminator;
- symbolS *view;
+ /* filenum == -1u chooses filename, otherwise view. */
+ union
+ {
+ symbolS *view;
+ const char *filename;
+ } u;
};
/* Implements the .file FILENO "FILENAME" directive. FILENO can be 0