aboutsummaryrefslogtreecommitdiff
path: root/gdb/psymtab.c
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2020-04-22 08:24:11 +0200
committerTom de Vries <tdevries@suse.de>2020-04-22 08:24:11 +0200
commiteea9e35758138f83e8c44e0e5a5e47e351f8f31a (patch)
tree4fbf30003271537af2dce86fcc8d45ece18bb945 /gdb/psymtab.c
parent3d5afab3393064e563305bc27264fde5a7598635 (diff)
downloadgdb-eea9e35758138f83e8c44e0e5a5e47e351f8f31a.zip
gdb-eea9e35758138f83e8c44e0e5a5e47e351f8f31a.tar.gz
gdb-eea9e35758138f83e8c44e0e5a5e47e351f8f31a.tar.bz2
[gdb/symtab] Find filename in shared psymtab
When running test-case gdb.ada/dgopt.exp with target board unix/-flto/-O0/-flto-partition=none/-ffat-lto-objects and gcc-8, gcc-9 or gcc-10, and the fix for PR25700, we run into this regression: ... (gdb) list x.adb:16, 16^M No source file named x.adb.^M (gdb) FAIL: gdb.ada/dgopt.exp: list x.adb:16, 16 ... The reason for the failure is that without the fix for PR25700, we have an unshared psymtab: ... { psymtab gdb.ada/dgopt/x.adb ((struct partial_symtab *) $hex)^M readin no^M fullname (null)^M text addresses 0x0 -- 0x0^M psymtabs_addrmap_supported yes^M globals (none)^M statics (none)^M dependencies (none)^M }^M ... and a shared psymtab (with user field set): ... { psymtab gdb.ada/dgopt/x.adb ((struct partial_symtab *) $hex)^M readin no^M fullname (null)^M text addresses 0x0 -- 0x0^M psymtabs_addrmap_supported yes^M globals (none)^M statics (none)^M user <artificial>@0x159a ((struct partial_symtab *) 0x37b57c0)^M dependencies (none)^M }^M ... The fix for PR25700 removes the unshared psymtab. Then when trying to find a psymtab matching x.adb in psym_map_symtabs_matching_filename, we run into this continue for the shared psymtab: ... for (partial_symtab *pst : require_partial_symbols (objfile, true)) { /* We can skip shared psymtabs here, because any file name will be attached to the unshared psymtab. */ if (pst->user != NULL) continue; ... and consequently cannot find the file. Fix this by not skipping the shared symtab in psym_map_symtabs_matching_filename. Build and reg-tested on x86_64-linux. gdb/ChangeLog: 2020-04-22 Tom de Vries <tdevries@suse.de> PR symtab/25801 * psymtab.c (psym_map_symtabs_matching_filename): Don't skip shared symtabs. gdb/testsuite/ChangeLog: 2020-04-22 Tom de Vries <tdevries@suse.de> PR symtab/25801 * gdb.dwarf2/imported-unit.exp: Test that we can get imported_unit.c in "info source" output.
Diffstat (limited to 'gdb/psymtab.c')
-rw-r--r--gdb/psymtab.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index b156aa0..376cbee 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -157,17 +157,15 @@ psym_map_symtabs_matching_filename
for (partial_symtab *pst : require_partial_symbols (objfile, true))
{
- /* We can skip shared psymtabs here, because any file name will be
- attached to the unshared psymtab. */
- if (pst->user != NULL)
- continue;
-
/* Anonymous psymtabs don't have a file name. */
if (pst->anonymous)
continue;
if (compare_filenames_for_search (pst->filename, name))
{
+ while (pst->user)
+ pst = pst->user;
+
if (partial_map_expand_apply (objfile, name, real_path,
pst, callback))
return true;