gdb: replace architecture_changed with new_architecture observer
authorAndrew Burgess <aburgess@redhat.com>
Wed, 11 Oct 2023 09:30:35 +0000 (10:30 +0100)
committerAndrew Burgess <aburgess@redhat.com>
Mon, 16 Oct 2023 09:01:22 +0000 (10:01 +0100)
commit4b2f71e6c67060e2aa0d35652de80fdc1f810ce8
treed30dd4850b674c145a86aa93bcef1b93565a3aa9
parent9f9073e5b8f7828a97d6cb1e7a43c6ad1fb40a9b
gdb: replace architecture_changed with new_architecture observer

This commit replaces the architecture_changed observer with a
new_architecture observer.

Currently the only user of the architecture_changed observer is the
Python code, which uses this observer to register the Python unwinder
with the architecture.

The problem is that the architecture_changed observer is triggered
from inferior::set_arch(), which only sees the inferior-wide gdbarch
value.  For targets that use thread-specific architectures, these
never trigger the architecture_changed observer, and so never have the
Python unwinder registered with them.

When it comes to unwinding GDB makes use of the frame's gdbarch, which
is based on the thread's regcache gdbarch, which is set in
get_thread_regcache to the value returned from
target_thread_architecture, which is not always the inferiors gdbarch
value, it might be a thread-specific gdbarch which has not passed
through inferior::set_arch().

The new_architecture observer will be triggered from
gdbarch_find_by_info, whenever a new gdbarch is created and
initialised.  As GDB caches and reuses gdbarch values, we should
expect to see each new architecture trigger the new_architecture
observer just once.

After this commit, targets that make use of thread-specific
architectures should be able to make use of Python unwinders.

As I don't have access to a machine that makes use of thread-specific
architectures right now, I asked Luis to confirm that an AArch64
target that uses SVE/SME can't use the Python unwinders in threads
that are using a thread-specific architectures, and he confirmed that
this is indeed the case, see this discussion:

  https://inbox.sourceware.org/gdb/87wmvsat8i.fsf@redhat.com

Tested-By: Lancelot Six <lancelot.six@amd.com>
Tested-By: Luis Machado <luis.machado@arm.com>
Reviewed-By: Luis Machado <luis.machado@arm.com>
Approved-By: Simon Marchi <simon.marchi@efficios.com>
gdb/arch-utils.c
gdb/inferior.c
gdb/observable.c
gdb/observable.h
gdb/python/py-unwind.c