2005-04-17 02:20:36 +04:00
# ifndef _PPC64_PPC32_H
# define _PPC64_PPC32_H
# include <linux/compat.h>
# include <asm/siginfo.h>
# include <asm/signal.h>
/*
* Data types and macros for providing 32 b PowerPC support .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version
* 2 of the License , or ( at your option ) any later version .
*/
/* These are here to support 32-bit syscalls on a 64-bit kernel. */
typedef struct compat_siginfo {
int si_signo ;
int si_errno ;
int si_code ;
union {
int _pad [ SI_PAD_SIZE32 ] ;
/* kill() */
struct {
compat_pid_t _pid ; /* sender's pid */
compat_uid_t _uid ; /* sender's uid */
} _kill ;
/* POSIX.1b timers */
struct {
2005-06-23 11:10:14 +04:00
compat_timer_t _tid ; /* timer id */
2005-04-17 02:20:36 +04:00
int _overrun ; /* overrun count */
compat_sigval_t _sigval ; /* same as below */
int _sys_private ; /* not to be passed to user */
} _timer ;
/* POSIX.1b signals */
struct {
compat_pid_t _pid ; /* sender's pid */
compat_uid_t _uid ; /* sender's uid */
compat_sigval_t _sigval ;
} _rt ;
/* SIGCHLD */
struct {
compat_pid_t _pid ; /* which child */
compat_uid_t _uid ; /* sender's uid */
int _status ; /* exit code */
compat_clock_t _utime ;
compat_clock_t _stime ;
} _sigchld ;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
struct {
unsigned int _addr ; /* faulting insn/memory ref. */
} _sigfault ;
/* SIGPOLL */
struct {
int _band ; /* POLL_IN, POLL_OUT, POLL_MSG */
int _fd ;
} _sigpoll ;
} _sifields ;
} compat_siginfo_t ;
# define __old_sigaction32 old_sigaction32
struct __old_sigaction32 {
2005-10-18 05:17:58 +04:00
compat_uptr_t sa_handler ;
2005-04-17 02:20:36 +04:00
compat_old_sigset_t sa_mask ;
unsigned int sa_flags ;
2005-10-18 05:17:58 +04:00
compat_uptr_t sa_restorer ; /* not used by Linux/SPARC yet */
2005-04-17 02:20:36 +04:00
} ;
struct sigaction32 {
2005-10-18 05:17:58 +04:00
compat_uptr_t sa_handler ; /* Really a pointer, but need to deal with 32 bits */
2005-04-17 02:20:36 +04:00
unsigned int sa_flags ;
2005-10-18 05:17:58 +04:00
compat_uptr_t sa_restorer ; /* Another 32 bit pointer */
2005-04-17 02:20:36 +04:00
compat_sigset_t sa_mask ; /* A 32 bit mask */
} ;
typedef struct sigaltstack_32 {
unsigned int ss_sp ;
int ss_flags ;
compat_size_t ss_size ;
} stack_32_t ;
2005-11-03 07:14:36 +03:00
struct pt_regs32 {
unsigned int gpr [ 32 ] ;
unsigned int nip ;
unsigned int msr ;
unsigned int orig_gpr3 ; /* Used for restarting system calls */
unsigned int ctr ;
unsigned int link ;
unsigned int xer ;
unsigned int ccr ;
unsigned int mq ; /* 601 only (not used at present) */
unsigned int trap ; /* Reason for being here */
unsigned int dar ; /* Fault registers */
unsigned int dsisr ;
unsigned int result ; /* Result of a system call */
} ;
2005-04-17 02:20:36 +04:00
struct sigcontext32 {
unsigned int _unused [ 4 ] ;
int signal ;
2005-10-18 05:17:58 +04:00
compat_uptr_t handler ;
2005-04-17 02:20:36 +04:00
unsigned int oldmask ;
2005-10-18 05:17:58 +04:00
compat_uptr_t regs ; /* 4 byte pointer to the pt_regs32 structure. */
2005-04-17 02:20:36 +04:00
} ;
struct mcontext32 {
elf_gregset_t32 mc_gregs ;
elf_fpregset_t mc_fregs ;
unsigned int mc_pad [ 2 ] ;
elf_vrregset_t32 mc_vregs __attribute__ ( ( __aligned__ ( 16 ) ) ) ;
2008-06-25 08:07:18 +04:00
elf_vsrreghalf_t32 mc_vsregs __attribute__ ( ( __aligned__ ( 16 ) ) ) ;
2005-04-17 02:20:36 +04:00
} ;
struct ucontext32 {
unsigned int uc_flags ;
unsigned int uc_link ;
stack_32_t uc_stack ;
int uc_pad [ 7 ] ;
2005-10-18 05:17:58 +04:00
compat_uptr_t uc_regs ; /* points to uc_mcontext field */
2005-04-17 02:20:36 +04:00
compat_sigset_t uc_sigmask ; /* mask last for extensibility */
/* glibc has 1024-bit signal masks, ours are 64-bit */
int uc_maskext [ 30 ] ;
int uc_pad2 [ 3 ] ;
struct mcontext32 uc_mcontext ;
} ;
# endif /* _PPC64_PPC32_H */