xref: /aosp_15_r20/bionic/libc/include/sys/user.h (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker /*
2*8d67ca89SAndroid Build Coastguard Worker  * Copyright (C) 2013 The Android Open Source Project
3*8d67ca89SAndroid Build Coastguard Worker  * All rights reserved.
4*8d67ca89SAndroid Build Coastguard Worker  *
5*8d67ca89SAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
6*8d67ca89SAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
7*8d67ca89SAndroid Build Coastguard Worker  * are met:
8*8d67ca89SAndroid Build Coastguard Worker  *  * Redistributions of source code must retain the above copyright
9*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
10*8d67ca89SAndroid Build Coastguard Worker  *  * Redistributions in binary form must reproduce the above copyright
11*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in
12*8d67ca89SAndroid Build Coastguard Worker  *    the documentation and/or other materials provided with the
13*8d67ca89SAndroid Build Coastguard Worker  *    distribution.
14*8d67ca89SAndroid Build Coastguard Worker  *
15*8d67ca89SAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16*8d67ca89SAndroid Build Coastguard Worker  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17*8d67ca89SAndroid Build Coastguard Worker  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18*8d67ca89SAndroid Build Coastguard Worker  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19*8d67ca89SAndroid Build Coastguard Worker  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20*8d67ca89SAndroid Build Coastguard Worker  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21*8d67ca89SAndroid Build Coastguard Worker  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22*8d67ca89SAndroid Build Coastguard Worker  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23*8d67ca89SAndroid Build Coastguard Worker  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24*8d67ca89SAndroid Build Coastguard Worker  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25*8d67ca89SAndroid Build Coastguard Worker  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26*8d67ca89SAndroid Build Coastguard Worker  * SUCH DAMAGE.
27*8d67ca89SAndroid Build Coastguard Worker  */
28*8d67ca89SAndroid Build Coastguard Worker 
29*8d67ca89SAndroid Build Coastguard Worker #pragma once
30*8d67ca89SAndroid Build Coastguard Worker 
31*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h>
32*8d67ca89SAndroid Build Coastguard Worker #include <stddef.h> /* For size_t. */
33*8d67ca89SAndroid Build Coastguard Worker #include <stdint.h>
34*8d67ca89SAndroid Build Coastguard Worker 
35*8d67ca89SAndroid Build Coastguard Worker #include <bits/page_size.h>
36*8d67ca89SAndroid Build Coastguard Worker 
37*8d67ca89SAndroid Build Coastguard Worker __BEGIN_DECLS
38*8d67ca89SAndroid Build Coastguard Worker 
39*8d67ca89SAndroid Build Coastguard Worker #if defined(__i386__)
40*8d67ca89SAndroid Build Coastguard Worker 
41*8d67ca89SAndroid Build Coastguard Worker struct user_fpregs_struct {
42*8d67ca89SAndroid Build Coastguard Worker   long cwd;
43*8d67ca89SAndroid Build Coastguard Worker   long swd;
44*8d67ca89SAndroid Build Coastguard Worker   long twd;
45*8d67ca89SAndroid Build Coastguard Worker   long fip;
46*8d67ca89SAndroid Build Coastguard Worker   long fcs;
47*8d67ca89SAndroid Build Coastguard Worker   long foo;
48*8d67ca89SAndroid Build Coastguard Worker   long fos;
49*8d67ca89SAndroid Build Coastguard Worker   long st_space[20];
50*8d67ca89SAndroid Build Coastguard Worker };
51*8d67ca89SAndroid Build Coastguard Worker struct user_fpxregs_struct {
52*8d67ca89SAndroid Build Coastguard Worker   unsigned short cwd;
53*8d67ca89SAndroid Build Coastguard Worker   unsigned short swd;
54*8d67ca89SAndroid Build Coastguard Worker   unsigned short twd;
55*8d67ca89SAndroid Build Coastguard Worker   unsigned short fop;
56*8d67ca89SAndroid Build Coastguard Worker   long fip;
57*8d67ca89SAndroid Build Coastguard Worker   long fcs;
58*8d67ca89SAndroid Build Coastguard Worker   long foo;
59*8d67ca89SAndroid Build Coastguard Worker   long fos;
60*8d67ca89SAndroid Build Coastguard Worker   long mxcsr;
61*8d67ca89SAndroid Build Coastguard Worker   long reserved;
62*8d67ca89SAndroid Build Coastguard Worker   long st_space[32];
63*8d67ca89SAndroid Build Coastguard Worker   long xmm_space[32];
64*8d67ca89SAndroid Build Coastguard Worker   long padding[56];
65*8d67ca89SAndroid Build Coastguard Worker };
66*8d67ca89SAndroid Build Coastguard Worker struct user_regs_struct {
67*8d67ca89SAndroid Build Coastguard Worker   long ebx;
68*8d67ca89SAndroid Build Coastguard Worker   long ecx;
69*8d67ca89SAndroid Build Coastguard Worker   long edx;
70*8d67ca89SAndroid Build Coastguard Worker   long esi;
71*8d67ca89SAndroid Build Coastguard Worker   long edi;
72*8d67ca89SAndroid Build Coastguard Worker   long ebp;
73*8d67ca89SAndroid Build Coastguard Worker   long eax;
74*8d67ca89SAndroid Build Coastguard Worker   long xds;
75*8d67ca89SAndroid Build Coastguard Worker   long xes;
76*8d67ca89SAndroid Build Coastguard Worker   long xfs;
77*8d67ca89SAndroid Build Coastguard Worker   long xgs;
78*8d67ca89SAndroid Build Coastguard Worker   long orig_eax;
79*8d67ca89SAndroid Build Coastguard Worker   long eip;
80*8d67ca89SAndroid Build Coastguard Worker   long xcs;
81*8d67ca89SAndroid Build Coastguard Worker   long eflags;
82*8d67ca89SAndroid Build Coastguard Worker   long esp;
83*8d67ca89SAndroid Build Coastguard Worker   long xss;
84*8d67ca89SAndroid Build Coastguard Worker };
85*8d67ca89SAndroid Build Coastguard Worker struct user {
86*8d67ca89SAndroid Build Coastguard Worker   struct user_regs_struct regs;
87*8d67ca89SAndroid Build Coastguard Worker   int u_fpvalid;
88*8d67ca89SAndroid Build Coastguard Worker   struct user_fpregs_struct i387;
89*8d67ca89SAndroid Build Coastguard Worker   unsigned long int u_tsize;
90*8d67ca89SAndroid Build Coastguard Worker   unsigned long int u_dsize;
91*8d67ca89SAndroid Build Coastguard Worker   unsigned long int u_ssize;
92*8d67ca89SAndroid Build Coastguard Worker   unsigned long start_code;
93*8d67ca89SAndroid Build Coastguard Worker   unsigned long start_stack;
94*8d67ca89SAndroid Build Coastguard Worker   long int signal;
95*8d67ca89SAndroid Build Coastguard Worker   int reserved;
96*8d67ca89SAndroid Build Coastguard Worker   struct user_regs_struct* u_ar0;
97*8d67ca89SAndroid Build Coastguard Worker   struct user_fpregs_struct* u_fpstate;
98*8d67ca89SAndroid Build Coastguard Worker   unsigned long magic;
99*8d67ca89SAndroid Build Coastguard Worker   char u_comm[32];
100*8d67ca89SAndroid Build Coastguard Worker   int u_debugreg[8];
101*8d67ca89SAndroid Build Coastguard Worker };
102*8d67ca89SAndroid Build Coastguard Worker 
103*8d67ca89SAndroid Build Coastguard Worker #define UPAGES 1
104*8d67ca89SAndroid Build Coastguard Worker #define HOST_TEXT_START_ADDR (u.start_code)
105*8d67ca89SAndroid Build Coastguard Worker #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * PAGE_SIZE)
106*8d67ca89SAndroid Build Coastguard Worker 
107*8d67ca89SAndroid Build Coastguard Worker #elif defined(__x86_64__)
108*8d67ca89SAndroid Build Coastguard Worker 
109*8d67ca89SAndroid Build Coastguard Worker struct user_fpregs_struct {
110*8d67ca89SAndroid Build Coastguard Worker   unsigned short cwd;
111*8d67ca89SAndroid Build Coastguard Worker   unsigned short swd;
112*8d67ca89SAndroid Build Coastguard Worker   unsigned short ftw;
113*8d67ca89SAndroid Build Coastguard Worker   unsigned short fop;
114*8d67ca89SAndroid Build Coastguard Worker   unsigned long rip;
115*8d67ca89SAndroid Build Coastguard Worker   unsigned long rdp;
116*8d67ca89SAndroid Build Coastguard Worker   unsigned int mxcsr;
117*8d67ca89SAndroid Build Coastguard Worker   unsigned int mxcr_mask;
118*8d67ca89SAndroid Build Coastguard Worker   unsigned int st_space[32];
119*8d67ca89SAndroid Build Coastguard Worker   unsigned int xmm_space[64];
120*8d67ca89SAndroid Build Coastguard Worker   unsigned int padding[24];
121*8d67ca89SAndroid Build Coastguard Worker };
122*8d67ca89SAndroid Build Coastguard Worker struct user_regs_struct {
123*8d67ca89SAndroid Build Coastguard Worker   unsigned long r15;
124*8d67ca89SAndroid Build Coastguard Worker   unsigned long r14;
125*8d67ca89SAndroid Build Coastguard Worker   unsigned long r13;
126*8d67ca89SAndroid Build Coastguard Worker   unsigned long r12;
127*8d67ca89SAndroid Build Coastguard Worker   unsigned long rbp;
128*8d67ca89SAndroid Build Coastguard Worker   unsigned long rbx;
129*8d67ca89SAndroid Build Coastguard Worker   unsigned long r11;
130*8d67ca89SAndroid Build Coastguard Worker   unsigned long r10;
131*8d67ca89SAndroid Build Coastguard Worker   unsigned long r9;
132*8d67ca89SAndroid Build Coastguard Worker   unsigned long r8;
133*8d67ca89SAndroid Build Coastguard Worker   unsigned long rax;
134*8d67ca89SAndroid Build Coastguard Worker   unsigned long rcx;
135*8d67ca89SAndroid Build Coastguard Worker   unsigned long rdx;
136*8d67ca89SAndroid Build Coastguard Worker   unsigned long rsi;
137*8d67ca89SAndroid Build Coastguard Worker   unsigned long rdi;
138*8d67ca89SAndroid Build Coastguard Worker   unsigned long orig_rax;
139*8d67ca89SAndroid Build Coastguard Worker   unsigned long rip;
140*8d67ca89SAndroid Build Coastguard Worker   unsigned long cs;
141*8d67ca89SAndroid Build Coastguard Worker   unsigned long eflags;
142*8d67ca89SAndroid Build Coastguard Worker   unsigned long rsp;
143*8d67ca89SAndroid Build Coastguard Worker   unsigned long ss;
144*8d67ca89SAndroid Build Coastguard Worker   unsigned long fs_base;
145*8d67ca89SAndroid Build Coastguard Worker   unsigned long gs_base;
146*8d67ca89SAndroid Build Coastguard Worker   unsigned long ds;
147*8d67ca89SAndroid Build Coastguard Worker   unsigned long es;
148*8d67ca89SAndroid Build Coastguard Worker   unsigned long fs;
149*8d67ca89SAndroid Build Coastguard Worker   unsigned long gs;
150*8d67ca89SAndroid Build Coastguard Worker };
151*8d67ca89SAndroid Build Coastguard Worker struct user {
152*8d67ca89SAndroid Build Coastguard Worker   struct user_regs_struct regs;
153*8d67ca89SAndroid Build Coastguard Worker   int u_fpvalid;
154*8d67ca89SAndroid Build Coastguard Worker   int pad0;
155*8d67ca89SAndroid Build Coastguard Worker   struct user_fpregs_struct i387;
156*8d67ca89SAndroid Build Coastguard Worker   unsigned long int u_tsize;
157*8d67ca89SAndroid Build Coastguard Worker   unsigned long int u_dsize;
158*8d67ca89SAndroid Build Coastguard Worker   unsigned long int u_ssize;
159*8d67ca89SAndroid Build Coastguard Worker   unsigned long start_code;
160*8d67ca89SAndroid Build Coastguard Worker   unsigned long start_stack;
161*8d67ca89SAndroid Build Coastguard Worker   long int signal;
162*8d67ca89SAndroid Build Coastguard Worker   int reserved;
163*8d67ca89SAndroid Build Coastguard Worker   int pad1;
164*8d67ca89SAndroid Build Coastguard Worker   struct user_regs_struct* u_ar0;
165*8d67ca89SAndroid Build Coastguard Worker   struct user_fpregs_struct* u_fpstate;
166*8d67ca89SAndroid Build Coastguard Worker   unsigned long magic;
167*8d67ca89SAndroid Build Coastguard Worker   char u_comm[32];
168*8d67ca89SAndroid Build Coastguard Worker   unsigned long u_debugreg[8];
169*8d67ca89SAndroid Build Coastguard Worker   unsigned long error_code;
170*8d67ca89SAndroid Build Coastguard Worker   unsigned long fault_address;
171*8d67ca89SAndroid Build Coastguard Worker };
172*8d67ca89SAndroid Build Coastguard Worker 
173*8d67ca89SAndroid Build Coastguard Worker #elif defined(__arm__)
174*8d67ca89SAndroid Build Coastguard Worker 
175*8d67ca89SAndroid Build Coastguard Worker struct user_fpregs {
176*8d67ca89SAndroid Build Coastguard Worker   struct fp_reg {
177*8d67ca89SAndroid Build Coastguard Worker     unsigned int sign1:1;
178*8d67ca89SAndroid Build Coastguard Worker     unsigned int unused:15;
179*8d67ca89SAndroid Build Coastguard Worker     unsigned int sign2:1;
180*8d67ca89SAndroid Build Coastguard Worker     unsigned int exponent:14;
181*8d67ca89SAndroid Build Coastguard Worker     unsigned int j:1;
182*8d67ca89SAndroid Build Coastguard Worker     unsigned int mantissa1:31;
183*8d67ca89SAndroid Build Coastguard Worker     unsigned int mantissa0:32;
184*8d67ca89SAndroid Build Coastguard Worker   } fpregs[8];
185*8d67ca89SAndroid Build Coastguard Worker   unsigned int fpsr:32;
186*8d67ca89SAndroid Build Coastguard Worker   unsigned int fpcr:32;
187*8d67ca89SAndroid Build Coastguard Worker   unsigned char ftype[8];
188*8d67ca89SAndroid Build Coastguard Worker   unsigned int init_flag;
189*8d67ca89SAndroid Build Coastguard Worker };
190*8d67ca89SAndroid Build Coastguard Worker struct user_regs {
191*8d67ca89SAndroid Build Coastguard Worker   unsigned long uregs[18];
192*8d67ca89SAndroid Build Coastguard Worker };
193*8d67ca89SAndroid Build Coastguard Worker struct user_vfp {
194*8d67ca89SAndroid Build Coastguard Worker   unsigned long long fpregs[32];
195*8d67ca89SAndroid Build Coastguard Worker   unsigned long fpscr;
196*8d67ca89SAndroid Build Coastguard Worker };
197*8d67ca89SAndroid Build Coastguard Worker struct user_vfp_exc {
198*8d67ca89SAndroid Build Coastguard Worker   unsigned long fpexc;
199*8d67ca89SAndroid Build Coastguard Worker   unsigned long fpinst;
200*8d67ca89SAndroid Build Coastguard Worker   unsigned long fpinst2;
201*8d67ca89SAndroid Build Coastguard Worker };
202*8d67ca89SAndroid Build Coastguard Worker struct user {
203*8d67ca89SAndroid Build Coastguard Worker   struct user_regs regs;
204*8d67ca89SAndroid Build Coastguard Worker   int u_fpvalid;
205*8d67ca89SAndroid Build Coastguard Worker   unsigned long int u_tsize;
206*8d67ca89SAndroid Build Coastguard Worker   unsigned long int u_dsize;
207*8d67ca89SAndroid Build Coastguard Worker   unsigned long int u_ssize;
208*8d67ca89SAndroid Build Coastguard Worker   unsigned long start_code;
209*8d67ca89SAndroid Build Coastguard Worker   unsigned long start_stack;
210*8d67ca89SAndroid Build Coastguard Worker   long int signal;
211*8d67ca89SAndroid Build Coastguard Worker   int reserved;
212*8d67ca89SAndroid Build Coastguard Worker   struct user_regs* u_ar0;
213*8d67ca89SAndroid Build Coastguard Worker   unsigned long magic;
214*8d67ca89SAndroid Build Coastguard Worker   char u_comm[32];
215*8d67ca89SAndroid Build Coastguard Worker   int u_debugreg[8];
216*8d67ca89SAndroid Build Coastguard Worker   struct user_fpregs u_fp;
217*8d67ca89SAndroid Build Coastguard Worker   struct user_fpregs* u_fp0;
218*8d67ca89SAndroid Build Coastguard Worker };
219*8d67ca89SAndroid Build Coastguard Worker 
220*8d67ca89SAndroid Build Coastguard Worker #elif defined(__aarch64__)
221*8d67ca89SAndroid Build Coastguard Worker 
222*8d67ca89SAndroid Build Coastguard Worker struct user_regs_struct {
223*8d67ca89SAndroid Build Coastguard Worker   uint64_t regs[31];
224*8d67ca89SAndroid Build Coastguard Worker   uint64_t sp;
225*8d67ca89SAndroid Build Coastguard Worker   uint64_t pc;
226*8d67ca89SAndroid Build Coastguard Worker   uint64_t pstate;
227*8d67ca89SAndroid Build Coastguard Worker };
228*8d67ca89SAndroid Build Coastguard Worker struct user_fpsimd_struct {
229*8d67ca89SAndroid Build Coastguard Worker   __uint128_t vregs[32];
230*8d67ca89SAndroid Build Coastguard Worker   uint32_t fpsr;
231*8d67ca89SAndroid Build Coastguard Worker   uint32_t fpcr;
232*8d67ca89SAndroid Build Coastguard Worker };
233*8d67ca89SAndroid Build Coastguard Worker 
234*8d67ca89SAndroid Build Coastguard Worker #elif defined(__riscv)
235*8d67ca89SAndroid Build Coastguard Worker 
236*8d67ca89SAndroid Build Coastguard Worker // This space deliberately left blank for now.
237*8d67ca89SAndroid Build Coastguard Worker // No other libcs have any riscv64-specific structs.
238*8d67ca89SAndroid Build Coastguard Worker 
239*8d67ca89SAndroid Build Coastguard Worker #else
240*8d67ca89SAndroid Build Coastguard Worker 
241*8d67ca89SAndroid Build Coastguard Worker #error "Unsupported architecture."
242*8d67ca89SAndroid Build Coastguard Worker 
243*8d67ca89SAndroid Build Coastguard Worker #endif
244*8d67ca89SAndroid Build Coastguard Worker 
245*8d67ca89SAndroid Build Coastguard Worker __END_DECLS
246