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
						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