gdb/corefile: write NT_GDB_TDESC based on signalled thread
authorAndrew Burgess <aburgess@redhat.com>
Mon, 25 Sep 2023 09:32:14 +0000 (10:32 +0100)
committerAndrew Burgess <aburgess@redhat.com>
Tue, 3 Oct 2023 16:43:50 +0000 (17:43 +0100)
commitc14993e9dc598a5ca126121f7d2a0898c26908bc
treea6929feaca342096ccba5150d50f87217295481d
parent1c9b44fe07569b6ed99557faa87d5b1c21413fbf
gdb/corefile: write NT_GDB_TDESC based on signalled thread

When creating a core file from within GDB we include a NT_GDB_TDESC
that includes the target description of the architecture in use.

For architectures with dynamic architectures (e.g. AArch64 with
sve/sme) the original architecture, calculated from the original
target description, might not match the per-thread architecture.

In the general case, where each thread has a different architecture,
then we really need a separate NT_GDB_TDESC for each thread, however,
there's currently no way to read in multiple NT_GDB_TDESC.

This commit is a step towards per-thread NT_GDB_TDESC.  In this commit
I have updated the function that writes the NT_GDB_TDESC to accept a
gdbarch (rather than calling target_gdbarch() to find a gdbarch), and
I now pass in the gdbarch of the signalled thread.

In many cases (though NOT all) targets with dynamic architectures
really only use a single architecture, even when there are multiple
threads, so in the common case, this should ensure that GDB emits an
architecture that is more likely to be correct.

Additional work will be needed in order to support corefiles with
truly per-thread architectures, but that will need to be done in the
future.
gdb/elf-none-tdep.c
gdb/fbsd-tdep.c
gdb/gcore-elf.c
gdb/gcore-elf.h
gdb/linux-tdep.c