1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 #ifndef _PPC64_PPC32_H 3 #define _PPC64_PPC32_H 4 5 #include <linux/compat.h> 6 #include <asm/siginfo.h> 7 #include <asm/signal.h> 8 9 /* 10 * Data types and macros for providing 32b PowerPC support. 11 */ 12 13 /* These are here to support 32-bit syscalls on a 64-bit kernel. */ 14 15 struct pt_regs32 { 16 unsigned int gpr[32]; 17 unsigned int nip; 18 unsigned int msr; 19 unsigned int orig_gpr3; /* Used for restarting system calls */ 20 unsigned int ctr; 21 unsigned int link; 22 unsigned int xer; 23 unsigned int ccr; 24 unsigned int mq; /* 601 only (not used at present) */ 25 unsigned int trap; /* Reason for being here */ 26 unsigned int dar; /* Fault registers */ 27 unsigned int dsisr; 28 unsigned int result; /* Result of a system call */ 29 }; 30 31 struct sigcontext32 { 32 unsigned int _unused[4]; 33 int signal; 34 compat_uptr_t handler; 35 unsigned int oldmask; 36 compat_uptr_t regs; /* 4 byte pointer to the pt_regs32 structure. */ 37 }; 38 39 struct mcontext32 { 40 elf_gregset_t32 mc_gregs; 41 elf_fpregset_t mc_fregs; 42 unsigned int mc_pad[2]; 43 elf_vrregset_t32 mc_vregs __attribute__((__aligned__(16))); 44 elf_vsrreghalf_t32 mc_vsregs __attribute__((__aligned__(16))); 45 }; 46 47 struct ucontext32 { 48 unsigned int uc_flags; 49 unsigned int uc_link; 50 compat_stack_t uc_stack; 51 int uc_pad[7]; 52 compat_uptr_t uc_regs; /* points to uc_mcontext field */ 53 compat_sigset_t uc_sigmask; /* mask last for extensibility */ 54 /* glibc has 1024-bit signal masks, ours are 64-bit */ 55 int uc_maskext[30]; 56 int uc_pad2[3]; 57 struct mcontext32 uc_mcontext; 58 }; 59 60 #endif /* _PPC64_PPC32_H */ 61