ppc32.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:6k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef _PPC64_PPC32_H
  2. #define _PPC64_PPC32_H
  3. #include <asm/siginfo.h>
  4. #include <asm/signal.h>
  5. /*
  6.  * Data types and macros for providing 32b PowerPC support.
  7.  * 
  8.  * This program is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU General Public License
  10.  * as published by the Free Software Foundation; either version
  11.  * 2 of the License, or (at your option) any later version.
  12.  */
  13. #ifndef __KERNEL_STRICT_NAMES
  14. #include <linux/types.h>
  15. typedef __kernel_fsid_t __kernel_fsid_t32;
  16. #endif
  17. /* Use this to get at 32-bit user passed pointers. */
  18. /* Things to consider: the low-level assembly stub does
  19.    srl x, 0, x for first four arguments, so if you have
  20.    pointer to something in the first four arguments, just
  21.    declare it as a pointer, not u32. On the other side, 
  22.    arguments from 5th onwards should be declared as u32
  23.    for pointers, and need AA() around each usage.
  24.    A() macro should be used for places where you e.g.
  25.    have some internal variable u32 and just want to get
  26.    rid of a compiler warning. AA() has to be used in
  27.    places where you want to convert a function argument
  28.    to 32bit pointer or when you e.g. access pt_regs
  29.    structure and want to consider 32bit registers only.
  30.    -
  31.  */
  32. #define A(__x) ((unsigned long)(__x))
  33. #define AA(__x)
  34. ({ unsigned long __ret;
  35. __asm__ ("clrldi %0, %0, 32"
  36.  : "=r" (__ret)
  37.  : "0" (__x));
  38. __ret;
  39. })
  40. /* These are here to support 32-bit syscalls on a 64-bit kernel. */
  41. typedef unsigned int           __kernel_size_t32;
  42. typedef int                    __kernel_ssize_t32;
  43. typedef int                    __kernel_ptrdiff_t32;
  44. typedef int                    __kernel_time_t32;
  45. typedef int                    __kernel_clock_t32;
  46. typedef int                    __kernel_pid_t32;
  47. typedef unsigned short         __kernel_ipc_pid_t32;
  48. typedef unsigned int           __kernel_uid_t32;
  49. typedef unsigned int           __kernel_gid_t32;
  50. typedef unsigned int           __kernel_dev_t32;
  51. typedef unsigned int           __kernel_ino_t32;
  52. typedef unsigned int           __kernel_mode_t32;
  53. typedef unsigned int           __kernel_umode_t32;
  54. typedef short                  __kernel_nlink_t32;
  55. typedef int                    __kernel_daddr_t32;
  56. typedef int                    __kernel_off_t32;
  57. typedef unsigned int           __kernel_caddr_t32;
  58. typedef int         __kernel_loff_t32;
  59. /* typedef __kernel_fsid_t        __kernel_fsid_t32; */
  60. struct statfs32 {
  61. int f_type;
  62. int f_bsize;
  63. int f_blocks;
  64. int f_bfree;
  65. int f_bavail;
  66. int f_files;
  67. int f_ffree;
  68. __kernel_fsid_t32 f_fsid;
  69. int f_namelen;  /* SunOS ignores this field. */
  70. int f_spare[6];
  71. };
  72. typedef union sigval32 {
  73. int sival_int;
  74. unsigned int sival_ptr;
  75. } sigval_t32;
  76. typedef struct siginfo32 {
  77. int si_signo;
  78. int si_errno;
  79. int si_code;
  80. union {
  81. int _pad[SI_PAD_SIZE];
  82. /* kill() */
  83. struct {
  84. __kernel_pid_t32 _pid; /* sender's pid */
  85. unsigned int _uid; /* sender's uid */
  86. } _kill;
  87. /* POSIX.1b timers */
  88. struct {
  89. unsigned int _timer1;
  90. unsigned int _timer2;
  91. } _timer;
  92. /* POSIX.1b signals */
  93. struct {
  94. __kernel_pid_t32 _pid; /* sender's pid */
  95. unsigned int _uid; /* sender's uid */
  96. sigval_t32 _sigval;
  97. } _rt;
  98. /* SIGCHLD */
  99. struct {
  100. __kernel_pid_t32 _pid; /* which child */
  101. unsigned int _uid; /* sender's uid */
  102. int _status; /* exit code */
  103. __kernel_clock_t32 _utime;
  104. __kernel_clock_t32 _stime;
  105. } _sigchld;
  106. /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
  107. struct {
  108. u32 _addr; /* faulting insn/memory ref. */
  109. int _trapno;
  110. } _sigfault;
  111. /* SIGPOLL */
  112. struct {
  113. int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
  114. int _fd;
  115. } _sigpoll;
  116. } _sifields;
  117. } siginfo_t32;
  118. #define __old_sigset_t32 old_sigset_t32
  119. #define __old_sigaction32 old_sigaction32
  120. typedef unsigned int __old_sigset_t32;
  121. struct __old_sigaction32 {
  122. unsigned sa_handler;
  123. __old_sigset_t32   sa_mask;
  124. unsigned int     sa_flags;
  125. unsigned sa_restorer;     /* not used by Linux/SPARC yet */
  126. };
  127. #define _PPC32_NSIG        64
  128. #define _PPC32_NSIG_BPW        32
  129. #define _PPC32_NSIG_WORDS        (_PPC32_NSIG / _PPC32_NSIG_BPW)
  130. typedef struct {
  131.        unsigned int sig[_PPC32_NSIG_WORDS];
  132. } sigset32_t;
  133. struct sigaction32 {
  134.        unsigned int  sa_handler; /* Really a pointer, but need to deal 
  135.      with 32 bits */
  136.        unsigned int sa_flags;
  137.        unsigned int sa_restorer; /* Another 32 bit pointer */
  138.        sigset32_t sa_mask; /* A 32 bit mask */
  139. };
  140. typedef struct sigaltstack_32 {
  141. unsigned int ss_sp;
  142. int ss_flags;
  143. __kernel_size_t32 ss_size;
  144. } stack_32_t;
  145. struct flock32 {
  146. short l_type;
  147. short l_whence;
  148. __kernel_off_t32 l_start;
  149. __kernel_off_t32 l_len;
  150. __kernel_pid_t32 l_pid;
  151. short __unused;
  152. };
  153. struct stat32 {
  154. __kernel_dev_t32   st_dev; /* 2 */
  155. /* __kernel_dev_t32 __pad1; */ /* 2 */
  156. __kernel_ino_t32   st_ino; /* 4  */
  157. __kernel_mode_t32  st_mode; /* 2  */
  158. short       st_nlink; /* 2 */
  159. __kernel_uid_t32   st_uid; /* 2 */
  160. __kernel_gid_t32   st_gid; /* 2 */
  161. __kernel_dev_t32   st_rdev; /* 2 */
  162. /* __kernel_dev_t32 __pad2; */ /* 2 */
  163. __kernel_off_t32   st_size; /* 4 */
  164. __kernel_off_t32   st_blksize; /* 4 */
  165. __kernel_off_t32   st_blocks; /* 4 */
  166. __kernel_time_t32  st_atime; /* 4 */
  167. unsigned int       __unused1; /* 4 */
  168. __kernel_time_t32  st_mtime; /* 4 */
  169. unsigned int       __unused2; /* 4 */
  170. __kernel_time_t32  st_ctime; /* 4 */
  171. unsigned int       __unused3; /* 4 */
  172. unsigned int  __unused4[2]; /* 2*4 */
  173. };
  174. struct __old_kernel_stat32
  175. {
  176. unsigned short st_dev;
  177. unsigned short st_ino;
  178. unsigned short st_mode;
  179. unsigned short st_nlink;
  180. unsigned short st_uid;
  181. unsigned short st_gid;
  182. unsigned short st_rdev;
  183. unsigned int   st_size;
  184. unsigned int   st_atime;
  185. unsigned int   st_mtime;
  186. unsigned int   st_ctime;
  187. };
  188. struct sigcontext32_struct {
  189. unsigned int _unused[4];
  190. int signal;
  191. unsigned int handler;
  192. unsigned int oldmask;
  193. u32 regs;  /* 4 byte pointer to the pt_regs32 structure. */
  194. };
  195. struct ucontext32 { 
  196. unsigned int   uc_flags;
  197. unsigned int    uc_link;
  198. stack_32_t   uc_stack;
  199. struct sigcontext32_struct uc_mcontext;
  200. sigset_t   uc_sigmask; /* mask last for extensibility */
  201. };
  202. #endif  /* _PPC64_PPC32_H */