xref: /linux/arch/x86/include/asm/elfcore-compat.h (revision 9dbbc3b9d09d6deba9f3b9e1d5b355032ed46a75)
1 #ifndef _ASM_X86_ELFCORE_COMPAT_H
2 #define _ASM_X86_ELFCORE_COMPAT_H
3 
4 #include <asm/user32.h>
5 
6 /*
7  * On amd64 we have two 32bit ABIs - i386 and x32.  The latter
8  * has bigger registers, so we use it for compat_elf_regset_t.
9  * The former uses i386_elf_prstatus and PRSTATUS_SIZE/SET_PR_FPVALID
10  * are used to choose the size and location of ->pr_fpvalid of
11  * the layout actually used.
12  */
13 typedef struct user_regs_struct compat_elf_gregset_t;
14 
15 struct i386_elf_prstatus
16 {
17 	struct compat_elf_prstatus_common	common;
18 	struct user_regs_struct32		pr_reg;
19 	compat_int_t			pr_fpvalid;
20 };
21 
22 #define PRSTATUS_SIZE \
23 	(user_64bit_mode(task_pt_regs(current)) \
24 		? sizeof(struct compat_elf_prstatus) \
25 		: sizeof(struct i386_elf_prstatus))
26 #define SET_PR_FPVALID(S) \
27 	(*(user_64bit_mode(task_pt_regs(current)) \
28 		? &(S)->pr_fpvalid 	\
29 		: &((struct i386_elf_prstatus *)(S))->pr_fpvalid) = 1)
30 
31 #endif
32