2010-02-11 11:50:59 -08:00
# ifndef _ASM_X86_USER_H
# define _ASM_X86_USER_H
2008-02-07 00:15:54 -08:00
# ifdef CONFIG_X86_32
2012-10-02 18:01:25 +01:00
# include <asm / user_32.h>
2007-10-11 11:20:03 +02:00
# else
2012-10-02 18:01:25 +01:00
# include <asm / user_64.h>
2007-10-11 11:20:03 +02:00
# endif
2010-02-11 11:50:59 -08:00
# include <asm/types.h>
struct user_ymmh_regs {
/* 16 * 16 bytes for each YMMH-reg */
__u32 ymmh_space [ 64 ] ;
} ;
2015-04-24 10:14:36 +02:00
struct user_xstate_header {
2015-04-24 10:19:47 +02:00
__u64 xfeatures ;
2010-02-11 11:50:59 -08:00
__u64 reserved1 [ 2 ] ;
__u64 reserved2 [ 5 ] ;
} ;
/*
* The structure layout of user_xstateregs , used for exporting the
* extended register state through ptrace and core - dump ( NT_X86_XSTATE note )
* interfaces will be same as the memory layout of xsave used by the processor
* ( except for the bytes 464. .511 , which can be used by the software ) and hence
* the size of this structure varies depending on the features supported by the
* processor and OS . The size of the structure that users need to use can be
* obtained by doing :
* cpuid_count ( 0xd , 0 , & eax , & ptrace_xstateregs_struct_size , & ecx , & edx ) ;
* i . e . , cpuid . ( eax = 0xd , ecx = 0 ) . ebx will be the size that user ( debuggers , etc . )
* need to use .
*
* For now , only the first 8 bytes of the software usable bytes [ 464. .471 ] will
* be used and will be set to OS enabled xstate mask ( which is same as the
* 64 bit mask returned by the xgetbv ' s xCR0 ) . Users ( analyzing core dump
* remotely , etc . ) can use this mask as well as the mask saved in the
* xstate_hdr bytes and interpret what states the processor / OS supports
* and what states are in modified / initialized conditions for the
* particular process / thread .
*
* Also when the user modifies certain state FP / SSE / etc through the
2015-04-24 10:19:47 +02:00
* ptrace interface , they must ensure that the header . xfeatures
2010-02-11 11:50:59 -08:00
* bytes [ 512. .519 ] of the memory layout are updated correspondingly .
* i . e . , for example when FP state is modified to a non - init state ,
2015-04-24 10:19:47 +02:00
* header . xfeatures ' s bit 0 must be set to ' 1 ' , when SSE is modified to
* non - init state , header . xfeatures ' s bit 1 must to be set to ' 1 ' , etc .
2010-02-11 11:50:59 -08:00
*/
# define USER_XSTATE_FX_SW_WORDS 6
# define USER_XSTATE_XCR0_WORD 0
struct user_xstateregs {
struct {
__u64 fpx_space [ 58 ] ;
__u64 xstate_fx_sw [ USER_XSTATE_FX_SW_WORDS ] ;
} i387 ;
2015-04-24 10:14:36 +02:00
struct user_xstate_header header ;
2010-02-11 11:50:59 -08:00
struct user_ymmh_regs ymmh ;
/* further processor state extensions go here */
} ;
# endif /* _ASM_X86_USER_H */