Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Burgess <andrew.burgess@embecosm.com>
To: gdb-patches@sourceware.org, binutils@sourceware.org
Cc: Fredrik Hederstierna <fredrik@hederstierna.com>
Subject: PING: Re: [PATCHv2 2/9] bfd/binutils: support for gdb target descriptions in the core file
Date: Mon, 1 Feb 2021 12:05:21 +0000	[thread overview]
Message-ID: <20210201120521.GV265215@embecosm.com> (raw)
In-Reply-To: <5a9bb029efd1737d81d1e9ff0e82f359d4267113.1611172468.git.andrew.burgess@embecosm.com>

Ping!

This patch needs a review from the binutils side please.

I believe the conversation with Mihails was resolved and he is happy
with this patch as it is.

Thanks,
Andrew

* Andrew Burgess <andrew.burgess@embecosm.com> [2021-01-20 20:23:08 +0000]:

> 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.
> 
> 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.
> ---
>  bfd/ChangeLog        |  9 +++++++++
>  bfd/elf-bfd.h        |  2 ++
>  bfd/elf.c            | 23 +++++++++++++++++++++++
>  binutils/ChangeLog   |  5 +++++
>  binutils/readelf.c   |  2 ++
>  include/ChangeLog    |  5 +++++
>  include/elf/common.h |  4 ++++
>  7 files changed, 50 insertions(+)
> 
> diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
> index 15206b4e876..4dce8114c0f 100644
> --- a/bfd/elf-bfd.h
> +++ b/bfd/elf-bfd.h
> @@ -2797,6 +2797,8 @@ extern char *elfcore_write_aarch_pauth
>    (bfd *, char *, int *, const void *, int);
>  extern char *elfcore_write_arc_v2
>    (bfd *, char *, int *, const void *, int);
> +extern char *elfcore_write_gdb_tdesc
> +  (bfd *, char *, int *, const void *, int);
>  extern char *elfcore_write_lwpstatus
>    (bfd *, char *, int *, long, int, const void *);
>  extern char *elfcore_write_register_note
> diff --git a/bfd/elf.c b/bfd/elf.c
> index 84a5d942817..9892ffa9faf 100644
> --- a/bfd/elf.c
> +++ b/bfd/elf.c
> @@ -9912,6 +9912,12 @@ elfcore_grok_arc_v2 (bfd *abfd, Elf_Internal_Note *note)
>    return elfcore_make_note_pseudosection (abfd, ".reg-arc-v2", note);
>  }
>  
> +static bfd_boolean
> +elfcore_grok_gdb_tdesc (bfd *abfd, Elf_Internal_Note *note)
> +{
> +  return elfcore_make_note_pseudosection (abfd, ".gdb-tdesc", note);
> +}
> +
>  #if defined (HAVE_PRPSINFO_T)
>  typedef prpsinfo_t   elfcore_psinfo_t;
>  #if defined (HAVE_PRPSINFO32_T)		/* Sparc64 cross Sparc32 */
> @@ -10570,6 +10576,9 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
>        else
>  	return TRUE;
>  
> +    case NT_GDB_TDESC:
> +      return elfcore_grok_gdb_tdesc (abfd, note);
> +
>      case NT_PRPSINFO:
>      case NT_PSINFO:
>        if (bed->elf_backend_grok_psinfo)
> @@ -11951,6 +11960,18 @@ elfcore_write_arc_v2 (bfd *abfd,
>  			     note_name, NT_ARC_V2, arc_v2, size);
>  }
>  
> +char *
> +elfcore_write_gdb_tdesc (bfd *abfd,
> +			 char *buf,
> +			 int *bufsiz,
> +			 const void *tdesc,
> +			 int size)
> +{
> +  const char *note_name = "CORE";
> +  return elfcore_write_note (abfd, buf, bufsiz,
> +                             note_name, NT_GDB_TDESC, tdesc, size);
> +}
> +
>  char *
>  elfcore_write_register_note (bfd *abfd,
>  			     char *buf,
> @@ -12035,6 +12056,8 @@ elfcore_write_register_note (bfd *abfd,
>      return elfcore_write_aarch_pauth (abfd, buf, bufsiz, data, size);
>    if (strcmp (section, ".reg-arc-v2") == 0)
>      return elfcore_write_arc_v2 (abfd, buf, bufsiz, data, size);
> +  if (strcmp (section, ".gdb-tdesc") == 0)
> +    return elfcore_write_gdb_tdesc (abfd, buf, bufsiz, data, size);
>    return NULL;
>  }
>  
> diff --git a/binutils/readelf.c b/binutils/readelf.c
> index 5df51086226..feb458877c8 100644
> --- a/binutils/readelf.c
> +++ b/binutils/readelf.c
> @@ -18296,6 +18296,8 @@ get_note_type (Filedata * filedata, unsigned e_type)
>  	return _("NT_PRPSINFO (prpsinfo structure)");
>        case NT_TASKSTRUCT:
>  	return _("NT_TASKSTRUCT (task structure)");
> +      case NT_GDB_TDESC:
> +        return _("NT_GDB_TDESC (GDB XML target description)");
>        case NT_PRXFPREG:
>  	return _("NT_PRXFPREG (user_xfpregs structure)");
>        case NT_PPC_VMX:
> diff --git a/include/elf/common.h b/include/elf/common.h
> index e7d55ae0782..e6e9c278faa 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 */
> -- 
> 2.25.4
> 

  parent reply	other threads:[~2021-02-01 12:05 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-20 20:23 [PATCHv2 0/9] Bare-metal core dumps for RISC-V Andrew Burgess
2021-01-20 20:23 ` [PATCHv2 1/9] gdb: unify parts of the Linux and FreeBSD core dumping code Andrew Burgess
2021-01-22 12:01   ` Strasuns, Mihails via Gdb-patches
2021-01-22 18:50   ` Tom Tromey
2021-02-01 11:56   ` Andrew Burgess
2021-02-09 21:52     ` Andrew Burgess
2021-01-20 20:23 ` [PATCHv2 2/9] bfd/binutils: support for gdb target descriptions in the core file Andrew Burgess
2021-01-22 10:47   ` Strasuns, Mihails via Gdb-patches
2021-01-22 19:30     ` Andrew Burgess
2021-01-25 10:11       ` Strasuns, Mihails via Gdb-patches
2021-01-25 11:20         ` Andrew Burgess
2021-02-01 12:05   ` Andrew Burgess [this message]
2021-02-01 15:10     ` PING: " Strasuns, Mihails via Gdb-patches
2021-02-01 13:29   ` Luis Machado via Gdb-patches
2021-02-10 20:45   ` Jim Wilson
2021-01-20 20:23 ` [PATCHv2 3/9] gdb: write target description into " Andrew Burgess
2021-01-22 19:15   ` Tom Tromey
2021-02-01 13:37   ` Luis Machado via Gdb-patches
2021-01-20 20:23 ` [PATCHv2 4/9] bfd/riscv: prepare to handle bare metal core dump creation Andrew Burgess
2021-02-01 12:03   ` PING: " Andrew Burgess
2021-02-01 13:48   ` Luis Machado via Gdb-patches
2021-02-01 14:44     ` Andrew Burgess
2021-02-10 20:57   ` Jim Wilson
2021-01-20 20:23 ` [PATCHv2 5/9] gdb/riscv: introduce bare metal core dump support Andrew Burgess
2021-02-01 14:05   ` Luis Machado via Gdb-patches
2021-02-03  3:04     ` Palmer Dabbelt
2021-01-20 20:23 ` [PATCHv2 6/9] bfd/binutils: add support for RISC-V CSRs in core files Andrew Burgess
2021-02-01 12:00   ` Andrew Burgess
2021-02-01 14:08     ` Luis Machado via Gdb-patches
2021-02-10 21:00     ` Jim Wilson
2021-01-20 20:23 ` [PATCHv2 7/9] gdb/riscv: make riscv target description names global Andrew Burgess
2021-02-01 14:22   ` Luis Machado via Gdb-patches
2021-01-20 20:23 ` [PATCHv2 8/9] gdb/riscv: write CSRs into baremetal core dumps Andrew Burgess
2021-02-01 14:33   ` Luis Machado via Gdb-patches
2021-01-20 20:23 ` [PATCHv2 9/9] gdb/arm: add support for bare-metal " Andrew Burgess
2021-02-01 14:51   ` Luis Machado via Gdb-patches
2021-01-22 19:28 ` [PATCHv2 0/9] Bare-metal core dumps for RISC-V Tom Tromey
2021-02-15 17:29 ` [PATCHv3 " Andrew Burgess
2021-02-15 17:29   ` [PATCHv3 1/9] gdb: unify parts of the Linux and FreeBSD core dumping code Andrew Burgess
2021-02-15 22:56     ` Lancelot SIX via Gdb-patches
2021-02-16 16:55       ` Andrew Burgess
2021-02-15 17:29   ` [PATCHv3 2/9] bfd/binutils: support for gdb target descriptions in the core file Andrew Burgess
2021-02-15 17:29   ` [PATCHv3 3/9] gdb: write target description into " Andrew Burgess
2021-02-15 17:29   ` [PATCHv3 4/9] bfd/riscv: prepare to handle bare metal core dump creation Andrew Burgess
2021-02-15 17:29   ` [PATCHv3 5/9] gdb/riscv: introduce bare metal core dump support Andrew Burgess
2021-02-15 17:29   ` [PATCHv3 6/9] bfd/binutils: add support for RISC-V CSRs in core files Andrew Burgess
2021-02-15 17:29   ` [PATCHv3 7/9] gdb/riscv: make riscv target description names global Andrew Burgess
2021-02-15 17:29   ` [PATCHv3 8/9] gdb/riscv: write CSRs into baremetal core dumps Andrew Burgess
2021-02-15 17:29   ` [PATCHv3 9/9] gdb/arm: add support for bare-metal " Andrew Burgess
2021-05-13 13:42     ` Andrew Burgess
2021-05-13 13:51       ` Luis Machado via Gdb-patches
2021-05-13 13:56         ` Andrew Burgess
2021-05-15 13:52           ` SV: " sarah@hederstierna.com
2021-06-01  9:00             ` Andrew Burgess
2021-03-01 10:32   ` [PATCHv3 0/9] Bare-metal core dumps for RISC-V Andrew Burgess
2021-03-01 14:45     ` Nick Clifton via Gdb-patches
2021-03-05 17:35     ` Andrew Burgess

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=20210201120521.GV265215@embecosm.com \
    --to=andrew.burgess@embecosm.com \
    --cc=binutils@sourceware.org \
    --cc=fredrik@hederstierna.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