From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lndn.lancelotsix.com (lndn.lancelotsix.com [51.195.220.111]) by sourceware.org (Postfix) with ESMTPS id 000CD3858C2A; Mon, 16 Oct 2023 09:23:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 000CD3858C2A Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=lancelotsix.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=lancelotsix.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 000CD3858C2A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=51.195.220.111 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1697448203; cv=none; b=Wre9m5EJf4M8uC9v1IndWuBFaIe016YewBrauo+IAgFpwBt5K/s8QWs49piAwAYpuGNeFPgtHPKrw/xyrRwiaOFj1PCCYJaMnhCT2T3gAvLrHlpBXQSTcjzlI4A4lPxVh0/hQTHXgFyubpT4NxIuTthVcBbYtPQkOrAXZCgi9dM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1697448203; c=relaxed/simple; bh=ZxmYkqqLxCkr142wO0xRWCfV6sLd+zFCkYuMPC13Q+M=; h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version; b=xzYoFiiwmf74Li8uSc/cJY2qXuMntGBdFF7vCRDKb1UHhIfjn6bYDeN4DgxqegXrAV9O0X/i0xeQDy5i/s0aDnGuvunzcSlNha5GV6djZPk6IQITcfpOqB5p99mFicAI6tSFW7pswOvbHuEuK5GCXMdFOL8pXKQSSZuuxzDo86M= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from octopus (cust120-dsl54.idnet.net [212.69.54.120]) by lndn.lancelotsix.com (Postfix) with ESMTPSA id 7C77384CB8; Mon, 16 Oct 2023 09:23:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lancelotsix.com; s=2021; t=1697448200; bh=ZxmYkqqLxCkr142wO0xRWCfV6sLd+zFCkYuMPC13Q+M=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=CGn9nk34epCNVa97/W+4aFhoIPMQFfyXJeZU1iySYIJkNT2ak1+5aEz1rXHjgetem KUpA+BC9MbL55Ltcu/5jLWoJTzXGJkmp+VM33vMU/ZBtAxRCAngwKAVFeU/I8Wjzlb yF+Zf10rCEmlENOXpUp/lzR/CEe7kMplVSy07G4Mgaey+l0Iy5kBJsL2Yc2b8TAanQ L9Ne+EmctDkvXI7IXwxB4dG3kQRc/PMW6Av1AqTpi3b8Dg29GM9RQRcpTfSnDvCDO+ PwiTslb7u9WqMeb+hf3fbD+U35aY/KPdgx9i2tC6XZoTA+ROnU9QuvUJDPs4GDrlo0 nWu2VXEuvFBTA== Date: Mon, 16 Oct 2023 10:23:15 +0100 From: Lancelot SIX To: John Baldwin Cc: gdb-patches@sourceware.org, Willgerodt@sourceware.org, Felix , George@sourceware.org, Jini Susan , Simon Marchi Subject: Re: [RFC 01/13] binutils: Support for the NT_X86_CPUID core dump note Message-ID: <20231016092315.a2dc3h3rfwb2xhq4@octopus> References: <20231009183617.24862-1-jhb@FreeBSD.org> <20231009183617.24862-2-jhb@FreeBSD.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20231009183617.24862-2-jhb@FreeBSD.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.6.2 (lndn.lancelotsix.com [0.0.0.0]); Mon, 16 Oct 2023 09:23:20 +0000 (UTC) X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi John I am aware this is a RFC series where you are mostly looking for feedback on the overall direction, but I have an implemenation question below (feel free to discard as part of the RFC process).t On Mon, Oct 09, 2023 at 11:36:03AM -0700, John Baldwin wrote: > This core dump note contains an array of CPUID leaf values. Each > entry in the array contains six 32-bit integers describing the inputs > to the CPUID instruction (%eax and %ecx) and the outputs of the > instruction (%eax, %ebx, %ecx, and %edx) similar to the C structure: > > struct cpuid_leaf > { > uint32_t leaf; > uint32_t subleaf; > uint32_t eax; > uint32_t ebx; > uint32_t ecx; > uint32_t edx; > }; > > Current implementations of this note contain leaves associated with > the XSAVE state area (major leaf 0xd), but future implementations may > add other leaf values in the future. > --- > bfd/elf-bfd.h | 2 ++ > bfd/elf.c | 35 +++++++++++++++++++++++++++++++++++ > binutils/readelf.c | 2 ++ > include/elf/common.h | 2 ++ > 4 files changed, 41 insertions(+) > > diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h > index 335081ec629..235d0931ab4 100644 > --- a/bfd/elf-bfd.h > +++ b/bfd/elf-bfd.h > @@ -2871,6 +2871,8 @@ extern char *elfcore_write_prxfpreg > (bfd *, char *, int *, const void *, int); > extern char *elfcore_write_xstatereg > (bfd *, char *, int *, const void *, int); > +extern char *elfcore_write_x86_cpuid > + (bfd *, char *, int *, const void *, int); > extern char *elfcore_write_x86_segbases > (bfd *, char *, int *, const void *, int); > extern char *elfcore_write_ppc_vmx > diff --git a/bfd/elf.c b/bfd/elf.c > index b5b0c69e097..35679821a49 100644 > --- a/bfd/elf.c > +++ b/bfd/elf.c > @@ -10495,6 +10495,16 @@ elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note) > return elfcore_make_note_pseudosection (abfd, ".reg-xstate", note); > } > > +/* Some systems dump an array of x86 cpuid leaves with a note type of > + NT_X86_CPUID. Just include the whole note's contents > + literally. */ > + > +static bool > +elfcore_grok_x86_cpuid (bfd *abfd, Elf_Internal_Note *note) > +{ > + return elfcore_make_note_pseudosection (abfd, ".reg-x86-cpuid", note); > +} > + > static bool > elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note) > { > @@ -11190,6 +11200,13 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note) > else > return true; > > + case NT_X86_CPUID: > + if (note->namesz == 6 > + && strcmp (note->namedata, "LINUX") == 0) > + return elfcore_grok_x86_cpuid (abfd, note); > + else > + return true; > + > case NT_PPC_VMX: > if (note->namesz == 6 > && strcmp (note->namedata, "LINUX") == 0) > @@ -11768,6 +11785,9 @@ elfcore_grok_freebsd_note (bfd *abfd, Elf_Internal_Note *note) > case NT_X86_XSTATE: > return elfcore_grok_xstatereg (abfd, note); > > + case NT_X86_CPUID: > + return elfcore_grok_x86_cpuid (abfd, note); > + > case NT_FREEBSD_PTLWPINFO: > return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.lwpinfo", > note); > @@ -12640,6 +12660,19 @@ elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz, > note_name, NT_X86_XSTATE, xfpregs, size); > } > > +char * > +elfcore_write_x86_cpuid (bfd *abfd, char *buf, int *bufsiz, > + const void *cpuid, int size) > +{ > + char *note_name; > + if (get_elf_backend_data (abfd)->elf_osabi == ELFOSABI_FREEBSD) > + note_name = "FreeBSD"; The code above (in elfcore_grok_note) only accept "LINUX", and the comment in "include/elf/common.h" says "note name must be "LINUX". Is this something you intend to adjust later when adding full FreeBSD support? Best, Lancelot. > + else > + note_name = "LINUX"; > + return elfcore_write_note (abfd, buf, bufsiz, > + note_name, NT_X86_CPUID, cpuid, size); > +} > + > char * > elfcore_write_x86_segbases (bfd *abfd, char *buf, int *bufsiz, > const void *regs, int size) > @@ -13233,6 +13266,8 @@ elfcore_write_register_note (bfd *abfd, > return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size); > if (strcmp (section, ".reg-xstate") == 0) > return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size); > + if (strcmp (section, ".reg-x86-cpuid") == 0) > + return elfcore_write_x86_cpuid (abfd, buf, bufsiz, data, size); > if (strcmp (section, ".reg-x86-segbases") == 0) > return elfcore_write_x86_segbases (abfd, buf, bufsiz, data, size); > if (strcmp (section, ".reg-ppc-vmx") == 0) > diff --git a/binutils/readelf.c b/binutils/readelf.c > index c9b6210e229..cb80aa6f396 100644 > --- a/binutils/readelf.c > +++ b/binutils/readelf.c > @@ -20134,6 +20134,8 @@ get_note_type (Filedata * filedata, unsigned e_type) > return _("NT_X86_XSTATE (x86 XSAVE extended state)"); > case NT_X86_CET: > return _("NT_X86_CET (x86 CET state)"); > + case NT_X86_CPUID: > + return _("NT_X86_CPUID (x86 CPUID leaves)"); > case NT_S390_HIGH_GPRS: > return _("NT_S390_HIGH_GPRS (s390 upper register halves)"); > case NT_S390_TIMER: > diff --git a/include/elf/common.h b/include/elf/common.h > index 244b13361e5..e8c6d753987 100644 > --- a/include/elf/common.h > +++ b/include/elf/common.h > @@ -645,6 +645,8 @@ > /* note name must be "LINUX". */ > #define NT_X86_CET 0x203 /* x86 CET state. */ > /* note name must be "LINUX". */ > +#define NT_X86_CPUID 0x205 /* x86 CPUID leaves. */ > + /* note name must be "LINUX". */ > #define NT_S390_HIGH_GPRS 0x300 /* S/390 upper halves of GPRs */ > /* note name must be "LINUX". */ > #define NT_S390_TIMER 0x301 /* S390 timer */ > -- > 2.41.0 >