diff options
author | Rosen Penev <rosenp@gmail.com> | 2020-12-24 16:36:16 -0800 |
---|---|---|
committer | Paul Spooren <mail@aparcar.org> | 2021-01-14 12:45:46 -1000 |
commit | 33646a51abcf15ff5c5363848287e1ed778b7467 (patch) | |
tree | c2481eb07646855fdcaf572da87fd6c3cdcc29ea /toolchain/glibc/patches/300-arc.patch | |
parent | faeaf5a01025edc13b83c90a724d8bff18ab2279 (diff) | |
download | upstream-33646a51abcf15ff5c5363848287e1ed778b7467.tar.gz upstream-33646a51abcf15ff5c5363848287e1ed778b7467.tar.bz2 upstream-33646a51abcf15ff5c5363848287e1ed778b7467.zip |
glibc: add arc700 patch
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>
Diffstat (limited to 'toolchain/glibc/patches/300-arc.patch')
-rw-r--r-- | toolchain/glibc/patches/300-arc.patch | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/toolchain/glibc/patches/300-arc.patch b/toolchain/glibc/patches/300-arc.patch new file mode 100644 index 0000000000..66f7aeb3ef --- /dev/null +++ b/toolchain/glibc/patches/300-arc.patch @@ -0,0 +1,55 @@ +--- 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...) \ |