user.h revision 3614424e107849c53759ef93b9166e69a76818df
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>
33e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
34e888de81df66036903cde08402ab8e93c910e337Elliott Hughes__BEGIN_DECLS
35e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
36e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#if __i386__
37e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
38e888de81df66036903cde08402ab8e93c910e337Elliott Hughesstruct user_i387_struct {
39e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long cwd;
40e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long swd;
41e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long twd;
42e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long fip;
43e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long fcs;
44e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long foo;
45e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long fos;
46e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long st_space[20];
47e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
48e888de81df66036903cde08402ab8e93c910e337Elliott Hughesstruct user_fxsr_struct {
49e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short cwd;
50e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short swd;
51e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short twd;
52e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short fop;
53e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long fip;
54e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long fcs;
55e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long foo;
56e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long fos;
57e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long mxcsr;
58e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long reserved;
59e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long st_space[32];
60e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long xmm_space[32];
61e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long padding[56];
62e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
63e888de81df66036903cde08402ab8e93c910e337Elliott Hughesstruct user_regs_struct {
64f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long ebx;
65f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long ecx;
66f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long edx;
67f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long esi;
68f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long edi;
69f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long ebp;
70f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long eax;
71f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long xds;
72f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long xes;
73f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long xfs;
74f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long xgs;
75f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long orig_eax;
76f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long eip;
77f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long xcs;
78f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long eflags;
79f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long esp;
80f8b2b3c81ea4cebf1f9adbb47cc9dfb81a1ed309Elliott Hughes  long xss;
81e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
82ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughesstruct user {
83e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  struct user_regs_struct regs;
84e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int u_fpvalid;
85e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  struct user_i387_struct i387;
86e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long int u_tsize;
87e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long int u_dsize;
88e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long int u_ssize;
89e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_code;
90e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_stack;
91e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long int signal;
92e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int reserved;
93e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long u_ar0;
94ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes  struct user_i387_struct* u_fpstate;
95e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long magic;
96e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  char u_comm[32];
97e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int u_debugreg[8];
98e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
99e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
100e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#elif defined(__x86_64__)
101e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
102e888de81df66036903cde08402ab8e93c910e337Elliott Hughesstruct user_i387_struct {
103e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short cwd;
104e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short swd;
105e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short twd;
106e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned short fop;
107e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u64 rip;
108e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u64 rdp;
109e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u32 mxcsr;
110e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u32 mxcsr_mask;
111e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u32 st_space[32];
112e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u32 xmm_space[64];
113e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  __u32 padding[24];
114e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
115e888de81df66036903cde08402ab8e93c910e337Elliott Hughesstruct user_regs_struct {
116e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r15;
117e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r14;
118e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r13;
119e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r12;
120eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rbp;
121eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rbx;
122e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r11;
123e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r10;
124e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r9;
125e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long r8;
126eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rax;
127eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rcx;
128eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rdx;
129eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rsi;
130eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rdi;
131eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long orig_rax;
132eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rip;
133e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long cs;
134eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long eflags;
135eddc8ece3de370fc321d7b974f6565db3a91543bElliott Hughes  unsigned long rsp;
136e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long ss;
137e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long fs_base;
138e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long gs_base;
139e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long ds;
140e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long es;
141e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long fs;
142e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long gs;
143e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
144e888de81df66036903cde08402ab8e93c910e337Elliott Hughesstruct user {
145e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  struct user_regs_struct regs;
146e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int u_fpvalid;
147e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int pad0;
148e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  struct user_i387_struct i387;
149e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long int u_tsize;
150e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long int u_dsize;
151e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long int u_ssize;
152e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_code;
153e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_stack;
154e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long int signal;
155e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int reserved;
156e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  int pad1;
157e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long u_ar0;
158ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes  struct user_i387_struct* u_fpstate;
159e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long magic;
160e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  char u_comm[32];
161e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long u_debugreg[8];
162e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long error_code;
163e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long fault_address;
164e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
165e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
166e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#elif defined(__mips__)
167e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
168e888de81df66036903cde08402ab8e93c910e337Elliott Hughesstruct user {
169e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long regs[180 / sizeof(unsigned long) + 64];
170e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  size_t u_tsize;
171e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  size_t u_dsize;
172e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  size_t u_ssize;
173e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_code;
174e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_data;
175e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long start_stack;
176e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  long int signal;
177e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long u_ar0;
178e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  unsigned long magic;
179e888de81df66036903cde08402ab8e93c910e337Elliott Hughes  char u_comm[32];
180e888de81df66036903cde08402ab8e93c910e337Elliott Hughes};
181e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
182363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris#elif defined(__arm__)
183363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris
1843614424e107849c53759ef93b9166e69a76818dfElliott Hughesstruct user_fpregs {
185363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  struct fp_reg {
186363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int sign1:1;
187363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int unused:15;
188363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int sign2:1;
189363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int exponent:14;
190363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int j:1;
191363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int mantissa1:31;
192363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris    unsigned int mantissa0:32;
193363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  } fpregs[8];
194363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned int fpsr:32;
195363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned int fpcr:32;
196363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned char ftype[8];
197363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned int init_flag;
198363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris};
1993614424e107849c53759ef93b9166e69a76818dfElliott Hughesstruct user_regs {
2003614424e107849c53759ef93b9166e69a76818dfElliott Hughes  unsigned long uregs[18];
2013614424e107849c53759ef93b9166e69a76818dfElliott Hughes};
202ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughesstruct user_vfp {
203ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes  unsigned long long fpregs[32];
204ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes  unsigned long fpscr;
205ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes};
206ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughesstruct user_vfp_exc {
207ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes  unsigned long fpexc;
208ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes  unsigned long fpinst;
209ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes  unsigned long fpinst2;
210ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes};
211ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughesstruct user {
2123614424e107849c53759ef93b9166e69a76818dfElliott Hughes  struct user_regs regs;
213363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  int u_fpvalid;
214363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned long int u_tsize;
215363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned long int u_dsize;
216363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned long int u_ssize;
217363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned long start_code;
218363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned long start_stack;
219363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  long int signal;
220363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  int reserved;
2213614424e107849c53759ef93b9166e69a76818dfElliott Hughes  struct user_regs* u_ar0;
222363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  unsigned long magic;
223363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  char u_comm[32];
224363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris  int u_debugreg[8];
2253614424e107849c53759ef93b9166e69a76818dfElliott Hughes  struct user_fpregs u_fp;
2263614424e107849c53759ef93b9166e69a76818dfElliott Hughes  struct user_fpregs* u_fp0;
227363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris};
228363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris
229363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris#elif defined(__aarch64__)
230363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris
231363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris// There are no user structures for 64 bit arm.
232363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris
233e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#else
234e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
235363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris#error "Unsupported architecture."
236e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
237e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#endif
238e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
239e888de81df66036903cde08402ab8e93c910e337Elliott Hughes__END_DECLS
240e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
241e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#endif  /* _SYS_USER_H_ */
242