From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id voy6Ez4CGGDIBwAAWB0awg (envelope-from ) for ; Mon, 01 Feb 2021 08:29:34 -0500 Received: by simark.ca (Postfix, from userid 112) id 443ED1EF80; Mon, 1 Feb 2021 08:29:34 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 0B8F91E590 for ; Mon, 1 Feb 2021 08:29:33 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 496E23836C2D; Mon, 1 Feb 2021 13:29:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 496E23836C2D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1612186172; bh=NyRWCYWlAQTS5Zn3MkwlykivdTy9rvnJMpDgGIBjuRI=; h=Subject:To:References:Date:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=TYxLBJ/CoVIMsw4TCjt1N30Ng0QeOj8zRTYlNIR303gmzWQc0u31dSj0zEgIW64iT CRzAfAVdsxJOr3T4v29njMBpXcW/8JdrV8wW9zWbLnkPU+Kv9JKcfuhbX5rZTgXavb cwjZNozQb7ajxhgPuhArfb/ERRDFSEOS7zZao+5k= Received: from mail-qk1-x732.google.com (mail-qk1-x732.google.com [IPv6:2607:f8b0:4864:20::732]) by sourceware.org (Postfix) with ESMTPS id AF135386F024 for ; Mon, 1 Feb 2021 13:29:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org AF135386F024 Received: by mail-qk1-x732.google.com with SMTP id n15so16129483qkh.8 for ; Mon, 01 Feb 2021 05:29:28 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=NyRWCYWlAQTS5Zn3MkwlykivdTy9rvnJMpDgGIBjuRI=; b=HZTRB5mfRyUw347pHncHb53sfJwY5n3RG4eXx875eFnQyfsjTus19eaaVVi1s+t7YI fB8uTwMbozgEn6GtrbAlIUV0VfbM35e4A3URb1NuzBfLIRWrhNAmt61oQrFD+FzXwMLy BPM5u2LGSCJ9mZ0bgSR4vVTHRcdBodoTmQqL5uLrX06dzO+cxX2u2rGnNDZqlZWI6lSY +WcPS6MOf6CeT+XGs/O4GaoDH4mFHCwAOeisqNf+okL6GavI5B9Pr2KqdbnFAWajq0IB j4jKdMWy4D+Ms1vc5OA/C3FBX0NWbZwlWjL0vOsUfwDFXzemw/ic5zAOYc6+1KeIoEv9 sqHg== X-Gm-Message-State: AOAM533wOCcwbIHIoz3KDE+BY7lD9THZ1mv/nkSTkhJ3t/T9mTDZS1Yz EwUsxAOYebcvosowPOIJSGqNoA== X-Google-Smtp-Source: ABdhPJx4hkq/q8ZIn7ltp/w5x0wfs+dKl3Lm3BpdscmlzpQZ9DU26AjanrMxeyw59Ci5BPQ3TJY5aw== X-Received: by 2002:a37:8942:: with SMTP id l63mr15834671qkd.94.1612186168169; Mon, 01 Feb 2021 05:29:28 -0800 (PST) Received: from ?IPv6:2804:7f0:8284:848d:c0e:b160:155c:b079? ([2804:7f0:8284:848d:c0e:b160:155c:b079]) by smtp.gmail.com with ESMTPSA id b16sm12891980qtx.85.2021.02.01.05.29.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 01 Feb 2021 05:29:27 -0800 (PST) Subject: Re: [PATCHv2 2/9] bfd/binutils: support for gdb target descriptions in the core file To: Andrew Burgess , gdb-patches@sourceware.org, binutils@sourceware.org References: <5a9bb029efd1737d81d1e9ff0e82f359d4267113.1611172468.git.andrew.burgess@embecosm.com> Message-ID: Date: Mon, 1 Feb 2021 10:29:24 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <5a9bb029efd1737d81d1e9ff0e82f359d4267113.1611172468.git.andrew.burgess@embecosm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Luis Machado via Gdb-patches Reply-To: Luis Machado Cc: Fredrik Hederstierna Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" On 1/20/21 5:23 PM, Andrew Burgess wrote: > 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 */ > I went through this and it looks good to me in its current state (minus the discussion on whether this should be on/off by default). I don't mind if we always dump this information if available. Having additional notes dumped into the core file doesn't sound bad, as it seems to be common practice to have notes carrying random bits of information.