Recognize -1 as a tombstone value in .debug_line

LLD from 11 onwards (https://reviews.llvm.org/D81784) uses -1 to
represent a relocation in .debug_line referencing a discarded symbol.
Recognize -1 to fix gdb.base/break-on-linker-gcd-function.exp when the
linker is a newer LLD.

gdb/ChangeLog:

	* dwarf2/read.c (lnp_state_machine::check_line_address): Test -1.
This commit is contained in:
Fangrui Song
2020-07-01 12:31:44 -07:00
parent 33d1369f18
commit a8caed5d7f
2 changed files with 11 additions and 6 deletions

View File

@ -1,3 +1,7 @@
2020-07-01 Fangrui Song <maskray@google.com>
* dwarf2/read.c (lnp_state_machine::check_line_address): Test -1.
2020-07-01 Alok Kumar Sharma <AlokKumar.Sharma@amd.com>
* dwarf2/read.c (set_die_type): Removed conditions to restrict

View File

@ -19983,7 +19983,7 @@ public:
we're processing the end of a sequence. */
void record_line (bool end_sequence);
/* Check ADDRESS is zero and less than UNRELOCATED_LOWPC and if true
/* Check ADDRESS is -1, or zero and less than UNRELOCATED_LOWPC, and if true
nop-out rest of the lines in this sequence. */
void check_line_address (struct dwarf2_cu *cu,
const gdb_byte *line_ptr,
@ -20377,12 +20377,13 @@ lnp_state_machine::check_line_address (struct dwarf2_cu *cu,
const gdb_byte *line_ptr,
CORE_ADDR unrelocated_lowpc, CORE_ADDR address)
{
/* If ADDRESS < UNRELOCATED_LOWPC then it's not a usable value, it's outside
the pc range of the CU. However, we restrict the test to only ADDRESS
values of zero to preserve GDB's previous behaviour which is to handle
the specific case of a function being GC'd by the linker. */
/* Linkers resolve a symbolic relocation referencing a GC'd function to 0 or
-1. If ADDRESS is 0, ignoring the opcode will err if the text section is
located at 0x0. In this case, additionally check that if
ADDRESS < UNRELOCATED_LOWPC. */
if (address == 0 && address < unrelocated_lowpc)
if ((address == 0 && address < unrelocated_lowpc)
|| address == (CORE_ADDR) -1)
{
/* This line table is for a function which has been
GCd by the linker. Ignore it. PR gdb/12528 */