Re: [PATCH v5 15/15] gdb, solib-svr4: support namespaces in DSO iteration

Kevin Buettner via Gdb-patches
2022-06-25T00:43:03Z

On Thu, 2 Jun 2022 15:25:14 +0200
Markus Metzger via Gdb-patches <gdb-patches@sourceware.org> wrote:

> When looking up names, GDB needs to stay within one linker namespace to
> find the correct instance in case the same name is provided in more than
> one namespace.
>
> Modify svr4_iterate_over_objfiles_in_search_order() to stay within the
> namespace of the current_objfile argument. If no current_objfile is
> provided (i.e. it is nullptr), iterate over objfiles in the initial
> namespace.
>
> For objfiles that do not have a corresponding so_list to provide the
> namespace, assume that the objfile was loaded into the initial namespace.
> This would cover the main executable objfile (which is indeed loaded into
> the initial namespace) as well as manually added symbol files.
>
> Expected fails:
>
> - gdb.base/non-lazy-array-index.exp: the expression parser may lookup
> global symbols, which may result in xfers to read auxv for determining
> the debug base as part of svr4_iterate_over_objfiles_in_search_order().
>
> - gdb.server/non-lazy-array-index.exp: symbol lookup may access the
> target to read AUXV in order to determine the debug base for SVR4
> linker namespaces.
>
> Known issues:
>
> - get_symbol_address() and get_msymbol_address() search objfiles for a
> 'better' match. This was introduced by
>
> 4b610737f02 Handle copy relocations
>
> to handle copy relocations but it now causes a wrong address to be
> read after symbol lookup actually cound the correct symbol. This can
> be seen, for example, with gdb.base/dlmopen.exp when compiled with
> clang.
>
> - gnu ifuncs are only looked up in the initial namespace.
>
> - lookup_minimal_symbol() and lookup_minimal_symbol_text() directly
> iterate over objfiles and are not aware of linker namespaces.
> ---
> gdb/solib-svr4.c | 78 ++++++++++++++++++-
> gdb/testsuite/gdb.base/dlmopen-lib-dep.c | 21 +++++
> gdb/testsuite/gdb.base/dlmopen-lib.c | 5 +-
> gdb/testsuite/gdb.base/dlmopen.exp | 40 ++++++++--
> .../gdb.base/non-lazy-array-index.exp | 18 ++++-
> .../gdb.server/bkpt-other-inferior.exp | 13 +++-
> 6 files changed, 159 insertions(+), 16 deletions(-)
> create mode 100644 gdb/testsuite/gdb.base/dlmopen-lib-dep.c

Okay.

Kevin