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