summaryrefslogtreecommitdiffstats
path: root/libgloss/arc/nsim-syscall.h
diff options
context:
space:
mode:
Diffstat (limited to 'libgloss/arc/nsim-syscall.h')
-rw-r--r--libgloss/arc/nsim-syscall.h457
1 files changed, 457 insertions, 0 deletions
diff --git a/libgloss/arc/nsim-syscall.h b/libgloss/arc/nsim-syscall.h
new file mode 100644
index 000000000..a2009f5b2
--- /dev/null
+++ b/libgloss/arc/nsim-syscall.h
@@ -0,0 +1,457 @@
+/*
+ Copyright (c) 2015, Synopsys, Inc. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1) Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2) Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3) Neither the name of the Synopsys, Inc., nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef _ASM_ARC_UNISTD_H
+#define _ASM_ARC_UNISTD_H
+
+#include <stdint.h>
+
+#ifndef __ASSEMBLY__
+/* This file contains the system call numbers. Not all are implemented in nSIM
+ hostlink. Numbers correspond to the old ARCLinux syscalls, but during
+ upstreaming of ARC Linux, those numbers has been changed, hence today ARC
+ Linux and nSIM hostlink use different system call numbers. */
+
+#define SYS_exit 1
+#define SYS__exit SYS_exit
+#define SYS_fork 2
+#define SYS_read 3
+#define SYS_write 4
+#define SYS_open 5
+#define SYS_close 6
+#define SYS_waitpid 7
+#define SYS_creat 8
+#define SYS_link 9
+#define SYS_unlink 10
+#define SYS_execve 11
+#define SYS_chdir 12
+#define SYS_time 13
+#define SYS_mknod 14
+#define SYS_chmod 15
+#define SYS_chown 16
+#define SYS_break 17
+#define SYS_oldstat 18
+#define SYS_lseek 19
+#define SYS_getpid 20
+#define SYS_mount 21
+#define SYS_umount 22
+#define SYS_setuid 23
+#define SYS_getuid 24
+#define SYS_stime 25
+#define SYS_ptrace 26
+#define SYS_alarm 27
+#define SYS_oldfstat 28
+#define SYS_pause 29
+#define SYS_utime 30
+#define SYS_stty 31
+#define SYS_gtty 32
+#define SYS_access 33
+#define SYS_nice 34
+#define SYS_ftime 35
+#define SYS_sync 36
+#define SYS_kill 37
+#define SYS_rename 38
+#define SYS_mkdir 39
+#define SYS_rmdir 40
+#define SYS_dup 41
+#define SYS_pipe 42
+#define SYS_times 43
+#define SYS_prof 44
+#define SYS_brk 45
+#define SYS_setgid 46
+#define SYS_getgid 47
+#define SYS_signal 48
+#define SYS_geteuid 49
+#define SYS_getegid 50
+#define SYS_acct 51
+#define SYS_umount2 52
+#define SYS_lock 53
+#define SYS_ioctl 54
+#define SYS_fcntl 55
+#define SYS_mpx 56
+#define SYS_setpgid 57
+#define SYS_ulimit 58
+#define SYS_oldolduname 59
+#define SYS_umask 60
+#define SYS_chroot 61
+#define SYS_ustat 62
+#define SYS_dup2 63
+#define SYS_getppid 64
+#define SYS_getpgrp 65
+#define SYS_setsid 66
+#define SYS_sigaction 67
+#define SYS_sgetmask 68
+#define SYS_ssetmask 69
+#define SYS_setreuid 70
+#define SYS_setregid 71
+#define SYS_sigsuspend 72
+#define SYS_sigpending 73
+#define SYS_sethostname 74
+#define SYS_setrlimit 75
+#define SYS_old_getrlimit 76
+#define SYS_getrusage 77
+#define SYS_gettimeofday 78
+#define SYS_settimeofday 79
+#define SYS_getgroups 80
+#define SYS_setgroups 81
+#define SYS_select 82
+#define SYS_symlink 83
+#define SYS_oldlstat 84
+#define SYS_readlink 85
+#define SYS_uselib 86
+#define SYS_swapon 87
+#define SYS_reboot 88
+#define SYS_readdir 89
+#define SYS_mmap 90
+#define SYS_munmap 91
+#define SYS_truncate 92
+#define SYS_ftruncate 93
+#define SYS_fchmod 94
+#define SYS_fchown 95
+#define SYS_getpriority 96
+#define SYS_setpriority 97
+#define SYS_profil 98
+#define SYS_statfs 99
+#define SYS_fstatfs 100
+#define SYS_ioperm 101
+#define SYS_socketcall 102
+#define SYS_syslog 103
+#define SYS_setitimer 104
+#define SYS_getitimer 105
+#define SYS_stat 106
+#define SYS_lstat 107
+#define SYS_fstat 108
+#define SYS_olduname 109
+#define SYS_iopl 110 /* not supported */
+#define SYS_vhangup 111
+#define SYS_idle 112 /* Obsolete */
+#define SYS_vm86 113 /* not supported */
+#define SYS_wait4 114
+#define SYS_swapoff 115
+#define SYS_sysinfo 116
+#define SYS_ipc 117
+#define SYS_fsync 118
+#define SYS_sigreturn 119
+#define SYS_clone 120
+#define SYS_setdomainname 121
+#define SYS_uname 122
+#define SYS_cacheflush 123
+#define SYS_adjtimex 124
+#define SYS_mprotect 125
+#define SYS_sigprocmask 126
+#define SYS_create_module 127
+#define SYS_init_module 128
+#define SYS_delete_module 129
+#define SYS_get_kernel_syms 130
+#define SYS_quotactl 131
+#define SYS_getpgid 132
+#define SYS_fchdir 133
+#define SYS_bdflush 134
+#define SYS_sysfs 135
+#define SYS_personality 136
+#define SYS_afs_syscall 137 /* Syscall for Andrew File System */
+#define SYS_setfsuid 138
+#define SYS_setfsgid 139
+#define SYS__llseek 140
+#define SYS_getdents 141
+#define SYS__newselect 142
+#define SYS_flock 143
+#define SYS_msync 144
+#define SYS_readv 145
+#define SYS_writev 146
+#define SYS_getsid 147
+#define SYS_fdatasync 148
+#define SYS__sysctl 149
+#define SYS_mlock 150
+#define SYS_munlock 151
+#define SYS_mlockall 152
+#define SYS_munlockall 153
+#define SYS_sched_setparam 154
+#define SYS_sched_getparam 155
+#define SYS_sched_setscheduler 156
+#define SYS_sched_getscheduler 157
+#define SYS_sched_yield 158
+#define SYS_sched_get_priority_max 159
+#define SYS_sched_get_priority_min 160
+#define SYS_sched_rr_get_interval 161
+#define SYS_nanosleep 162
+#define SYS_mremap 163
+#define SYS_setresuid 164
+#define SYS_getresuid 165
+#define SYS_query_module 167
+#define SYS_poll 168
+#define SYS_nfsservctl 169
+#define SYS_setresgid 170
+#define SYS_getresgid 171
+#define SYS_prctl 172
+#define SYS_rt_sigreturn 173
+#define SYS_rt_sigaction 174
+#define SYS_rt_sigprocmask 175
+#define SYS_rt_sigpending 176
+#define SYS_rt_sigtimedwait 177
+#define SYS_rt_sigqueueinfo 178
+#define SYS_rt_sigsuspend 179
+#define SYS_pread 180
+#define SYS_pwrite 181
+#define SYS_lchown 182
+#define SYS_getcwd 183
+#define SYS_capget 184
+#define SYS_capset 185
+#define SYS_sigaltstack 186
+#define SYS_sendfile 187
+#define SYS_getpmsg 188 /* some people actually want streams */
+#define SYS_putpmsg 189 /* some people actually want streams */
+#define SYS_vfork 190
+#define SYS_getrlimit 191
+#define SYS_mmap2 192
+#define SYS_truncate64 193
+#define SYS_ftruncate64 194
+#define SYS_stat64 195
+#define SYS_lstat64 196
+#define SYS_fstat64 197
+#define SYS_chown32 198
+#define SYS_getuid32 199
+#define SYS_getgid32 200
+#define SYS_geteuid32 201
+#define SYS_getegid32 202
+#define SYS_setreuid32 203
+#define SYS_setregid32 204
+#define SYS_getgroups32 205
+#define SYS_setgroups32 206
+#define SYS_fchown32 207
+#define SYS_setresuid32 208
+#define SYS_getresuid32 209
+#define SYS_setresgid32 210
+#define SYS_getresgid32 211
+#define SYS_lchown32 212
+#define SYS_setuid32 213
+#define SYS_setgid32 214
+#define SYS_setfsuid32 215
+#define SYS_setfsgid32 216
+#define SYS_pivot_root 217
+#define SYS_getdents64 220
+#define SYS_fcntl64 221
+#define SYS_gettid 224
+
+#endif /* ! __ASSEMBLY__ */
+
+#ifdef __ARC700__
+#define SYSCALL \
+ "trap0 \n\t"
+#else
+#define SYSCALL \
+ "swi \n\t"\
+ "nop \n\t"\
+ "nop \n\t"
+#endif /* __ARC700__ */
+
+/* There are two variants of macroses here:
+ - _syscall is a complete function definition of system call
+ - _naked_syscall only invokes system call and can be inserted into other
+ functions. This macro is defined only for those syscall<N>, where it is
+ actually used. */
+
+#define _syscall0(type, name) \
+type _##name () \
+{ \
+ long __res; \
+ __asm__ __volatile__ ("mov r8, %1\n\t" \
+ SYSCALL \
+ "mov %0, r0" \
+ : "=r" (__res) \
+ : "i" (SYS_##name) \
+ : "cc", "r0", "r8"); \
+ if ((unsigned long)(__res) >= (unsigned long)(-125)) { \
+ errno = -__res; \
+ __res = -1; \
+ } \
+ return (type)__res; \
+}
+
+#define _syscall1(type, name, atype, a) \
+type _##name (atype a) \
+{ \
+ long __res; \
+ __asm__ __volatile__ ("mov r0, %2\n\t" \
+ "mov r8, %1\n\t" \
+ SYSCALL \
+ "mov %0, r0" \
+ : "=r" (__res) \
+ : "i" (SYS_##name), \
+ "r" ((long)a) \
+ : "cc", "r0", "r8"); \
+ if ((unsigned long)(__res) >= (unsigned long)(-125)) { \
+ errno = -__res; \
+ __res = -1; \
+ } \
+ return (type)__res; \
+}
+
+#define _naked_syscall2(__res, name, a, b) \
+ __asm__ __volatile__ ("mov r1, %3\n\t" \
+ "mov r0, %2\n\t" \
+ "mov r8, %1\n\t" \
+ SYSCALL \
+ "mov %0, r0" \
+ : "=r" (__res) \
+ : "i" (SYS_##name), \
+ "r" ((long)a), \
+ "r" ((long)b) \
+ : "cc", "r0", "r1", "r8"); \
+ if ((unsigned long)(__res) >= (unsigned long)(-125)) { \
+ errno = -__res; \
+ __res = -1; \
+ }
+
+#define _syscall2(type, name, atype, a, btype, b) \
+type _##name (atype a, btype b) \
+{ \
+ long __res; \
+ _naked_syscall2 (__res, name, a, b) \
+ return (type)__res; \
+}
+
+#define _naked_syscall3(__res, name, a, b, c) \
+ __asm__ __volatile__ ( \
+ "mov r2, %4\n\t" \
+ "mov r1, %3\n\t" \
+ "mov r0, %2\n\t" \
+ "mov r8, %1\n\t" \
+ SYSCALL \
+ "mov %0, r0" \
+ : "=r" (__res) \
+ : "i" (SYS_##name), \
+ "r" ((long)a), \
+ "r" ((long)b), \
+ "r" ((long)c) \
+ : "cc", "r0", "r1", "r2", "r8"); \
+ if ((unsigned long)(__res) >= (unsigned long)(-125)) { \
+ errno = -__res; \
+ __res = -1; \
+ }
+
+#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
+type _##name (atype a, btype b, ctype c) \
+{ \
+ long __res; \
+ _naked_syscall3 (__res, name, a, b, c) \
+ return (type)__res; \
+}
+
+#define _syscall4(type, name, atype, a, btype, b, ctype, c, dtype, d) \
+type _##name (atype a, btype b, ctype c, dtype d) \
+{ \
+ long __res; \
+ __asm__ __volatile__ ( \
+ "mov r3, %5\n\t" \
+ "mov r2, %4\n\t" \
+ "mov r1, %3\n\t" \
+ "mov r0, %2\n\t" \
+ "mov r8, %1\n\t" \
+ SYSCALL \
+ "mov %0, r0" \
+ : "=r" (__res) \
+ : "i" (SYS_##name), \
+ "r" ((long)a), \
+ "r" ((long)b), \
+ "r" ((long)c), \
+ "r" ((long)d) \
+ : "cc", "r0", "r1", "r2", "r3", "r8"); \
+ if ((unsigned long)(__res) >= (unsigned long)(-125)) { \
+ errno = -__res; \
+ __res = -1; \
+ } \
+ return (type)__res; \
+}
+
+#define _syscall5(type, name, atype, a, btype, b, ctype, c, dtype, d, \
+ etype, e) \
+type _##name (atype a, btype b, ctype c, dtype d, etype e) \
+{ \
+ long __res; \
+ __asm__ __volatile__ ( \
+ "mov r4, %6\n\t" \
+ "mov r3, %5\n\t" \
+ "mov r2, %4\n\t" \
+ "mov r1, %3\n\t" \
+ "mov r0, %2\n\t" \
+ "mov r8, %1\n\t" \
+ SYSCALL \
+ "mov %0, r0" \
+ : "=r" (__res) \
+ : "i" (SYS_##name), \
+ "r" ((long)a), \
+ "r" ((long)b), \
+ "r" ((long)c), \
+ "r" ((long)d), \
+ "r" ((long)e) \
+ : "cc", "r0", "r1", "r2", "r3", "r4", "r8"); \
+ if ((unsigned long)(__res) >= (unsigned long)(-125)) { \
+ errno = -__res; \
+ __res = -1; \
+ } \
+ return (type)__res; \
+}
+
+/* open() flags that are used by nSIM hostlink. See comment for _open()
+ implementation in nsim-syscalls.c. */
+#define ARC_LINUX_RDONLY 0
+#define ARC_LINUX_WRONLY 1
+#define ARC_LINUX_RDWR 2
+#define ARC_LINUX_CREAT 0x0040
+#define ARC_LINUX_APPEND 0x0400
+#define ARC_LINUX_TRUNC 0x0200
+#define ARC_LINUX_EXCL 0x0080
+
+/* stat structure as defined in nSIM hostlink. */
+struct nsim_stat {
+ uint16_t dev;
+ uint16_t __pad1;
+ uint32_t ino;
+ uint16_t mode;
+ uint16_t nlink;
+ uint16_t uid;
+ uint16_t gid;
+ uint16_t rdev;
+ uint16_t __pad2;
+ uint32_t size;
+ uint32_t blksize;
+ uint32_t blocks;
+ uint32_t atime;
+ uint32_t __unused1;
+ uint32_t mtime;
+ uint32_t __unused2;
+ uint32_t ctime;
+ uint32_t __unused3;
+ uint32_t __unused4;
+ uint32_t __unused5;
+};
+
+#endif /* _ASM_ARC_UNISTD_H */