source: trunk/libs/newlib/src/libgloss/arc/nsim-syscall.h @ 444

Last change on this file since 444 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 12.3 KB
Line 
1/*
2   Copyright (c) 2015, Synopsys, Inc. All rights reserved.
3
4   Redistribution and use in source and binary forms, with or without
5   modification, are permitted provided that the following conditions are met:
6
7   1) Redistributions of source code must retain the above copyright notice,
8   this list of conditions and the following disclaimer.
9
10   2) Redistributions in binary form must reproduce the above copyright notice,
11   this list of conditions and the following disclaimer in the documentation
12   and/or other materials provided with the distribution.
13
14   3) Neither the name of the Synopsys, Inc., nor the names of its contributors
15   may be used to endorse or promote products derived from this software
16   without specific prior written permission.
17
18   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28   POSSIBILITY OF SUCH DAMAGE.
29*/
30
31#ifndef _ASM_ARC_UNISTD_H
32#define _ASM_ARC_UNISTD_H
33
34#include <stdint.h>
35
36#ifndef __ASSEMBLY__
37/* This file contains the system call numbers. Not all are implemented in nSIM
38   hostlink. Numbers correspond to the old ARCLinux syscalls, but during
39   upstreaming of ARC Linux, those numbers has been changed, hence today ARC
40   Linux and nSIM hostlink use different system call numbers.  */
41
42#define SYS_exit                  1
43#define SYS__exit          SYS_exit
44#define SYS_fork                  2
45#define SYS_read                  3
46#define SYS_write                 4
47#define SYS_open                  5
48#define SYS_close                 6
49#define SYS_waitpid               7
50#define SYS_creat                 8
51#define SYS_link                  9
52#define SYS_unlink               10
53#define SYS_execve               11
54#define SYS_chdir                12
55#define SYS_time                 13
56#define SYS_mknod                14
57#define SYS_chmod                15
58#define SYS_chown                16
59#define SYS_break                17
60#define SYS_oldstat              18
61#define SYS_lseek                19
62#define SYS_getpid               20
63#define SYS_mount                21
64#define SYS_umount               22
65#define SYS_setuid               23
66#define SYS_getuid               24
67#define SYS_stime                25
68#define SYS_ptrace               26
69#define SYS_alarm                27
70#define SYS_oldfstat             28
71#define SYS_pause                29
72#define SYS_utime                30
73#define SYS_stty                 31
74#define SYS_gtty                 32
75#define SYS_access               33
76#define SYS_nice                 34
77#define SYS_ftime                35
78#define SYS_sync                 36
79#define SYS_kill                 37
80#define SYS_rename               38
81#define SYS_mkdir                39
82#define SYS_rmdir                40
83#define SYS_dup                  41
84#define SYS_pipe                 42
85#define SYS_times                43
86#define SYS_prof                 44
87#define SYS_brk                  45
88#define SYS_setgid               46
89#define SYS_getgid               47
90#define SYS_signal               48
91#define SYS_geteuid              49
92#define SYS_getegid              50
93#define SYS_acct                 51
94#define SYS_umount2              52
95#define SYS_lock                 53
96#define SYS_ioctl                54
97#define SYS_fcntl                55
98#define SYS_mpx                  56
99#define SYS_setpgid              57
100#define SYS_ulimit               58
101#define SYS_oldolduname          59
102#define SYS_umask                60
103#define SYS_chroot               61
104#define SYS_ustat                62
105#define SYS_dup2                 63
106#define SYS_getppid              64
107#define SYS_getpgrp              65
108#define SYS_setsid               66
109#define SYS_sigaction            67
110#define SYS_sgetmask             68
111#define SYS_ssetmask             69
112#define SYS_setreuid             70
113#define SYS_setregid             71
114#define SYS_sigsuspend           72
115#define SYS_sigpending           73
116#define SYS_sethostname          74
117#define SYS_setrlimit            75
118#define SYS_old_getrlimit        76
119#define SYS_getrusage            77
120#define SYS_gettimeofday         78
121#define SYS_settimeofday         79
122#define SYS_getgroups            80
123#define SYS_setgroups            81
124#define SYS_select               82
125#define SYS_symlink              83
126#define SYS_oldlstat             84
127#define SYS_readlink             85
128#define SYS_uselib               86
129#define SYS_swapon               87
130#define SYS_reboot               88
131#define SYS_readdir              89
132#define SYS_mmap                 90
133#define SYS_munmap               91
134#define SYS_truncate             92
135#define SYS_ftruncate            93
136#define SYS_fchmod               94
137#define SYS_fchown               95
138#define SYS_getpriority          96
139#define SYS_setpriority          97
140#define SYS_profil               98
141#define SYS_statfs               99
142#define SYS_fstatfs             100
143#define SYS_ioperm              101
144#define SYS_socketcall          102
145#define SYS_syslog              103
146#define SYS_setitimer           104
147#define SYS_getitimer           105
148#define SYS_stat                106
149#define SYS_lstat               107
150#define SYS_fstat               108
151#define SYS_olduname            109
152#define SYS_iopl                110  /* not supported  */
153#define SYS_vhangup             111
154#define SYS_idle                112 /* Obsolete  */
155#define SYS_vm86                113 /* not supported  */
156#define SYS_wait4               114
157#define SYS_swapoff             115
158#define SYS_sysinfo             116
159#define SYS_ipc                 117
160#define SYS_fsync               118
161#define SYS_sigreturn           119
162#define SYS_clone               120
163#define SYS_setdomainname       121
164#define SYS_uname               122
165#define SYS_cacheflush          123
166#define SYS_adjtimex            124
167#define SYS_mprotect            125
168#define SYS_sigprocmask         126
169#define SYS_create_module       127
170#define SYS_init_module         128
171#define SYS_delete_module       129
172#define SYS_get_kernel_syms     130
173#define SYS_quotactl            131
174#define SYS_getpgid             132
175#define SYS_fchdir              133
176#define SYS_bdflush             134
177#define SYS_sysfs               135
178#define SYS_personality         136
179#define SYS_afs_syscall         137 /* Syscall for Andrew File System  */
180#define SYS_setfsuid            138
181#define SYS_setfsgid            139
182#define SYS__llseek             140
183#define SYS_getdents            141
184#define SYS__newselect          142
185#define SYS_flock               143
186#define SYS_msync               144
187#define SYS_readv               145
188#define SYS_writev              146
189#define SYS_getsid              147
190#define SYS_fdatasync           148
191#define SYS__sysctl             149
192#define SYS_mlock               150
193#define SYS_munlock             151
194#define SYS_mlockall            152
195#define SYS_munlockall          153
196#define SYS_sched_setparam      154
197#define SYS_sched_getparam      155
198#define SYS_sched_setscheduler  156
199#define SYS_sched_getscheduler  157
200#define SYS_sched_yield         158
201#define SYS_sched_get_priority_max      159
202#define SYS_sched_get_priority_min      160
203#define SYS_sched_rr_get_interval       161
204#define SYS_nanosleep           162
205#define SYS_mremap              163
206#define SYS_setresuid           164
207#define SYS_getresuid           165
208#define SYS_query_module        167
209#define SYS_poll                168
210#define SYS_nfsservctl          169
211#define SYS_setresgid           170
212#define SYS_getresgid           171
213#define SYS_prctl               172
214#define SYS_rt_sigreturn        173
215#define SYS_rt_sigaction        174
216#define SYS_rt_sigprocmask      175
217#define SYS_rt_sigpending       176
218#define SYS_rt_sigtimedwait     177
219#define SYS_rt_sigqueueinfo     178
220#define SYS_rt_sigsuspend       179
221#define SYS_pread               180
222#define SYS_pwrite              181
223#define SYS_lchown              182
224#define SYS_getcwd              183
225#define SYS_capget              184
226#define SYS_capset              185
227#define SYS_sigaltstack         186
228#define SYS_sendfile            187
229#define SYS_getpmsg             188     /* some people actually want streams  */
230#define SYS_putpmsg             189     /* some people actually want streams  */
231#define SYS_vfork               190
232#define SYS_getrlimit           191
233#define SYS_mmap2               192
234#define SYS_truncate64          193
235#define SYS_ftruncate64         194
236#define SYS_stat64              195
237#define SYS_lstat64             196
238#define SYS_fstat64             197
239#define SYS_chown32             198
240#define SYS_getuid32            199
241#define SYS_getgid32            200
242#define SYS_geteuid32           201
243#define SYS_getegid32           202
244#define SYS_setreuid32          203
245#define SYS_setregid32          204
246#define SYS_getgroups32         205
247#define SYS_setgroups32         206
248#define SYS_fchown32            207
249#define SYS_setresuid32         208
250#define SYS_getresuid32         209
251#define SYS_setresgid32         210
252#define SYS_getresgid32         211
253#define SYS_lchown32            212
254#define SYS_setuid32            213
255#define SYS_setgid32            214
256#define SYS_setfsuid32          215
257#define SYS_setfsgid32          216
258#define SYS_pivot_root          217
259#define SYS_getdents64          220
260#define SYS_fcntl64             221
261#define SYS_gettid              224
262
263#endif  /* ! __ASSEMBLY__ */
264
265#ifdef __ARC700__
266#define SYSCALL \
267                        "trap0  \n\t"
268#else
269#define SYSCALL \
270                        "swi    \n\t"\
271                        "nop    \n\t"\
272                        "nop    \n\t"
273#endif /* __ARC700__ */
274
275/* There are two variants of macroses here:
276   - _syscall is a complete function definition of system call
277   - _naked_syscall only invokes system call and can be inserted into other
278     functions.  This macro is defined only for those syscall<N>, where it is
279     actually used.  */
280
281#define _syscall0(type, name)                                   \
282type _##name ()                                                 \
283{                                                               \
284        long __res;                                             \
285        __asm__ __volatile__ ("mov      r8, %1\n\t"             \
286                        SYSCALL                                 \
287                        "mov    %0, r0"                         \
288                        : "=r" (__res)                          \
289                        : "i" (SYS_##name)                      \
290                        : "cc", "r0", "r8");                    \
291        if ((unsigned long)(__res) >= (unsigned long)(-125)) {  \
292                errno = -__res;                                 \
293                __res = -1;                                     \
294        }                                                       \
295        return (type)__res;                                     \
296}
297
298#define _syscall1(type, name, atype, a)                 \
299type _##name (atype a)                                          \
300{                                                               \
301        long __res;                                             \
302        __asm__ __volatile__ ("mov      r0, %2\n\t"             \
303                        "mov    r8, %1\n\t"                     \
304                        SYSCALL                                 \
305                        "mov    %0, r0"                         \
306                        : "=r" (__res)                          \
307                        : "i" (SYS_##name),                     \
308                          "r" ((long)a)                         \
309                        : "cc", "r0", "r8");                    \
310        if ((unsigned long)(__res) >= (unsigned long)(-125)) {  \
311                errno = -__res;                                 \
312                __res = -1;                                     \
313        }                                                       \
314        return (type)__res;                                     \
315}
316
317#define _naked_syscall2(__res, name, a, b)                      \
318        __asm__ __volatile__ ("mov      r1, %3\n\t"             \
319                        "mov    r0, %2\n\t"                     \
320                        "mov    r8, %1\n\t"                     \
321                        SYSCALL                                 \
322                        "mov    %0, r0"                         \
323                        : "=r" (__res)                          \
324                        : "i" (SYS_##name),                     \
325                          "r" ((long)a),                        \
326                          "r" ((long)b)                         \
327                        : "cc", "r0", "r1", "r8");              \
328        if ((unsigned long)(__res) >= (unsigned long)(-125)) {  \
329                errno = -__res;                                 \
330                __res = -1;                                     \
331        }
332
333#define _syscall2(type, name, atype, a, btype, b)               \
334type _##name (atype a, btype b)                                 \
335{                                                               \
336        long __res;                                             \
337        _naked_syscall2 (__res, name, a, b)                     \
338        return (type)__res;                                     \
339}
340
341#define _naked_syscall3(__res, name, a, b, c)                   \
342        __asm__ __volatile__ (                                  \
343                        "mov    r2, %4\n\t"                     \
344                        "mov    r1, %3\n\t"                     \
345                        "mov    r0, %2\n\t"                     \
346                        "mov    r8, %1\n\t"                     \
347                        SYSCALL                                 \
348                        "mov    %0, r0"                         \
349                        : "=r" (__res)                          \
350                        : "i" (SYS_##name),                     \
351                          "r" ((long)a),                        \
352                          "r" ((long)b),                        \
353                          "r" ((long)c)                         \
354                        : "cc", "r0", "r1", "r2", "r8");        \
355        if ((unsigned long)(__res) >= (unsigned long)(-125)) {  \
356                errno = -__res;                                 \
357                __res = -1;                                     \
358        }
359
360#define _syscall3(type,name,atype,a,btype,b,ctype,c)            \
361type _##name (atype a, btype b, ctype c)                        \
362{                                                               \
363        long __res;                                             \
364        _naked_syscall3 (__res, name, a, b, c)                  \
365        return (type)__res;                                     \
366}
367
368#define _syscall4(type, name, atype, a, btype, b, ctype, c, dtype, d)   \
369type _##name (atype a, btype b, ctype c, dtype d)                       \
370{                                                                       \
371        long __res;                                                     \
372        __asm__ __volatile__ (                                          \
373                        "mov    r3, %5\n\t"                             \
374                        "mov    r2, %4\n\t"                             \
375                        "mov    r1, %3\n\t"                             \
376                        "mov    r0, %2\n\t"                             \
377                        "mov    r8, %1\n\t"                             \
378                        SYSCALL                                         \
379                        "mov    %0, r0"                                 \
380                        : "=r" (__res)                                  \
381                        : "i" (SYS_##name),                             \
382                          "r" ((long)a),                                \
383                          "r" ((long)b),                                \
384                          "r" ((long)c),                                \
385                          "r" ((long)d)                                 \
386                        : "cc", "r0", "r1", "r2", "r3", "r8");          \
387        if ((unsigned long)(__res) >= (unsigned long)(-125)) {          \
388                errno = -__res;                                         \
389                __res = -1;                                             \
390        }                                                               \
391        return (type)__res;                                             \
392}
393
394#define _syscall5(type, name, atype, a, btype, b, ctype, c, dtype, d,   \
395        etype, e)                                                       \
396type _##name (atype a, btype b, ctype c, dtype d, etype e)              \
397{                                                                       \
398        long __res;                                                     \
399        __asm__ __volatile__ (                                          \
400                        "mov    r4, %6\n\t"                             \
401                        "mov    r3, %5\n\t"                             \
402                        "mov    r2, %4\n\t"                             \
403                        "mov    r1, %3\n\t"                             \
404                        "mov    r0, %2\n\t"                             \
405                        "mov    r8, %1\n\t"                             \
406                        SYSCALL                                         \
407                        "mov    %0, r0"                                 \
408                        : "=r" (__res)                                  \
409                        : "i" (SYS_##name),                             \
410                          "r" ((long)a),                                \
411                          "r" ((long)b),                                \
412                          "r" ((long)c),                                \
413                          "r" ((long)d),                                \
414                          "r" ((long)e)                                 \
415                        : "cc", "r0", "r1", "r2", "r3", "r4", "r8");    \
416        if ((unsigned long)(__res) >= (unsigned long)(-125)) {          \
417                errno = -__res;                                         \
418                __res = -1;                                             \
419        }                                                               \
420        return (type)__res;                                             \
421}
422
423/* open() flags that are used by nSIM hostlink.  See comment for _open()
424   implementation in nsim-syscalls.c.  */
425#define ARC_LINUX_RDONLY 0
426#define ARC_LINUX_WRONLY 1
427#define ARC_LINUX_RDWR   2
428#define ARC_LINUX_CREAT  0x0040
429#define ARC_LINUX_APPEND 0x0400
430#define ARC_LINUX_TRUNC  0x0200
431#define ARC_LINUX_EXCL   0x0080
432
433/* stat structure as defined in nSIM hostlink.  */
434struct nsim_stat {
435        uint16_t dev;
436        uint16_t __pad1;
437        uint32_t ino;
438        uint16_t mode;
439        uint16_t nlink;
440        uint16_t uid;
441        uint16_t gid;
442        uint16_t rdev;
443        uint16_t __pad2;
444        uint32_t size;
445        uint32_t blksize;
446        uint32_t blocks;
447        uint32_t atime;
448        uint32_t __unused1;
449        uint32_t mtime;
450        uint32_t __unused2;
451        uint32_t ctime;
452        uint32_t __unused3;
453        uint32_t __unused4;
454        uint32_t __unused5;
455};
456
457#endif  /* _ASM_ARC_UNISTD_H */
Note: See TracBrowser for help on using the repository browser.