aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2021-08-27 17:14:49 +0200
committerTom de Vries <tdevries@suse.de>2021-08-27 17:14:49 +0200
commit34daac4b169da3cb9df3e8bac6347cae630a99dd (patch)
treef3ce338b4bd3c8cf74e39c5376a0d20399a96ca8 /gdb/dwarf2
parent426f7bbfd4179a5b81f87fa324a854c370e4b07a (diff)
downloadgdb-34daac4b169da3cb9df3e8bac6347cae630a99dd.zip
gdb-34daac4b169da3cb9df3e8bac6347cae630a99dd.tar.gz
gdb-34daac4b169da3cb9df3e8bac6347cae630a99dd.tar.bz2
[gdb/symtab] Don't write .gdb_index symbol table with empty entries
When comparing the sizes of the index files generated for shlib outputs/gdb.dwarf2/dw2-zero-range/shr1.sl, I noticed a large difference between .debug_names: ... $ gdb -q -batch $shlib -ex "save gdb-index -dwarf-5 ." $ du -b -h shr1.sl.debug_names shr1.sl.debug_str 61 shr1.sl.debug_names 0 shr1.sl.debug_str ... and .gdb_index: ... $ gdb -q -batch $shlib -ex "save gdb-index ." $ du -b -h shr1.sl.gdb-index 8.2K shr1.sl.gdb-index ... The problem is that the .gdb_index contains a non-empty symbol table with only empty entries. Fix this by making the symbol table empty, such that we have instead: ... $ du -b -h shr1.sl.gdb-index 184 shr1.sl.gdb-index ... Tested on x86_64-linux.
Diffstat (limited to 'gdb/dwarf2')
-rw-r--r--gdb/dwarf2/index-write.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c
index 4e00c71..5de07a6 100644
--- a/gdb/dwarf2/index-write.c
+++ b/gdb/dwarf2/index-write.c
@@ -1385,6 +1385,9 @@ write_gdbindex (dwarf2_per_objfile *per_objfile, FILE *out_file,
uniquify_cu_indices (&symtab);
data_buf symtab_vec, constant_pool;
+ if (symtab.n_elements == 0)
+ symtab.data.resize (0);
+
write_hash_table (&symtab, symtab_vec, constant_pool);
write_gdbindex_1(out_file, objfile_cu_list, types_cu_list, addr_vec,