1e888de81df66036903cde08402ab8e93c910e337Elliott Hughes/*
2e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * Copyright (C) 2013 The Android Open Source Project
3e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * All rights reserved.
4e888de81df66036903cde08402ab8e93c910e337Elliott Hughes *
5e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * Redistribution and use in source and binary forms, with or without
6e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * modification, are permitted provided that the following conditions
7e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * are met:
8e888de81df66036903cde08402ab8e93c910e337Elliott Hughes *  * Redistributions of source code must retain the above copyright
9e888de81df66036903cde08402ab8e93c910e337Elliott Hughes *    notice, this list of conditions and the following disclaimer.
10e888de81df66036903cde08402ab8e93c910e337Elliott Hughes *  * Redistributions in binary form must reproduce the above copyright
11e888de81df66036903cde08402ab8e93c910e337Elliott Hughes *    notice, this list of conditions and the following disclaimer in
12e888de81df66036903cde08402ab8e93c910e337Elliott Hughes *    the documentation and/or other materials provided with the
13e888de81df66036903cde08402ab8e93c910e337Elliott Hughes *    distribution.
14e888de81df66036903cde08402ab8e93c910e337Elliott Hughes *
15e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26e888de81df66036903cde08402ab8e93c910e337Elliott Hughes * SUCH DAMAGE.
27e888de81df66036903cde08402ab8e93c910e337Elliott Hughes */
28e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
29e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#ifndef _SYS_USER_H_
30e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#define _SYS_USER_H_
31e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
32e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#include <sys/cdefs.h>
330e44bc3baeb1677e5fbdda87a737b9c508c95132Elliott Hughes#include <limits.h> /* For PAGE_SIZE. */
34e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
35e888de81df66036903cde08402ab8e93c910e337Elliott Hughes__BEGIN_DECLS
36e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
37e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#if __i386__
38e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
3993e1907ae1794068c1018750603c9206cb700d1bElliott Hughesstruct user_fpregs_struct {
40e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long cwd;
41e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long swd;
42e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long twd;
43e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long fip;
44e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long fcs;
45e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long foo;
46e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long fos;
47e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long st_space[20];
48e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
49e888de81df66036903cde08402ab8e93c910e337Elliott Hughesstruct user_fxsr_struct {
50e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short cwd;
51e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short swd;
52e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short twd;
53e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short fop;
54e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long fip;
55e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long fcs;
56e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long foo;
57e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long fos;
58e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long mxcsr;
59e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long reserved;
60e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long st_space[32];
61e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long xmm_space[32];
62e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long padding[56];
63e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
64e888de81df66036903cde08402ab8e93c910e337Elliott Hughesstruct user_regs_struct {
65f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long ebx;
66f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long ecx;
67f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long edx;
68f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long esi;
69f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long edi;
70f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long ebp;
71f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long eax;
72f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long xds;
73f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long xes;
74f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long xfs;
75f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long xgs;
76f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long orig_eax;
77f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long eip;
78f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long xcs;
79f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long eflags;
80f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long esp;
81f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long xss;
82e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
83ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughesstruct user {
84e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  struct user_regs_struct regs;
85e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int u_fpvalid;
8693e1907ae1794068c1018750603c9206cb700d1bElliott Hughes  struct user_fpregs_struct i387;
87e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long int u_tsize;
88e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long int u_dsize;
89e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long int u_ssize;
90e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_code;
91e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_stack;
92e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long int signal;
93e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int reserved;
94e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long u_ar0;
9593e1907ae1794068c1018750603c9206cb700d1bElliott Hughes  struct user_fpregs_struct* u_fpstate;
96e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long magic;
97e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  char u_comm[32];
98e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int u_debugreg[8];
99e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
100e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
101e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#elif defined(__x86_64__)
102e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
10393e1907ae1794068c1018750603c9206cb700d1bElliott Hughesstruct user_fpregs_struct {
104e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short cwd;
105e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short swd;
1060c8a5f82e6e77dfafba7f6054b2d6be0d82c45cbRoss McIlroy  unsigned short ftw;
107e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short fop;
108e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u64 rip;
109e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u64 rdp;
110e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u32 mxcsr;
111e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u32 mxcsr_mask;
112e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u32 st_space[32];
113e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u32 xmm_space[64];
114e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u32 padding[24];
115e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
116e888de81df66036903cde08402ab8e93c910e337Elliott Hughesstruct user_regs_struct {
117e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r15;
118e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r14;
119e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r13;
120e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r12;
121eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rbp;
122eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rbx;
123e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r11;
124e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r10;
125e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r9;
126e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r8;
127eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rax;
128eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rcx;
129eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rdx;
130eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rsi;
131eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rdi;
132eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long orig_rax;
133eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rip;
134e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long cs;
135eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long eflags;
136eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rsp;
137e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long ss;
138e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long fs_base;
139e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long gs_base;
140e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long ds;
141e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long es;
142e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long fs;
143e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long gs;
144e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
145e888de81df66036903cde08402ab8e93c910e337Elliott Hughesstruct user {
146e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  struct user_regs_struct regs;
147e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int u_fpvalid;
148e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int pad0;
14993e1907ae1794068c1018750603c9206cb700d1bElliott Hughes  struct user_fpregs_struct i387;
150e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long int u_tsize;
151e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long int u_dsize;
152e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long int u_ssize;
153e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_code;
154e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_stack;
155e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long int signal;
156e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int reserved;
157e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int pad1;
158e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long u_ar0;
15993e1907ae1794068c1018750603c9206cb700d1bElliott Hughes  struct user_fpregs_struct* u_fpstate;
160e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long magic;
161e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  char u_comm[32];
162e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long u_debugreg[8];
163e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long error_code;
164e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long fault_address;
165e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
166e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
167e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#elif defined(__mips__)
168e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
169e888de81df66036903cde08402ab8e93c910e337Elliott Hughesstruct user {
170e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long regs[180 / sizeof(unsigned long) + 64];
171e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  size_t u_tsize;
172e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  size_t u_dsize;
173e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  size_t u_ssize;
174e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_code;
175e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_data;
176e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_stack;
177e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long int signal;
178e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long u_ar0;
179e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long magic;
180e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  char u_comm[32];
181e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
182e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
183363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris#elif defined(__arm__)
184363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris
1853614424e107849c53759ef93b9166e69a76818dfElliott Hughesstruct user_fpregs {
186363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  struct fp_reg {
187363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int sign1:1;
188363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int unused:15;
189363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int sign2:1;
190363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int exponent:14;
191363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int j:1;
192363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int mantissa1:31;
193363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int mantissa0:32;
194363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  } fpregs[8];
195363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned int fpsr:32;
196363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned int fpcr:32;
197363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned char ftype[8];
198363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned int init_flag;
199363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris};
2003614424e107849c53759ef93b9166e69a76818dfElliott Hughesstruct user_regs {
2013614424e107849c53759ef93b9166e69a76818dfElliott Hughes  unsigned long uregs[18];
2023614424e107849c53759ef93b9166e69a76818dfElliott Hughes};
203ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughesstruct user_vfp {
204ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes  unsigned long long fpregs[32];
205ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes  unsigned long fpscr;
206ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes};
207ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughesstruct user_vfp_exc {
208ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes  unsigned long fpexc;
209ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes  unsigned long fpinst;
210ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes  unsigned long fpinst2;
211ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes};
212ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughesstruct user {
2133614424e107849c53759ef93b9166e69a76818dfElliott Hughes  struct user_regs regs;
214363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  int u_fpvalid;
215363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned long int u_tsize;
216363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned long int u_dsize;
217363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned long int u_ssize;
218363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned long start_code;
219363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned long start_stack;
220363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  long int signal;
221363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  int reserved;
2223614424e107849c53759ef93b9166e69a76818dfElliott Hughes  struct user_regs* u_ar0;
223363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned long magic;
224363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  char u_comm[32];
225363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  int u_debugreg[8];
2263614424e107849c53759ef93b9166e69a76818dfElliott Hughes  struct user_fpregs u_fp;
2273614424e107849c53759ef93b9166e69a76818dfElliott Hughes  struct user_fpregs* u_fp0;
228363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris};
229363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris
230363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris#elif defined(__aarch64__)
231363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris
232363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris// There are no user structures for 64 bit arm.
233363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris
234e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#else
235e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
236363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris#error "Unsupported architecture."
237e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
238e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#endif
239e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
240e888de81df66036903cde08402ab8e93c910e337Elliott Hughes__END_DECLS
241e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
242e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#endif  /* _SYS_USER_H_ */
243