From b63a5e38efa2dc6df46eafb0bbad3f48472e1bef Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Fri, 27 Nov 2020 15:41:37 +0000 Subject: bfd/binutils: support for gdb target descriptions in the core file This commit lays the ground work for allowing GDB to write its target description into a generated core file. The goal of this work is to allow a user to connect to a remote target, capture a core file from within GDB, then pass the executable and core file to another user and have the user be able to examine the state of the machine without needing to connect to a running target. Different remote targets can have different register sets and this information is communicated from the target to GDB in the target description. It is possible for a user to extract the target description from GDB and pass this along with the core file so that when the core file is used the target description can be fed back into GDB, however this is not a great user experience. It would be nicer, I think, if GDB could write the target description directly into the core file, and then make use of this description when loading a core file. This commit performs the binutils/bfd side of this task, adding the boiler plate functions to access the target description from within a core file note, and reserving a new number for a note containing the target description. Later commits will extend GDB to make use of this. The new note is given the name 'GDB' and a type NT_GDB_TDESC. This should hopefully protect us if there's ever a reuse of the number assigned to NT_GDB_TDESC by some other core file producer. It should also, hopefully, make it clearer to users that this note carries GDB specific information. bfd/ChangeLog: * elf-bfd.h (elfcore_write_gdb_tdesc): Declare new function. * elf.c (elfcore_grok_gdb_tdesc): New function. (elfcore_grok_note): Handle NT_GDB_TDESC. (elfcore_write_gdb_tdesc): New function. (elfcore_write_register_note): Handle NT_GDB_TDESC. binutils/ChangeLog: * readelf.c (get_note_type): Handle NT_GDB_TDESC. include/ChangeLog: * elf/common.h (NT_GDB_TDESC): Define. --- include/ChangeLog | 5 +++++ include/elf/common.h | 4 ++++ 2 files changed, 9 insertions(+) (limited to 'include') diff --git a/include/ChangeLog b/include/ChangeLog index 7c53c21..08c4567 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,8 @@ +2021-03-05 Craig Blackmore + Andrew Burgess + + * elf/common.h (NT_GDB_TDESC): Define. + 2021-03-03 Alan Modra * coff/internal.h: Delete obsolete relocation defines. Move used diff --git a/include/elf/common.h b/include/elf/common.h index e7d55ae..e6e9c27 100644 --- a/include/elf/common.h +++ b/include/elf/common.h @@ -677,6 +677,10 @@ #define NT_SIGINFO 0x53494749 /* Fields of siginfo_t. */ #define NT_FILE 0x46494c45 /* Description of mapped files. */ +/* The range 0xff000000 to 0xffffffff is set aside for notes that don't + originate from any particular operating system. */ +#define NT_GDB_TDESC 0xff000000 /* Contains copy of GDB's target description XML. */ + /* Note segments for core files on dir-style procfs systems. */ #define NT_PSTATUS 10 /* Has a struct pstatus */ -- cgit v1.1