public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Markus Metzger <markus.t.metzger@intel.com>
To: gdb-patches@sourceware.org
Subject: [PATCH v5 00/15] basic linker namespace support
Date: Thu,  2 Jun 2022 15:24:59 +0200	[thread overview]
Message-ID: <20220602132514.957983-1-markus.t.metzger@intel.com> (raw)

This series adds basic support for SVR4 linker namespaces.

It makes GDB read DSOs from all namespaces and makes breakpoints bind in
all namespaces.  Symbol lookup (from debug info) is restricted to the
namespace of the current location (expressed by the CURRENT_OBJFILE
argument to gdbarch_iterate_over_objfiles_in_search_order) and defaults to
the initial namespace.

There are known issues (see below) and there are stil many places in GDB
that iterate over objfiles and that are not aware of namespaces, including
minimal symbol lookup.

Since minimal symbol lookup is part of get_symbol_address (), we may
accidentally overwrite a symbol that was resolved to an objfile in the
correct namespace with one from a different namespace.  I believe that
get_symbol_address () should just return the address of that symbol, but
then we need to find another way of handling copy relocations (see below).

Namespaces are hidden in solib-svr4.c; the rest of GDB is not aware of
them.  Hence, they do not show up in 'info shared' or anywhere else on the
user interface.

Ben Woodard and Kevin Buettner requested namespaces to become part of the
user interface to allow setting namespace-specific breakpoints or simply
to show which libraries or breakpoint instances belong to which namespace.

Lacking access to the namespace id that dlinfo(3) would provide, we use
the address of the r_debug object as identifier and also pass it over RSP.
The respective interface was defined as 'lmid', however, to allow changing
it once we get access.

The bulk of this series is changing direct objfiles iterations to use
gdbarch_iterate_over_objfiles_in_search_order ().  There are three cases
that I did not handle and they are listed as known issues below.  The
rest, I either changed or convinced myself that it doesn't need changing.

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 found 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.


Regression-tested on x86-64 on a non-glibc-enabled system.  The dlmopen
part was tested (just gdb.base/dlmopen.exp) with an enabled glibc.

The initial work was done by H.J. Lu.

See also users/mmetzger/dlmopen.

Markus Metzger (15):
  gdb, testsuite: extend gdb_test_multiple checks
  gdb, solib-svr4: remove locate_base()
  gdb, gdbserver: support dlmopen()
  gdbserver: move main_lm handling into caller
  gdb, gdbserver: extend RSP to support namespaces
  gdb, compile: unlink objfile stored in module
  gdb, python: use gdbarch_iterate_over_objfiles_in_search_order
  gdb, ada: collect standard exceptions in all objfiles
  gdb, ada: update ada_lookup_simple_minsym
  gdb, ada: update ada_add_all_symbols
  gdb, cp: update add_symbol_overload_list_qualified
  gdb, hppa: remove unused hppa_lookup_stub_minimal_symbol
  gdb, symtab: inline find_quick_global_symbol_language
  gdb: update gnu ifunc resolve
  gdb, solib-svr4: support namespaces in DSO iteration

 gdb/ada-exp.y                                 |   9 +-
 gdb/ada-lang.c                                | 128 ++--
 gdb/ada-lang.h                                |   3 +-
 gdb/compile/compile-object-run.c              |  21 +-
 gdb/cp-support.c                              |  48 +-
 gdb/doc/gdb.texinfo                           |  16 +-
 gdb/elfread.c                                 | 153 ++---
 gdb/features/library-list-svr4.dtd            |   4 +
 gdb/hppa-tdep.c                               |  31 -
 gdb/hppa-tdep.h                               |   4 -
 gdb/linux-tdep.c                              |   2 +
 gdb/mips-fbsd-tdep.c                          |   2 +
 gdb/mips-netbsd-tdep.c                        |   2 +
 gdb/python/py-objfile.c                       | 116 ++--
 gdb/python/python.c                           |   7 +-
 gdb/python/python.h                           |   6 +
 gdb/solib-svr4.c                              | 553 +++++++++++++-----
 gdb/solib-svr4.h                              |   3 +
 gdb/symtab.c                                  |  43 +-
 gdb/testsuite/gdb.base/dlmopen-lib-dep.c      |  21 +
 gdb/testsuite/gdb.base/dlmopen-lib.c          |  28 +
 gdb/testsuite/gdb.base/dlmopen.c              |  65 ++
 gdb/testsuite/gdb.base/dlmopen.exp            | 174 ++++++
 .../gdb.base/non-lazy-array-index.exp         |  18 +-
 .../gdb.server/bkpt-other-inferior.exp        |  13 +-
 gdb/testsuite/lib/gdb.exp                     | 108 ++++
 gdbserver/linux-low.cc                        | 273 +++++----
 27 files changed, 1324 insertions(+), 527 deletions(-)
 create mode 100644 gdb/testsuite/gdb.base/dlmopen-lib-dep.c
 create mode 100644 gdb/testsuite/gdb.base/dlmopen-lib.c
 create mode 100644 gdb/testsuite/gdb.base/dlmopen.c
 create mode 100644 gdb/testsuite/gdb.base/dlmopen.exp

-- 
2.35.3

Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de>
Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva  
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928


             reply	other threads:[~2022-06-02 14:28 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-02 13:24 Markus Metzger [this message]
2022-06-02 13:25 ` [PATCH v5 01/15] gdb, testsuite: extend gdb_test_multiple checks Markus Metzger
2022-06-13  1:28   ` Kevin Buettner
2022-06-02 13:25 ` [PATCH v5 02/15] gdb, solib-svr4: remove locate_base() Markus Metzger
2022-06-02 23:04   ` Kevin Buettner
2022-06-02 13:25 ` [PATCH v5 03/15] gdb, gdbserver: support dlmopen() Markus Metzger
2022-06-19  4:02   ` Kevin Buettner
2022-06-27 12:55     ` Metzger, Markus T
2022-06-30 22:35       ` Kevin Buettner
2022-06-02 13:25 ` [PATCH v5 04/15] gdbserver: move main_lm handling into caller Markus Metzger
2022-06-19  4:22   ` Kevin Buettner
2022-06-02 13:25 ` [PATCH v5 05/15] gdb, gdbserver: extend RSP to support namespaces Markus Metzger
2022-06-02 16:09   ` Eli Zaretskii
2022-06-19  4:32   ` Kevin Buettner
2022-06-02 13:25 ` [PATCH v5 06/15] gdb, compile: unlink objfile stored in module Markus Metzger
2022-06-23 17:20   ` Kevin Buettner
2022-06-02 13:25 ` [PATCH v5 07/15] gdb, python: use gdbarch_iterate_over_objfiles_in_search_order Markus Metzger
2022-06-24 17:18   ` Kevin Buettner
2022-06-02 13:25 ` [PATCH v5 08/15] gdb, ada: collect standard exceptions in all objfiles Markus Metzger
2022-06-24 17:26   ` Kevin Buettner
2022-07-18 16:49     ` Tom Tromey
2022-07-18  5:35   ` Metzger, Markus T
2022-09-14  8:19     ` Metzger, Markus T
2022-09-14  8:37       ` Joel Brobecker
2022-09-14  8:45         ` Metzger, Markus T
2022-06-02 13:25 ` [PATCH v5 09/15] gdb, ada: update ada_lookup_simple_minsym Markus Metzger
2022-06-24 23:42   ` Kevin Buettner
2022-07-18 17:02   ` Tom Tromey
2022-07-19  7:14     ` Metzger, Markus T
2022-09-14  8:19       ` Metzger, Markus T
2022-09-21 16:11         ` Tom Tromey
2022-06-02 13:25 ` [PATCH v5 10/15] gdb, ada: update ada_add_all_symbols Markus Metzger
2022-06-24 23:53   ` Kevin Buettner
2022-07-18  5:36   ` Metzger, Markus T
2022-07-18 16:56   ` Tom Tromey
2022-07-19  7:13     ` Metzger, Markus T
2022-07-19 12:23       ` Tom Tromey
2022-07-19 13:49         ` Metzger, Markus T
2022-06-02 13:25 ` [PATCH v5 11/15] gdb, cp: update add_symbol_overload_list_qualified Markus Metzger
2022-06-24 23:59   ` Kevin Buettner
2022-06-02 13:25 ` [PATCH v5 12/15] gdb, hppa: remove unused hppa_lookup_stub_minimal_symbol Markus Metzger
2022-06-25  0:01   ` Kevin Buettner
2022-06-02 13:25 ` [PATCH v5 13/15] gdb, symtab: inline find_quick_global_symbol_language Markus Metzger
2022-06-25  0:16   ` Kevin Buettner
2022-06-02 13:25 ` [PATCH v5 14/15] gdb: update gnu ifunc resolve Markus Metzger
2022-06-25  0:34   ` Kevin Buettner
2022-06-02 13:25 ` [PATCH v5 15/15] gdb, solib-svr4: support namespaces in DSO iteration Markus Metzger
2022-06-25  0:42   ` Kevin Buettner
2022-07-15 10:30 ` [PATCH v5 00/15] basic linker namespace support Metzger, Markus T
2022-07-16  0:04   ` Kevin Buettner
2022-07-18  5:33     ` Metzger, Markus T
2022-10-05 11:16       ` Metzger, Markus T

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220602132514.957983-1-markus.t.metzger@intel.com \
    --to=markus.t.metzger@intel.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).