user.h revision e888de81df66036903cde08402ab8e93c910e337
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};
82e888de81df66036903cde08402ab8e93c910e337Elliott 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;
94e888de81df66036903cde08402ab8e93c910e337Elliott 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;
158e888de81df66036903cde08402ab8e93c910e337Elliott 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
182e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#else
183e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
184e888de81df66036903cde08402ab8e93c910e337Elliott Hughes/* arm and aarch64 have uapi user.h headers. */
185e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#include <asm/user.h>
186e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
187e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#endif
188e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
189e888de81df66036903cde08402ab8e93c910e337Elliott Hughes__END_DECLS
190e888de81df66036903cde08402ab8e93c910e337Elliott Hughes
191e888de81df66036903cde08402ab8e93c910e337Elliott Hughes#endif  /* _SYS_USER_H_ */
192