mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-06 12:09:26 +08:00
c131fcee79
2010-04-07 H.J. Lu <hongjiu.lu@intel.com> * i386-linux-nat.c: Include "regset.h", "elf/common.h", <sys/uio.h> and "i386-xstate.h". (PTRACE_GETREGSET): New. (PTRACE_SETREGSET): Likewise. (fetch_xstateregs): Likewise. (store_xstateregs): Likewise. (GETXSTATEREGS_SUPPLIES): Likewise. (regmap): Include 8 upper YMM registers. (i386_linux_fetch_inferior_registers): Support XSAVE extended state. (i386_linux_store_inferior_registers): Likewise. (i386_linux_read_description): Check and enable AVX target descriptions. * i386-linux-tdep.c: Include "regset.h", "i387-tdep.h", "i386-xstate.h" and "features/i386/i386-avx-linux.c". (i386_linux_regset_sections): Add ".reg-xstate". (i386_linux_gregset_reg_offset): Include 8 upper YMM registers. (i386_linux_core_read_xcr0): New. (i386_linux_core_read_description): Check and enable AVX target description. (i386_linux_init_abi): Set xsave_xcr0_offset. (_initialize_i386_linux_tdep): Call initialize_tdesc_i386_avx_linux. * i386-linux-tdep.h (I386_LINUX_ORIG_EAX_REGNUM): Replace I386_SSE_NUM_REGS with I386_AVX_NUM_REGS. (i386_linux_core_read_xcr0): New. (tdesc_i386_avx_linux): Likewise. (I386_LINUX_XSAVE_XCR0_OFFSET): Likewise. * i386-tdep.c: Include "i386-xstate.h" and "features/i386/i386-avx.c". (i386_ymm_names): New. (i386_ymmh_names): Likewise. (i386_ymmh_regnum_p): Likewise. (i386_ymm_regnum_p): Likewise. (i386_xmm_regnum_p): Likewise. (i386_register_name): Likewise. (i386_ymm_type): Likewise. (i386_supply_xstateregset): Likewise. (i386_collect_xstateregset): Likewise. (i386_sse_regnum_p): Removed. (i386_pseudo_register_name): Support pseudo YMM registers. (i386_pseudo_register_type): Likewise. (i386_pseudo_register_read): Likewise. (i386_pseudo_register_write): Likewise. (i386_dbx_reg_to_regnum): Return %ymmN register number for %xmmN if AVX is available. (i386_regset_from_core_section): Support .reg-xstate section. (i386_register_reggroup_p): Supper upper YMM and YMM registers. (i386_process_record): Replace i386_sse_regnum_p with i386_xmm_regnum_p. (i386_validate_tdesc_p): Support org.gnu.gdb.i386.avx feature. Set ymmh_register_names, num_ymm_regs, ymm0h_regnum and xcr0. (i386_gdbarch_init): Set xstateregset. Set xsave_xcr0_offset. Call set_gdbarch_register_name. Replace I386_SSE_NUM_REGS with I386_AVX_NUM_REGS. Set ymmh_register_names, ymm0h_regnum and num_ymm_regs. Add num_ymm_regs to set_gdbarch_num_pseudo_regs. Set ymm0_regnum. (_initialize_i386_tdep): Call initialize_tdesc_i386_avx. * i386-tdep.h (gdbarch_tdep): Add xstateregset, ymm0_regnum, xcr0, xsave_xcr0_offset, ymm0h_regnum, ymmh_register_names and i386_ymm_type. (i386_regnum): Add I386_YMM0H_REGNUM, and I386_YMM7H_REGNUM. (I386_AVX_NUM_REGS): New. (i386_xmm_regnum_p): Likewise. (i386_ymm_regnum_p): Likewise. (i386_ymmh_regnum_p): Likewise. * common/i386-xstate.h: New.
68 lines
2.5 KiB
C
68 lines
2.5 KiB
C
/* Target-dependent code for GNU/Linux x86.
|
|
|
|
Copyright (C) 2002, 2003, 2007, 2008, 2009, 2010
|
|
Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef I386_LINUX_TDEP_H
|
|
#define I386_LINUX_TDEP_H
|
|
|
|
/* The Linux kernel pretends there is an additional "orig_eax"
|
|
register. Since GDB needs access to that register to be able to
|
|
properly restart system calls when necessary (see
|
|
i386-linux-tdep.c) we need our own versions of a number of
|
|
functions that deal with GDB's register cache. */
|
|
|
|
/* Register number for the "orig_eax" pseudo-register. If this
|
|
pseudo-register contains a value >= 0 it is interpreted as the
|
|
system call number that the kernel is supposed to restart. */
|
|
#define I386_LINUX_ORIG_EAX_REGNUM I386_AVX_NUM_REGS
|
|
|
|
/* Total number of registers for GNU/Linux. */
|
|
#define I386_LINUX_NUM_REGS (I386_LINUX_ORIG_EAX_REGNUM + 1)
|
|
|
|
/* Get XSAVE extended state xcr0 from core dump. */
|
|
extern uint64_t i386_linux_core_read_xcr0
|
|
(struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd);
|
|
|
|
/* Linux target description. */
|
|
extern struct target_desc *tdesc_i386_linux;
|
|
extern struct target_desc *tdesc_i386_avx_linux;
|
|
|
|
/* Format of XSAVE extended state is:
|
|
struct
|
|
{
|
|
fxsave_bytes[0..463]
|
|
sw_usable_bytes[464..511]
|
|
xstate_hdr_bytes[512..575]
|
|
avx_bytes[576..831]
|
|
future_state etc
|
|
};
|
|
|
|
Same memory layout will be used for the coredump NT_X86_XSTATE
|
|
representing the XSAVE extended state registers.
|
|
|
|
The first 8 bytes of the sw_usable_bytes[464..467] is the OS enabled
|
|
extended state mask, which is the same as the extended control register
|
|
0 (the XFEATURE_ENABLED_MASK register), XCR0. We can use this mask
|
|
together with the mask saved in the xstate_hdr_bytes to determine what
|
|
states the processor/OS supports and what state, used or initialized,
|
|
the process/thread is in. */
|
|
#define I386_LINUX_XSAVE_XCR0_OFFSET 464
|
|
|
|
#endif /* i386-linux-tdep.h */
|