Consider the executable generated for test-case gdb.dwarf2/imported-unit.exp. When loading the executable using various tracing: ... $ gdb \ outputs/gdb.dwarf2/imported-unit/imported-unit \ -batch \ -iex "set verbose on" \ -iex "set debug symtab-create 1" ... Created psymtab 0x213f380 for module <artificial>@0xc7. Created psymtab 0x20e7b00 for module imported_unit.c. Created psymtab 0x215da20 for module imported_unit.c. Created psymtab 0x2133630 for module elf-init.c. Created psymtab 0x215b910 for module ../sysdeps/x86_64/crtn.S. ... we notice that there are two psymtabs generated for imported_unit.c. This is due to the following: in dwarf2_build_psymtabs_hard we loop over CUs and generate partial symtabs for those, and if we encounter an import of another CU, we also generate a partial symtab for that one, unless already created. This works well with backward import references: - the imported CU is read - then the importing CU is read - the import is encountered, but the imported CU is already read, so we're done. But with forward import references, we have instead: - the importing CU is read - the import is encountered, and the imported CU is read - the imported CU is read once more Fix this by skipping already created psymtabs in the loop in dwarf2_build_psymtabs_hard. Tested on x86_64-linux, with native and target board unix/-flto/-O0/-flto-partition=none/-ffat-lto-objects. This causes this regression with the target board: ... FAIL: gdb.ada/dgopt.exp: list x.adb:16, 16 ... which I consider a seperate PR, filed as PR25801 - "Filename of shared psymtab is ignored". gdb/ChangeLog: 2020-04-22 Tom de Vries <tdevries@suse.de> PR symtab/25700 * dwarf2/read.c (dwarf2_build_psymtabs_hard): Don't create psymtab for CU if already created. gdb/testsuite/ChangeLog: 2020-04-22 Tom de Vries <tdevries@suse.de> PR symtab/25700 * gdb.dwarf2/imported-unit.exp: Verify that there's only one partial symtab for imported_unit.c. |
||
---|---|---|
bfd | ||
binutils | ||
config | ||
contrib | ||
cpu | ||
elfcpp | ||
etc | ||
gas | ||
gdb | ||
gdbserver | ||
gdbsupport | ||
gnulib | ||
gold | ||
gprof | ||
include | ||
intl | ||
ld | ||
libctf | ||
libdecnumber | ||
libiberty | ||
opcodes | ||
readline | ||
sim | ||
texinfo | ||
zlib | ||
.cvsignore | ||
.gitattributes | ||
.gitignore | ||
COPYING | ||
COPYING.LIB | ||
COPYING.LIBGLOSS | ||
COPYING.NEWLIB | ||
COPYING3 | ||
COPYING3.LIB | ||
ChangeLog | ||
MAINTAINERS | ||
Makefile.def | ||
Makefile.in | ||
Makefile.tpl | ||
README | ||
README-maintainer-mode | ||
ar-lib | ||
compile | ||
config-ml.in | ||
config.guess | ||
config.rpath | ||
config.sub | ||
configure | ||
configure.ac | ||
depcomp | ||
djunpack.bat | ||
install-sh | ||
libtool.m4 | ||
ltgcc.m4 | ||
ltmain.sh | ||
ltoptions.m4 | ||
ltsugar.m4 | ||
ltversion.m4 | ||
lt~obsolete.m4 | ||
makefile.vms | ||
missing | ||
mkdep | ||
mkinstalldirs | ||
move-if-change | ||
multilib.am | ||
setup.com | ||
src-release.sh | ||
symlink-tree | ||
test-driver | ||
ylwrap |
README
README for GNU development tools This directory contains various GNU compilers, assemblers, linkers, debuggers, etc., plus their support routines, definitions, and documentation. If you are receiving this as part of a GDB release, see the file gdb/README. If with a binutils release, see binutils/README; if with a libg++ release, see libg++/README, etc. That'll give you info about this package -- supported targets, how to use it, how to report bugs, etc. It is now possible to automatically configure and build a variety of tools with one command. To build all of the tools contained herein, run the ``configure'' script here, e.g.: ./configure make To install them (by default in /usr/local/bin, /usr/local/lib, etc), then do: make install (If the configure script can't determine your type of computer, give it the name as an argument, for instance ``./configure sun4''. You can use the script ``config.sub'' to test whether a name is recognized; if it is, config.sub translates it to a triplet specifying CPU, vendor, and OS.) If you have more than one compiler on your system, it is often best to explicitly set CC in the environment before running configure, and to also set CC when running make. For example (assuming sh/bash/ksh): CC=gcc ./configure make A similar example using csh: setenv CC gcc ./configure make Much of the code and documentation enclosed is copyright by the Free Software Foundation, Inc. See the file COPYING or COPYING.LIB in the various directories, for a description of the GNU General Public License terms under which you can copy the files. REPORTING BUGS: Again, see gdb/README, binutils/README, etc., for info on where and how to report problems.