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...) \
|