From: Jan Vrany <jan.vrany@labware.com>
To: tom@tromey.com, gdb-patches@sourceware.org
Cc: jan.vrany@labware.com
Subject: [PATCH v3] gdb/jit: add function symbols to global block
Date: Wed, 14 Jan 2026 10:44:37 +0000 [thread overview]
Message-ID: <20260114104437.136106-1-jan.vrany@labware.com> (raw)
In-Reply-To: <87a4yhjxgj.fsf@tromey.com>
This v3 just fixes formatting (no opening parenthesis at the end of the line).
-- >8 --
While playing with JIT reader I realized that it is not possible to set
a breakpoint on jitted function:
(gdb) b jit_function_stack_mangle
Function "jit_function_stack_mangle" not defined.
Make breakpoint pending on future shared library load? (y or [n])
The problem is that symbols for jitted functions (jit_function_stack_mangle
in the above example) are not added to jitted compunit's global block:
(gdb) maint print symtabs
...
Symtab for file at 0x55d6f8c186c0
Read from object file << JIT compiled code at 0x5555555592a0 >> (0x55d6f8cd4090)
Language: unknown
Line table:
line 1 at 0x7ffff7fbc000 (stmt)
line 0 at 0x7ffff7fbc001 (stmt)
Blockvector:
block #000, object at 0x55d6f8c188b0, 0 symbols in 0x7ffff7fbc000..0x7ffff7fbc011
block #001, object at 0x55d6f8c18910 under 0x55d6f8c188b0, 0 symbols in 0x7ffff7fbc000..0x7ffff7fbc011
block #002, object at 0x55d6f8c18730 under 0x55d6f8c18910, 0 symbols in 0x7ffff7fbc000..0x7ffff7fbc00a, function jit_function_stack_mangle
block #003, object at 0x55d6f8c187f0 under 0x55d6f8c18910, 0 symbols in 0x7ffff7fbc00a..0x7ffff7fbc011, function jit_function_add
This commit changes JIT reader to add jitted functions to the global
block:
...
Blockvector:
block #000, object at 0x55ed6665b180, 2 symbols in 0x7ffff7fbc000..0x7ffff7fbc011
void jit_function_stack_mangle(); block object 0x55ed6665b000, 0x7ffff7fbc000..0x7ffff7fbc00a
void jit_function_add(); block object 0x55ed6665b0c0, 0x7ffff7fbc00a..0x7ffff7fbc011
block #001, object at 0x55ed6665b230 under 0x55ed6665b180, 0 symbols in 0x7ffff7fbc000..0x7ffff7fbc011
block #002, object at 0x55ed6665b000 under 0x55ed6665b230, 0 symbols in 0x7ffff7fbc000..0x7ffff7fbc00a, function jit_function_stack_mangle
block #003, object at 0x55ed6665b0c0 under 0x55ed6665b230, 0 symbols in 0x7ffff7fbc00a..0x7ffff7fbc011, function jit_function_add
---
gdb/jit.c | 16 ++++++++++++----
gdb/testsuite/gdb.base/jit-reader.exp | 10 ++++++++++
2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/gdb/jit.c b/gdb/jit.c
index 489386393a1..4add2fa4861 100644
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -564,6 +564,7 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
object for each. Simultaneously, keep setting the real_block
fields. */
int block_idx = FIRST_LOCAL_BLOCK;
+ std::vector<symbol *> global_symbols;
for (gdb_block &gdb_block_iter : stab->blocks)
{
struct block *new_block = new (&objfile->objfile_obstack) block;
@@ -585,6 +586,7 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
block_name->m_name = obstack_strdup (&objfile->objfile_obstack,
gdb_block_iter.name.get ());
+ global_symbols.push_back (block_name);
new_block->set_function (block_name);
@@ -606,12 +608,18 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
struct block *new_block;
if (i == GLOBAL_BLOCK)
- new_block = new (&objfile->objfile_obstack) global_block;
+ {
+ new_block = new (&objfile->objfile_obstack) global_block;
+ new_block->set_multidict
+ (mdict_create_linear (&objfile->objfile_obstack, global_symbols));
+ }
else
- new_block = new (&objfile->objfile_obstack) block;
+ {
+ new_block = new (&objfile->objfile_obstack) block;
+ new_block->set_multidict
+ (mdict_create_linear (&objfile->objfile_obstack, {}));
+ }
- new_block->set_multidict
- (mdict_create_linear (&objfile->objfile_obstack, {}));
new_block->set_superblock (block_iter);
block_iter = new_block;
diff --git a/gdb/testsuite/gdb.base/jit-reader.exp b/gdb/testsuite/gdb.base/jit-reader.exp
index 549859627f1..8b3f50d15b7 100644
--- a/gdb/testsuite/gdb.base/jit-reader.exp
+++ b/gdb/testsuite/gdb.base/jit-reader.exp
@@ -244,6 +244,16 @@ proc jit_reader_test {} {
"<gdb.Objfile filename=<< JIT compiled code at $hex >>>" \
"python gdb.Progspace.objfile_for_address"
}
+
+ # Check that jitted symbol completion works
+ gdb_test "complete break jit_func" \
+ [multi_line "break jit_function_add" \
+ "break jit_function_stack_mangle" ] \
+
+ # Check that breakpoint can be set on jitted function
+ gdb_test "break jit_function_add" \
+ "Breakpoint 1 at 0x\[0-9a-f\]+"
+ gdb_test_no_output "del 1"
}
}
--
2.51.0
next prev parent reply other threads:[~2026-01-14 10:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-06 18:15 [PATCH v2] " Jan Vrany
2026-01-13 16:20 ` Tom Tromey
2026-01-13 21:42 ` Jan Vraný
2026-01-13 22:47 ` Tom Tromey
2026-01-14 10:44 ` Jan Vrany [this message]
2026-01-14 13:42 ` [PATCH v3] " Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260114104437.136106-1-jan.vrany@labware.com \
--to=jan.vrany@labware.com \
--cc=gdb-patches@sourceware.org \
--cc=tom@tromey.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox