1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 21965aae3SH. Peter Anvin #ifndef _ASM_X86_IA32_H 31965aae3SH. Peter Anvin #define _ASM_X86_IA32_H 4bb898558SAl Viro 5bb898558SAl Viro 6bb898558SAl Viro #ifdef CONFIG_IA32_EMULATION 7bb898558SAl Viro 8bb898558SAl Viro #include <linux/compat.h> 9bb898558SAl Viro 10bb898558SAl Viro /* 11bb898558SAl Viro * 32 bit structures for IA32 support. 12bb898558SAl Viro */ 13bb898558SAl Viro 14decb4c41SIngo Molnar #include <uapi/asm/sigcontext.h> 15bb898558SAl Viro 16bb898558SAl Viro /* signal.h */ 17bb898558SAl Viro 18bb898558SAl Viro struct ucontext_ia32 { 19bb898558SAl Viro unsigned int uc_flags; 20bb898558SAl Viro unsigned int uc_link; 2190268439SAl Viro compat_stack_t uc_stack; 228fcb346bSIngo Molnar struct sigcontext_32 uc_mcontext; 23bb898558SAl Viro compat_sigset_t uc_sigmask; /* mask last for extensibility */ 24bb898558SAl Viro }; 25bb898558SAl Viro 26bb898558SAl Viro /* This matches struct stat64 in glibc2.2, hence the absolutely 27bb898558SAl Viro * insane amounts of padding around dev_t's. 28bb898558SAl Viro */ 29bb898558SAl Viro struct stat64 { 30bb898558SAl Viro unsigned long long st_dev; 31bb898558SAl Viro unsigned char __pad0[4]; 32bb898558SAl Viro 33bb898558SAl Viro #define STAT64_HAS_BROKEN_ST_INO 1 34bb898558SAl Viro unsigned int __st_ino; 35bb898558SAl Viro 36bb898558SAl Viro unsigned int st_mode; 37bb898558SAl Viro unsigned int st_nlink; 38bb898558SAl Viro 39bb898558SAl Viro unsigned int st_uid; 40bb898558SAl Viro unsigned int st_gid; 41bb898558SAl Viro 42bb898558SAl Viro unsigned long long st_rdev; 43bb898558SAl Viro unsigned char __pad3[4]; 44bb898558SAl Viro 45bb898558SAl Viro long long st_size; 46bb898558SAl Viro unsigned int st_blksize; 47bb898558SAl Viro 48bb898558SAl Viro long long st_blocks;/* Number 512-byte blocks allocated */ 49bb898558SAl Viro 50bb898558SAl Viro unsigned st_atime; 51bb898558SAl Viro unsigned st_atime_nsec; 52bb898558SAl Viro unsigned st_mtime; 53bb898558SAl Viro unsigned st_mtime_nsec; 54bb898558SAl Viro unsigned st_ctime; 55bb898558SAl Viro unsigned st_ctime_nsec; 56bb898558SAl Viro 57bb898558SAl Viro unsigned long long st_ino; 58bb898558SAl Viro } __attribute__((packed)); 59bb898558SAl Viro 60bb898558SAl Viro #define IA32_STACK_TOP IA32_PAGE_OFFSET 61bb898558SAl Viro 62bb898558SAl Viro #ifdef __KERNEL__ 63bb898558SAl Viro struct linux_binprm; 64bb898558SAl Viro extern int ia32_setup_arg_pages(struct linux_binprm *bprm, 65bb898558SAl Viro unsigned long stack_top, int exec_stack); 66bb898558SAl Viro struct mm_struct; 67bb898558SAl Viro extern void ia32_pick_mmap_layout(struct mm_struct *mm); 68bb898558SAl Viro 69bb898558SAl Viro #endif 70bb898558SAl Viro 71f259af26SNikolay Borisov extern bool __ia32_enabled; 72f259af26SNikolay Borisov ia32_enabled(void)73f259af26SNikolay Borisovstatic inline bool ia32_enabled(void) 74f259af26SNikolay Borisov { 75f259af26SNikolay Borisov return __ia32_enabled; 76f259af26SNikolay Borisov } 77f259af26SNikolay Borisov ia32_disable(void)78*34c686e5SKirill A. Shutemovstatic inline void ia32_disable(void) 79*34c686e5SKirill A. Shutemov { 80*34c686e5SKirill A. Shutemov __ia32_enabled = false; 81*34c686e5SKirill A. Shutemov } 82*34c686e5SKirill A. Shutemov 83f259af26SNikolay Borisov #else /* !CONFIG_IA32_EMULATION */ 84f259af26SNikolay Borisov ia32_enabled(void)85f259af26SNikolay Borisovstatic inline bool ia32_enabled(void) 86f259af26SNikolay Borisov { 87f259af26SNikolay Borisov return IS_ENABLED(CONFIG_X86_32); 88f259af26SNikolay Borisov } 89f259af26SNikolay Borisov ia32_disable(void)90*34c686e5SKirill A. Shutemovstatic inline void ia32_disable(void) {} 91*34c686e5SKirill A. Shutemov 92f259af26SNikolay Borisov #endif 93bb898558SAl Viro 941965aae3SH. Peter Anvin #endif /* _ASM_X86_IA32_H */ 95