From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.baldwin.cx (bigwig.baldwin.cx [IPv6:2607:f138:0:13::2]) by sourceware.org (Postfix) with ESMTPS id 433553858C52 for ; Thu, 27 Apr 2023 21:01:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 433553858C52 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=FreeBSD.org Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=FreeBSD.org Received: from ralph.baldwin.net (c-98-35-126-114.hsd1.ca.comcast.net [98.35.126.114]) by mail.baldwin.cx (Postfix) with ESMTPSA id 45B731A84BF2 for ; Thu, 27 Apr 2023 17:01:28 -0400 (EDT) From: John Baldwin To: gdb-patches@sourceware.org Subject: [PATCH v5 00/19] Handle variable XSAVE layouts Date: Thu, 27 Apr 2023 14:00:54 -0700 Message-Id: <20230427210113.45380-1-jhb@FreeBSD.org> X-Mailer: git-send-email 2.40.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.6.4 (mail.baldwin.cx [0.0.0.0]); Thu, 27 Apr 2023 17:01:28 -0400 (EDT) X-Virus-Scanned: clamav-milter 0.103.1 at mail.baldwin.cx X-Virus-Status: Clean X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,FORGED_SPF_HELO,KAM_DMARC_STATUS,KHOP_HELO_FCRDNS,SPF_HELO_PASS,SPF_SOFTFAIL,TXREP,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Changes since V4: - Added a new target method to fetch the XSAVE layout rather than using an internal TARGET_OBJECT_X86_XSAVE_LAYOUT. Patch 1 from V4 is now split into two patches: one to add the new structure, the second adds the new target method and stores it in the tdep. - Patch 6 is a quick fixup for x86-fbsd-nat.h - Patches 7 and 8 are new and fix an issue Simon Marchi noticed where FreeBSD and Linux native architectures can run into errors due to using ptrace in the target read_description method if the current inferior has no live process. The general rule there is to just use a default tdesc for the architecture if inferior_ptid is null. I've only compiled/tested this on Linux and FreeBSD x86-64. - Patches 15 and 17 for gdbserver have been largely reworked to make use of C inheritance to remove the need for changes to the FXSAVE portion of the XSAVE area. - Patches 16 and 19 are new fixes for bugs I noticed specific to AVX-512 handling in gdbserver. Aleksandar Paunovic (2): gdbserver: Refactor the legacy region within the xsave struct gdbserver: Use x86_xstate_layout to parse the XSAVE extended state area. John Baldwin (17): x86: Add an x86_xsave_layout structure to handle variable XSAVE layouts. gdb: Store an x86_xsave_layout in i386_gdbarch_tdep. core: Support fetching x86 XSAVE layout from architectures. nat/x86-cpuid.h: Add x86_cpuid_count wrapper around __get_cpuid_count. x86 nat: Add helper functions to save the XSAVE layout for the host. x86-fbsd-nat: Add missing public label. *-fbsd-nat: Handle null inferior in read_description. *-linux-nat: Handle null inferior in read_description. gdb: Update x86 FreeBSD architectures to support XSAVE layouts. gdb: Support XSAVE layouts for the current host in the FreeBSD x86 targets. gdb: Update x86 Linux architectures to support XSAVE layouts. gdb: Support XSAVE layouts for the current host in the Linux x86 targets. gdb: Use x86_xstate_layout to parse the XSAVE extended state area. gdbserver: Add a function to set the XSAVE mask and size. gdbserver: Clear upper ZMM registers in the right location. x86: Remove X86_XSTATE_SIZE and related constants. gdbserver: Simplify handling of ZMM registers. gdb/aarch64-fbsd-nat.c | 3 + gdb/aarch64-linux-nat.c | 3 + gdb/amd64-fbsd-nat.c | 43 +-- gdb/amd64-fbsd-tdep.c | 12 +- gdb/amd64-linux-nat.c | 6 +- gdb/amd64-linux-tdep.c | 11 +- gdb/arm-fbsd-nat.c | 3 + gdb/arm-linux-nat.c | 3 + gdb/configure.nat | 8 +- gdb/corelow.c | 21 ++ gdb/gdbarch-gen.h | 9 + gdb/gdbarch.c | 32 +++ gdb/gdbarch.h | 1 + gdb/gdbarch_components.py | 11 + gdb/i386-fbsd-nat.c | 42 +-- gdb/i386-fbsd-tdep.c | 72 ++--- gdb/i386-fbsd-tdep.h | 10 +- gdb/i386-linux-nat.c | 8 +- gdb/i386-linux-tdep.c | 67 ++--- gdb/i386-linux-tdep.h | 21 +- gdb/i386-tdep.c | 19 +- gdb/i386-tdep.h | 4 + gdb/i387-tdep.c | 522 +++++++++++++++++++++++-------------- gdb/i387-tdep.h | 9 + gdb/mips-linux-nat.c | 3 + gdb/nat/x86-cpuid.h | 32 +++ gdb/nat/x86-xstate.c | 67 +++++ gdb/nat/x86-xstate.h | 35 +++ gdb/ppc-linux-nat.c | 3 + gdb/riscv-linux-nat.c | 3 + gdb/s390-linux-nat.c | 3 + gdb/target-debug.h | 20 ++ gdb/target-delegates.c | 27 ++ gdb/target.c | 6 + gdb/target.h | 7 + gdb/x86-fbsd-nat.c | 21 ++ gdb/x86-fbsd-nat.h | 20 ++ gdb/x86-linux-nat.c | 6 + gdb/x86-linux-nat.h | 7 + gdbserver/configure.srv | 12 +- gdbserver/i387-fp.cc | 268 +++++++++---------- gdbserver/i387-fp.h | 4 +- gdbserver/linux-x86-low.cc | 10 +- gdbsupport/x86-xstate.h | 70 +++-- 44 files changed, 1049 insertions(+), 515 deletions(-) create mode 100644 gdb/nat/x86-xstate.c create mode 100644 gdb/nat/x86-xstate.h -- 2.40.0