From: Dmitry Neverov Date: Sat, 8 Jun 2024 08:41:31 +0000 (+0200) Subject: Recognize -2 as a tombstone value in .debug_line X-Git-Tag: gdb-16-branchpoint~1082 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e814012b2b108743e21b7ef2799310a0f4e0a86d;p=thirdparty%2Fbinutils-gdb.git Recognize -2 as a tombstone value in .debug_line Commit a8caed5d7faa639a1e6769eba551d15d8ddd9510 handled the tombstone value -1 used by lld (https://reviews.llvm.org/D81784). The referenced lld commit also uses the tombstone value -2 for pre-DWARF-v5 (https://github.com/llvm/llvm-project/commit/e618ccbf431f6730edb6d1467a127c3a52fd57f7). If not handled, -2 breaks the pc step range calculation and triggers the assertion: gdb/infrun.c:2794: internal-error: resume_1: Assertion `pc_in_thread_step_range (pc, tp)' failed. This commit adds -2 tombstone value and handles it in the same way as -1. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31727 Approved-By: Tom Tromey --- diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 5ab322e646a..e75bfb7ab04 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -17916,8 +17916,8 @@ public: we're processing the end of a sequence. */ void record_line (bool end_sequence); - /* Check ADDRESS is -1, or zero and less than UNRELOCATED_LOWPC, and if true - nop-out rest of the lines in this sequence. */ + /* Check ADDRESS is -1, -2, 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, unrelocated_addr unrelocated_lowpc, @@ -18327,13 +18327,16 @@ lnp_state_machine::check_line_address (struct dwarf2_cu *cu, unrelocated_addr unrelocated_lowpc, unrelocated_addr address) { - /* 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 + /* Linkers resolve a symbolic relocation referencing a GC'd function to 0, + -1 or -2 (-2 is used by certain lld versions, see + https://github.com/llvm/llvm-project/commit/e618ccbf431f6730edb6d1467a127c3a52fd57f7). + 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 == (unrelocated_addr) 0 && address < unrelocated_lowpc) - || address == (unrelocated_addr) -1) + || address == (unrelocated_addr) -1 + || address == (unrelocated_addr) -2) { /* This line table is for a function which has been GCd by the linker. Ignore it. PR gdb/12528 */