From 05f68f52ef0dc3cc52ee5886509a83f159224eb8 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Thu, 11 Feb 2021 21:03:03 +0100 Subject: [PATCH] [gdb/symtab] Handle DW_FORM_strx in form_requires_reprocessing When running test-case gdb.dwarf2/fission-mix.exp using gcc-11, I run into: ... (gdb) file fission-mix^M Reading symbols from fission-mix...^M src/gdb/dwarf2/attribute.h:258: internal-error: \ void attribute::set_unsigned_reprocess(ULONGEST): \ Assertion `form_requires_reprocessing ()' failed.^M ... This happens when calling set_unsigned_reprocess on an attribute with form DW_FORM_strx. The assert triggers because DW_FORM_strx is not listed in form_requires_reprocessing. Fix this by adding DW_FORM_strx in form_requires_reprocessing. Tested on x86_64-linux. gdb/ChangeLog: 2021-02-11 Tom de Vries PR symtab/27353 * dwarf2/attribute.c (attribute::form_requires_reprocessing): Return true for DW_FORM_strx. --- gdb/ChangeLog | 6 ++++++ gdb/dwarf2/attribute.c | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4d0033de625..ff44b8b6678 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2021-02-11 Tom de Vries + + PR symtab/27353 + * dwarf2/attribute.c (attribute::form_requires_reprocessing): + Return true for DW_FORM_strx. + 2021-02-11 Tom Tromey PR gdb/27383: diff --git a/gdb/dwarf2/attribute.c b/gdb/dwarf2/attribute.c index b4f188a096e..3205b0f7d29 100644 --- a/gdb/dwarf2/attribute.c +++ b/gdb/dwarf2/attribute.c @@ -192,7 +192,8 @@ attribute::form_is_unsigned () const bool attribute::form_requires_reprocessing () const { - return (form == DW_FORM_strx1 + return (form == DW_FORM_strx + || form == DW_FORM_strx1 || form == DW_FORM_strx2 || form == DW_FORM_strx3 || form == DW_FORM_strx4 -- 2.30.2