From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id wJTBI0Tbx1/HcwAAWB0awg (envelope-from ) for ; Wed, 02 Dec 2020 13:21:56 -0500 Received: by simark.ca (Postfix, from userid 112) id 5D45C1F0AB; Wed, 2 Dec 2020 13:21:56 -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 748C71E58E for ; Wed, 2 Dec 2020 13:21:55 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E8166395C012; Wed, 2 Dec 2020 18:21:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E8166395C012 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1606933314; bh=Jpe6hREaYqawdJQNi2oxZLzqXceQS/WsiXcE/3VI2MA=; h=Subject:To:References:Date:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=SPeEWkRtFfE16Q4DVhWE8glXJ0B82xgKq+XpBSmfMJOpXzndNHbAqF6EfhUHjFqJC DNybkNq2YPqce9icZ+Ctcv9vkTZKLqx2ysSqk6dJooDdi6R9bIbR8YUQ18aTe1AsNt GTZeopqNuJX2Pstj/sHDBLeAyZFyouME9I9mkUd4= Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by sourceware.org (Postfix) with ESMTPS id B5613385802F for ; Wed, 2 Dec 2020 18:21:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org B5613385802F Received: by mail-qt1-x842.google.com with SMTP id z3so1739212qtw.9 for ; Wed, 02 Dec 2020 10:21:52 -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:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Jpe6hREaYqawdJQNi2oxZLzqXceQS/WsiXcE/3VI2MA=; b=H0lWkZyYrBu3K2+Qldn6p2T3cPUT/T87C80AF8XeGEGyhaHBqpx00Wg6yS1wI0zx4T N2/5AanJ0cWgob3HEZgrtxR5WsNTQ1n02pT0eu1kJisX2WVB6hlsn+u9olBGnRqe3iMV JIkEmJCG4f2jBMGQ952diutxy3RQ6IZaoLWZPOpoxGjma0s78R6vk0viaXMuNM63ANNk +qoqoDVyFvSgIUaoa8+4ijzEk5PhAyMBNrEDEzjTtPoXBmlvtsN+udChCljlEn86i5Fw 84oQiQ2uTnSL4iMCtlNAWQERVDD4qpY1SGZZzzI6pumCQJAFdsI8iFCPup7dZaltCrOE QaNA== X-Gm-Message-State: AOAM530aw5exvOqG5qxMjGiu81csSpkf3dOJnd77zBUye8K2v9uIttey kC+eIuN79uRI1OMpnBqBYXwHnwbbe51huw== X-Google-Smtp-Source: ABdhPJwXssn4oNt0he/vcXM0Vz5DhrUfNqAK1rDreiT9JVrcClobLmemPIrwF9BfZn6nye5optrMjQ== X-Received: by 2002:ac8:7518:: with SMTP id u24mr3986284qtq.114.1606933312092; Wed, 02 Dec 2020 10:21:52 -0800 (PST) Received: from ?IPv6:2804:7f0:8284:370e:a537:5fb4:bbd4:b73? ([2804:7f0:8284:370e:a537:5fb4:bbd4:b73]) by smtp.gmail.com with ESMTPSA id w21sm2507651qki.6.2020.12.02.10.21.50 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 02 Dec 2020 10:21:51 -0800 (PST) Subject: Re: [PATCH 2/8] bfd/binutils: support for gdb target descriptions in the core file To: Andrew Burgess , binutils@sourceware.org, gdb-patches@sourceware.org References: <4e0141d22b4b5bbf56e42d037f03f82485cf5bc4.1606930261.git.andrew.burgess@embecosm.com> Message-ID: <98c2b9bb-10bc-5141-19cf-0705e2e97ec0@linaro.org> Date: Wed, 2 Dec 2020 15:21:49 -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: <4e0141d22b4b5bbf56e42d037f03f82485cf5bc4.1606930261.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 Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" On 12/2/20 2:39 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 | 2 ++ > 7 files changed, 48 insertions(+) > > diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h > index e9c890f6f16..5ef69ab5b13 100644 > --- a/bfd/elf-bfd.h > +++ b/bfd/elf-bfd.h > @@ -2796,6 +2796,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 419c5f4420c..bea5ab12773 100644 > --- a/bfd/elf.c > +++ b/bfd/elf.c > @@ -9909,6 +9909,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 */ > @@ -10566,6 +10572,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) > @@ -11947,6 +11956,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, > @@ -12031,6 +12052,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 57e0f1de459..5b3871d3e5f 100644 > --- a/binutils/readelf.c > +++ b/binutils/readelf.c > @@ -18246,6 +18246,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 95a852f0cf5..1dbf0b11983 100644 > --- a/include/elf/common.h > +++ b/include/elf/common.h > @@ -666,6 +666,8 @@ > #define NT_SIGINFO 0x53494749 /* Fields of siginfo_t. */ > #define NT_FILE 0x46494c45 /* Description of mapped files. */ > > +#define NT_GDB_TDESC 0x54444553 /* Contains copy of GDB's target description XML. */ > + How about a generic name without the tool's name on it? Other tools may want to use it as well, and that can be a little confusing. NT_XML_TDESC, maybe? For the constant, I find the magic number amusing, but I don't think it does any good when you're trying to find out why that particular magic number was picked, and what the next number should be. Should we go with the basic increasing ID instead? I think this would be 7, right after NT_AUXV.