user.h revision ab797cb4fded31cd30f4cd778f0b850c6801e7db
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 { 64e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long bx; 65e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long cx; 66e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long dx; 67e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long si; 68e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long di; 69e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long bp; 70e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long ax; 71e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long ds; 72e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long es; 73e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long fs; 74e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long gs; 75e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long orig_ax; 76e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long ip; 77e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long cs; 78e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long flags; 79e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long sp; 80e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long ss; 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; 120e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long bp; 121e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long bx; 122e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long r11; 123e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long r10; 124e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long r9; 125e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long r8; 126e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long ax; 127e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long cx; 128e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long dx; 129e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long si; 130e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long di; 131e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long orig_ax; 132e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long ip; 133e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long cs; 134e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long flags; 135e888de81df66036903cde08402ab8e93c910e337Elliott Hughes unsigned long sp; 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 184363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferrisstruct user_fp { 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}; 199ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughesstruct user_vfp { 200ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes unsigned long long fpregs[32]; 201ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes unsigned long fpscr; 202ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes}; 203ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughesstruct user_vfp_exc { 204ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes unsigned long fpexc; 205ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes unsigned long fpinst; 206ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes unsigned long fpinst2; 207ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes}; 208ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughesstruct user { 209363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris struct pt_regs regs; 210363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris int u_fpvalid; 211363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris unsigned long int u_tsize; 212363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris unsigned long int u_dsize; 213363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris unsigned long int u_ssize; 214363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris unsigned long start_code; 215363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris unsigned long start_stack; 216363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris long int signal; 217363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris int reserved; 218363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris unsigned long u_ar0; 219363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris unsigned long magic; 220363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris char u_comm[32]; 221363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris int u_debugreg[8]; 222363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris struct user_fp u_fp; 223ab797cb4fded31cd30f4cd778f0b850c6801e7dbElliott Hughes struct user_fp_struct* u_fp0; 224363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris}; 225363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris 226363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris#elif defined(__aarch64__) 227363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris 228363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris// There are no user structures for 64 bit arm. 229363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris 230e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#else 231e888de81df66036903cde08402ab8e93c910e337Elliott Hughes 232363390eaffaf991b13c9666bb82af7ab793976f6Christopher Ferris#error "Unsupported architecture." 233e888de81df66036903cde08402ab8e93c910e337Elliott Hughes 234e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#endif 235e888de81df66036903cde08402ab8e93c910e337Elliott Hughes 236e888de81df66036903cde08402ab8e93c910e337Elliott Hughes__END_DECLS 237e888de81df66036903cde08402ab8e93c910e337Elliott Hughes 238e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#endif /* _SYS_USER_H_ */ 239