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

Metzger, Markus T via Gdb-patches
2022-07-18T05:36:29Z

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