 33646a51ab
			
		
	
	33646a51ab
	
	
	
		
			
			glibc does not officially support ARC700 so this adds the missing pieces. I looked at uClibc-ng and a patch by Synopsis for glibc. ran make toolchain/glibc/refresh to clean up fuzz. Signed-off-by: Rosen Penev <rosenp@gmail.com>
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/sysdeps/arc/atomic-machine.h
 | |
| +++ b/sysdeps/arc/atomic-machine.h
 | |
| @@ -64,6 +64,10 @@ typedef uintmax_t uatomic_max_t;
 | |
|    __atomic_val_bysize (__arch_compare_and_exchange_val, int,		\
 | |
|  		       mem, new, old, __ATOMIC_ACQUIRE)
 | |
|  
 | |
| +#ifdef __ARC700__
 | |
| +#define atomic_full_barrier()  ({ asm volatile ("sync":::"memory"); })
 | |
| +#else
 | |
|  #define atomic_full_barrier()  ({ asm volatile ("dmb 3":::"memory"); })
 | |
| +#endif
 | |
|  
 | |
|  #endif /* _ARC_BITS_ATOMIC_H */
 | |
| --- a/sysdeps/unix/sysv/linux/arc/syscall.S
 | |
| +++ b/sysdeps/unix/sysv/linux/arc/syscall.S
 | |
| @@ -24,8 +24,13 @@ ENTRY (syscall)
 | |
|  	mov_s	r1, r2
 | |
|  	mov_s	r2, r3
 | |
|  	mov_s	r3, r4
 | |
| +#ifdef __ARC700__
 | |
| +	mov	r4, r5
 | |
| +	mov	r5, r6
 | |
| +#else
 | |
|  	mov_s	r4, r5
 | |
|  	mov_s	r5, r6
 | |
| +#endif
 | |
|  
 | |
|  	ARC_TRAP_INSN
 | |
|  	brhi	r0, -4096, L (call_syscall_err)
 | |
| --- a/sysdeps/unix/sysv/linux/arc/sysdep.h
 | |
| +++ b/sysdeps/unix/sysv/linux/arc/sysdep.h
 | |
| @@ -128,7 +128,11 @@ L (call_syscall_err):			ASM_LINE_SEP	\
 | |
|      mov    r8, __NR_##syscall_name	ASM_LINE_SEP	\
 | |
|      ARC_TRAP_INSN			ASM_LINE_SEP
 | |
|  
 | |
| +# ifdef __ARC700__
 | |
| +# define ARC_TRAP_INSN	trap0
 | |
| +# else
 | |
|  # define ARC_TRAP_INSN	trap_s 0
 | |
| +# endif
 | |
|  
 | |
|  #else  /* !__ASSEMBLER__ */
 | |
|  
 | |
| @@ -139,7 +143,11 @@ extern long int __syscall_error (long in
 | |
|  hidden_proto (__syscall_error)
 | |
|  # endif
 | |
|  
 | |
| +# ifdef __ARC700__
 | |
| +# define ARC_TRAP_INSN	"trap0		\n\t"
 | |
| +# else
 | |
|  # define ARC_TRAP_INSN	"trap_s 0	\n\t"
 | |
| +#endif
 | |
|  
 | |
|  # undef INTERNAL_SYSCALL_NCS
 | |
|  # define INTERNAL_SYSCALL_NCS(number, nr_args, args...)	\
 |