Add support for ARC to libgloss
ChangeLog: 2015-11-12 Anton Kolesov <Anton.Kolesov@synopsys.com> * configure.in: Add ARC support to libgloss. * configure: Regenerate. libgloss/ChangeLog: 2015-11-12 Anton Kolesov <Anton.Kolesov@synopsys.com> * configure: Add ARC support. * configure.in: Likewise. * arc/Makefile.in: Likewise. * arc/aclocal.m4: Likewise. * arc/configure: Likewise. * arc/configure.in: Likewise. * arc/crt0.S: Likewise. * arc/libcfunc.c: Likewise. * arc/nsim-syscall.h: Likewise. * arc/nsim-syscalls.c: Likewise. * arc/nsim.specs: Likewise. * arc/sbrk.c: Likewise.
This commit is contained in:
committed by
Corinna Vinschen
parent
e945a19cb2
commit
acdfcb0a0a
457
libgloss/arc/nsim-syscall.h
Normal file
457
libgloss/arc/nsim-syscall.h
Normal file
@ -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 */
|
Reference in New Issue
Block a user