On 2023/03/07 20:04, Lianbo Jiang wrote:
This is a backported patch from gdb. Without the patch, the "dis
-rl"
command may abort due to an assertion failure in the gdb's
dw2_find_pc_sect_compunit_symtab():
crash> dis -rl ffffffff96ad716c
dwarf2/read.c:4928: internal-error: compunit_symtab*
dw2_find_pc_sect_compunit_symtab(objfile*, bound_minimal_symbol, CORE_ADDR, obj_section*,
int): Assertion `result != NULL' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) dwarf2/read.c:4928: internal-error:
compunit_symtab* dw2_find_pc_sect_compunit_symtab(objfile*, bound_minimal_symbol,
CORE_ADDR, obj_section*, int): Assertion `result != NULL' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Aborted (core dumped)
The gdb commit 834eaf9201c1 ("Fix crash in new DWARF indexer")
solved the current issue.
I think this partial backport will be fine.Few questions:
Doesn't this happen with "dis" or "dis -l" commands?
In other words, are the minimum options "dis -rl" above?
Is there no warning and problem in the result with the patch?
Thanks,
Kazu
>
> Reported-by: Buland Kumar Singh <bsingh(a)redhat.com>
> Signed-off-by: Lianbo Jiang <lijiang(a)redhat.com>
> ---
> gdb-10.2.patch | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/gdb-10.2.patch b/gdb-10.2.patch
> index aa34743501ad..d762680eb472 100644
> --- a/gdb-10.2.patch
> +++ b/gdb-10.2.patch
> @@ -12,7 +12,8 @@ tar xvzmf gdb-10.2.tar.gz \
> gdb-10.2/gdb/symtab.c \
> gdb-10.2/gdb/printcmd.c \
> gdb-10.2/gdb/symfile.c \
> - gdb-10.2/gdb/Makefile.in
> + gdb-10.2/gdb/Makefile.in \
> + gdb-10.2/gdb/dwarf2/read.c
>
> exit 0
>
> @@ -2078,3 +2079,16 @@ exit 0
>
> return new_type;
> }
> +--- gdb-10.2/gdb/dwarf2/read.c.orig
> ++++ gdb-10.2/gdb/dwarf2/read.c
> +@@ -4925,7 +4925,10 @@ dw2_find_pc_sect_compunit_symtab (struct objfile *objfile,
> + result = recursively_find_pc_sect_compunit_symtab
> + (dw2_instantiate_symtab (data, per_objfile, false), pc);
> +
> +- gdb_assert (result != NULL);
> ++ if (warn_if_readin && result == nullptr)
> ++ warning (_("(Error: pc %s in address map, but not in symtab.)"),
> ++ paddress (objfile->arch (), pc));
> ++
> + return result;
> + }