This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH v2] Add support for the x86 XSAVE extended state on FreeBSD/x86.
- From: Mark Kettenis <mark dot kettenis at xs4all dot nl>
- To: jhb at FreeBSD dot org
- Cc: gdb-patches at sourceware dot org, binutils at sourceware dot org, palves at redhat dot com
- Date: Mon, 6 Apr 2015 19:10:45 +0200 (CEST)
- Subject: Re: [PATCH v2] Add support for the x86 XSAVE extended state on FreeBSD/x86.
- Authentication-results: sourceware.org; auth=none
- References: <55149C11 dot 8000709 at FreeBSD dot org>
> Date: Thu, 26 Mar 2015 16:53:53 -0700
> From: John Baldwin <jhb@FreeBSD.org>
>
> Recognize NT_X86_XSTATE notes in FreeBSD process cores. Recent
> FreeBSD versions include a note containing the XSAVE state for each
> thread in the process when XSAVE is in use. The note stores a copy of
> the current XSAVE mask in a reserved section of the machine-defined
> XSAVE state at the same offset as Linux's NT_X86_XSTATE note.
>
> For native processes, use the PT_GETXSTATE_INFO ptrace request to
> determine if XSAVE is enabled, and if so the active XSAVE state mask
> (that is, the value of %xcr0 for the target process) as well as the
> size of XSAVE state area. Use the PT_GETXSTATE and PT_SETXSTATE requests
> to fetch and store the XSAVE state, respectively, in the BSD x86
> native targets.
>
> In addition, the FreeBSD amd64 and i386 native targets now include
> "read_description" target methods to determine the correct x86 target
> description for the current XSAVE mask. On FreeBSD amd64 this also
> properly returns an i386 target description for 32-bit binaries which
> allows the 64-bit GDB to run 32-bit binaries.
>
> Note that the ptrace changes are in the BSD native targets, not the
> FreeBSD-specific native targets since that is where the other ptrace
> register accesses occur. Of the other BSDs, NetBSD and DragonFly use
> XSAVE in the kernel but do not currently export the extended state via
> ptrace(2). OpenBSD does not currently support XSAVE.
>
> bfd/ChangeLog:
>
> * elf.c (elfcore_grok_note): Recognize NT_X86_XSTATE on
> FreeBSD.
> (elfcore_write_xstatereg): Use correct note name on FreeBSD.
>
> gdb/ChangeLog:
>
> * amd64-tdep.c (amd64_target_description): New function.
> * amd64-tdep.h: Export amd64_target_description and tdesc_amd64.
> * amd64bsd-nat.c [PT_GETXSTATE_INFO]: New variable amd64bsd_xsave_len.
> (amd64bsd_fetch_inferior_registers) [PT_GETXSTATE_INFO]: Handle
> x86 extended save area.
> (amd64bsd_store_inferior_registers) [PT_GETXSTATE_INFO]: Likewise.
> * amd64bsd-nat.h: Export amd64bsd_xsave_len.
> * amd64fbsd-nat.c (amd64fbsd_read_description): New function.
> (_initialize_amd64fbsd_nat): Set "to_read_description" to
> "amd64fbsd_read_description".
> * amd64fbsd-tdep.c (amd64fbsd_core_read_description): New function.
> (amd64fbsd_supply_xstateregset): New function.
> (amd64fbsd_collect_xstateregset): New function.
> Add "amd64fbsd_xstateregset".
> (amd64fbsd_iterate_over_regset_sections): New function.
> (amd64fbsd_init_abi): Set "xsave_xcr0_offset" to
> "I386_FBSD_XSAVE_XCR0_OFFSET".
> Add "iterate_over_regset_sections" gdbarch method.
> Add "core_read_description" gdbarch method.
> * i386-tdep.c (i386_target_description): New function.
> * i386-tdep.h: Export i386_target_description and tdesc_i386.
> * i386bsd-nat.c [PT_GETXSTATE_INFO]: New variable i386bsd_xsave_len.
> (i386bsd_fetch_inferior_registers) [PT_GETXSTATE_INFO]: Handle
> x86 extended save area.
> (i386bsd_store_inferior_registers) [PT_GETXSTATE_INFO]: Likewise.
> * i386bsd-nat.h: Export i386bsd_xsave_len.
> * i386fbsd-nat.c (i386fbsd_read_description): New function.
> (_initialize_i386fbsd_nat): Set "to_read_description" to
> "i386fbsd_read_description".
> * i386fbsd-tdep.c (i386fbsd_core_read_xcr0): New function.
> (i386fbsd_core_read_description): New function.
> (i386fbsd_supply_xstateregset): New function.
> (i386fbsd_collect_xstateregset): New function.
> Add "i386fbsd_xstateregset".
> (i386fbsd_iterate_over_regset_sections): New function.
> (i386fbsd4_init_abi): Set "xsave_xcr0_offset" to
> "I386_FBSD_XSAVE_XCR0_OFFSET".
> Add "iterate_over_regset_sections" gdbarch method.
> Add "core_read_description" gdbarch method.
> * i386fbsd-tdep.h: New file.
This version looks good to me.