[gdb/breakpoint, PIE] Handle setting breakpoint on label without address
authorTom de Vries <tdevries@suse.de>
Thu, 3 Sep 2020 10:30:10 +0000 (12:30 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 3 Sep 2020 10:30:10 +0000 (12:30 +0200)
commit8f5c6526ebbd8b5749dd2f348796b53f3e2b25ee
treebc5dad38b60871dccc205aa07d9e929a73946c6d
parent9184ef8a92371746d0f36580adf2ad6845f1ced3
[gdb/breakpoint, PIE] Handle setting breakpoint on label without address

When adding:
...
if ![runto_main] then {
    fail "can't run to main"
    return 0
}
...
to test-case gdb.base/label-without-address.exp and running it with target
board unix/-fPIE/-pie, we run into:
...
(gdb) break main:L1^M
Breakpoint 2 at 0x555555554000: file label-without-address.c, line 22.^M
...
That is, for a label with optimized-out address, we set a breakpoint at the
relocation base.

The root cause is that the dwarf reader, despite finding that attribute
DW_AT_low_pc is missing, still tags the L1 symbol as having LOC_LABEL, which
means it has a valid address, which defaults to 0.

Fix this by instead tagging the L1 symbol with LOC_OPTIMIZED_OUT.

Tested on x86_64-linux.

gdb/ChangeLog:

2020-09-03  Tom de Vries  <tdevries@suse.de>

PR breakpoint/26546
* dwarf2/read.c (new_symbol): Tag label symbol without DW_AT_low_pc as
LOC_OPTIMIZED_OUT instead of LOC_LABEL.

gdb/testsuite/ChangeLog:

2020-09-03  Tom de Vries  <tdevries@suse.de>

PR breakpoint/26546
* gdb.base/label-without-address.exp: Runto main first.
gdb/ChangeLog
gdb/dwarf2/read.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/label-without-address.exp