aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.fortran/mixed-lang-stack.cpp
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2020-03-17 08:56:36 +0100
committerTom de Vries <tdevries@suse.de>2020-03-17 08:56:36 +0100
commit589902954da0d1dd140b33e578954746c9bfc374 (patch)
tree02afbab5af498c6a4ca6d481a31a2d60e1fcb310 /gdb/testsuite/gdb.fortran/mixed-lang-stack.cpp
parent7325b16ba4dc33a54356fd2b8fde79311c51b121 (diff)
downloadbinutils-589902954da0d1dd140b33e578954746c9bfc374.zip
binutils-589902954da0d1dd140b33e578954746c9bfc374.tar.gz
binutils-589902954da0d1dd140b33e578954746c9bfc374.tar.bz2
[gdb] Skip imports of c++ CUs
The DWARF standard appendix E.1 describes techniques that can be used for compression and deduplication: DIEs can be factored out into a new compilation unit, and referenced using DW_FORM_ref_addr. Such a new compilation unit can either use a DW_TAG_compile_unit or DW_TAG_partial_unit. If a DW_TAG_compile_unit is used, its contents is evaluated by consumers as though it were an ordinary compilation unit. If a DW_TAG_partial_unit is used, it's only considered by consumers in the context of a DW_TAG_imported_unit. An example of when DW_TAG_partial_unit is required is when the factored out DIEs are not top-level, f.i. because they were children of a namespace. In such a case the corresponding DW_TAG_imported_unit will occur as child of the namespace. In the case of factoring out DIEs from c++ compilation units, we can factor out into a new DW_TAG_compile_unit, and no DW_TAG_imported_unit is required. This begs the question how to interpret a top-level DW_TAG_imported_unit of a c++ DW_TAG_compile_unit compilation unit. The semantics of DW_TAG_imported_unit describe that the imported unit logically appears at the point of the DW_TAG_imported_unit entry. But it's not clear what the effect should be in this case, since all the imported DIEs are already globally visible anyway, due to the use of DW_TAG_compile_unit. So, skip top-level imports of c++ DW_TAG_compile_unit compilation units in process_imported_unit_die. Using the cc1 binary from PR23710 comment 1 and setting a breakpoint on do_rpo_vn: ... $ gdb \ -batch \ -iex "maint set dwarf max-cache-age 316" \ -iex "set language c++" \ -ex "b do_rpo_vn" \ cc1 ... we get a 8.1% reduction in execution time, due to reducing the number of partial symtabs expanded into full symtabs from 212 to 175. Build and reg-tested on x86_64-linux. gdb/ChangeLog: 2020-03-17 Tom de Vries <tdevries@suse.de> PR gdb/23710 * dwarf2/read.h (struct dwarf2_per_cu_data): Add unit_type and lang fields. * dwarf2/read.c (process_psymtab_comp_unit): Initialize unit_type and lang fields. (process_imported_unit_die): Skip import of c++ CUs.
Diffstat (limited to 'gdb/testsuite/gdb.fortran/mixed-lang-stack.cpp')
0 files changed, 0 insertions, 0 deletions