user.h revision 0c8a5f82e6e77dfafba7f6054b2d6be0d82c45cb
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