aboutsummaryrefslogtreecommitdiff
path: root/linux-user/mips/target_syscall.h
blob: dd6fd7af8eac2fe1bde8e861796e19d1bd6a5239 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
#ifndef MIPS_TARGET_SYSCALL_H
#define MIPS_TARGET_SYSCALL_H

/* this struct defines the way the registers are stored on the
   stack during a system call. */

struct target_pt_regs {
	/* Pad bytes for argument save space on the stack. */
	abi_ulong pad0[6];

	/* Saved main processor registers. */
	abi_ulong regs[32];

	/* Saved special registers. */
	abi_ulong cp0_status;
	abi_ulong lo;
	abi_ulong hi;
	abi_ulong cp0_badvaddr;
	abi_ulong cp0_cause;
	abi_ulong cp0_epc;
};

/* Target errno definitions taken from asm-mips/errno.h */
#undef TARGET_ENOMSG
#define TARGET_ENOMSG          35      /* Identifier removed */
#undef TARGET_EIDRM
#define TARGET_EIDRM           36      /* Identifier removed */
#undef TARGET_ECHRNG
#define TARGET_ECHRNG          37      /* Channel number out of range */
#undef TARGET_EL2NSYNC
#define TARGET_EL2NSYNC        38      /* Level 2 not synchronized */
#undef TARGET_EL3HLT
#define TARGET_EL3HLT          39      /* Level 3 halted */
#undef TARGET_EL3RST
#define TARGET_EL3RST          40      /* Level 3 reset */
#undef TARGET_ELNRNG
#define TARGET_ELNRNG          41      /* Link number out of range */
#undef TARGET_EUNATCH
#define TARGET_EUNATCH         42      /* Protocol driver not attached */
#undef TARGET_ENOCSI
#define TARGET_ENOCSI          43      /* No CSI structure available */
#undef TARGET_EL2HLT
#define TARGET_EL2HLT          44      /* Level 2 halted */
#undef TARGET_EDEADLK
#define TARGET_EDEADLK         45      /* Resource deadlock would occur */
#undef TARGET_ENOLCK
#define TARGET_ENOLCK          46      /* No record locks available */
#undef TARGET_EBADE
#define TARGET_EBADE           50      /* Invalid exchange */
#undef TARGET_EBADR
#define TARGET_EBADR           51      /* Invalid request descriptor */
#undef TARGET_EXFULL
#define TARGET_EXFULL          52      /* TARGET_Exchange full */
#undef TARGET_ENOANO
#define TARGET_ENOANO          53      /* No anode */
#undef TARGET_EBADRQC
#define TARGET_EBADRQC         54      /* Invalid request code */
#undef TARGET_EBADSLT
#define TARGET_EBADSLT         55      /* Invalid slot */
#undef TARGET_EDEADLOCK
#define TARGET_EDEADLOCK       56      /* File locking deadlock error */
#undef TARGET_EBFONT
#define TARGET_EBFONT          59      /* Bad font file format */
#undef TARGET_ENOSTR
#define TARGET_ENOSTR          60      /* Device not a stream */
#undef TARGET_ENODATA
#define TARGET_ENODATA         61      /* No data available */
#undef TARGET_ETIME
#define TARGET_ETIME           62      /* Timer expired */
#undef TARGET_ENOSR
#define TARGET_ENOSR           63      /* Out of streams resources */
#undef TARGET_ENONET
#define TARGET_ENONET          64      /* Machine is not on the network */
#undef TARGET_ENOPKG
#define TARGET_ENOPKG          65      /* Package not installed */
#undef TARGET_EREMOTE
#define TARGET_EREMOTE         66      /* Object is remote */
#undef TARGET_ENOLINK
#define TARGET_ENOLINK         67      /* Link has been severed */
#undef TARGET_EADV
#define TARGET_EADV            68      /* Advertise error */
#undef TARGET_ESRMNT
#define TARGET_ESRMNT          69      /* Srmount error */
#undef TARGET_ECOMM
#define TARGET_ECOMM           70      /* Communication error on send */
#undef TARGET_EPROTO
#define TARGET_EPROTO          71      /* Protocol error */
#undef TARGET_EDOTDOT
#define TARGET_EDOTDOT         73      /* RFS specific error */
#undef TARGET_EMULTIHOP
#define TARGET_EMULTIHOP       74      /* Multihop attempted */
#undef TARGET_EBADMSG
#define TARGET_EBADMSG         77      /* Not a data message */
#undef TARGET_ENAMETOOLONG
#define TARGET_ENAMETOOLONG    78      /* File name too long */
#undef TARGET_EOVERFLOW
#define TARGET_EOVERFLOW       79      /* Value too large for defined data type */
#undef TARGET_ENOTUNIQ
#define TARGET_ENOTUNIQ        80      /* Name not unique on network */
#undef TARGET_EBADFD
#define TARGET_EBADFD          81      /* File descriptor in bad state */
#undef TARGET_EREMCHG
#define TARGET_EREMCHG         82      /* Remote address changed */
#undef TARGET_ELIBACC
#define TARGET_ELIBACC         83      /* Can not access a needed shared library */
#undef TARGET_ELIBBAD
#define TARGET_ELIBBAD         84      /* Accessing a corrupted shared library */
#undef TARGET_ELIBSCN
#define TARGET_ELIBSCN         85      /* .lib section in a.out corrupted */
#undef TARGET_ELIBMAX
#define TARGET_ELIBMAX         86      /* Attempting to link in too many shared libraries */
#undef TARGET_ELIBEXEC
#define TARGET_ELIBEXEC        87      /* Cannot exec a shared library directly */
#undef TARGET_EILSEQ
#define TARGET_EILSEQ          88      /* Illegal byte sequence */
#undef TARGET_ENOSYS
#define TARGET_ENOSYS          89      /* Function not implemented */
#undef TARGET_ELOOP
#define TARGET_ELOOP           90      /* Too many symbolic links encountered */
#undef TARGET_ERESTART
#define TARGET_ERESTART        91      /* Interrupted system call should be restarted */
#undef TARGET_ESTRPIPE
#define TARGET_ESTRPIPE        92      /* Streams pipe error */
#undef TARGET_ENOTEMPTY
#define TARGET_ENOTEMPTY       93      /* Directory not empty */
#undef TARGET_EUSERS
#define TARGET_EUSERS          94      /* Too many users */
#undef TARGET_ENOTSOCK
#define TARGET_ENOTSOCK        95      /* Socket operation on non-socket */
#undef TARGET_EDESTADDRREQ
#define TARGET_EDESTADDRREQ    96      /* Destination address required */
#undef TARGET_EMSGSIZE
#define TARGET_EMSGSIZE        97      /* Message too long */
#undef TARGET_EPROTOTYPE
#define TARGET_EPROTOTYPE      98      /* Protocol wrong type for socket */
#undef TARGET_ENOPROTOOPT
#define TARGET_ENOPROTOOPT     99      /* Protocol not available */
#undef TARGET_EPROTONOSUPPORT
#define TARGET_EPROTONOSUPPORT 120     /* Protocol not supported */
#undef TARGET_ESOCKTNOSUPPORT
#define TARGET_ESOCKTNOSUPPORT 121     /* Socket type not supported */
#undef TARGET_EOPNOTSUPP
#define TARGET_EOPNOTSUPP      122     /* Operation not supported on transport endpoint */
#undef TARGET_EPFNOSUPPORT
#define TARGET_EPFNOSUPPORT    123     /* Protocol family not supported */
#undef TARGET_EAFNOSUPPORT
#define TARGET_EAFNOSUPPORT    124     /* Address family not supported by protocol */
#undef TARGET_EADDRINUSE
#define TARGET_EADDRINUSE      125     /* Address already in use */
#undef TARGET_EADDRNOTAVAIL
#define TARGET_EADDRNOTAVAIL   126     /* Cannot assign requested address */
#undef TARGET_ENETDOWN
#define TARGET_ENETDOWN        127     /* Network is down */
#undef TARGET_ENETUNREACH
#define TARGET_ENETUNREACH     128     /* Network is unreachable */
#undef TARGET_ENETRESET
#define TARGET_ENETRESET       129     /* Network dropped connection because of reset */
#undef TARGET_ECONNABORTED
#define TARGET_ECONNABORTED    130     /* Software caused connection abort */
#undef TARGET_ECONNRESET
#define TARGET_ECONNRESET      131     /* Connection reset by peer */
#undef TARGET_ENOBUFS
#define TARGET_ENOBUFS         132     /* No buffer space available */
#undef TARGET_EISCONN
#define TARGET_EISCONN         133     /* Transport endpoint is already connected */
#undef TARGET_ENOTCONN
#define TARGET_ENOTCONN        134     /* Transport endpoint is not connected */
#undef TARGET_EUCLEAN
#define TARGET_EUCLEAN         135     /* Structure needs cleaning */
#undef TARGET_ENOTNAM
#define TARGET_ENOTNAM         137     /* Not a XENIX named type file */
#undef TARGET_ENAVAIL
#define TARGET_ENAVAIL         138     /* No XENIX semaphores available */
#undef TARGET_EISNAM
#define TARGET_EISNAM          139     /* Is a named type file */
#undef TARGET_EREMOTEIO
#define TARGET_EREMOTEIO       140     /* Remote I/O error */
#undef TARGET_EINIT
#define TARGET_EINIT           141     /* Reserved */
#undef TARGET_EREMDEV
#define TARGET_EREMDEV         142     /* TARGET_Error 142 */
#undef TARGET_ESHUTDOWN
#define TARGET_ESHUTDOWN       143     /* Cannot send after transport endpoint shutdown */
#undef TARGET_ETOOMANYREFS
#define TARGET_ETOOMANYREFS    144     /* Too many references: cannot splice */
#undef TARGET_ETIMEDOUT
#define TARGET_ETIMEDOUT       145     /* Connection timed out */
#undef TARGET_ECONNREFUSED
#define TARGET_ECONNREFUSED    146     /* Connection refused */
#undef TARGET_EHOSTDOWN
#define TARGET_EHOSTDOWN       147     /* Host is down */
#undef TARGET_EHOSTUNREACH
#define TARGET_EHOSTUNREACH    148     /* No route to host */
#undef TARGET_EALREADY
#define TARGET_EALREADY        149     /* Operation already in progress */
#undef TARGET_EINPROGRESS
#define TARGET_EINPROGRESS     150     /* Operation now in progress */
#undef TARGET_ESTALE
#define TARGET_ESTALE          151     /* Stale NFS file handle */
#undef TARGET_ECANCELED
#define TARGET_ECANCELED       158     /* AIO operation canceled */
/*
 * These error are Linux extensions.
 */
#undef TARGET_ENOMEDIUM
#define TARGET_ENOMEDIUM       159     /* No medium found */
#undef TARGET_EMEDIUMTYPE
#define TARGET_EMEDIUMTYPE     160     /* Wrong medium type */
#undef TARGET_ENOKEY
#define TARGET_ENOKEY          161     /* Required key not available */
#undef TARGET_EKEYEXPIRED
#define TARGET_EKEYEXPIRED     162     /* Key has expired */
#undef TARGET_EKEYREVOKED
#define TARGET_EKEYREVOKED     163     /* Key has been revoked */
#undef TARGET_EKEYREJECTED
#define TARGET_EKEYREJECTED    164     /* Key was rejected by service */

/* for robust mutexes */
#undef TARGET_EOWNERDEAD
#define TARGET_EOWNERDEAD      165     /* Owner died */
#undef TARGET_ENOTRECOVERABLE
#define TARGET_ENOTRECOVERABLE 166     /* State not recoverable */

#undef TARGET_ERFKILL
#define TARGET_ERFKILL         167
#undef TARGET_EHWPOISON
#define TARGET_EHWPOISON       168

#undef TARGET_EDQUOT
#define TARGET_EDQUOT          1133    /* Quota exceeded */

#define UNAME_MACHINE "mips"
#define UNAME_MINIMUM_RELEASE "2.6.32"

#define TARGET_CLONE_BACKWARDS
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_MCL_CURRENT 1
#define TARGET_MCL_FUTURE  2
#define TARGET_MCL_ONFAULT 4

#define TARGET_FORCE_SHMLBA

static inline abi_ulong target_shmlba(CPUMIPSState *env)
{
    return 0x40000;
}

/* MIPS-specific prctl() options */
#define TARGET_PR_SET_FP_MODE  45
#define TARGET_PR_GET_FP_MODE  46
#define TARGET_PR_FP_MODE_FR   (1 << 0)
#define TARGET_PR_FP_MODE_FRE  (1 << 1)

#endif /* MIPS_TARGET_SYSCALL_H */