aboutsummaryrefslogtreecommitdiff
path: root/sim/testsuite/aarch64/stn_multiple.s
diff options
context:
space:
mode:
authorGuinevere Larsen <guinevere@redhat.com>2025-03-13 10:20:53 -0300
committerGuinevere Larsen <guinevere@redhat.com>2025-04-07 10:07:05 -0300
commit29bff2380e4bb9f5637efbdc46520ba2b01f04e3 (patch)
tree715758e5efc6ab4e4a7d190a591eab3afb3ecde7 /sim/testsuite/aarch64/stn_multiple.s
parentfcdce142519644cdc359b3a7bc6eca6985e44c88 (diff)
downloadbinutils-master.zip
binutils-master.tar.gz
binutils-master.tar.bz2
gdb: Introduce user-friendly namespace identifier for "info shared"HEADmaster
GDB has had basic support for linkage namespaces for some time already, but only in the sense of managing multiple copies of the same shared object being loaded, and a very fragile way to find the correct copy of a symbol (see PR shlibs/32054). This commit is the first step in improving the user experience around multiple namespace support. It introduces a user-friendly identifier for namespaces, in the format [[<number>]], that will keep consistent between dlmopen and dlclose calls. The plan is for this identifier to be usable in expressions like `print [[1]]::var` to find a specific instance of a symbol, and so the identifier must not be a valid C++ or Ada namespace identifier, otherwise disambiguation becomes a problem. Support for those expressions has not been implemented yet, it is only mentioned to explain why the identifier looks like this. This syntax was chosen based on the C attributes, since nothing in GDB uses a similar syntax that could confuse users. Other syntax options that were explored were "#<number>" and "@<number>". The former was abandoned because when printing a frame, the frame number is also printed with #<number>, so in a lot of the context in which that the identifier would show up, it appears in a confusing way. The latter clashes with the array printing syntax, and I believe that the having "@N::foo" working completely differently to "foo@2" would also lead to a bad user experience. The namespace identifiers are stored via a vector inside svr4_info object. The vector stores the address of the r_debug objects used by glibc to identify each namespace, and the user-friendly ID is the index of the r_debug in the vector. This commit also introduces a set storing the indices of active namespaces. The glibc I used to develop this patch (glibc 2.40 on Fedora 41) doesn't allow an SO to be loaded into a deactivated namespace, and requesting a new namespace when a namespace was previously closed will reuse that namespace. Because of how this is implemented, this patch lets GDB easily track the exact namespace IDs that the inferior will see. Finally, two new solib_ops function pointers were added, find_solib_ns and num_active_namespaces, to allow code outside of solib-svr4 to find and use the namespace identifiers and the number of namespaces, respectively. As a sanity check, the command `info sharedlibrary` has been changed to display the namespace identifier when the inferior has more than one active namespace. With this final change, a couple of tests had to be tweaked to handle the possible new column, and a new test has been created to make sure that the column appears and disappears as needed, and that GDB can track the value of the LMID for namespaces. Approved-by: Kevin Buettner <kevinb@redhat.com>
Diffstat (limited to 'sim/testsuite/aarch64/stn_multiple.s')
0 files changed, 0 insertions, 0 deletions