From d3685ec080cc5bfb9646cdc1f5ddda0c3da92b76 Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Mon, 23 Dec 2024 00:33:30 +0800 Subject: gdb/jit: fix jit-reader linetable integrity The custom linetable functionality in GDB's JIT Interface has been broken since commit 1acc9dca423f78e44553928f0de839b618c13766. In that commit, linetables were made independent from the objfile, which requires objfile->section_offsets to be initialized. However, section_offsets were never initialized in objfiles generated by GDB's JIT Interface with custom jit-readers, leading to GDB crashes when stepping into JITed code blocks with the following command already executed: jit-reader-load libmygdbjitreader.so This patch fixes the issue by initializing the minimum section_offsets required for linetable parsing procedures. A minimal test is included. The test sets up some very simple line table information, which is enough to trigger the bug. However, the line table information is crafted such that none of the line table entries will end up being displayed in GDB's output when the test is run, as such, none of the expected output actually changes. It might be nice in the future to extend some of the jit tests to actually test hitting line table entries added via the jit reader. Approved-By: Tom Tromey --- gdb/jit.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'gdb/jit.c') diff --git a/gdb/jit.c b/gdb/jit.c index 39c17a5..9736f84 100644 --- a/gdb/jit.c +++ b/gdb/jit.c @@ -665,6 +665,8 @@ jit_object_close_impl (struct gdb_symbol_callbacks *cb, objfile *objfile = objfile::make (nullptr, current_program_space, objfile_name.c_str (), OBJF_NOT_FILENAME); + objfile->section_offsets.push_back (0); + objfile->sect_index_text = 0; objfile->per_bfd->gdbarch = priv_data->gdbarch; for (gdb_symtab &symtab : obj->symtabs) -- cgit v1.1