diff options
Diffstat (limited to 'packages/glibc/2.41/0000-Add-ARC700-support.patch')
-rw-r--r-- | packages/glibc/2.41/0000-Add-ARC700-support.patch | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/packages/glibc/2.41/0000-Add-ARC700-support.patch b/packages/glibc/2.41/0000-Add-ARC700-support.patch new file mode 100644 index 00000000..1b93a94c --- /dev/null +++ b/packages/glibc/2.41/0000-Add-ARC700-support.patch @@ -0,0 +1,92 @@ +From 36449920c501177b61c6fdc1f72875ca41084a8e Mon Sep 17 00:00:00 2001 +From: Rosen Penev <rosenp@gmail.com> +Date: Sat, 13 Feb 2021 17:08:21 +0300 +Subject: [PATCH] Add ARC700 support + +glibc does not officially support ARC700 so this adds the missing +pieces. I looked at uClibc-ng and a patch by Synopsis for glibc. + +[Alexey] Taken from https://github.com/openwrt/openwrt/commit/33646a51abcf15ff5c5363848287e1ed778b7467 + +Signed-off-by: Rosen Penev <rosenp@gmail.com> +Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> +--- + sysdeps/arc/atomic-machine.h | 4 ++++ + sysdeps/unix/sysv/linux/arc/syscall.S | 5 +++++ + sysdeps/unix/sysv/linux/arc/syscall_cancel.S | 6 ++++++ + sysdeps/unix/sysv/linux/arc/sysdep.h | 8 ++++++++ + 4 files changed, 23 insertions(+) + +--- a/sysdeps/arc/atomic-machine.h ++++ b/sysdeps/arc/atomic-machine.h +@@ -52,6 +52,10 @@ + __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 @@ + 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/syscall_cancel.S ++++ b/sysdeps/unix/sysv/linux/arc/syscall_cancel.S +@@ -38,9 +38,15 @@ + mov_s r0, r2 + mov_s r1, r3 + mov_s r2, r4 ++#ifdef __ARC700__ ++ mov r3, r5 ++ mov r4, r6 ++ mov r5, r7 ++#else + mov_s r3, r5 + mov_s r4, r6 + mov_s r5, r7 ++#endif + trap_s 0 + + .globl __syscall_cancel_arch_end +--- a/sysdeps/unix/sysv/linux/arc/sysdep.h ++++ b/sysdeps/unix/sysv/linux/arc/sysdep.h +@@ -130,7 +130,11 @@ + 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 @@ + 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 + + # define HAVE_CLONE3_WRAPPER 1 + |