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