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