new file mode 100644
@@ -0,0 +1,129 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+ .section .rodata.str1.8,"aMS",@progbits,1
+ .align 2
+ .type longjmp_msg,@object
+longjmp_msg:
+ .string "longjmp causes uninitialized stack frame"
+ .size longjmp_msg, .-longjmp_msg
+ .text
+
+#define __longjmp ____longjmp_chk
+
+#ifdef __PIC__
+# ifdef __CSKYABIV2__
+# define CALL_FAIL \
+ subi sp, 8; \
+ stw gb, (sp, 0); \
+ grs gb, .Lgetpc1; \
+.Lgetpc1: \
+ lrw t0, .Lgetpc1@GOTPC; \
+ addu gb, gb, t0; \
+ lrw a0, longjmp_msg@GOTOFF; \
+ addu a0, a0, gb; \
+ lrw t0, (HIDDEN_JUMPTARGET(__fortify_fail))@PLT; \
+ ldr.w t0, (gb, t0 << 0); \
+ jsr t0; \
+ ldw gb, (sp, 0); \
+ addi sp, 8;
+# else /* __CSKYABIV2__ */
+# define CALL_FAIL \
+ subi sp, 8; \
+ stw gb, (sp); \
+ stw r15, (sp, 4); \
+ bsr .Lgetpc2; \
+.Lgetpc2: \
+ lrw gb, .Lgetpc2@GOTPC; \
+ add gb, r15; \
+ lrw a0, longjmp_msg@GOTOFF; \
+ addu a0, gb; \
+ lrw r7, (HIDDEN_JUMPTARGET(__fortify_fail))@PLT; \
+ add r7, gb; \
+ ldw r7, (r7); \
+ jsr r7; \
+ ldw gb, (sp, 0); \
+ ldw r15,(sp, 4); \
+ addi sp, 8;
+# endif /* __CSKYABIV2__ */
+#else /* __PIC__ */
+# define CALL_FAIL \
+ lrw a0, longjmp_msg; \
+ jsri HIDDEN_JUMPTARGET(__fortify_fail);
+#endif/* __PIC__ */
+
+#ifdef __CSKYABIV2__
+# define CHECK_SP(reg) \
+ cmplt sp, reg; \
+ bt .Lok1; \
+ mov r9, a0; \
+ mov t0, r7; \
+ lrw r7, __NR_sigaltstack; \
+ movi a0, 0; \
+ subi sp, 12; /* sizeof (stack_t) */ \
+ mov a1, sp; \
+ trap 0; \
+ mov r7, t0; \
+ cmpnei a0, 0; \
+ bt .Lok; \
+ ldw a1, (sp, 4); \
+ btsti a1, 1; \
+ bt .Lfail; \
+ ldw a1, (sp, 0); \
+ ldw a3, (sp, 8); \
+ add a1, a3; \
+ sub a1, reg; \
+ cmphs a1, a3; \
+ bt .Lok; \
+.Lfail: \
+ addi sp, 12; \
+ CALL_FAIL \
+.Lok: \
+ mov a0, r9; \
+.Lok1:
+#else
+# define CHECK_SP(reg) \
+ cmplt sp, reg; \
+ bt .Lok1; \
+ mov r9, a0; \
+ lrw r1, __NR_sigaltstack; \
+ movi a0, 0; \
+ subi sp, 12; /* sizeof (stack_t) */ \
+ mov a1, sp; \
+ trap 0; \
+ cmpnei a0, 0; \
+ bt .Lok; \
+ ldw a1, (sp, 4); \
+ btsti a1, 1; \
+ bt .Lfail; \
+ ldw a1, (sp, 0); \
+ ldw a3, (sp, 8); \
+ add a1, a3; \
+ sub a1, reg; \
+ cmphs a1, a3; \
+ bt .Lok; \
+.Lfail: \
+ addi sp, 12; \
+ CALL_FAIL \
+.Lok: \
+ mov a0, r9; \
+.Lok1:
+#endif
+
+#include <__longjmp.S>
new file mode 100644
@@ -0,0 +1,56 @@
+/* brk system call for Linux/C-SKY.
+ Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <errno.h>
+
+/* This must be initialized data because commons can't have aliases. */
+void * __curbrk = 0;
+
+/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt
+ to work around different old braindamage in the old Linux/x86 ELF
+ dynamic linker. Sigh. */
+weak_alias (__curbrk, ___brk_addr)
+
+int __brk (void *addr)
+{
+ void *newbrk;
+
+ {
+ register long int res __asm__("a0") = (long int)addr;
+
+ __asm__ volatile ("lrw l3, %1\n\t"
+ "trap 0 \n\t"
+ :"+r" (res)
+ :"i" (__NR_brk)
+ :"l3");
+ newbrk = (void *) res;
+ }
+ __curbrk = newbrk;
+
+ if (newbrk < addr)
+ {
+ __set_errno (ENOMEM);
+ return -1;
+ }
+
+ return 0;
+}
+
+weak_alias (__brk, brk)
new file mode 100644
@@ -0,0 +1,106 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+
+#include <sysdep.h>
+#define _ERRNO_H 1
+#include <bits/errno.h>
+#include <csky_readtp.h>
+
+#define CLONE_VM 8 /* 8 makes btsti easier, 0x00000100 in real */
+#define CLONE_THREAD 16 /* 0x00010000 in real */
+
+/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg,
+ pid_t *ptid, struct user_desc *tls, pid_t *ctid); */
+
+ .text
+ENTRY(__clone)
+ /* Sanity check arguments. */
+ cmpnei a0, 0 /* no NULL function pointers */
+ bf __error_arg
+ cmpnei a1, 0 /* no NULL function pointers */
+ bf __error_arg
+
+ subi a1, 8
+ stw a0, (a1, 0) /* insert the args onto the new stack */
+ stw a3, (a1, 4) /* insert the args onto the new stack */
+
+ mov t1, r7 /* save r7 */
+ mov t2, r4 /* save r4 (has t2 ?)*/
+
+ mov a0, a2 /* arg1 = flags */
+ ldw a2, (sp, 0) /* arg3 = ptid */
+ ldw a3, (sp, 8) /* arg4 = ctid */
+ ldw r4, (sp, 4) /* arg5 = tls */
+ lrw r7, __NR_clone
+ trap 0
+
+ mov r7, t1 /* restore r7 */
+ mov r4, t2 /* restore r4 */
+ btsti a0, 31 /* is a0 less than zero? */
+ bt do_syscall_error
+ cmpnei a0, 0
+ bf 1f
+ rts
+PSEUDO_END (__clone)
+
+1:
+ ldw a0, (sp, 4) /* restore args from new sp */
+ ldw a1, (sp, 0) /* restore args from new sp */
+ addi sp, 8
+ jsr a1
+
+ /* exit */
+#ifdef __PIC__
+ grs t1, .Lgetpc1
+.Lgetpc1:
+ lrw t0, .Lgetpc1@GOTPC
+ addu t1, t1, t0
+ lrw t0, _exit@GOT
+ ldr.w t0, (t1, t0 << 0)
+#else
+ lrw t0, _exit /* exit */
+#endif /* __PIC__ */
+ jmp t0
+
+__error_arg:
+ lrw a0, -EINVAL
+
+do_syscall_error:
+#ifdef __PIC__
+ subi sp, 8
+ stw gb, (sp, 0)
+ stw r15, (sp, 4)
+ grs gb, .Lgetpc2
+.Lgetpc2:
+ lrw t0, .Lgetpc2@GOTPC
+ addu gb, gb, t0
+ lrw t0, __syscall_error@PLT
+ ldr.w t0, (gb, t0 << 0)
+ jsr t0
+ ldw gb, (sp, 0)
+ ldw r15, (sp, 4)
+ addi sp, 8
+#else
+ jmpi __syscall_error
+#endif /* __PIC__ */
+ rts
+
+libc_hidden_def (__clone)
+weak_alias (__clone, clone)
new file mode 100644
@@ -0,0 +1,72 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+#include "ucontext_i.h"
+
+/* int getcontext (ucontext_t *ucp) */
+
+ENTRY(__getcontext)
+ /* No need to save r2-r7 or a0-a3 */
+ mov t0, a0
+
+ addi a0, MCONTEXT_CSKY_R4
+
+ stm r4-r13, (a0) /* save r4-r13 */
+ stw sp, (t0, MCONTEXT_CSKY_SP) /* save sp */
+ stw r15, (t0, MCONTEXT_CSKY_LR) /* save lr */
+ stw r15, (t0, MCONTEXT_CSKY_PC) /* Return to PC */
+ addi a0, t0, MCONTEXT_CSKY_R16
+ stm r16-r31, (a0) /* save r16-r31 */
+ movi a0, 0
+ stw a0, (t0, MCONTEXT_CSKY_A0) /* Return zero */
+
+ subi sp, 8
+ stw t0, (sp, 0) /* save t0 after "save sp" */
+
+ /* __sigprocmask(SIG_BLOCK, NULL, &(ucontext->uc_sigmask)) */
+ movi a0, SIG_BLOCK
+ movi a1, 0
+ addi a2, t0, UCONTEXT_SIGMASK
+
+ /* do sigprocmask syscall */
+#ifdef __PIC__
+ subi sp, 8
+ stw gb, (sp, 0)
+ grs gb, .Lgetpc
+.Lgetpc:
+ lrw a3, .Lgetpc@GOTPC
+ addu gb, gb, a3
+ lrw a3, __sigprocmask@PLT
+ ldr.w a3, (gb, a3 << 0)
+ jsr a3
+ ldw gb, (sp, 0)
+ addi sp, 8
+#else
+ jsri __sigprocmask
+#endif
+
+ ldw t0, (sp, 0)
+ addi sp, 8
+ /* restore r15 for sigprocmask changes*/
+ ldw r15, (t0, MCONTEXT_CSKY_LR)
+ movi a0, 0 /* return 0 */
+ jmp r15
+END(__getcontext)
+
+weak_alias(__getcontext, getcontext)
new file mode 100644
@@ -0,0 +1,95 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+#include "ucontext_i.h"
+
+/* int setcontext (const ucontext_t *ucp) */
+
+ENTRY(__setcontext)
+ mov t0, a0
+ subi sp, 8
+ stw a0, (sp, 0)
+
+ /* set sigmask */
+ movi a0, SIG_SETMASK
+ addi a1, t0, UCONTEXT_SIGMASK
+ movi a2, 0
+
+ /* do sigprocmask syscall */
+#ifdef __PIC__
+ subi sp, 8
+ stw gb, (sp, 0)
+ grs gb, .Lgetpc1
+.Lgetpc1:
+ lrw a3, .Lgetpc1@GOTPC
+ addu gb, gb, a3
+ lrw a3, __sigprocmask@PLT
+ ldr.w a3, (gb, a3 << 0)
+ jsr a3
+ ldw gb, (sp, 0)
+ addi sp, 8
+#else
+ jsri __sigprocmask
+#endif /* __PIC__ */
+
+ ldw t0, (sp, 0)
+ addi sp, 8
+ /* set r0-r11. Load a0-a3, for makecontext requires */
+ addi t1, t0, MCONTEXT_CSKY_A0
+ ldm r0-r11, (t1)
+ ldw sp, (t0, MCONTEXT_CSKY_SP) /* load sp */
+ ldw r15, (t0, MCONTEXT_CSKY_LR) /* load lr */
+ ldw t0, (t0, MCONTEXT_CSKY_PC) /* load start addr */
+ jmp t0
+END(setcontext)
+weak_alias(__setcontext, setcontext)
+
+ENTRY(__startcontext)
+ mov a0, r9
+ cmpnei r9, 0 /* r9 was set in makecontext */
+ bf 1f /* null, then exit */
+
+ /* call setcontext */
+#ifdef __PIC__
+ grs t1, .Lgetpc2
+.Lgetpc2:
+ lrw t0, .Lgetpc2@GOTPC
+ addu t1, t1, t0
+ lrw t0, __setcontext@GOT
+ ldr.w t0, (t1, t0 << 0)
+#else
+ lrw t0, __setcontext
+#endif
+ jsr t0
+
+1:
+ /* call _exit */
+#ifdef __PIC__
+ grs t1, .Lgetpc3
+.Lgetpc3:
+ lrw t0, .Lgetpc3@GOTPC
+ addu t1, t1, t0
+ lrw t0, _exit@GOT
+ ldr.w t0, (t1, t0 << 0)
+#else
+ lrw t0, _exit
+#endif
+ jsr t0
+
+END(__startcontext)
new file mode 100644
@@ -0,0 +1,68 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+/* long syscall(long sysnum, long a, long b, long c, long d, long e, long f) */
+
+ENTRY (syscall)
+ subi sp, 8
+ stw r4, (sp, 0)
+ stw r5, (sp, 4)
+
+ mov t0, r7
+ mov r7, a0 /* r7 = sysnum */
+
+ mov a0, a1 /* arg1 = a */
+ mov a1, a2 /* arg2 = b */
+ mov a2, a3 /* arg3 = c */
+ ldw a3, (sp, 8) /* arg4 = d */
+ ldw r4, (sp, 12) /* arg5 = e */
+ ldw r5, (sp, 16) /* arg6 = f */
+ trap 0
+
+ mov r7, t0
+
+ ldw r4, (sp, 0)
+ ldw r5, (sp, 4)
+ addi sp, 8
+
+ lrw t0, 0xfffff000
+ cmphs a0, t0
+ bt do_syscall_error
+ rts
+PSEUDO_END (syscall)
+
+do_syscall_error:
+#ifdef __PIC__
+ subi sp, 8
+ stw gb, (sp, 0)
+ stw lr, (sp, 4)
+ grs gb, .Lgetpc
+.Lgetpc:
+ lrw t0, .Lgetpc@GOTPC
+ addu gb, gb, t0
+ lrw t0, __syscall_error@PLT
+ ldr.w t0, (gb, t0 << 0)
+ jsr t0
+ ldw gb, (sp, 0)
+ ldw lr, (sp, 4)
+ addi sp, 8
+#else
+ jmpi __syscall_error
+#endif /* __PIC__ */
+ rts
new file mode 100644
@@ -0,0 +1,45 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#define _ERRNO_H 1
+#include <bits/errno.h>
+
+/* Clone the calling process, but without copying the whole address space.
+ The calling process is suspended until the new process exits or is
+ replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
+ and the process ID of the new process to the old process. */
+
+ENTRY (__vfork)
+#ifdef SAVE_PID
+ SAVE_PID
+#endif
+ mov t0, r7
+ lrw r7, __NR_vfork
+ trap 0
+ mov r7, t0
+#ifdef RESTORE_PID
+ RESTORE_PID
+#endif
+ PSEUDO_RET
+ rts
+
+PSEUDO_END (__vfork)
+libc_hidden_def (__vfork)
+
+weak_alias (__vfork, vfork)
+strong_alias (__vfork, __libc_vfork)
new file mode 100644
@@ -0,0 +1,61 @@
+/* brk system call for Linux/C-SKY.
+ Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef __CSKYABIV2__
+# include "abiv2_brk.c"
+#else
+
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <errno.h>
+
+/* This must be initialized data because commons can't have aliases. */
+void * __curbrk = 0;
+
+/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt
+ to work around different old braindamage in the old Linux/x86 ELF
+ dynamic linker. Sigh. */
+weak_alias (__curbrk, ___brk_addr)
+
+int __brk (void *addr)
+{
+ void *newbrk;
+
+ {
+ register long int res __asm__("r2") = (long int)addr;
+
+ __asm__ volatile ("lrw r1, %1\n\t"
+ "trap 0\n\t"
+ :"+r" (res)
+ :"i" (__NR_brk) :"r1");
+ newbrk = (void *) res;
+ }
+ __curbrk = newbrk;
+
+ if (newbrk < addr)
+ {
+ __set_errno (ENOMEM);
+ return -1;
+ }
+
+ return 0;
+}
+
+weak_alias (__brk, brk)
+
+#endif
new file mode 100644
@@ -0,0 +1,99 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+
+#ifdef __CSKYABIV2__
+# include "abiv2_clone.S"
+#else
+
+# include <sysdep.h>
+# define _ERRNO_H 1
+# include <bits/errno.h>
+# include <csky_readtp.h>
+
+# define CLONE_VM 8 /* 11 makes btsti easier, 0x00000100 in real */
+# define CLONE_THREAD 16 /* 0x00010000 in real */
+
+/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg,
+ pid_t *ptid, struct user_desc *tls, pid_t *ctid); */
+
+ .text
+ENTRY(__clone)
+ /* Sanity check arguments. */
+ cmpnei r2, 0
+ bf __error_arg /* no NULL function pointers */
+ cmpnei r3, 0
+ bf __error_arg /* no NULL function pointers */
+
+ subi r3, 8
+ stw r2, (r3, 0) /* insert the args onto the new stack */
+ stw r5, (r3, 4) /* insert the args onto the new stack */
+
+ ldw r5, (sp, 0) /* arg4 = ctid */
+
+ mov r2, r4 /* arg1 = flags */
+ mov r4, r6 /* arg3 = ptid */
+ mov r6, r7 /* arg5 = tls */
+ lrw r1, __NR_clone /* do syscall */
+ trap 0
+
+ btsti r2, 31 /* is r2 less than zero? */
+ bt do_syscall_error
+ cmpnei r2, 0
+ bf 1f
+ rts
+PSEUDO_END (__clone)
+
+1:
+ ldw r2, (sp, 4) /* restore args from new sp */
+ ldw r3, (sp, 0) /* restore args from new sp */
+ addi sp, 8
+
+ jsr r3
+ lrw r1, __NR_exit
+ trap 0
+
+__error_arg:
+ lrw r2, -EINVAL
+
+do_syscall_error:
+# ifdef __PIC__
+ subi sp, 8
+ stw gb, (sp, 0)
+ stw r15, (sp, 4)
+ bsr .Lgetpc
+.Lgetpc:
+ lrw gb, .Lgetpc@GOTPC
+ addu gb, r15
+ lrw r7, __syscall_error@PLT
+ addu r7, gb
+ ldw r7, (r7)
+ jsr r7
+ ldw gb, (sp, 0)
+ ldw r15, (sp, 4)
+ addi sp, 8
+# else
+ jmpi __syscall_error
+# endif /* __PIC__ */
+ rts
+
+libc_hidden_def (__clone)
+weak_alias (__clone, clone)
+
+#endif /* __CSKYABIV2__*/
new file mode 100644
@@ -0,0 +1,41 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sys/types.h>
+#include <errno.h>
+#include <endian.h>
+#include <unistd.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+/* Truncate the file FD refers to to LENGTH bytes. */
+int
+__ftruncate64 (int fd, off64_t length)
+{
+ unsigned int low = length & 0xffffffff;
+ unsigned int high = length >> 32;
+#ifdef __CSKYABIV2__
+ int result = INLINE_SYSCALL (ftruncate64, 3, fd,
+ __LONG_LONG_PAIR (high, low));
+#else
+ int result = INLINE_SYSCALL (ftruncate64, 4, fd, 0,
+ __LONG_LONG_PAIR (high, low));
+#endif
+ return result;
+}
+weak_alias (__ftruncate64, ftruncate64)
new file mode 100644
@@ -0,0 +1,108 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef __CSKYABIV2__
+#include "abiv2_getcontext.S"
+#else
+
+#include <sysdep.h>
+
+#include "ucontext_i.h"
+
+/* int getcontext (ucontext_t *ucp) */
+
+ENTRY(__getcontext)
+ /* No need to save r2-r7 or a0-a3 */
+ mov r7, r2
+
+ /* return zero */
+ lrw r2, MCONTEXT_CSKY_A0
+ add r2, r7
+ movi r1, 0
+ stw r1, (r2)
+
+ lrw r2, MCONTEXT_CSKY_R8
+ add r2, r7
+ stw r8, (r2, 0) /* save r8 */
+ stw r9, (r2, 4) /* save r9 */
+ stw r10, (r2, 8) /* save r10 */
+ stw r11, (r2, 12) /* save r11 */
+ stw r12, (r2, 16) /* save r12 */
+ stw r13, (r2, 20) /* save r13 */
+ stw r14, (r2, 24) /* save r14 */
+ stw r15, (r2, 28) /* save lr */
+
+
+ lrw r2, MCONTEXT_CSKY_SP
+ add r2, r7
+ stw sp, (r2) /* save sp */
+
+ lrw r2, MCONTEXT_CSKY_LR
+ add r2, r7
+ stw r15, (r2) /* Return to LR */
+
+ lrw r2, MCONTEXT_CSKY_PC
+ add r2, r7
+ stw r15, (r2) /* Return to LR */
+
+ lrw r2, MCONTEXT_CSKY_A0
+ add r2, r7
+ movi r3, 0
+ stw r3, (r2) /* Return zero */
+
+ /* __sigprocmask(SIG_BLOCK, NULL, &(ucontext->uc_sigmask)) */
+ lrw r2, SIG_BLOCK
+ movi r3, 0
+ lrw r4, UCONTEXT_SIGMASK
+ add r4, r7
+
+ subi sp, 8
+ stw r7, (sp, 0)
+
+ /* do sigprocmask syscall */
+#ifdef __PIC__
+ subi sp, 8
+ stw gb, (sp, 0)
+ stw lr, (sp, 4)
+ bsr .Lgetpc
+.Lgetpc:
+ lrw gb, .Lgetpc@GOTPC
+ addu gb, r15
+ lrw r7, __sigprocmask@PLT
+ addu r7, gb
+ ldw r7, (r7)
+ jsr r7
+ ldw gb, (sp, 0)
+ ldw lr, (sp, 4)
+ addi sp, 8
+#else
+ jsri __sigprocmask
+#endif
+
+ ldw r7, (sp, 0)
+ addi sp, 8
+ lrw r2, MCONTEXT_CSKY_LR
+ add r2, r7
+ /* restore r15 for sigprocmask changes */
+ ldw r15, (r2)
+ movi r2, 0 /* return 0 */
+ jmp r15
+END(__getcontext)
+
+weak_alias(__getcontext, getcontext)
+
+#endif /* __CSKYABIV2__*/
new file mode 100644
@@ -0,0 +1 @@
+#include <read_tp.S>
new file mode 100644
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/alpha/pt-vfork.S>
new file mode 100644
@@ -0,0 +1,46 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <features.h>
+#include <sysdep.h>
+
+/* This function is exported from libc for use by user code. libpthread, librt,
+ and the dynamic linker get their own private copies, for
+ performance (and in the case of ld.so, out of necessity); those are
+ all hidden. */
+
+/*
+ * __read_tp
+ * clobbe r0, others had to be saved
+ *
+ */
+#if IS_IN (libc)
+ .global __read_tp
+#else
+ .hidden __read_tp
+#endif
+#ifdef __CSKYABIV2__
+ENTRY (__read_tp)
+ mov r0, r31
+ rts
+END (__read_tp)
+#else
+ENTRY (__read_tp)
+ trap 3
+ rts
+END (__read_tp)
+#endif
new file mode 100644
@@ -0,0 +1,34 @@
+/* Provide kernel hint to read ahead.
+ Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <endian.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+ssize_t
+__readahead (int fd, off64_t offset, size_t count)
+{
+ return INLINE_SYSCALL_CALL (readahead, fd,
+ __ALIGNMENT_ARG SYSCALL_LL64 (offset), count);
+}
+
+weak_alias (__readahead, readahead)
new file mode 100644
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/scandir64.c>
new file mode 100644
@@ -0,0 +1,61 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef __CSKYABIV2__
+# include "abiv2_syscall.S"
+#else
+
+# include <sysdep.h>
+
+ENTRY (syscall)
+ mov r1, r2 /* syscall num */
+
+ mov r2, r3 /* arg1 */
+ mov r3, r4 /* arg2 */
+ mov r4, r5 /* arg3 */
+ mov r5, r6 /* arg4*/
+ mov r6, r7 /* arg5*/
+ ld r7, (sp, 0) /* arg6 */
+ trap 0
+ lrw r3, 0xfffff000
+ cmphs r2, r3
+ bt do_syscall_error
+ rts
+PSEUDO_END (syscall)
+
+do_syscall_error:
+# ifdef __PIC__
+ subi sp, 8
+ stw gb, (sp, 0)
+ stw r15, (sp, 4)
+ bsr .Lgetpc
+.Lgetpc:
+ lrw gb, .Lgetpc@GOTPC
+ addu gb, r15
+ lrw r7, __syscall_error@PLT
+ addu r7, gb
+ ldw r7, (r7)
+ jsr r7
+ ldw gb, (sp, 0)
+ ldw r15, (sp, 4)
+ addi sp, 8
+# else
+ jmpi __syscall_error
+# endif /* __PIC__ */
+ rts
+
+#endif /* __CSKYABVI2__ */
new file mode 100644
@@ -0,0 +1,7 @@
+# File name Caller Syscall name Args Strong name Weak names
+
+chown - chown32 i:sii __chown chown
+cacheflush - cacheflush i:pii _flush_cache cacheflush
+
+prlimit64 EXTRA prlimit64 i:iipp prlimit64
+fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark