[gdb/symtab] Fix assert in read_addrmap_from_aranges
authorTom de Vries <tdevries@suse.de>
Sun, 7 Aug 2022 06:31:37 +0000 (08:31 +0200)
committerTom de Vries <tdevries@suse.de>
Sun, 7 Aug 2022 06:31:37 +0000 (08:31 +0200)
commitc7cd10637c40a72564bc813f3f16a4ba4b13d21b
treec610c3779745c2bd03cf2384eb2e8984c2a8ba34
parentf4cbdf0b6857069d42477e06f0077f4c03bb4c82
[gdb/symtab] Fix assert in read_addrmap_from_aranges

When loading the debug-names-duplicate-cu executable included in this
test-case, we run into:
...
(gdb) file debug-names-duplicate-cu^M
Reading symbols from debug-names-duplicate-cu...^M
src/gdb/dwarf2/read.c:2353: internal-error: read_addrmap_from_aranges: \
  Assertion `insertpair.second' failed.^M
...

This assert was added in recent commit 75337cbc147 ("[gdb/symtab] Fix
.debug_aranges duplicate offset warning").

The assert triggers because the CU table in the .debug_names section contains
a duplicate:
...
Version 5
Augmentation string: 47 44 42 00  ("GDB")
CU table:
[  0] 0x0
[  1] 0x0
...

Fix this by rejecting the .debug_names index:
...
(gdb) file debug-names-duplicate-cu^M
Reading symbols from debug-names-duplicate-cu...^M
warning: Section .debug_names has duplicate entry in CU table, \
  ignoring .debug_names.^M
...

Likewise for the case where the CU table is not sorted by increasing offset.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29436
gdb/dwarf2/read.c
gdb/testsuite/gdb.dwarf2/debug-names-duplicate-cu.exp [new file with mode: 0644]
gdb/testsuite/gdb.dwarf2/debug-names-non-ascending-cu.exp [new file with mode: 0644]