]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
gdb: Update linkage name lookup function to allow mst_file_data/bss types.
authorIjaz, Abdul B <abdul.b.ijaz@intel.com>
Tue, 23 Jul 2024 15:59:29 +0000 (17:59 +0200)
committerAbdul Basit Ijaz <abdul.b.ijaz@intel.com>
Sun, 17 Nov 2024 01:02:11 +0000 (02:02 +0100)
commit9dc89f2b274b8bc8c1c5335580997b2a14865503
treed8bca478ce2bb3f03ad70c5a17b67403e2246881
parent231a8ab70fc5af0d7534a9eb36430220c4d65d5d
gdb: Update linkage name lookup function to allow mst_file_data/bss types.

From the commit 667ed4b14ddaa9af196481f1757c0e517e80b6ed onward, instead
of normal name GDB looks for the "jit_descriptor" linkage name in the JIT
code initialization.  Without this change, the function
"lookup_minimal_symbol_linkage", only matches the non-static data.  So in
case jit_debugger is static type then setting up breakpoint in the JIT code
fails.  Issue is seen for the intel compilers, where jit_debug_descriptor has
static type i.e. "mst_file_data".  Hence lookup_minimal_symbol_linkage returns
nullptr for it.  So, in this case breakpoint does not hit in the JIT code.
To resolve this, the commit introduces a new boolean argument to the
lookup_minimal_symbol_linkage function.  This argument allows the function to
also match mst_file_data and mst_file_bss types when set to true.  The
function is called with this new argument set to true only from JIT code
initialization handling, ensuring that the current behavior remains unchanged
for other cases.  Because handling of static types of data symbols for all cases
result in regression for "gdb.base/print-file-var.exp" test.

Example of minsym for the JIT code emitted by the intel compilers where
lookup_minimal_symbol_linkage fails without this change because jit_debugger
type is "mst_file_data".

(top-gdb) p *msymbol
$1 = {<general_symbol_info> =
{m_name = 0x7fffcc77dc95 "__jit_debug_descriptor",
m_value = {ivalue = 84325936, block = 0x506b630,
bytes = 0x506b630 <error: Cannot access memory at address 0x506b630>,
address = 0x506b630, unrel_addr = (unknown: 0x506b630),
common_block = 0x506b630, chain = 0x506b630},
language_specific = {obstack = 0x0, demangled_name = 0x0},
m_language = language_unknown, ada_mangled = 0, m_section = 29},
m_size = 24, filename = 0x55555a751b70 "JITLoaderGDB.cpp",
m_type = mst_file_data, created_by_gdb = 0,
m_target_flag_1 = 0, m_target_flag_2 = 0, m_has_size = 1,
name_set = 1, hash_next = 0x55555b86e4f0, demangled_hash_next = 0x0}

Updated the test "jit-elf-so.exp" to test the static type of jit_descriptor
object.

Approved-By: Tom Tromey <tom@tromey.com>
gdb/dwarf2/read.c
gdb/jit.c
gdb/minsyms.c
gdb/minsyms.h
gdb/testsuite/gdb.base/jit-elf-so.exp
gdb/testsuite/gdb.base/jit-protocol.h