RE: [PATCH v5 08/15] gdb, ada: collect standard exceptions in all objfiles

Metzger, Markus T via Gdb-patches
2022-09-14T08:20:14Z

Hello Tom,

would you be able to review this patch?

thanks,
markus.

>-----Original Message-----
>From: Metzger, Markus T <markus.t.metzger@intel.com>
>Sent: Montag, 18. Juli 2022 07:36
>To: brobecker@adacore.com
>Cc: gdb-patches@sourceware.org; Kevin Buettner <kevinb@redhat.com>
>Subject: RE: [PATCH v5 08/15] gdb, ada: collect standard exceptions in all objfiles
>
>Hello Joel,
>
>Would you be able to review this Ada-related patch?
>
>thanks,
>markus.
>
>>-----Original Message-----
>>From: Metzger, Markus T <markus.t.metzger@intel.com>
>>Sent: Donnerstag, 2. Juni 2022 15:25
>>To: gdb-patches@sourceware.org
>>Subject: [PATCH v5 08/15] gdb, ada: collect standard exceptions in all objfiles
>>
>>When searching for standard exceptions for Ada, we lookup the minimal
>>symbol of each exception. With linker namespaces there can be multiple
>>instances in different namespaces. Collect them all.
>>---
>> gdb/ada-lang.c | 30 +++++++++++++++++++++++-------
>> 1 file changed, 23 insertions(+), 7 deletions(-)
>>
>>diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
>>index 6ab01fd27d4..2b251693b72 100644
>>--- a/gdb/ada-lang.c
>>+++ b/gdb/ada-lang.c
>>@@ -13016,15 +13016,29 @@ ada_add_standard_exceptions (compiled_regex
>>*preg,
>> {
>> if (preg == NULL || preg->exec (name, 0, NULL, 0) == 0)
>> {
>>- struct bound_minimal_symbol msymbol
>>- = ada_lookup_simple_minsym (name);
>>+ symbol_name_match_type match_type = name_match_type_from_name
>>(name);
>>+ lookup_name_info lookup_name (name, match_type);
>>
>>- if (msymbol.minsym != NULL)
>>- {
>>- struct ada_exc_info info
>>- = {name, msymbol.value_address ()};
>>+ symbol_name_matcher_ftype *match_name
>>+ = ada_get_symbol_name_matcher (lookup_name);
>>
>>- exceptions->push_back (info);
>>+ /* Iterate over all objfiles irrespective of scope or linker
>>+ namespaces so we get all exceptions anywhere in the
>>+ progspace. */
>>+ for (objfile *objfile : current_program_space->objfiles ())
>>+ {
>>+ for (minimal_symbol *msymbol : objfile->msymbols ())
>>+ {
>>+ if (match_name (msymbol->linkage_name (), lookup_name,
>>+ nullptr)
>>+ && msymbol->type () != mst_solib_trampoline)
>>+ {
>>+ ada_exc_info info
>>+ = {name, msymbol->value_address (objfile)};
>>+
>>+ exceptions->push_back (info);
>>+ }
>>+ }
>> }
>> }
>> }
>>@@ -13122,6 +13136,8 @@ ada_add_global_exceptions (compiled_regex *preg,
>> SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK,
>> VARIABLES_DOMAIN);
>>
>>+ /* Iterate over all objfiles irrespective of scope or linker namespaces
>>+ so we get all exceptions anywhere in the progspace. */
>> for (objfile *objfile : current_program_space->objfiles ())
>> {
>> for (compunit_symtab *s : objfile->compunits ())
>>--
>>2.35.3