crosstool-ng/packages/glibc/2.31/0001-Add-ARC-architecture.patch

8330 lines
245 KiB
Diff
Raw Normal View History

glibc: Add ARC architecture support to Glibc 2.30
This was generated from Synopsys GitHub Glibc WIP fork [1] this way:
----------------->8-----------------
git diff glibc-2.30..arc-2.30-2019.09.06 ':!NEWS' ':!ChangeLog'
----------------->8-----------------
[1] https://github.com/foss-for-synopsys-dwc-arc-processors/glibc
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
[Updated to glibc 2.31: remove headers that became generic
(including pthread-offsets.h which had incorrect offsets copied
from 64-bit platforms), remove <asm/unistd.h> inclusion for
syscall numbers, GET_PC -> sigcontext_get_pc rename. Only
build-tested.]
---
elf/elf.h | 70 +-
locale/Makefile | 5 +-
scripts/build-many-glibcs.py | 4 +
stdlib/longlong.h | 6 +-
support/Makefile | 5 -
sysdeps/arc/Implies | 4 +
sysdeps/arc/Makefile | 25 +
sysdeps/arc/Versions | 6 +
sysdeps/arc/__longjmp.S | 50 +
sysdeps/arc/abort-instr.h | 2 +
sysdeps/arc/atomic-machine.h | 73 +
sysdeps/arc/bits/endianness.h | 15 +
sysdeps/arc/bits/fenv.h | 72 +
sysdeps/arc/bits/link.h | 52 +
sysdeps/arc/bits/setjmp.h | 26 +
sysdeps/arc/bsd-_setjmp.S | 1 +
sysdeps/arc/bsd-setjmp.S | 1 +
sysdeps/arc/configure | 14 +
sysdeps/arc/configure.ac | 11 +
sysdeps/arc/dl-machine.h | 340 +++
sysdeps/arc/dl-runtime.c | 39 +
sysdeps/arc/dl-sysdep.h | 25 +
sysdeps/arc/dl-tls.h | 30 +
sysdeps/arc/dl-trampoline.S | 80 +
sysdeps/arc/entry.h | 5 +
sysdeps/arc/gccframe.h | 21 +
sysdeps/arc/gmp-mparam.h | 23 +
sysdeps/arc/jmpbuf-offsets.h | 47 +
sysdeps/arc/jmpbuf-unwind.h | 47 +
sysdeps/arc/ldsodefs.h | 43 +
sysdeps/arc/libc-tls.c | 27 +
sysdeps/arc/machine-gmon.h | 35 +
sysdeps/arc/memusage.h | 23 +
sysdeps/arc/nofpu/Implies | 1 +
sysdeps/arc/nofpu/libm-test-ulps | 390 +++
sysdeps/arc/nofpu/libm-test-ulps-name | 1 +
sysdeps/arc/nofpu/math-tests-exceptions.h | 27 +
sysdeps/arc/nofpu/math-tests-rounding.h | 27 +
sysdeps/arc/nptl/Makefile | 22 +
sysdeps/arc/nptl/bits/pthreadtypes-arch.h | 43 +
sysdeps/arc/nptl/bits/semaphore.h | 32 +
sysdeps/arc/nptl/pthreaddef.h | 32 +
sysdeps/arc/nptl/tcb-offsets.sym | 11 +
sysdeps/arc/nptl/tls.h | 150 ++
sysdeps/arc/preconfigure | 15 +
sysdeps/arc/setjmp.S | 66 +
sysdeps/arc/sfp-machine.h | 73 +
sysdeps/arc/sotruss-lib.c | 51 +
sysdeps/arc/stackinfo.h | 33 +
sysdeps/arc/start.S | 89 +
sysdeps/arc/sysdep.h | 48 +
sysdeps/arc/tls-macros.h | 47 +
sysdeps/arc/tst-audit.h | 23 +
sysdeps/unix/sysv/linux/arc/Implies | 3 +
sysdeps/unix/sysv/linux/arc/Makefile | 20 +
sysdeps/unix/sysv/linux/arc/Versions | 16 +
sysdeps/unix/sysv/linux/arc/arch-syscall.h | 317 +++
sysdeps/unix/sysv/linux/arc/bits/procfs.h | 35 +
.../sysv/linux/arc/bits/types/__sigset_t.h | 12 +
sysdeps/unix/sysv/linux/arc/c++-types.data | 67 +
sysdeps/unix/sysv/linux/arc/clone.S | 98 +
sysdeps/unix/sysv/linux/arc/configure | 4 +
sysdeps/unix/sysv/linux/arc/configure.ac | 4 +
sysdeps/unix/sysv/linux/arc/dl-static.c | 84 +
sysdeps/unix/sysv/linux/arc/getcontext.S | 63 +
sysdeps/unix/sysv/linux/arc/ipc_priv.h | 21 +
sysdeps/unix/sysv/linux/arc/jmp_buf-macros.h | 6 +
sysdeps/unix/sysv/linux/arc/kernel-features.h | 28 +
sysdeps/unix/sysv/linux/arc/ld.abilist | 9 +
sysdeps/unix/sysv/linux/arc/ldsodefs.h | 32 +
.../sysv/linux/arc/libBrokenLocale.abilist | 1 +
sysdeps/unix/sysv/linux/arc/libanl.abilist | 4 +
sysdeps/unix/sysv/linux/arc/libc.abilist | 2084 +++++++++++++++++
sysdeps/unix/sysv/linux/arc/libcrypt.abilist | 2 +
sysdeps/unix/sysv/linux/arc/libdl.abilist | 9 +
sysdeps/unix/sysv/linux/arc/libm.abilist | 753 ++++++
.../unix/sysv/linux/arc/libpthread.abilist | 240 ++
sysdeps/unix/sysv/linux/arc/libresolv.abilist | 79 +
sysdeps/unix/sysv/linux/arc/librt.abilist | 35 +
.../unix/sysv/linux/arc/libthread_db.abilist | 40 +
sysdeps/unix/sysv/linux/arc/libutil.abilist | 6 +
sysdeps/unix/sysv/linux/arc/localplt.data | 16 +
sysdeps/unix/sysv/linux/arc/makecontext.c | 75 +
sysdeps/unix/sysv/linux/arc/mmap_internal.h | 27 +
sysdeps/unix/sysv/linux/arc/pt-vfork.S | 1 +
sysdeps/unix/sysv/linux/arc/setcontext.S | 92 +
sysdeps/unix/sysv/linux/arc/shlib-versions | 2 +
sysdeps/unix/sysv/linux/arc/sigaction.c | 31 +
sysdeps/unix/sysv/linux/arc/sigcontextinfo.h | 31 +
sysdeps/unix/sysv/linux/arc/sigrestorer.S | 29 +
sysdeps/unix/sysv/linux/arc/swapcontext.S | 92 +
sysdeps/unix/sysv/linux/arc/sys/cachectl.h | 36 +
sysdeps/unix/sysv/linux/arc/sys/ucontext.h | 63 +
sysdeps/unix/sysv/linux/arc/sys/user.h | 31 +
sysdeps/unix/sysv/linux/arc/syscall.S | 38 +
sysdeps/unix/sysv/linux/arc/syscalls.list | 3 +
sysdeps/unix/sysv/linux/arc/sysdep.c | 33 +
sysdeps/unix/sysv/linux/arc/sysdep.h | 250 ++
sysdeps/unix/sysv/linux/arc/ucontext-macros.h | 29 +
sysdeps/unix/sysv/linux/arc/ucontext_i.sym | 20 +
sysdeps/unix/sysv/linux/arc/vfork.S | 42 +
sysdeps/unix/sysv/linux/syscall-names.list | 3 +
timezone/zic.c | 2 +-
103 files changed, 7413 insertions(+), 13 deletions(-)
create mode 100644 sysdeps/arc/Implies
create mode 100644 sysdeps/arc/Makefile
create mode 100644 sysdeps/arc/Versions
create mode 100644 sysdeps/arc/__longjmp.S
create mode 100644 sysdeps/arc/abort-instr.h
create mode 100644 sysdeps/arc/atomic-machine.h
create mode 100644 sysdeps/arc/bits/endianness.h
create mode 100644 sysdeps/arc/bits/fenv.h
create mode 100644 sysdeps/arc/bits/link.h
create mode 100644 sysdeps/arc/bits/setjmp.h
create mode 100644 sysdeps/arc/bsd-_setjmp.S
create mode 100644 sysdeps/arc/bsd-setjmp.S
create mode 100644 sysdeps/arc/configure
create mode 100644 sysdeps/arc/configure.ac
create mode 100644 sysdeps/arc/dl-machine.h
create mode 100644 sysdeps/arc/dl-runtime.c
create mode 100644 sysdeps/arc/dl-sysdep.h
create mode 100644 sysdeps/arc/dl-tls.h
create mode 100644 sysdeps/arc/dl-trampoline.S
create mode 100644 sysdeps/arc/entry.h
create mode 100644 sysdeps/arc/gccframe.h
create mode 100644 sysdeps/arc/gmp-mparam.h
create mode 100644 sysdeps/arc/jmpbuf-offsets.h
create mode 100644 sysdeps/arc/jmpbuf-unwind.h
create mode 100644 sysdeps/arc/ldsodefs.h
create mode 100644 sysdeps/arc/libc-tls.c
create mode 100644 sysdeps/arc/machine-gmon.h
create mode 100644 sysdeps/arc/memusage.h
create mode 100644 sysdeps/arc/nofpu/Implies
create mode 100644 sysdeps/arc/nofpu/libm-test-ulps
create mode 100644 sysdeps/arc/nofpu/libm-test-ulps-name
create mode 100644 sysdeps/arc/nofpu/math-tests-exceptions.h
create mode 100644 sysdeps/arc/nofpu/math-tests-rounding.h
create mode 100644 sysdeps/arc/nptl/Makefile
create mode 100644 sysdeps/arc/nptl/bits/pthreadtypes-arch.h
create mode 100644 sysdeps/arc/nptl/bits/semaphore.h
create mode 100644 sysdeps/arc/nptl/pthreaddef.h
create mode 100644 sysdeps/arc/nptl/tcb-offsets.sym
create mode 100644 sysdeps/arc/nptl/tls.h
create mode 100644 sysdeps/arc/preconfigure
create mode 100644 sysdeps/arc/setjmp.S
create mode 100644 sysdeps/arc/sfp-machine.h
create mode 100644 sysdeps/arc/sotruss-lib.c
create mode 100644 sysdeps/arc/stackinfo.h
create mode 100644 sysdeps/arc/start.S
create mode 100644 sysdeps/arc/sysdep.h
create mode 100644 sysdeps/arc/tls-macros.h
create mode 100644 sysdeps/arc/tst-audit.h
create mode 100644 sysdeps/unix/sysv/linux/arc/Implies
create mode 100644 sysdeps/unix/sysv/linux/arc/Makefile
create mode 100644 sysdeps/unix/sysv/linux/arc/Versions
create mode 100644 sysdeps/unix/sysv/linux/arc/arch-syscall.h
create mode 100644 sysdeps/unix/sysv/linux/arc/bits/procfs.h
create mode 100644 sysdeps/unix/sysv/linux/arc/bits/types/__sigset_t.h
create mode 100644 sysdeps/unix/sysv/linux/arc/c++-types.data
create mode 100644 sysdeps/unix/sysv/linux/arc/clone.S
create mode 100644 sysdeps/unix/sysv/linux/arc/configure
create mode 100644 sysdeps/unix/sysv/linux/arc/configure.ac
create mode 100644 sysdeps/unix/sysv/linux/arc/dl-static.c
create mode 100644 sysdeps/unix/sysv/linux/arc/getcontext.S
create mode 100644 sysdeps/unix/sysv/linux/arc/ipc_priv.h
create mode 100644 sysdeps/unix/sysv/linux/arc/jmp_buf-macros.h
create mode 100644 sysdeps/unix/sysv/linux/arc/kernel-features.h
create mode 100644 sysdeps/unix/sysv/linux/arc/ld.abilist
create mode 100644 sysdeps/unix/sysv/linux/arc/ldsodefs.h
create mode 100644 sysdeps/unix/sysv/linux/arc/libBrokenLocale.abilist
create mode 100644 sysdeps/unix/sysv/linux/arc/libanl.abilist
create mode 100644 sysdeps/unix/sysv/linux/arc/libc.abilist
create mode 100644 sysdeps/unix/sysv/linux/arc/libcrypt.abilist
create mode 100644 sysdeps/unix/sysv/linux/arc/libdl.abilist
create mode 100644 sysdeps/unix/sysv/linux/arc/libm.abilist
create mode 100644 sysdeps/unix/sysv/linux/arc/libpthread.abilist
create mode 100644 sysdeps/unix/sysv/linux/arc/libresolv.abilist
create mode 100644 sysdeps/unix/sysv/linux/arc/librt.abilist
create mode 100644 sysdeps/unix/sysv/linux/arc/libthread_db.abilist
create mode 100644 sysdeps/unix/sysv/linux/arc/libutil.abilist
create mode 100644 sysdeps/unix/sysv/linux/arc/localplt.data
create mode 100644 sysdeps/unix/sysv/linux/arc/makecontext.c
create mode 100644 sysdeps/unix/sysv/linux/arc/mmap_internal.h
create mode 100644 sysdeps/unix/sysv/linux/arc/pt-vfork.S
create mode 100644 sysdeps/unix/sysv/linux/arc/setcontext.S
create mode 100644 sysdeps/unix/sysv/linux/arc/shlib-versions
create mode 100644 sysdeps/unix/sysv/linux/arc/sigaction.c
create mode 100644 sysdeps/unix/sysv/linux/arc/sigcontextinfo.h
create mode 100644 sysdeps/unix/sysv/linux/arc/sigrestorer.S
create mode 100644 sysdeps/unix/sysv/linux/arc/swapcontext.S
create mode 100644 sysdeps/unix/sysv/linux/arc/sys/cachectl.h
create mode 100644 sysdeps/unix/sysv/linux/arc/sys/ucontext.h
create mode 100644 sysdeps/unix/sysv/linux/arc/sys/user.h
create mode 100644 sysdeps/unix/sysv/linux/arc/syscall.S
create mode 100644 sysdeps/unix/sysv/linux/arc/syscalls.list
create mode 100644 sysdeps/unix/sysv/linux/arc/sysdep.c
create mode 100644 sysdeps/unix/sysv/linux/arc/sysdep.h
create mode 100644 sysdeps/unix/sysv/linux/arc/ucontext-macros.h
create mode 100644 sysdeps/unix/sysv/linux/arc/ucontext_i.sym
create mode 100644 sysdeps/unix/sysv/linux/arc/vfork.S
diff --git a/elf/elf.h b/elf/elf.h
index 2549a177d6..1d235cf3ac 100644
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -330,7 +330,7 @@ typedef struct
#define EM_CLOUDSHIELD 192 /* CloudShield */
#define EM_COREA_1ST 193 /* KIPO-KAIST Core-A 1st gen. */
#define EM_COREA_2ND 194 /* KIPO-KAIST Core-A 2nd gen. */
-#define EM_ARC_COMPACT2 195 /* Synopsys ARCompact V2 */
+#define EM_ARCV2 195 /* Synopsys ARCv2 ISA. */
#define EM_OPEN8 196 /* Open8 RISC */
#define EM_RL78 197 /* Renesas RL78 */
#define EM_VIDEOCORE5 198 /* Broadcom VideoCore V */
@@ -4027,6 +4027,74 @@ enum
#define R_NDS32_TLS_TPOFF 102
#define R_NDS32_TLS_DESC 119
+/* ARCompact/ARCv2 specific relocs. */
+#define R_ARC_NONE 0x0
+#define R_ARC_8 0x1
+#define R_ARC_16 0x2
+#define R_ARC_24 0x3
+#define R_ARC_32 0x4
+#define R_ARC_B26 0x5
+#define R_ARC_B22_PCREL 0x6
+#define R_ARC_H30 0x7
+#define R_ARC_N8 0x8
+#define R_ARC_N16 0x9
+#define R_ARC_N24 0xA
+#define R_ARC_N32 0xB
+#define R_ARC_SDA 0xC
+#define R_ARC_SECTOFF 0xD
+#define R_ARC_S21H_PCREL 0xE
+#define R_ARC_S21W_PCREL 0xF
+#define R_ARC_S25H_PCREL 0x10
+#define R_ARC_S25W_PCREL 0x11
+#define R_ARC_SDA32 0x12
+#define R_ARC_SDA_LDST 0x13
+#define R_ARC_SDA_LDST1 0x14
+#define R_ARC_SDA_LDST2 0x15
+#define R_ARC_SDA16_LD 0x16
+#define R_ARC_SDA16_LD1 0x17
+#define R_ARC_SDA16_LD2 0x18
+#define R_ARC_S13_PCREL 0x19
+#define R_ARC_W 0x1A
+#define R_ARC_32_ME 0x1B
+#define R_ARC_N32_ME 0x1C
+#define R_ARC_SECTOFF_ME 0x1D
+#define R_ARC_SDA32_ME 0x1E
+#define R_ARC_W_ME 0x1F
+#define R_ARC_H30_ME 0x20
+#define R_ARC_SECTOFF_U8 0x21
+#define R_ARC_SECTOFF_S9 0x22
+#define R_AC_SECTOFF_U8 0x23
+#define R_AC_SECTOFF_U8_1 0x24
+#define R_AC_SECTOFF_U8_2 0x25
+#define R_AC_SECTOFF_S9 0x26
+#define R_AC_SECTOFF_S9_1 0x27
+#define R_AC_SECTOFF_S9_2 0x28
+#define R_ARC_SECTOFF_ME_1 0x29
+#define R_ARC_SECTOFF_ME_2 0x2A
+#define R_ARC_SECTOFF_1 0x2B
+#define R_ARC_SECTOFF_2 0x2C
+#define R_ARC_PC32 0x32
+#define R_ARC_GOTPC32 0x33
+#define R_ARC_PLT32 0x34
+#define R_ARC_COPY 0x35
+#define R_ARC_GLOB_DAT 0x36
+#define R_ARC_JUMP_SLOT 0x37
+#define R_ARC_RELATIVE 0x38
+#define R_ARC_GOTOFF 0x39
+#define R_ARC_GOTPC 0x3A
+#define R_ARC_GOT32 0x3B
+
+#define R_ARC_TLS_DTPMOD 0x42
+#define R_ARC_TLS_DTPOFF 0x43
+#define R_ARC_TLS_TPOFF 0x44
+#define R_ARC_TLS_GD_GOT 0x45
+#define R_ARC_TLS_GD_LD 0x46
+#define R_ARC_TLS_GD_CALL 0x47
+#define R_ARC_TLS_IE_GOT 0x48
+#define R_ARC_TLS_DTPOFF_S9 0x4a
+#define R_ARC_TLS_LE_S9 0x4a
+#define R_ARC_TLS_LE_32 0x4b
+
__END_DECLS
#endif /* elf.h */
diff --git a/locale/Makefile b/locale/Makefile
index c9694e236e..95a4a432a9 100644
--- a/locale/Makefile
+++ b/locale/Makefile
@@ -28,6 +28,7 @@ routines = setlocale findlocale loadlocale loadarchive \
localeconv nl_langinfo nl_langinfo_l mb_cur_max \
newlocale duplocale freelocale uselocale
tests = tst-C-locale tst-locname tst-duplocale
+tests-special = $(objpfx)tst-locale-locpath.out
categories = ctype messages monetary numeric time paper name \
address telephone measurement identification collate
aux = $(categories:%=lc-%) $(categories:%=C-%) SYS_libc C_name \
@@ -62,10 +63,6 @@ lib-modules := charmap-dir simple-hash xmalloc xstrdup \
GPERF = gperf
GPERFFLAGS = -acCgopt -k1,2,5,9,$$ -L ANSI-C
-ifeq ($(run-built-tests),yes)
-tests-special += $(objpfx)tst-locale-locpath.out
-endif
-
include ../Rules
CFLAGS-md5.c += -I../crypt
diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py
index 90b76caa93..1fdf4d44c7 100755
--- a/scripts/build-many-glibcs.py
+++ b/scripts/build-many-glibcs.py
@@ -155,6 +155,9 @@ class Context(object):
'cfg': ['--disable-multi-arch']}])
self.add_config(arch='aarch64_be',
os_name='linux-gnu')
+ self.add_config(arch='arc',
+ os_name='linux-gnu',
+ gcc_cfg=['--disable-multilib', '--with-cpu=archs'])
self.add_config(arch='alpha',
os_name='linux-gnu')
self.add_config(arch='arm',
@@ -1201,6 +1204,7 @@ class LinuxHeadersPolicyForUpdateSyscalls(object):
def install_linux_headers(policy, cmdlist):
"""Install Linux kernel headers."""
arch_map = {'aarch64': 'arm64',
+ 'arc': 'arc',
'alpha': 'alpha',
'arm': 'arm',
'csky': 'csky',
diff --git a/stdlib/longlong.h b/stdlib/longlong.h
index ee4aac1bb5..638b7894d4 100644
--- a/stdlib/longlong.h
+++ b/stdlib/longlong.h
@@ -199,7 +199,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype);
: "%r" ((USItype) (ah)), \
"rICal" ((USItype) (bh)), \
"%r" ((USItype) (al)), \
- "rICal" ((USItype) (bl)))
+ "rICal" ((USItype) (bl)) \
+ : "cc")
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
__asm__ ("sub.f %1, %4, %5\n\tsbc %0, %2, %3" \
: "=r" ((USItype) (sh)), \
@@ -207,7 +208,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype);
: "r" ((USItype) (ah)), \
"rICal" ((USItype) (bh)), \
"r" ((USItype) (al)), \
- "rICal" ((USItype) (bl)))
+ "rICal" ((USItype) (bl)) \
+ : "cc")
#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v)
#ifdef __ARC_NORM__
diff --git a/support/Makefile b/support/Makefile
index 3325feb790..d9fdc46ffa 100644
--- a/support/Makefile
+++ b/support/Makefile
@@ -188,12 +188,7 @@ CFLAGS-support_paths.c = \
-DSBINDIR_PATH=\"$(sbindir)\" \
-DROOTSBINDIR_PATH=\"$(rootsbindir)\"
-ifeq (,$(CXX))
LINKS_DSO_PROGRAM = links-dso-program-c
-else
-LINKS_DSO_PROGRAM = links-dso-program
-LDLIBS-links-dso-program = -lstdc++ -lgcc -lgcc_s $(libunwind)
-endif
ifeq (yes,$(have-selinux))
LDLIBS-$(LINKS_DSO_PROGRAM) += -lselinux
diff --git a/sysdeps/arc/Implies b/sysdeps/arc/Implies
new file mode 100644
index 0000000000..a0f0b00cfa
--- /dev/null
+++ b/sysdeps/arc/Implies
@@ -0,0 +1,4 @@
+init_array
+wordsize-32
+ieee754/flt-32
+ieee754/dbl-64
diff --git a/sysdeps/arc/Makefile b/sysdeps/arc/Makefile
new file mode 100644
index 0000000000..8d2fbe00c5
--- /dev/null
+++ b/sysdeps/arc/Makefile
@@ -0,0 +1,25 @@
+# ARC Makefile
+# Copyright (C) 1993-2019 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/>.
+
+# We don't support long doubles as a distinct type. We don't need to set
+# this variable; it's here mostly for documentational purposes.
+long-double-fcts = no
+
+ifeq ($(subdir),debug)
+CFLAGS-backtrace.c += -funwind-tables
+endif
diff --git a/sysdeps/arc/Versions b/sysdeps/arc/Versions
new file mode 100644
index 0000000000..ca0856d2db
--- /dev/null
+++ b/sysdeps/arc/Versions
@@ -0,0 +1,6 @@
+libc {
+ GLIBC_2.30 {
+ __syscall_error;
+ __mcount;
+ }
+}
diff --git a/sysdeps/arc/__longjmp.S b/sysdeps/arc/__longjmp.S
new file mode 100644
index 0000000000..8296aa445f
--- /dev/null
+++ b/sysdeps/arc/__longjmp.S
@@ -0,0 +1,50 @@
+/* longjmp for ARC.
+ Copyright (C) 2017-2019 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 <jmpbuf-offsets.h>
+
+;@ r0 = jump buffer from which regs will be restored
+;@ r1 = value that setjmp( ) will return due to this longjmp
+
+ENTRY (__longjmp)
+
+ ld_s r13, [r0]
+ ld_s r14, [r0,4]
+ ld r15, [r0,8]
+ ld r16, [r0,12]
+ ld r17, [r0,16]
+ ld r18, [r0,20]
+ ld r19, [r0,24]
+ ld r20, [r0,28]
+ ld r21, [r0,32]
+ ld r22, [r0,36]
+ ld r23, [r0,40]
+ ld r24, [r0,44]
+ ld r25, [r0,48]
+
+ ld blink, [r0,60]
+ ld fp, [r0,52]
+ ld sp, [r0,56]
+
+ mov.f r0, r1 ; get the setjmp return value(due to longjmp) in place
+
+ j.d [blink] ; to caller of setjmp location, right after the call
+ mov.z r0, 1 ; can't let setjmp return 0 when it is due to longjmp
+
+END (__longjmp)
diff --git a/sysdeps/arc/abort-instr.h b/sysdeps/arc/abort-instr.h
new file mode 100644
index 0000000000..49f33613c4
--- /dev/null
+++ b/sysdeps/arc/abort-instr.h
@@ -0,0 +1,2 @@
+/* FLAG 1 is privilege mode only instruction, hence will crash any program. */
+#define ABORT_INSTRUCTION asm ("flag 1")
diff --git a/sysdeps/arc/atomic-machine.h b/sysdeps/arc/atomic-machine.h
new file mode 100644
index 0000000000..bdc91d0558
--- /dev/null
+++ b/sysdeps/arc/atomic-machine.h
@@ -0,0 +1,73 @@
+/* Low-level functions for atomic operations. ARC version.
+ Copyright (C) 2012-2019 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/>. */
+
+#ifndef _ARC_BITS_ATOMIC_H
+#define _ARC_BITS_ATOMIC_H 1
+
+#include <stdint.h>
+
+typedef int32_t atomic32_t;
+typedef uint32_t uatomic32_t;
+typedef int_fast32_t atomic_fast32_t;
+typedef uint_fast32_t uatomic_fast32_t;
+
+typedef intptr_t atomicptr_t;
+typedef uintptr_t uatomicptr_t;
+typedef intmax_t atomic_max_t;
+typedef uintmax_t uatomic_max_t;
+
+#define __HAVE_64B_ATOMICS 0
+#define USE_ATOMIC_COMPILER_BUILTINS 1
+
+/* ARC does have legacy atomic EX reg, [mem] instruction but the micro-arch
+ is not as optimal as LLOCK/SCOND specially for SMP. */
+#define ATOMIC_EXCHANGE_USES_CAS 1
+
+#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \
+ (abort (), 0)
+#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval) \
+ (abort (), 0)
+#define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \
+ (abort (), 0)
+
+#define __arch_compare_and_exchange_val_8_int(mem, newval, oldval, model) \
+ (abort (), (__typeof (*mem)) 0)
+#define __arch_compare_and_exchange_val_16_int(mem, newval, oldval, model) \
+ (abort (), (__typeof (*mem)) 0)
+#define __arch_compare_and_exchange_val_64_int(mem, newval, oldval, model) \
+ (abort (), (__typeof (*mem)) 0)
+
+#define __arch_compare_and_exchange_val_32_int(mem, newval, oldval, model) \
+ ({ \
+ typeof (*mem) __oldval = (oldval); \
+ __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \
+ model, __ATOMIC_RELAXED); \
+ __oldval; \
+ })
+
+#define atomic_compare_and_exchange_val_acq(mem, new, old) \
+ __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 */
diff --git a/sysdeps/arc/bits/endianness.h b/sysdeps/arc/bits/endianness.h
new file mode 100644
index 0000000000..21fae520cd
--- /dev/null
+++ b/sysdeps/arc/bits/endianness.h
@@ -0,0 +1,15 @@
+#ifndef _BITS_ENDIANNESS_H
+#define _BITS_ENDIANNESS_H 1
+/* Although ARC CPU can do BE, it is not supported. */
+
+#ifndef _BITS_ENDIAN_H
+# error "Never use <bits/endianness.h> directly; include <endian.h> instead."
+#endif
+
+#ifdef __LITTLE_ENDIAN__
+# define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
+#ifdef __BIG_ENDIAN__
+# error "Big Endian NOt supported on ARC"
+#endif
+#endif /* bits/endianness.h */
diff --git a/sysdeps/arc/bits/fenv.h b/sysdeps/arc/bits/fenv.h
new file mode 100644
index 0000000000..58388fb43a
--- /dev/null
+++ b/sysdeps/arc/bits/fenv.h
@@ -0,0 +1,72 @@
+/* Copyright (C) 2012-2019 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/>. */
+
+#ifndef _FENV_H
+# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+#endif
+
+enum
+ {
+ FE_INVALID =
+# define FE_INVALID (0x01)
+ FE_INVALID,
+ FE_DIVBYZERO =
+# define FE_DIVBYZERO (0x02)
+ FE_DIVBYZERO,
+ FE_OVERFLOW =
+# define FE_OVERFLOW (0x04)
+ FE_OVERFLOW,
+ FE_UNDERFLOW =
+# define FE_UNDERFLOW (0x08)
+ FE_UNDERFLOW,
+ FE_INEXACT =
+# define FE_INEXACT (0x10)
+ FE_INEXACT
+ };
+
+# define FE_ALL_EXCEPT \
+ (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
+
+enum
+ {
+ FE_TOWARDZERO =
+# define FE_TOWARDZERO (0x0)
+ FE_TOWARDZERO,
+ FE_TONEAREST =
+# define FE_TONEAREST (0x1)
+ FE_TONEAREST,
+ FE_UPWARD =
+# define FE_UPWARD (0x2)
+ FE_UPWARD,
+ FE_DOWNWARD =
+# define FE_DOWNWARD (0x3)
+ FE_DOWNWARD
+ };
+
+typedef unsigned int fexcept_t;
+typedef unsigned int fenv_t;
+
+/* If the default argument is used we use this value. */
+#define FE_DFL_ENV ((const fenv_t *) -1)
+
+#if __GLIBC_USE (IEC_60559_BFP_EXT)
+/* Type representing floating-point control modes. */
+typedef unsigned int femode_t;
+
+/* Default floating-point control modes. */
+# define FE_DFL_MODE ((const femode_t *) -1L)
+#endif
diff --git a/sysdeps/arc/bits/link.h b/sysdeps/arc/bits/link.h
new file mode 100644
index 0000000000..c4508ab666
--- /dev/null
+++ b/sysdeps/arc/bits/link.h
@@ -0,0 +1,52 @@
+/* Machine-specific declarations for dynamic linker interface, ARC version.
+ Copyright (C) 2009-2019 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/>. */
+
+#ifndef _LINK_H
+# error "Never include <bits/link.h> directly; use <link.h> instead."
+#endif
+
+/* Registers for entry into PLT on ARC. */
+typedef struct La_arc_regs
+{
+ uint32_t lr_reg[8]; /* r0 through r7 (upto 8 args). */
+} La_arc_regs;
+
+/* Return values for calls from PLT on ARC. */
+typedef struct La_arc_retval
+{
+ /* For ARCv2, a 64-bit integer return value can use 2 regs. */
+ uint32_t lrv_reg[2];
+} La_arc_retval;
+
+__BEGIN_DECLS
+
+extern ElfW(Addr) la_arc_gnu_pltenter (ElfW(Sym) *__sym, unsigned int __ndx,
+ uintptr_t *__refcook,
+ uintptr_t *__defcook,
+ La_arc_regs *__regs,
+ unsigned int *__flags,
+ const char *__symname,
+ long int *__framesizep);
+extern unsigned int la_arc_gnu_pltexit (ElfW(Sym) *__sym, unsigned int __ndx,
+ uintptr_t *__refcook,
+ uintptr_t *__defcook,
+ const La_arc_regs *__inregs,
+ La_arc_retval *__outregs,
+ const char *symname);
+
+__END_DECLS
diff --git a/sysdeps/arc/bits/setjmp.h b/sysdeps/arc/bits/setjmp.h
new file mode 100644
index 0000000000..3cb457d097
--- /dev/null
+++ b/sysdeps/arc/bits/setjmp.h
@@ -0,0 +1,26 @@
+/* Define the machine-dependent type `jmp_buf'. ARC version.
+ Copyright (C) 1992-2019 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/>. */
+
+#ifndef _ARC_BITS_SETJMP_H
+#define _ARC_BITS_SETJMP_H 1
+
+/* Saves r13-r25 (callee-saved), fp (frame pointer), sp (stack pointer),
+ blink (branch-n-link). */
+typedef long int __jmp_buf[32];
+
+#endif
diff --git a/sysdeps/arc/bsd-_setjmp.S b/sysdeps/arc/bsd-_setjmp.S
new file mode 100644
index 0000000000..90b99cd8c3
--- /dev/null
+++ b/sysdeps/arc/bsd-_setjmp.S
@@ -0,0 +1 @@
+/* _setjmp is in setjmp.S. */
diff --git a/sysdeps/arc/bsd-setjmp.S b/sysdeps/arc/bsd-setjmp.S
new file mode 100644
index 0000000000..d3b823c118
--- /dev/null
+++ b/sysdeps/arc/bsd-setjmp.S
@@ -0,0 +1 @@
+/* setjmp is in setjmp.S. */
diff --git a/sysdeps/arc/configure b/sysdeps/arc/configure
new file mode 100644
index 0000000000..52e286da2e
--- /dev/null
+++ b/sysdeps/arc/configure
@@ -0,0 +1,14 @@
+# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
+ # Local configure fragment for sysdeps/arc.
+
+$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
+
+libc_cv_have_sdata_section=no
+
+# For ARC, historically ; was used for comments and not newline
+# Later # also got added to comment list, but ; couldn't be switched to
+# canonical newline as there's lots of code out there which will break
+libc_cv_asm_line_sep='`'
+cat >>confdefs.h <<_ACEOF
+#define ASM_LINE_SEP $libc_cv_asm_line_sep
+_ACEOF
diff --git a/sysdeps/arc/configure.ac b/sysdeps/arc/configure.ac
new file mode 100644
index 0000000000..1074d312f0
--- /dev/null
+++ b/sysdeps/arc/configure.ac
@@ -0,0 +1,11 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local configure fragment for sysdeps/arc.
+
+AC_DEFINE(PI_STATIC_AND_HIDDEN)
+libc_cv_have_sdata_section=no
+
+# For ARC, historically ; was used for comments and not newline
+# Later # also got added to comment list, but ; couldn't be switched to
+# canonical newline as there's lots of code out there which will break
+libc_cv_asm_line_sep='`'
+AC_DEFINE_UNQUOTED(ASM_LINE_SEP, $libc_cv_asm_line_sep)
diff --git a/sysdeps/arc/dl-machine.h b/sysdeps/arc/dl-machine.h
new file mode 100644
index 0000000000..c81acb9d4f
--- /dev/null
+++ b/sysdeps/arc/dl-machine.h
@@ -0,0 +1,340 @@
+/* Machine-dependent ELF dynamic relocation inline functions. ARC version.
+ Copyright (C) 1995-2019 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/>. */
+
+#ifndef dl_machine_h
+#define dl_machine_h
+
+#define ELF_MACHINE_NAME "arc"
+
+#include <entry.h>
+
+#ifndef ENTRY_POINT
+# error ENTRY_POINT needs to be defined for ARC
+#endif
+
+#include <string.h>
+#include <link.h>
+#include <dl-tls.h>
+
+/* Dynamic Linking ABI for ARCv2 ISA.
+
+ PLT
+ -------------------------------- <---- DT_PLTGOT
+ | ld r11, [pcl, off-to-GOT[1] | 0
+ | | 4
+ plt0 | ld r10, [pcl, off-to-GOT[2] | 8
+ | | 12
+ | j [r10] | 16
+ --------------------------------
+ | Base address of GOT | 20
+ --------------------------------
+ | ld r12, [pcl, off-to-GOT[3] | 24
+ plt1 | |
+ | j.d [r12] | 32
+ | mov r12, pcl | 36
+ --------------------------------
+ | | 40
+ ~ ~
+ ~ ~
+ | |
+ --------------------------------
+
+ .got
+ --------------
+ | [0] |
+ | ... | Runtime address for data symbols
+ | [n] |
+ --------------
+
+ .got.plt
+ --------------
+ | [0] | Build address of .dynamic
+ --------------
+ | [1] | Module info - setup by ld.so
+ --------------
+ | [2] | resolver entry point
+ --------------
+ | [3] |
+ | ... | Runtime address for function symbols
+ | [f] |
+ --------------
+
+ For ARCompact, the PLT is 12 bytes due to short instructions
+
+ --------------------------------
+ | ld r12, [pcl, off-to-GOT[3] | 24 (12 bytes each)
+ plt1 | |
+ | j_s.d [r12] | 32
+ | mov_s r12, pcl | 34
+ --------------------------------
+ | | 36 */
+
+/* Return nonzero iff ELF header is compatible with the running host. */
+static inline int
+elf_machine_matches_host (const Elf32_Ehdr *ehdr)
+{
+ return (ehdr->e_machine == EM_ARCV2 /* ARC HS. */
+ || ehdr->e_machine == EM_ARC_COMPACT); /* ARC 700. */
+}
+
+/* Get build time address of .dynamic as setup in GOT[0]
+ This is called very early in _dl_start() so it has not been relocated to
+ runtime value. */
+static inline ElfW(Addr)
+elf_machine_dynamic (void)
+{
+ extern const ElfW(Addr) _GLOBAL_OFFSET_TABLE_[] attribute_hidden;
+ return _GLOBAL_OFFSET_TABLE_[0];
+}
+
+
+/* Return the run-time load address of the shared object. */
+static inline ElfW(Addr)
+elf_machine_load_address (void)
+{
+ ElfW(Addr) build_addr, run_addr;
+
+ /* For build address, below generates
+ ld r0, [pcl, _GLOBAL_OFFSET_TABLE_@pcl]. */
+ build_addr = elf_machine_dynamic ();
+ __asm__ ("add %0, pcl, _DYNAMIC@pcl \n" : "=r" (run_addr));
+
+ return run_addr - build_addr;
+}
+
+/* Set up the loaded object described by L so its unrelocated PLT
+ entries will jump to the on-demand fixup code in dl-runtime.c. */
+
+static inline int
+__attribute__ ((always_inline))
+elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
+{
+ extern void _dl_runtime_resolve (Elf32_Word);
+
+ if (l->l_info[DT_JMPREL] && lazy)
+ {
+ /* On ARC DT_PLTGOT point to .plt whose 5th word (after the PLT header)
+ contains the address of .got. */
+ ElfW(Addr) *plt_base = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]);
+ ElfW(Addr) *got = (ElfW(Addr) *) (plt_base[5] + l->l_addr);
+
+ got[1] = (ElfW(Addr)) l; /* Identify this shared object. */
+
+ /* This function will get called to fix up the GOT entry indicated by
+ the offset on the stack, and then jump to the resolved address. */
+ got[2] = (ElfW(Addr)) &_dl_runtime_resolve;
+ }
+
+ return lazy;
+}
+
+/* What this code does:
+ -ldso starts execution here when kernel returns from execve()
+ -calls into generic ldso entry point _dl_start( )
+ -optionally adjusts argc for executable if exec passed as cmd
+ -calls into app main with address of finaliser. */
+
+#define RTLD_START asm ("\
+.text \n\
+.globl __start \n\
+.type __start, @function \n\
+__start: \n\
+ ; (1). bootstrap ld.so \n\
+ bl.d _dl_start \n\
+ mov_s r0, sp ; pass ptr to aux vector tbl \n\
+ mov r13, r0 ; safekeep app elf entry point \n\
+ \n\
+ ; (2). If ldso ran with executable as arg \n\
+ ; skip the extra args calc by dl_start() \n\
+ ld_s r1, [sp] ; orig argc \n\
+ ld r12, [pcl, _dl_skip_args@pcl] \n\
+ breq r12, 0, 1f \n\
+ \n\
+ add2 sp, sp, r12 ; discard argv entries from stack\n\
+ sub_s r1, r1, r12 ; adjusted argc, on stack \n\
+ st_s r1, [sp] \n\
+ add r2, sp, 4 \n\
+ ld r3, [pcl, _dl_argv@gotpc] ; ST doesn't support this addressing mode \n\
+ st r2, [r3] \n\
+1: \n\
+ ; (3). call preinit stuff \n\
+ ld r0, [pcl, _rtld_local@pcl] \n\
+ add r2, sp, 4 ; argv \n\
+ add2 r3, r2, r1 \n\
+ add r3, r3, 4 ; env \n\
+ bl _dl_init@plt \n\
+ \n\
+ ; (4) call app elf entry point \n\
+ add r0, pcl, _dl_fini@pcl \n\
+ j [r13] \n\
+ \n\
+ .size __start,.-__start \n\
+ .previous \n\
+");
+
+/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so
+ PLT entries should not be allowed to define the value.
+ ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
+ of the main executable's symbols, as for a COPY reloc. */
+#define elf_machine_type_class(type) \
+ ((((type) == R_ARC_JUMP_SLOT \
+ || (type) == R_ARC_TLS_DTPMOD \
+ || (type) == R_ARC_TLS_DTPOFF \
+ || (type) == R_ARC_TLS_TPOFF) * ELF_RTYPE_CLASS_PLT) \
+ | (((type) == R_ARC_COPY) * ELF_RTYPE_CLASS_COPY))
+
+/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
+#define ELF_MACHINE_JMP_SLOT R_ARC_JUMP_SLOT
+
+/* ARC uses Elf32_Rela relocations. */
+#define ELF_MACHINE_NO_REL 1
+#define ELF_MACHINE_NO_RELA 0
+
+/* Fixup a PLT entry to bounce directly to the function at VALUE. */
+
+static inline ElfW(Addr)
+elf_machine_fixup_plt (struct link_map *map, lookup_t t,
+ const ElfW(Sym) *refsym, const ElfW(Sym) *sym,
+ const Elf32_Rela *reloc,
+ ElfW(Addr) *reloc_addr, ElfW(Addr) value)
+{
+ return *reloc_addr = value;
+}
+
+/* Return the final value of a plt relocation. */
+static inline ElfW(Addr)
+elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc,
+ ElfW(Addr) value)
+{
+ return value;
+}
+
+/* Names of the architecture-specific auditing callback functions. */
+#define ARCH_LA_PLTENTER arc_gnu_pltenter
+#define ARCH_LA_PLTEXIT arc_gnu_pltexit
+
+#endif /* dl_machine_h */
+
+#ifdef RESOLVE_MAP
+
+auto inline void
+__attribute__ ((always_inline))
+elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
+ const ElfW(Sym) *sym, const struct r_found_version *version,
+ void *const reloc_addr_arg, int skip_ifunc)
+{
+ ElfW(Addr) *const reloc_addr = reloc_addr_arg;
+ const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
+
+ if (__glibc_unlikely (r_type == R_ARC_RELATIVE))
+ *reloc_addr += map->l_addr;
+ else if (__glibc_unlikely (r_type == R_ARC_NONE))
+ return;
+ else
+ {
+ const ElfW(Sym) *const refsym = sym;
+ struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
+ ElfW(Addr) value = SYMBOL_ADDRESS (sym_map, sym, true);
+
+ switch (r_type)
+ {
+ case R_ARC_COPY:
+ if (__glibc_unlikely (sym == NULL))
+ /* This can happen in trace mode if an object could not be
+ found. */
+ break;
+
+ size_t size = sym->st_size;
+ if (__glibc_unlikely (size != refsym->st_size))
+ {
+ const char *strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
+ if (sym->st_size > refsym->st_size)
+ size = refsym->st_size;
+ if (sym->st_size > refsym->st_size || GLRO(dl_verbose))
+ _dl_error_printf ("\
+ %s: Symbol `%s' has different size in shared object, consider re-linking\n",
+ rtld_progname ?: "<program name unknown>",
+ strtab + refsym->st_name);
+ }
+
+ memcpy (reloc_addr_arg, (void *) value, size);
+ break;
+ case R_ARC_GLOB_DAT:
+ case R_ARC_JUMP_SLOT:
+ *reloc_addr = value;
+ break;
+ case R_ARC_TLS_DTPMOD:
+ if (sym_map != NULL)
+ /* Get the information from the link map returned by the
+ resolv function. */
+ *reloc_addr = sym_map->l_tls_modid;
+ break;
+
+ case R_ARC_TLS_DTPOFF:
+ if (sym != NULL)
+ /* Offset set by the linker in the GOT entry would be overwritten
+ by dynamic loader instead of added to the symbol location.
+ Other target have the same approach on DTSOFF relocs. */
+ *reloc_addr += sym->st_value;
+ break;
+
+ case R_ARC_TLS_TPOFF:
+ if (sym != NULL)
+ {
+ CHECK_STATIC_TLS (map, sym_map);
+ *reloc_addr = sym_map->l_tls_offset + sym->st_value + reloc->r_addend;
+ }
+ break;
+ case R_ARC_32:
+ *reloc_addr += value + reloc->r_addend;
+ break;
+
+ case R_ARC_PC32:
+ *reloc_addr += value + reloc->r_addend - (unsigned long int) reloc_addr;
+ break;
+
+ default:
+ _dl_reloc_bad_type (map, r_type, 0);
+ break;
+ }
+ }
+}
+
+auto inline void
+__attribute__ ((always_inline))
+elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc,
+ void *const reloc_addr_arg)
+{
+ ElfW(Addr) *const reloc_addr = reloc_addr_arg;
+ *reloc_addr += l_addr; // + reloc->r_addend;
+}
+
+auto inline void
+__attribute__ ((always_inline))
+elf_machine_lazy_rel (struct link_map *map,
+ ElfW(Addr) l_addr, const ElfW(Rela) *reloc,
+ int skip_ifunc)
+{
+ ElfW(Addr) *const reloc_addr = (void *) (l_addr + reloc->r_offset);
+ if (ELF32_R_TYPE (reloc->r_info) == R_ARC_JUMP_SLOT)
+ *reloc_addr += l_addr;
+ else
+ _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1);
+}
+
+#endif /* RESOLVE_MAP */
diff --git a/sysdeps/arc/dl-runtime.c b/sysdeps/arc/dl-runtime.c
new file mode 100644
index 0000000000..48f4a5a7e1
--- /dev/null
+++ b/sysdeps/arc/dl-runtime.c
@@ -0,0 +1,39 @@
+/* dl-runtime helpers for ARC.
+ Copyright (C) 2017-2019 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/>. */
+
+/* PLT jump into resolver passes PC of PLTn, while _dl_fixup expects the
+ address of corresponding .rela.plt entry. */
+
+#ifdef __A7__
+# define ARC_PLT_SIZE 12
+#else
+# define ARC_PLT_SIZE 16
+#endif
+
+#define reloc_index \
+({ \
+ unsigned long int plt0 = D_PTR (l, l_info[DT_PLTGOT]); \
+ unsigned long int pltn = reloc_arg; \
+ /* Exclude PL0 and PLT1. */ \
+ unsigned long int idx = (pltn - plt0)/ARC_PLT_SIZE - 2; \
+ idx; \
+})
+
+#define reloc_offset reloc_index * sizeof (PLTREL)
+
+#include <elf/dl-runtime.c>
diff --git a/sysdeps/arc/dl-sysdep.h b/sysdeps/arc/dl-sysdep.h
new file mode 100644
index 0000000000..ffc30b6937
--- /dev/null
+++ b/sysdeps/arc/dl-sysdep.h
@@ -0,0 +1,25 @@
+/* System-specific settings for dynamic linker code. ARC version.
+ Copyright (C) 2009-2019 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_next <dl-sysdep.h>
+
+/* _dl_argv cannot be attribute_relro, because _dl_start_user
+ might write into it after _dl_start returns. */
+#define DL_ARGV_NOT_RELRO 1
+
+#define DL_EXTERN_PROTECTED_DATA
diff --git a/sysdeps/arc/dl-tls.h b/sysdeps/arc/dl-tls.h
new file mode 100644
index 0000000000..7f0cf91e40
--- /dev/null
+++ b/sysdeps/arc/dl-tls.h
@@ -0,0 +1,30 @@
+/* Thread-local storage handling in the ELF dynamic linker. ARC version.
+ Copyright (C) 2012-2019 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/>. */
+
+
+/* Type used for the representation of TLS information in the GOT. */
+typedef struct
+{
+ unsigned long int ti_module;
+ unsigned long int ti_offset;
+} tls_index;
+
+extern void *__tls_get_addr (tls_index *ti);
+
+/* Value used for dtv entries for which the allocation is delayed. */
+#define TLS_DTV_UNALLOCATED ((void *) -1l)
diff --git a/sysdeps/arc/dl-trampoline.S b/sysdeps/arc/dl-trampoline.S
new file mode 100644
index 0000000000..9da75fb1fe
--- /dev/null
+++ b/sysdeps/arc/dl-trampoline.S
@@ -0,0 +1,80 @@
+/* PLT trampolines. ARC version.
+ Copyright (C) 2005-2019 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 <libc-symbols.h>
+
+#include <sysdep.h>
+#include <sys/syscall.h>
+
+/* Save the registers which resolver could possibly clobber
+ r0-r9: args to the function - symbol being resolved
+ r10-r12 are already clobbered by PLTn, PLT0 thus neednot be saved. */
+
+.macro SAVE_CALLER_SAVED
+ push_s r0
+ push_s r1
+ push_s r2
+ push_s r3
+ st.a r4, [sp, -4]
+ st.a r5, [sp, -4]
+ st.a r6, [sp, -4]
+ st.a r7, [sp, -4]
+ st.a r8, [sp, -4]
+ st.a r9, [sp, -4]
+ cfi_adjust_cfa_offset (40)
+ push_s blink
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (blink, 0)
+.endm
+
+.macro RESTORE_CALLER_SAVED_BUT_R0
+ ld.ab blink,[sp, 4]
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (blink)
+ ld.ab r9, [sp, 4]
+ ld.ab r8, [sp, 4]
+ ld.ab r7, [sp, 4]
+ ld.ab r6, [sp, 4]
+ ld.ab r5, [sp, 4]
+ ld.ab r4, [sp, 4]
+ pop_s r3
+ pop_s r2
+ pop_s r1
+ cfi_adjust_cfa_offset (-36)
+.endm
+
+/* Upon entry, PLTn, which led us here, sets up the following regs
+ r11 = Module info (tpnt pointer as expected by resolver)
+ r12 = PC of the PLTn itself - needed by resolver to find
+ corresponding .rela.plt entry. */
+
+ENTRY (_dl_runtime_resolve)
+ ; args to func being resolved, which resolver might clobber
+ SAVE_CALLER_SAVED
+
+ mov_s r1, r12
+ bl.d _dl_fixup
+ mov r0, r11
+
+ RESTORE_CALLER_SAVED_BUT_R0
+ j_s.d [r0] /* r0 has resolved function addr. */
+ pop_s r0 /* restore first arg to resolved call. */
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (r0)
+END (_dl_runtime_resolve)
diff --git a/sysdeps/arc/entry.h b/sysdeps/arc/entry.h
new file mode 100644
index 0000000000..adb01d981a
--- /dev/null
+++ b/sysdeps/arc/entry.h
@@ -0,0 +1,5 @@
+#ifndef __ASSEMBLY__
+extern void __start (void) attribute_hidden;
+#endif
+
+#define ENTRY_POINT __start
diff --git a/sysdeps/arc/gccframe.h b/sysdeps/arc/gccframe.h
new file mode 100644
index 0000000000..40487fa77b
--- /dev/null
+++ b/sysdeps/arc/gccframe.h
@@ -0,0 +1,21 @@
+/* Definition of object in frame unwind info. ARC version.
+ Copyright (C) 2017-2019 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/>. */
+
+#define FIRST_PSEUDO_REGISTER 40
+
+#include <sysdeps/generic/gccframe.h>
diff --git a/sysdeps/arc/gmp-mparam.h b/sysdeps/arc/gmp-mparam.h
new file mode 100644
index 0000000000..e30695fc6b
--- /dev/null
+++ b/sysdeps/arc/gmp-mparam.h
@@ -0,0 +1,23 @@
+/* gmp-mparam.h -- Compiler/machine parameter header file.
+
+Copyright (C) 2017-2019 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <sysdeps/generic/gmp-mparam.h>
+
+#define IEEE_DOUBLE_BIG_ENDIAN 0
diff --git a/sysdeps/arc/jmpbuf-offsets.h b/sysdeps/arc/jmpbuf-offsets.h
new file mode 100644
index 0000000000..9760f3a389
--- /dev/null
+++ b/sysdeps/arc/jmpbuf-offsets.h
@@ -0,0 +1,47 @@
+/* Private macros for accessing __jmp_buf contents. ARC version.
+ Copyright (C) 2006-2019 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/>. */
+
+/* Save offsets within __jmp_buf
+ We don't use most of these symbols; they are here for documentation. */
+
+/* Callee Regs. */
+#define JB_R13 0
+#define JB_R14 1
+#define JB_R15 2
+#define JB_R16 3
+#define JB_R17 4
+#define JB_R18 5
+#define JB_R19 6
+#define JB_R20 7
+#define JB_R21 8
+#define JB_R22 9
+#define JB_R23 10
+#define JB_R24 11
+#define JB_R25 12
+
+/* Frame Pointer, Stack Pointer, Branch-n-link. */
+#define JB_FP 13
+#define JB_SP 14
+#define JB_BLINK 15
+
+/* We save space for some extra state to accommodate future changes
+ This is number of words. */
+#define JB_NUM 32
+
+/* Helper for generic ____longjmp_chk(). */
+#define JB_FRAME_ADDRESS(buf) ((void *) (unsigned long int) (buf[JB_SP]))
diff --git a/sysdeps/arc/jmpbuf-unwind.h b/sysdeps/arc/jmpbuf-unwind.h
new file mode 100644
index 0000000000..47be5758c7
--- /dev/null
+++ b/sysdeps/arc/jmpbuf-unwind.h
@@ -0,0 +1,47 @@
+/* Examine __jmp_buf for unwinding frames. ARC version.
+ Copyright (C) 2005-2019 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 <setjmp.h>
+#include <jmpbuf-offsets.h>
+#include <stdint.h>
+#include <unwind.h>
+
+/* Test if longjmp to JMPBUF would unwind the frame
+ containing a local variable at ADDRESS. */
+
+#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
+ ((void *) (address) < (void *) demangle (jmpbuf[JB_SP]))
+
+#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
+ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
+
+static inline uintptr_t __attribute__ ((unused))
+_jmpbuf_sp (__jmp_buf jmpbuf)
+{
+ uintptr_t sp = jmpbuf[JB_SP];
+#ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (sp);
+#endif
+ return sp;
+}
+
+#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
+ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf_sp (_jmpbuf) - (_adj)))
+
+/* We use the normal longjmp for unwinding. */
+#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
diff --git a/sysdeps/arc/ldsodefs.h b/sysdeps/arc/ldsodefs.h
new file mode 100644
index 0000000000..53ef4e1e83
--- /dev/null
+++ b/sysdeps/arc/ldsodefs.h
@@ -0,0 +1,43 @@
+/* Run-time dynamic linker data structures for loaded ELF shared objects.
+ Copyright (C) 2000-2019 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/>. */
+
+#ifndef _ARC_LDSODEFS_H
+#define _ARC_LDSODEFS_H 1
+
+#include <elf.h>
+
+struct La_arc_regs;
+struct La_arc_retval;
+
+#define ARCH_PLTENTER_MEMBERS \
+ ElfW(Addr) (*arc_gnu_pltenter) (ElfW(Sym) *, unsigned int, \
+ uintptr_t *, uintptr_t *, \
+ const struct La_arc_regs *, \
+ unsigned int *, const char *, \
+ long int *);
+
+#define ARCH_PLTEXIT_MEMBERS \
+ unsigned int (*arc_gnu_pltexit) (ElfW(Sym) *, unsigned int, \
+ uintptr_t *, uintptr_t *, \
+ const struct La_arc_regs *, \
+ struct La_arc_retval *, \
+ const char *);
+
+#include_next <ldsodefs.h>
+
+#endif
diff --git a/sysdeps/arc/libc-tls.c b/sysdeps/arc/libc-tls.c
new file mode 100644
index 0000000000..903a75a41b
--- /dev/null
+++ b/sysdeps/arc/libc-tls.c
@@ -0,0 +1,27 @@
+/* Thread-local storage handling in the ELF dynamic linker. ARC version.
+ Copyright (C) 2005-2019 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 <csu/libc-tls.c>
+#include <dl-tls.h>
+
+void *
+__tls_get_addr (tls_index *ti)
+{
+ dtv_t *dtv = THREAD_DTV ();
+ return (char *) dtv[1].pointer.val + ti->ti_offset;
+}
diff --git a/sysdeps/arc/machine-gmon.h b/sysdeps/arc/machine-gmon.h
new file mode 100644
index 0000000000..1d9e8108d9
--- /dev/null
+++ b/sysdeps/arc/machine-gmon.h
@@ -0,0 +1,35 @@
+/* Machine-dependent definitions for profiling support. ARC version.
+ Copyright (C) 1996-2019 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 _MCOUNT_DECL(frompc, selfpc) \
+static void \
+__mcount_internal (unsigned long int frompc, unsigned long int selfpc)
+
+/* This is very simple as gcc does all the heavy lifting at _mcount call site
+ - sets up caller's blink in r0, so frompc is setup correctly
+ - preserve argument registers for original call. */
+
+#define MCOUNT \
+void \
+_mcount (void *frompc) \
+{ \
+ __mcount_internal ((unsigned long int) frompc, \
+ (unsigned long int) __builtin_return_address(0)); \
+}
diff --git a/sysdeps/arc/memusage.h b/sysdeps/arc/memusage.h
new file mode 100644
index 0000000000..29f234f5ba
--- /dev/null
+++ b/sysdeps/arc/memusage.h
@@ -0,0 +1,23 @@
+/* Machine-specific definitions for memory usage profiling, ARC version.
+ Copyright (C) 2000-2019 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/>. */
+
+#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; })
+
+#define uatomic32_t unsigned int
+
+#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/arc/nofpu/Implies b/sysdeps/arc/nofpu/Implies
new file mode 100644
index 0000000000..abcbadb25f
--- /dev/null
+++ b/sysdeps/arc/nofpu/Implies
@@ -0,0 +1 @@
+ieee754/soft-fp
diff --git a/sysdeps/arc/nofpu/libm-test-ulps b/sysdeps/arc/nofpu/libm-test-ulps
new file mode 100644
index 0000000000..0e8ef313fa
--- /dev/null
+++ b/sysdeps/arc/nofpu/libm-test-ulps
@@ -0,0 +1,390 @@
+# Begin of automatic generation
+
+# Maximal error of functions:
+Function: "acos":
+float: 1
+ifloat: 1
+
+Function: "acosh":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: "asin":
+float: 1
+ifloat: 1
+
+Function: "asinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "atan":
+float: 1
+ifloat: 1
+
+Function: "atan2":
+float: 1
+ifloat: 1
+
+Function: "atanh":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: "cabs":
+double: 1
+idouble: 1
+
+Function: Real part of "cacos":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Imaginary part of "cacos":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Real part of "cacosh":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Imaginary part of "cacosh":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "carg":
+float: 1
+ifloat: 1
+
+Function: Real part of "casin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "casin":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Real part of "casinh":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Imaginary part of "casinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "catan":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "catan":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "catanh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "catanh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "cbrt":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+
+Function: Real part of "ccos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ccos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "ccosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ccosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "cexp":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: Imaginary part of "cexp":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Real part of "clog":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
+
+Function: Imaginary part of "clog":
+float: 1
+ifloat: 1
+
+Function: Real part of "clog10":
+double: 3
+float: 4
+idouble: 3
+ifloat: 4
+
+Function: Imaginary part of "clog10":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: "cos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "cosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "cpow":
+double: 2
+float: 5
+idouble: 2
+ifloat: 5
+
+Function: Imaginary part of "cpow":
+float: 2
+ifloat: 2
+
+Function: Real part of "csin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "csinh":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "csinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "csqrt":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Imaginary part of "csqrt":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Real part of "ctan":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ctan":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Real part of "ctanh":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Imaginary part of "ctanh":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: "erf":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "erfc":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+
+Function: "exp10":
+double: 2
+idouble: 2
+
+Function: "exp2":
+double: 1
+idouble: 1
+
+Function: "expm1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "gamma":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+
+Function: "hypot":
+double: 1
+idouble: 1
+
+Function: "j0":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: "j1":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "jn":
+double: 4
+float: 4
+idouble: 4
+ifloat: 4
+
+Function: "lgamma":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+
+Function: "log10":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: "log1p":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "log2":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: "pow":
+double: 1
+idouble: 1
+
+Function: "sin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "sincos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "sinh":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: "tan":
+float: 1
+ifloat: 1
+
+Function: "tanh":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: "tgamma":
+double: 5
+float: 4
+idouble: 5
+ifloat: 4
+
+Function: "y0":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: "y1":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+
+Function: "yn":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
+
+# end of automatic generation
diff --git a/sysdeps/arc/nofpu/libm-test-ulps-name b/sysdeps/arc/nofpu/libm-test-ulps-name
new file mode 100644
index 0000000000..8c4fba4f9a
--- /dev/null
+++ b/sysdeps/arc/nofpu/libm-test-ulps-name
@@ -0,0 +1 @@
+ARC
diff --git a/sysdeps/arc/nofpu/math-tests-exceptions.h b/sysdeps/arc/nofpu/math-tests-exceptions.h
new file mode 100644
index 0000000000..f5c0b73589
--- /dev/null
+++ b/sysdeps/arc/nofpu/math-tests-exceptions.h
@@ -0,0 +1,27 @@
+/* Configuration for math tests. exceptions support ARC version.
+ Copyright (C) 2017-2019 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/>. */
+
+#ifndef ARC_NOFPU_MATH_TESTS_EXCEPTIONS_H
+#define ARC_NOFPU_MATH_TESTS_EXCEPTIONS_H 1
+
+/* Soft-float doesnot support exceptions. */
+#define EXCEPTION_TESTS_float 0
+#define EXCEPTION_TESTS_double 0
+#define EXCEPTION_TESTS_long_double 0
+
+#endif
diff --git a/sysdeps/arc/nofpu/math-tests-rounding.h b/sysdeps/arc/nofpu/math-tests-rounding.h
new file mode 100644
index 0000000000..e8f76338b1
--- /dev/null
+++ b/sysdeps/arc/nofpu/math-tests-rounding.h
@@ -0,0 +1,27 @@
+/* Configuration for math tests: rounding mode support. ARC version.
+ Copyright (C) 2017-2019 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/>. */
+
+#ifndef ARC_NOFPU_MATH_TESTS_ROUNDING_H
+#define ARC_NOFPU_MATH_TESTS_ROUNDING_H 1
+
+/* Soft-float only supports to-nearest rounding mode. */
+#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST)
+#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST)
+#define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST)
+
+#endif
diff --git a/sysdeps/arc/nptl/Makefile b/sysdeps/arc/nptl/Makefile
new file mode 100644
index 0000000000..3c33c9cc11
--- /dev/null
+++ b/sysdeps/arc/nptl/Makefile
@@ -0,0 +1,22 @@
+# NPTL makefile fragment for ARC.
+# Copyright (C) 2005-2019 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/>.
+
+ifeq ($(subdir),csu)
+gen-as-const-headers += tcb-offsets.sym
+endif
diff --git a/sysdeps/arc/nptl/bits/pthreadtypes-arch.h b/sysdeps/arc/nptl/bits/pthreadtypes-arch.h
new file mode 100644
index 0000000000..c104ad4444
--- /dev/null
+++ b/sysdeps/arc/nptl/bits/pthreadtypes-arch.h
@@ -0,0 +1,43 @@
+/* Machine-specific pthread type layouts. ARC version.
+ Copyright (C) 2012-2019 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/>. */
+
+#ifndef _BITS_PTHREADTYPES_ARCH_H
+#define _BITS_PTHREADTYPES_ARCH_H 1
+
+#include <endian.h>
+
+#define __SIZEOF_PTHREAD_ATTR_T 32
+#define __SIZEOF_PTHREAD_MUTEX_T 32
+#define __SIZEOF_PTHREAD_MUTEXATTR_T 4
+#define __SIZEOF_PTHREAD_COND_T 48
+#define __SIZEOF_PTHREAD_CONDATTR_T 4
+#define __SIZEOF_PTHREAD_RWLOCK_T 32
+#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
+#define __SIZEOF_PTHREAD_BARRIER_T 20
+#define __SIZEOF_PTHREAD_BARRIERATTR_T 4
+
+#define __PTHREAD_COMPAT_PADDING_MID
+#define __PTHREAD_COMPAT_PADDING_END
+#define __PTHREAD_MUTEX_LOCK_ELISION 0
+#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 0
+#define __PTHREAD_MUTEX_USE_UNION 0
+
+#define __LOCK_ALIGNMENT
+#define __ONCE_ALIGNMENT
+
+#endif /* bits/pthreadtypes-arch.h */
diff --git a/sysdeps/arc/nptl/bits/semaphore.h b/sysdeps/arc/nptl/bits/semaphore.h
new file mode 100644
index 0000000000..662d08401d
--- /dev/null
+++ b/sysdeps/arc/nptl/bits/semaphore.h
@@ -0,0 +1,32 @@
+/* Machine-specific POSIX semaphore type layouts. ARC version.
+ Copyright (C) 2002-2019 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/>. */
+
+#ifndef _SEMAPHORE_H
+# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+#endif
+
+#define __SIZEOF_SEM_T 16
+
+/* Value returned if `sem_open' failed. */
+#define SEM_FAILED ((sem_t *) 0)
+
+typedef union
+{
+ char __size[__SIZEOF_SEM_T];
+ long int __align;
+} sem_t;
diff --git a/sysdeps/arc/nptl/pthreaddef.h b/sysdeps/arc/nptl/pthreaddef.h
new file mode 100644
index 0000000000..80a109bbd5
--- /dev/null
+++ b/sysdeps/arc/nptl/pthreaddef.h
@@ -0,0 +1,32 @@
+/* pthread machine parameter definitions, ARC version.
+ Copyright (C) 2002-2019 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/>. */
+
+/* Default stack size. */
+#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024)
+
+/* Required stack pointer alignment at beginning. */
+#define STACK_ALIGN 4
+
+/* Minimal stack size after allocating thread descriptor and guard size. */
+#define MINIMAL_REST_STACK 2048
+
+/* Alignment requirement for TCB. */
+#define TCB_ALIGNMENT 4
+
+/* Location of current stack frame. */
+#define CURRENT_STACK_FRAME __builtin_frame_address (0)
diff --git a/sysdeps/arc/nptl/tcb-offsets.sym b/sysdeps/arc/nptl/tcb-offsets.sym
new file mode 100644
index 0000000000..56950e0676
--- /dev/null
+++ b/sysdeps/arc/nptl/tcb-offsets.sym
@@ -0,0 +1,11 @@
+#include <sysdep.h>
+#include <tls.h>
+
+-- Derive offsets relative to the thread register.
+#define thread_offsetof(mem) (long)(offsetof(struct pthread, mem) - sizeof(struct pthread))
+
+MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads)
+TLS_PRE_TCB_SIZE sizeof (struct pthread)
+TLS_TCB_SIZE sizeof(tcbhead_t)
+
+PTHREAD_TID offsetof(struct pthread, tid)
diff --git a/sysdeps/arc/nptl/tls.h b/sysdeps/arc/nptl/tls.h
new file mode 100644
index 0000000000..2c90109d57
--- /dev/null
+++ b/sysdeps/arc/nptl/tls.h
@@ -0,0 +1,150 @@
+/* Definition for thread-local data handling. NPTL/ARC version.
+ Copyright (C) 2012-2019 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/>. */
+
+#ifndef _ARC_NPTL_TLS_H
+#define _ARC_NPTL_TLS_H 1
+
+#include <dl-sysdep.h>
+
+#ifndef __ASSEMBLER__
+# include <stdbool.h>
+# include <stddef.h>
+# include <stdint.h>
+
+#include <dl-dtv.h>
+
+/* Get system call information. */
+# include <sysdep.h>
+
+/* The TLS blocks start right after the TCB. */
+# define TLS_DTV_AT_TP 1
+# define TLS_TCB_AT_TP 0
+
+/* Get the thread descriptor definition. */
+# include <nptl/descr.h>
+
+typedef struct
+{
+ dtv_t *dtv;
+ uintptr_t pointer_guard;
+} tcbhead_t;
+
+register struct pthread *__thread_self __asm__("r25");
+
+/* This is the size of the initial TCB. */
+# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t)
+
+/* Alignment requirements for the initial TCB. */
+# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread)
+
+/* This is the size of the TCB. */
+#ifndef TLS_TCB_SIZE
+# define TLS_TCB_SIZE sizeof (tcbhead_t)
+#endif
+
+/* Alignment requirements for the TCB. */
+# define TLS_TCB_ALIGN __alignof__ (struct pthread)
+
+/* This is the size we need before TCB. */
+# define TLS_PRE_TCB_SIZE sizeof (struct pthread)
+
+/* Install the dtv pointer. The pointer passed is to the element with
+ index -1 which contain the length. */
+# define INSTALL_DTV(tcbp, dtvp) \
+ (((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1)
+
+/* Install new dtv for current thread. */
+# define INSTALL_NEW_DTV(dtv) \
+ (THREAD_DTV() = (dtv))
+
+/* Return dtv of given thread descriptor. */
+# define GET_DTV(tcbp) \
+ (((tcbhead_t *) (tcbp))->dtv)
+
+/* Code to initially initialize the thread pointer. */
+# define TLS_INIT_TP(tcbp) \
+ ({ \
+ long result_var; \
+ __builtin_set_thread_pointer(tcbp); \
+ result_var = INTERNAL_SYSCALL (arc_settls, err, 1, (tcbp)); \
+ INTERNAL_SYSCALL_ERROR_P (result_var, err) \
+ ? "unknown error" : NULL; \
+ })
+
+/* Value passed to 'clone' for initialization of the thread register. */
+# define TLS_DEFINE_INIT_TP(tp, pd) void *tp = (pd) + 1
+
+/* Return the address of the dtv for the current thread. */
+# define THREAD_DTV() \
+ (((tcbhead_t *) __builtin_thread_pointer ())->dtv)
+
+/* Return the thread descriptor for the current thread. */
+# define THREAD_SELF \
+ ((struct pthread *)__builtin_thread_pointer () - 1)
+
+/* Magic for libthread_db to know how to do THREAD_SELF. */
+# define DB_THREAD_SELF \
+ CONST_THREAD_AREA (32, sizeof (struct pthread))
+
+/* Access to data in the thread descriptor is easy. */
+# define THREAD_GETMEM(descr, member) \
+ descr->member
+# define THREAD_GETMEM_NC(descr, member, idx) \
+ descr->member[idx]
+# define THREAD_SETMEM(descr, member, value) \
+ descr->member = (value)
+# define THREAD_SETMEM_NC(descr, member, idx, value) \
+ descr->member[idx] = (value)
+
+/* Get and set the global scope generation counter in struct pthread. */
+#define THREAD_GSCOPE_IN_TCB 1
+#define THREAD_GSCOPE_FLAG_UNUSED 0
+#define THREAD_GSCOPE_FLAG_USED 1
+#define THREAD_GSCOPE_FLAG_WAIT 2
+#define THREAD_GSCOPE_RESET_FLAG() \
+ do \
+ { int __res \
+ = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
+ THREAD_GSCOPE_FLAG_UNUSED); \
+ if (__res == THREAD_GSCOPE_FLAG_WAIT) \
+ lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
+ } \
+ while (0)
+#define THREAD_GSCOPE_SET_FLAG() \
+ do \
+ { \
+ THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \
+ atomic_write_barrier (); \
+ } \
+ while (0)
+#define THREAD_GSCOPE_WAIT() \
+ GL(dl_wait_lookup_done) ()
+
+#else
+
+# include <tcb-offsets.h>
+
+# r25 is dedicated TLS register for ARC
+.macro THREAD_SELF reg
+ # struct pthread is just ahead of TCB
+ sub \reg, r25, TLS_PRE_TCB_SIZE
+.endm
+
+#endif /* __ASSEMBLER__ */
+
+#endif /* tls.h */
diff --git a/sysdeps/arc/preconfigure b/sysdeps/arc/preconfigure
new file mode 100644
index 0000000000..d9c5429f40
--- /dev/null
+++ b/sysdeps/arc/preconfigure
@@ -0,0 +1,15 @@
+case "$machine" in
+arc*)
+ base_machine=arc
+ machine=arc
+
+ gccfloat=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | grep __ARC_FPU_| wc -l`
+ if test "$gccfloat" != "0"; then
+ echo "glibc being configured for double precision floating point"
+ with_fp_cond=1
+ else
+ with_fp_cond=0
+ fi
+ ;;
+
+esac
diff --git a/sysdeps/arc/setjmp.S b/sysdeps/arc/setjmp.S
new file mode 100644
index 0000000000..518545a99e
--- /dev/null
+++ b/sysdeps/arc/setjmp.S
@@ -0,0 +1,66 @@
+/* setjmp for ARC.
+ Copyright (C) 1991-2019 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>
+
+/* Upon entry r0 = jump buffer into which regs will be saved. */
+ENTRY (setjmp)
+ b.d __sigsetjmp
+ mov r1, 1 ; save signals
+END (setjmp)
+
+/* Upon entry r0 = jump buffer into which regs will be saved. */
+ENTRY (_setjmp)
+ b.d __sigsetjmp
+ mov r1, 0 /* don't save signals. */
+END (_setjmp)
+libc_hidden_def (_setjmp)
+
+/* Upon entry
+ r0 = jump buffer into which regs will be saved
+ r1 = do we need to save signals. */
+ENTRY (__sigsetjmp)
+
+ st_s r13, [r0]
+ st_s r14, [r0,4]
+ st r15, [r0,8]
+ st r16, [r0,12]
+ st r17, [r0,16]
+ st r18, [r0,20]
+ st r19, [r0,24]
+ st r20, [r0,28]
+ st r21, [r0,32]
+ st r22, [r0,36]
+ st r23, [r0,40]
+ st r24, [r0,44]
+ st r25, [r0,48]
+ st fp, [r0,52]
+ st sp, [r0,56]
+
+ /* Make a note of where longjmp will return to.
+ that will be right next to this setjmp call-site which will be
+ contained in blink, since "C" caller of this routine will do
+ a branch-n-link */
+
+ st blink, [r0,60]
+ b __sigjmp_save
+
+END (__sigsetjmp)
+
+libc_hidden_def (__sigsetjmp)
diff --git a/sysdeps/arc/sfp-machine.h b/sysdeps/arc/sfp-machine.h
new file mode 100644
index 0000000000..5ceaf56a98
--- /dev/null
+++ b/sysdeps/arc/sfp-machine.h
@@ -0,0 +1,73 @@
+/* Machine-dependent software floating-point definitions. ARC version.
+ Copyright (C) 2004-2019 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson (rth@cygnus.com),
+ Jakub Jelinek (jj@ultra.linux.cz) and
+ David S. Miller (davem@redhat.com).
+
+ 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/>. */
+
+
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_MUL_MEAT_DW_S(R,X,Y) \
+ _FP_MUL_MEAT_DW_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_DW_D(R,X,Y) \
+ _FP_MUL_MEAT_DW_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_DW_Q(R,X,Y) \
+ _FP_MUL_MEAT_DW_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
+#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
+#define _FP_NANSIGN_S 0
+#define _FP_NANSIGN_D 0
+#define _FP_NANSIGN_Q 0
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+/* This is arbitrarily taken from the PowerPC version. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+#define _FP_TININESS_AFTER_ROUNDING 0
diff --git a/sysdeps/arc/sotruss-lib.c b/sysdeps/arc/sotruss-lib.c
new file mode 100644
index 0000000000..ffbb5bbd6d
--- /dev/null
+++ b/sysdeps/arc/sotruss-lib.c
@@ -0,0 +1,51 @@
+/* Override generic sotruss-lib.c to define actual functions for ARC.
+ Copyright (C) 2017-2019 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/>. */
+
+#define HAVE_ARCH_PLTENTER
+#define HAVE_ARCH_PLTEXIT
+
+#include <elf/sotruss-lib.c>
+
+ElfW(Addr)
+la_arc_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)),
+ unsigned int ndx __attribute__ ((unused)),
+ uintptr_t *refcook, uintptr_t *defcook,
+ La_arc_regs *regs, unsigned int *flags,
+ const char *symname, long int *framesizep)
+{
+ print_enter (refcook, defcook, symname,
+ regs->lr_reg[0], regs->lr_reg[1], regs->lr_reg[2],
+ *flags);
+
+ /* No need to copy anything, we will not need the parameters in any case. */
+ *framesizep = 0;
+
+ return sym->st_value;
+}
+
+unsigned int
+la_arc_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
+ uintptr_t *defcook,
+ const struct La_arc_regs *inregs,
+ struct La_arc_retval *outregs, const char *symname)
+{
+ print_exit (refcook, defcook, symname, outregs->lrv_reg[0]);
+
+ return 0;
+}
diff --git a/sysdeps/arc/stackinfo.h b/sysdeps/arc/stackinfo.h
new file mode 100644
index 0000000000..fe69161382
--- /dev/null
+++ b/sysdeps/arc/stackinfo.h
@@ -0,0 +1,33 @@
+/* Stack environment definitions for ARC.
+ Copyright (C) 2012-2019 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/>. */
+
+/* This file contains a bit of information about the stack allocation
+ of the processor. */
+
+#ifndef _STACKINFO_H
+#define _STACKINFO_H 1
+
+#include <elf.h>
+
+/* On ARC the stack grows down. */
+#define _STACK_GROWS_DOWN 1
+
+/* Default to a non-executable stack. */
+#define DEFAULT_STACK_PERMS (PF_R|PF_W)
+
+#endif /* stackinfo.h */
diff --git a/sysdeps/arc/start.S b/sysdeps/arc/start.S
new file mode 100644
index 0000000000..4ade1e871f
--- /dev/null
+++ b/sysdeps/arc/start.S
@@ -0,0 +1,89 @@
+/* Startup code for ARC.
+ Copyright (C) 1995-2019 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.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file with other
+ programs, and to distribute those programs without any restriction
+ coming from the use of this file. (The GNU Lesser General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into another program.)
+
+ Note that people who make modified versions of this file are not
+ obligated to grant this special exception for their modified
+ versions; it is their choice whether to do so. The GNU Lesser
+ General Public License gives permission to release a modified
+ version without this exception; this exception also makes it
+ possible to release a modified version which carries forward this
+ exception.
+
+ 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/>. */
+
+
+#define __ASSEMBLY__ 1
+#include <entry.h>
+#ifndef ENTRY_POINT
+# error ENTRY_POINT needs to be defined for ARC
+#endif
+
+/* When we enter this piece of code, the program stack looks like this:
+ argc argument counter (integer)
+ argv[0] program name (pointer)
+ argv[1...N] program args (pointers)
+ argv[argc-1] end of args (integer)
+ NULL
+ env[0...N] environment variables (pointers)
+ NULL. */
+
+ .text
+ .align 4
+ .global __start
+ .type __start,@function
+__start:
+ mov fp, 0
+ ld_s r1, [sp] ; argc
+
+ mov_s r5, r0 ; rltd_fini
+ add_s r2, sp, 4 ; argv
+ and sp, sp, -8
+ mov r6, sp
+
+ /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end). */
+
+#ifdef SHARED
+ ld r0, [pcl, @main@gotpc]
+ ld r3, [pcl, @__libc_csu_init@gotpc]
+ ld r4, [pcl, @__libc_csu_fini@gotpc]
+ bl __libc_start_main@plt
+#else
+ mov_s r0, main
+ mov_s r3, __libc_csu_init
+ mov r4, __libc_csu_fini
+ bl __libc_start_main
+#endif
+
+ /* Should never get here. */
+ flag 1
+ .size __start,.-__start
+
+/* Define a symbol for the first piece of initialized data. */
+ .data
+ .globl __data_start
+__data_start:
+ .long 0
+ .weak data_start
+ data_start = __data_start
diff --git a/sysdeps/arc/sysdep.h b/sysdeps/arc/sysdep.h
new file mode 100644
index 0000000000..127e9b01e7
--- /dev/null
+++ b/sysdeps/arc/sysdep.h
@@ -0,0 +1,48 @@
+/* Assembler macros for ARC.
+ Copyright (C) 2017-2019 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 <sysdeps/generic/sysdep.h>
+
+#ifdef __ASSEMBLER__
+
+/* Syntactic details of assembler.
+ ; is not newline but comment, # is also for comment. */
+# define ASM_SIZE_DIRECTIVE(name) .size name,.-name
+
+# define ENTRY(name) \
+ .align 4 ASM_LINE_SEP \
+ .globl C_SYMBOL_NAME(name) ASM_LINE_SEP \
+ .type C_SYMBOL_NAME(name),%function ASM_LINE_SEP \
+ C_LABEL(name) ASM_LINE_SEP \
+ cfi_startproc ASM_LINE_SEP \
+ CALL_MCOUNT
+
+# undef END
+# define END(name) \
+ cfi_endproc ASM_LINE_SEP \
+ ASM_SIZE_DIRECTIVE(name)
+
+# ifdef SHARED
+# define PLTJMP(_x) _x##@plt
+# else
+# define PLTJMP(_x) _x
+# endif
+
+# define CALL_MCOUNT /* Do nothing for now. */
+
+#endif /* __ASSEMBLER__ */
diff --git a/sysdeps/arc/tls-macros.h b/sysdeps/arc/tls-macros.h
new file mode 100644
index 0000000000..4d54683eda
--- /dev/null
+++ b/sysdeps/arc/tls-macros.h
@@ -0,0 +1,47 @@
+/* Macros to support TLS testing in times of missing compiler support. ARC version.
+ Copyright (C) 2017-2019 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/>. */
+
+
+/* For now. */
+#define TLS_LD(x) TLS_IE(x)
+
+#define TLS_GD(x) \
+ ({ int *__result; \
+ __asm__ ("add r0, pcl, @" #x "@tlsgd \n" \
+ ".tls_gd_ld " #x "`bl __tls_get_addr@plt \n" \
+ "mov %0, r0 \n" \
+ : "=&r" (__result) \
+ ::"r0","r1","r2","r3","r4","r5","r6","r7", \
+ "r8","r9","r10","r11","r12"); \
+ __result; })
+
+#define TLS_LE(x) \
+ ({ int *__result; \
+ void *tp = __builtin_thread_pointer(); \
+ __asm__ ("add %0, %1, @" #x "@tpoff \n" \
+ : "=r" (__result) : "r"(tp)); \
+ __result; })
+
+#define TLS_IE(x) \
+ ({ int *__result; \
+ void *tp = __builtin_thread_pointer(); \
+ __asm__ ("ld %0, [pcl, @" #x "@tlsie] \n" \
+ "add %0, %1, %0 \n" \
+ : "=&r" (__result) : "r" (tp)); \
+ __result; })
diff --git a/sysdeps/arc/tst-audit.h b/sysdeps/arc/tst-audit.h
new file mode 100644
index 0000000000..9237ad2440
--- /dev/null
+++ b/sysdeps/arc/tst-audit.h
@@ -0,0 +1,23 @@
+/* Definitions for testing PLT entry/exit auditing. ARC version.
+ Copyright (C) 2009-2019 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/>. */
+
+#define pltenter la_arc_gnu_pltenter
+#define pltexit la_arc_gnu_pltexit
+#define La_regs La_arc_regs
+#define La_retval La_arc_retval
+#define int_retval lrv_reg[0]
diff --git a/sysdeps/unix/sysv/linux/arc/Implies b/sysdeps/unix/sysv/linux/arc/Implies
new file mode 100644
index 0000000000..7f739a0340
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/Implies
@@ -0,0 +1,3 @@
+arc/nptl
+unix/sysv/linux/generic/wordsize-32
+unix/sysv/linux/generic
diff --git a/sysdeps/unix/sysv/linux/arc/Makefile b/sysdeps/unix/sysv/linux/arc/Makefile
new file mode 100644
index 0000000000..a6c6dfc6ec
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/Makefile
@@ -0,0 +1,20 @@
+ifeq ($(subdir),stdlib)
+gen-as-const-headers += ucontext_i.sym
+endif
+
+ifeq ($(subdir),signal)
+sysdep_routines += sigrestorer
+endif
+
+ifeq ($(subdir),misc)
+# MIPS/Tile-style cacheflush routine
+sysdep_headers += sys/cachectl.h
+sysdep_routines += cacheflush
+endif
+
+ifeq ($(subdir),elf)
+ifeq ($(build-shared),yes)
+# This is needed for DSO loading from static binaries.
+sysdep-dl-routines += dl-static
+endif
+endif
diff --git a/sysdeps/unix/sysv/linux/arc/Versions b/sysdeps/unix/sysv/linux/arc/Versions
new file mode 100644
index 0000000000..3eedf26ae2
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/Versions
@@ -0,0 +1,16 @@
+ld {
+ GLIBC_PRIVATE {
+ # used for loading by static libraries
+ _dl_var_init;
+ }
+}
+libc {
+ GLIBC_2.30 {
+ _flush_cache;
+ cacheflush;
+ }
+ GLIBC_PRIVATE {
+ # A copy of sigaction lives in libpthread, and needs these.
+ __default_rt_sa_restorer;
+ }
+}
diff --git a/sysdeps/unix/sysv/linux/arc/arch-syscall.h b/sysdeps/unix/sysv/linux/arc/arch-syscall.h
new file mode 100644
index 0000000000..db25a17ad0
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/arch-syscall.h
@@ -0,0 +1,317 @@
+/* AUTOGENERATED by update-syscall-lists.py. */
+#define __NR_accept 202
+#define __NR_accept4 242
+#define __NR_acct 89
+#define __NR_add_key 217
+#define __NR_adjtimex 171
+#define __NR_arc_gettls 246
+#define __NR_arc_settls 245
+#define __NR_arc_usr_cmpxchg 248
+#define __NR_bind 200
+#define __NR_bpf 280
+#define __NR_brk 214
+#define __NR_cacheflush 244
+#define __NR_capget 90
+#define __NR_capset 91
+#define __NR_chdir 49
+#define __NR_chroot 51
+#define __NR_clock_adjtime 266
+#define __NR_clock_adjtime64 405
+#define __NR_clock_getres 114
+#define __NR_clock_getres_time64 406
+#define __NR_clock_gettime 113
+#define __NR_clock_gettime64 403
+#define __NR_clock_nanosleep 115
+#define __NR_clock_nanosleep_time64 407
+#define __NR_clock_settime 112
+#define __NR_clock_settime64 404
+#define __NR_clone 220
+#define __NR_clone3 435
+#define __NR_close 57
+#define __NR_connect 203
+#define __NR_copy_file_range 285
+#define __NR_delete_module 106
+#define __NR_dup 23
+#define __NR_dup3 24
+#define __NR_epoll_create1 20
+#define __NR_epoll_ctl 21
+#define __NR_epoll_pwait 22
+#define __NR_eventfd2 19
+#define __NR_execve 221
+#define __NR_execveat 281
+#define __NR_exit 93
+#define __NR_exit_group 94
+#define __NR_faccessat 48
+#define __NR_fadvise64_64 223
+#define __NR_fallocate 47
+#define __NR_fanotify_init 262
+#define __NR_fanotify_mark 263
+#define __NR_fchdir 50
+#define __NR_fchmod 52
+#define __NR_fchmodat 53
+#define __NR_fchown 55
+#define __NR_fchownat 54
+#define __NR_fcntl64 25
+#define __NR_fdatasync 83
+#define __NR_fgetxattr 10
+#define __NR_finit_module 273
+#define __NR_flistxattr 13
+#define __NR_flock 32
+#define __NR_fremovexattr 16
+#define __NR_fsconfig 431
+#define __NR_fsetxattr 7
+#define __NR_fsmount 432
+#define __NR_fsopen 430
+#define __NR_fspick 433
+#define __NR_fstat64 80
+#define __NR_fstatat64 79
+#define __NR_fstatfs64 44
+#define __NR_fsync 82
+#define __NR_ftruncate64 46
+#define __NR_futex 98
+#define __NR_futex_time64 422
+#define __NR_get_mempolicy 236
+#define __NR_get_robust_list 100
+#define __NR_getcpu 168
+#define __NR_getcwd 17
+#define __NR_getdents64 61
+#define __NR_getegid 177
+#define __NR_geteuid 175
+#define __NR_getgid 176
+#define __NR_getgroups 158
+#define __NR_getitimer 102
+#define __NR_getpeername 205
+#define __NR_getpgid 155
+#define __NR_getpid 172
+#define __NR_getppid 173
+#define __NR_getpriority 141
+#define __NR_getrandom 278
+#define __NR_getresgid 150
+#define __NR_getresuid 148
+#define __NR_getrlimit 163
+#define __NR_getrusage 165
+#define __NR_getsid 156
+#define __NR_getsockname 204
+#define __NR_getsockopt 209
+#define __NR_gettid 178
+#define __NR_gettimeofday 169
+#define __NR_getuid 174
+#define __NR_getxattr 8
+#define __NR_init_module 105
+#define __NR_inotify_add_watch 27
+#define __NR_inotify_init1 26
+#define __NR_inotify_rm_watch 28
+#define __NR_io_cancel 3
+#define __NR_io_destroy 1
+#define __NR_io_getevents 4
+#define __NR_io_pgetevents 292
+#define __NR_io_pgetevents_time64 416
+#define __NR_io_setup 0
+#define __NR_io_submit 2
+#define __NR_io_uring_enter 426
+#define __NR_io_uring_register 427
+#define __NR_io_uring_setup 425
+#define __NR_ioctl 29
+#define __NR_ioprio_get 31
+#define __NR_ioprio_set 30
+#define __NR_kcmp 272
+#define __NR_kexec_file_load 294
+#define __NR_kexec_load 104
+#define __NR_keyctl 219
+#define __NR_kill 129
+#define __NR_lgetxattr 9
+#define __NR_linkat 37
+#define __NR_listen 201
+#define __NR_listxattr 11
+#define __NR_llistxattr 12
+#define __NR_llseek 62
+#define __NR_lookup_dcookie 18
+#define __NR_lremovexattr 15
+#define __NR_lsetxattr 6
+#define __NR_madvise 233
+#define __NR_mbind 235
+#define __NR_membarrier 283
+#define __NR_memfd_create 279
+#define __NR_migrate_pages 238
+#define __NR_mincore 232
+#define __NR_mkdirat 34
+#define __NR_mknodat 33
+#define __NR_mlock 228
+#define __NR_mlock2 284
+#define __NR_mlockall 230
+#define __NR_mmap2 222
+#define __NR_mount 40
+#define __NR_move_mount 429
+#define __NR_move_pages 239
+#define __NR_mprotect 226
+#define __NR_mq_getsetattr 185
+#define __NR_mq_notify 184
+#define __NR_mq_open 180
+#define __NR_mq_timedreceive 183
+#define __NR_mq_timedreceive_time64 419
+#define __NR_mq_timedsend 182
+#define __NR_mq_timedsend_time64 418
+#define __NR_mq_unlink 181
+#define __NR_mremap 216
+#define __NR_msgctl 187
+#define __NR_msgget 186
+#define __NR_msgrcv 188
+#define __NR_msgsnd 189
+#define __NR_msync 227
+#define __NR_munlock 229
+#define __NR_munlockall 231
+#define __NR_munmap 215
+#define __NR_name_to_handle_at 264
+#define __NR_nanosleep 101
+#define __NR_nfsservctl 42
+#define __NR_open_by_handle_at 265
+#define __NR_open_tree 428
+#define __NR_openat 56
+#define __NR_perf_event_open 241
+#define __NR_personality 92
+#define __NR_pidfd_open 434
+#define __NR_pidfd_send_signal 424
+#define __NR_pipe2 59
+#define __NR_pivot_root 41
+#define __NR_pkey_alloc 289
+#define __NR_pkey_free 290
+#define __NR_pkey_mprotect 288
+#define __NR_ppoll 73
+#define __NR_ppoll_time64 414
+#define __NR_prctl 167
+#define __NR_pread64 67
+#define __NR_preadv 69
+#define __NR_preadv2 286
+#define __NR_prlimit64 261
+#define __NR_process_vm_readv 270
+#define __NR_process_vm_writev 271
+#define __NR_pselect6 72
+#define __NR_pselect6_time64 413
+#define __NR_ptrace 117
+#define __NR_pwrite64 68
+#define __NR_pwritev 70
+#define __NR_pwritev2 287
+#define __NR_quotactl 60
+#define __NR_read 63
+#define __NR_readahead 213
+#define __NR_readlinkat 78
+#define __NR_readv 65
+#define __NR_reboot 142
+#define __NR_recvfrom 207
+#define __NR_recvmmsg 243
+#define __NR_recvmmsg_time64 417
+#define __NR_recvmsg 212
+#define __NR_remap_file_pages 234
+#define __NR_removexattr 14
+#define __NR_renameat 38
+#define __NR_renameat2 276
+#define __NR_request_key 218
+#define __NR_restart_syscall 128
+#define __NR_rseq 293
+#define __NR_rt_sigaction 134
+#define __NR_rt_sigpending 136
+#define __NR_rt_sigprocmask 135
+#define __NR_rt_sigqueueinfo 138
+#define __NR_rt_sigreturn 139
+#define __NR_rt_sigsuspend 133
+#define __NR_rt_sigtimedwait 137
+#define __NR_rt_sigtimedwait_time64 421
+#define __NR_rt_tgsigqueueinfo 240
+#define __NR_sched_get_priority_max 125
+#define __NR_sched_get_priority_min 126
+#define __NR_sched_getaffinity 123
+#define __NR_sched_getattr 275
+#define __NR_sched_getparam 121
+#define __NR_sched_getscheduler 120
+#define __NR_sched_rr_get_interval 127
+#define __NR_sched_rr_get_interval_time64 423
+#define __NR_sched_setaffinity 122
+#define __NR_sched_setattr 274
+#define __NR_sched_setparam 118
+#define __NR_sched_setscheduler 119
+#define __NR_sched_yield 124
+#define __NR_seccomp 277
+#define __NR_semctl 191
+#define __NR_semget 190
+#define __NR_semop 193
+#define __NR_semtimedop 192
+#define __NR_semtimedop_time64 420
+#define __NR_sendfile64 71
+#define __NR_sendmmsg 269
+#define __NR_sendmsg 211
+#define __NR_sendto 206
+#define __NR_set_mempolicy 237
+#define __NR_set_robust_list 99
+#define __NR_set_tid_address 96
+#define __NR_setdomainname 162
+#define __NR_setfsgid 152
+#define __NR_setfsuid 151
+#define __NR_setgid 144
+#define __NR_setgroups 159
+#define __NR_sethostname 161
+#define __NR_setitimer 103
+#define __NR_setns 268
+#define __NR_setpgid 154
+#define __NR_setpriority 140
+#define __NR_setregid 143
+#define __NR_setresgid 149
+#define __NR_setresuid 147
+#define __NR_setreuid 145
+#define __NR_setrlimit 164
+#define __NR_setsid 157
+#define __NR_setsockopt 208
+#define __NR_settimeofday 170
+#define __NR_setuid 146
+#define __NR_setxattr 5
+#define __NR_shmat 196
+#define __NR_shmctl 195
+#define __NR_shmdt 197
+#define __NR_shmget 194
+#define __NR_shutdown 210
+#define __NR_sigaltstack 132
+#define __NR_signalfd4 74
+#define __NR_socket 198
+#define __NR_socketpair 199
+#define __NR_splice 76
+#define __NR_statfs64 43
+#define __NR_statx 291
+#define __NR_swapoff 225
+#define __NR_swapon 224
+#define __NR_symlinkat 36
+#define __NR_sync 81
+#define __NR_sync_file_range 84
+#define __NR_syncfs 267
+#define __NR_sysfs 247
+#define __NR_sysinfo 179
+#define __NR_syslog 116
+#define __NR_tee 77
+#define __NR_tgkill 131
+#define __NR_timer_create 107
+#define __NR_timer_delete 111
+#define __NR_timer_getoverrun 109
+#define __NR_timer_gettime 108
+#define __NR_timer_gettime64 408
+#define __NR_timer_settime 110
+#define __NR_timer_settime64 409
+#define __NR_timerfd_create 85
+#define __NR_timerfd_gettime 87
+#define __NR_timerfd_gettime64 410
+#define __NR_timerfd_settime 86
+#define __NR_timerfd_settime64 411
+#define __NR_times 153
+#define __NR_tkill 130
+#define __NR_truncate64 45
+#define __NR_umask 166
+#define __NR_umount2 39
+#define __NR_uname 160
+#define __NR_unlinkat 35
+#define __NR_unshare 97
+#define __NR_userfaultfd 282
+#define __NR_utimensat 88
+#define __NR_utimensat_time64 412
+#define __NR_vhangup 58
+#define __NR_vmsplice 75
+#define __NR_wait4 260
+#define __NR_waitid 95
+#define __NR_write 64
+#define __NR_writev 66
diff --git a/sysdeps/unix/sysv/linux/arc/bits/procfs.h b/sysdeps/unix/sysv/linux/arc/bits/procfs.h
new file mode 100644
index 0000000000..b37deaee58
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/bits/procfs.h
@@ -0,0 +1,35 @@
+/* Types for registers for sys/procfs.h. ARC version.
+ Copyright (C) 1996-2019 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/>. */
+
+#ifndef _SYS_PROCFS_H
+# error "Never include <bits/procfs.h> directly; use <sys/procfs.h> instead."
+#endif
+
+#include <sys/ucontext.h>
+
+/* And the whole bunch of them. We could have used `struct
+ user_regs' directly in the typedef, but tradition says that
+ the register set is an array, which does have some peculiar
+ semantics, so leave it that way. */
+#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t))
+
+typedef unsigned long int elf_greg_t;
+typedef unsigned long int elf_gregset_t[ELF_NGREG];
+
+/* There's no seperate floating point reg file in ARCv2. */
+typedef struct { } elf_fpregset_t;
diff --git a/sysdeps/unix/sysv/linux/arc/bits/types/__sigset_t.h b/sysdeps/unix/sysv/linux/arc/bits/types/__sigset_t.h
new file mode 100644
index 0000000000..795638a30b
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/bits/types/__sigset_t.h
@@ -0,0 +1,12 @@
+/* Architecture-specific __sigset_t definition. ARC version. */
+#ifndef ____sigset_t_defined
+#define ____sigset_t_defined
+
+/* Linux asm-generic syscall ABI expects sigset_t to hold 64 signals. */
+#define _SIGSET_NWORDS (64 / (8 * sizeof (unsigned long int)))
+typedef struct
+{
+ unsigned long int __val[_SIGSET_NWORDS];
+} __sigset_t;
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/arc/c++-types.data b/sysdeps/unix/sysv/linux/arc/c++-types.data
new file mode 100644
index 0000000000..303f4570c8
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/c++-types.data
@@ -0,0 +1,67 @@
+blkcnt64_t:x
+blkcnt_t:l
+blksize_t:i
+caddr_t:Pc
+clockid_t:i
+clock_t:l
+daddr_t:i
+dev_t:y
+fd_mask:l
+fsblkcnt64_t:y
+fsblkcnt_t:m
+fsfilcnt64_t:y
+fsfilcnt_t:m
+fsid_t:8__fsid_t
+gid_t:j
+id_t:j
+ino64_t:y
+ino_t:m
+int16_t:s
+int32_t:i
+int64_t:x
+int8_t:a
+intptr_t:i
+key_t:i
+loff_t:x
+mode_t:j
+nlink_t:j
+off64_t:x
+off_t:l
+pid_t:i
+pthread_attr_t:14pthread_attr_t
+pthread_barrier_t:17pthread_barrier_t
+pthread_barrierattr_t:21pthread_barrierattr_t
+pthread_cond_t:14pthread_cond_t
+pthread_condattr_t:18pthread_condattr_t
+pthread_key_t:j
+pthread_mutex_t:15pthread_mutex_t
+pthread_mutexattr_t:19pthread_mutexattr_t
+pthread_once_t:i
+pthread_rwlock_t:16pthread_rwlock_t
+pthread_rwlockattr_t:20pthread_rwlockattr_t
+pthread_spinlock_t:i
+pthread_t:m
+quad_t:x
+register_t:i
+rlim64_t:y
+rlim_t:m
+sigset_t:10__sigset_t
+size_t:j
+socklen_t:j
+ssize_t:i
+suseconds_t:l
+time_t:l
+u_char:h
+uid_t:j
+uint:j
+u_int:j
+u_int16_t:t
+u_int32_t:j
+u_int64_t:y
+u_int8_t:h
+ulong:m
+u_long:m
+u_quad_t:y
+useconds_t:j
+ushort:t
+u_short:t
diff --git a/sysdeps/unix/sysv/linux/arc/clone.S b/sysdeps/unix/sysv/linux/arc/clone.S
new file mode 100644
index 0000000000..55c2a2b60e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/clone.S
@@ -0,0 +1,98 @@
+/* clone() implementation for ARC.
+ Copyright (C) 2008-2019 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Andrew Jenner <andrew@codesourcery.com>, 2008.
+
+ 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>
+#include <tcb-offsets.h>
+
+#define CLONE_SETTLS 0x00080000
+
+/* int clone(int (*fn)(void *), void *child_stack,
+ int flags, void *arg, ...
+ < pid_t *ptid, struct user_desc *tls, pid_t *ctid > );
+
+ NOTE: I'm assuming that the last 3 args are NOT var-args and in case all
+ 3 are not relevant, caller will nevertheless pass those as NULL.
+
+ clone syscall in kernel (ABI: CONFIG_CLONE_BACKWARDS)
+
+ int sys_clone(unsigned long int clone_flags,
+ unsigned long int newsp,
+ int __user *parent_tidptr,
+ void *tls,
+ int __user *child_tidptr). */
+
+ENTRY (__clone)
+ cmp r0, 0 ; @fn can't be NULL
+ cmp.ne r1, 0 ; @child_stack can't be NULL
+ bz .L__sys_err
+
+ ; save some of the orig args
+ ; r0 containg @fn will be clobbered AFTER syscall (with ret val)
+ ; rest are clobbered BEFORE syscall due to different arg ordering
+ mov r10, r0 ; @fn
+ mov r11, r3 ; @args
+ mov r12, r2 ; @clone_flags
+ mov r9, r5 ; @tls
+
+ ; adjust libc args for syscall
+
+ mov r0, r2 ; libc @flags is 1st syscall arg
+ mov r2, r4 ; libc @ptid
+ mov r3, r5 ; libc @tls
+ mov r4, r6 ; libc @ctid
+ mov r8, __NR_clone
+ ARC_TRAP_INSN
+
+ cmp r0, 0 ; return code : 0 new process, !0 parent
+ blt .L__sys_err2 ; < 0 (signed) error
+ jnz [blink] ; Parent returns
+
+ ; ----- child starts here ---------
+
+ ; Setup TP register (only recent kernels v4.19+ do that)
+ and.f 0, r12, CLONE_SETTLS
+ mov.nz r25, r9
+
+ ; child jumps off to @fn with @arg as argument, and returns here
+ jl.d [r10]
+ mov r0, r11
+
+ ; exit() with result from @fn (already in r0)
+ mov r8, __NR_exit
+ ARC_TRAP_INSN
+ ; In case it ever came back
+ flag 1
+
+.L__sys_err:
+ mov r0, -EINVAL
+.L__sys_err2:
+ ; (1) No need to make -ve kernel error code as positive errno
+ ; __syscall_error expects the -ve error code returned by kernel
+ ; (2) r0 still had orig -ve kernel error code
+ ; (3) Tail call to __syscall_error so we dont have to come back
+ ; here hence instead of jmp-n-link (reg push/pop) we do jmp
+ ; (4) No need to route __syscall_error via PLT, B is inherently
+ ; position independent
+ b __syscall_error
+PSEUDO_END (__clone)
+libc_hidden_def (__clone)
+weak_alias (__clone, clone)
diff --git a/sysdeps/unix/sysv/linux/arc/configure b/sysdeps/unix/sysv/linux/arc/configure
new file mode 100644
index 0000000000..f74fa7cb02
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/configure
@@ -0,0 +1,4 @@
+# This file is generated from configure.in by Autoconf. DO NOT EDIT!
+ # Local configure fragment for sysdeps/unix/sysv/linux/arc.
+
+arch_minimum_kernel=3.9.0
diff --git a/sysdeps/unix/sysv/linux/arc/configure.ac b/sysdeps/unix/sysv/linux/arc/configure.ac
new file mode 100644
index 0000000000..a9528032d3
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/configure.ac
@@ -0,0 +1,4 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local configure fragment for sysdeps/unix/sysv/linux/arc.
+
+arch_minimum_kernel=3.9.0
diff --git a/sysdeps/unix/sysv/linux/arc/dl-static.c b/sysdeps/unix/sysv/linux/arc/dl-static.c
new file mode 100644
index 0000000000..1a8757c984
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/dl-static.c
@@ -0,0 +1,84 @@
+/* Variable initialization. ARC version.
+ Copyright (C) 2001-2019 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 <ldsodefs.h>
+
+#ifdef SHARED
+
+void
+_dl_var_init (void *array[])
+{
+ /* It has to match "variables" below. */
+ enum
+ {
+ DL_PAGESIZE = 0
+ };
+
+ GLRO(dl_pagesize) = *((size_t *) array[DL_PAGESIZE]);
+}
+
+#else
+
+static void *variables[] =
+{
+ &GLRO(dl_pagesize)
+};
+
+static void
+_dl_unprotect_relro (struct link_map *l)
+{
+ ElfW(Addr) start = ((l->l_addr + l->l_relro_addr)
+ & ~(GLRO(dl_pagesize) - 1));
+ ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size)
+ & ~(GLRO(dl_pagesize) - 1));
+
+ if (start != end)
+ __mprotect ((void *) start, end - start, PROT_READ | PROT_WRITE);
+}
+
+void
+_dl_static_init (struct link_map *l)
+{
+ struct link_map *rtld_map = l;
+ struct r_scope_elem **scope;
+ const ElfW(Sym) *ref = NULL;
+ lookup_t loadbase;
+ void (*f) (void *[]);
+ size_t i;
+
+ loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope,
+ NULL, 0, 1, NULL);
+
+ for (scope = l->l_local_scope; *scope != NULL; scope++)
+ for (i = 0; i < (*scope)->r_nlist; i++)
+ if ((*scope)->r_list[i] == loadbase)
+ {
+ rtld_map = (*scope)->r_list[i];
+ break;
+ }
+
+ if (ref != NULL)
+ {
+ f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref);
+ _dl_unprotect_relro (rtld_map);
+ f (variables);
+ _dl_protect_relro (rtld_map);
+ }
+}
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/arc/getcontext.S b/sysdeps/unix/sysv/linux/arc/getcontext.S
new file mode 100644
index 0000000000..723cc237d8
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/getcontext.S
@@ -0,0 +1,63 @@
+/* Save current context for ARC.
+ Copyright (C) 2009-2019 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 "ucontext-macros.h"
+
+/* int getcontext (ucontext_t *ucp)
+ Save machine context in @ucp and return 0 on success, -1 on error
+ - saves callee saved registers only
+ - layout mandated by uncontext_t:m_context (hence different from setjmp). */
+
+ENTRY (__getcontext)
+
+ /* Callee saved registers. */
+ SAVE_REG (r13, r0, 37)
+ SAVE_REG (r14, r0, 36)
+ SAVE_REG (r15, r0, 35)
+ SAVE_REG (r16, r0, 34)
+ SAVE_REG (r17, r0, 33)
+ SAVE_REG (r18, r0, 32)
+ SAVE_REG (r19, r0, 31)
+ SAVE_REG (r20, r0, 30)
+ SAVE_REG (r21, r0, 29)
+ SAVE_REG (r22, r0, 28)
+ SAVE_REG (r23, r0, 27)
+ SAVE_REG (r24, r0, 26)
+ SAVE_REG (r25, r0, 25)
+
+ SAVE_REG (blink, r0, 7)
+ SAVE_REG (fp, r0, 8)
+ SAVE_REG (sp, r0, 23)
+
+ /* Save 0 in r0 placeholder to return 0 when this @ucp activated. */
+ mov r9, 0
+ SAVE_REG (r9, r0, 22)
+
+ /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8). */
+ mov r3, _NSIG8
+ add r2, r0, UCONTEXT_SIGMASK
+ mov r1, 0
+ mov r0, SIG_BLOCK
+ mov r8, __NR_rt_sigprocmask
+ ARC_TRAP_INSN
+ brhi r0, -1024, .Lcall_syscall_err
+ j.d [blink]
+ mov r0, 0 /* Success, error handled in .Lcall_syscall_err. */
+
+PSEUDO_END (__getcontext)
+weak_alias (__getcontext, getcontext)
diff --git a/sysdeps/unix/sysv/linux/arc/ipc_priv.h b/sysdeps/unix/sysv/linux/arc/ipc_priv.h
new file mode 100644
index 0000000000..309eb3064e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/ipc_priv.h
@@ -0,0 +1,21 @@
+/* Old SysV permission definition for Linux. ARC version.
+ Copyright (C) 2016-2019 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/ipc.h> /* For __key_t */
+
+#define __IPC_64 0x0
diff --git a/sysdeps/unix/sysv/linux/arc/jmp_buf-macros.h b/sysdeps/unix/sysv/linux/arc/jmp_buf-macros.h
new file mode 100644
index 0000000000..6c12939848
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/jmp_buf-macros.h
@@ -0,0 +1,6 @@
+#define JMP_BUF_SIZE (32 + 1 + 64/(8 * sizeof (unsigned long int))) * sizeof (unsigned long int)
+#define SIGJMP_BUF_SIZE (32 + 1 + 64/(8 * sizeof (unsigned long int))) * sizeof (unsigned long int)
+#define JMP_BUF_ALIGN __alignof__ (unsigned long int)
+#define SIGJMP_BUF_ALIGN __alignof__ (unsigned long int)
+#define MASK_WAS_SAVED_OFFSET (32 * sizeof (unsigned long int))
+#define SAVED_MASK_OFFSET (33 * sizeof (unsigned long int))
diff --git a/sysdeps/unix/sysv/linux/arc/kernel-features.h b/sysdeps/unix/sysv/linux/arc/kernel-features.h
new file mode 100644
index 0000000000..00255337bc
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/kernel-features.h
@@ -0,0 +1,28 @@
+/* Set flags signalling availability of kernel features based on given
+ kernel version number.
+
+ Copyright (C) 2009-2019 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/>. */
+
+/* The minimum supported kernel version for ARC is 3.9,
+ guaranteeing many kernel features. */
+
+#include_next <kernel-features.h>
+
+#undef __ASSUME_CLONE_DEFAULT
+#define __ASSUME_CLONE_BACKWARDS 1
diff --git a/sysdeps/unix/sysv/linux/arc/ld.abilist b/sysdeps/unix/sysv/linux/arc/ld.abilist
new file mode 100644
index 0000000000..41183d7bee
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/ld.abilist
@@ -0,0 +1,9 @@
+GLIBC_2.30 __libc_stack_end D 0x4
+GLIBC_2.30 __stack_chk_guard D 0x4
+GLIBC_2.30 __tls_get_addr F
+GLIBC_2.30 _dl_mcount F
+GLIBC_2.30 _r_debug D 0x14
+GLIBC_2.30 calloc F
+GLIBC_2.30 free F
+GLIBC_2.30 malloc F
+GLIBC_2.30 realloc F
diff --git a/sysdeps/unix/sysv/linux/arc/ldsodefs.h b/sysdeps/unix/sysv/linux/arc/ldsodefs.h
new file mode 100644
index 0000000000..8c5c6800af
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/ldsodefs.h
@@ -0,0 +1,32 @@
+/* Run-time dynamic linker data structures for loaded ELF shared objects. ARC
+ Copyright (C) 2001-2019 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/>. */
+
+#ifndef _LDSODEFS_H
+
+/* Get the real definitions. */
+#include_next <ldsodefs.h>
+
+/* Now define our stuff. */
+
+/* We need special support to initialize DSO loaded for statically linked
+ binaries. */
+extern void _dl_static_init (struct link_map *map);
+#undef DL_STATIC_INIT
+#define DL_STATIC_INIT(map) _dl_static_init (map)
+
+#endif /* ldsodefs.h */
diff --git a/sysdeps/unix/sysv/linux/arc/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/arc/libBrokenLocale.abilist
new file mode 100644
index 0000000000..c6253c0ae8
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libBrokenLocale.abilist
@@ -0,0 +1 @@
+GLIBC_2.30 __ctype_get_mb_cur_max F
diff --git a/sysdeps/unix/sysv/linux/arc/libanl.abilist b/sysdeps/unix/sysv/linux/arc/libanl.abilist
new file mode 100644
index 0000000000..d3b753219e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libanl.abilist
@@ -0,0 +1,4 @@
+GLIBC_2.30 gai_cancel F
+GLIBC_2.30 gai_error F
+GLIBC_2.30 gai_suspend F
+GLIBC_2.30 getaddrinfo_a F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
new file mode 100644
index 0000000000..823ae25bcc
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -0,0 +1,2084 @@
+GLIBC_2.30 _Exit F
+GLIBC_2.30 _IO_2_1_stderr_ D 0x98
+GLIBC_2.30 _IO_2_1_stdin_ D 0x98
+GLIBC_2.30 _IO_2_1_stdout_ D 0x98
+GLIBC_2.30 _IO_adjust_column F
+GLIBC_2.30 _IO_adjust_wcolumn F
+GLIBC_2.30 _IO_default_doallocate F
+GLIBC_2.30 _IO_default_finish F
+GLIBC_2.30 _IO_default_pbackfail F
+GLIBC_2.30 _IO_default_uflow F
+GLIBC_2.30 _IO_default_xsgetn F
+GLIBC_2.30 _IO_default_xsputn F
+GLIBC_2.30 _IO_do_write F
+GLIBC_2.30 _IO_doallocbuf F
+GLIBC_2.30 _IO_fclose F
+GLIBC_2.30 _IO_fdopen F
+GLIBC_2.30 _IO_feof F
+GLIBC_2.30 _IO_ferror F
+GLIBC_2.30 _IO_fflush F
+GLIBC_2.30 _IO_fgetpos F
+GLIBC_2.30 _IO_fgetpos64 F
+GLIBC_2.30 _IO_fgets F
+GLIBC_2.30 _IO_file_attach F
+GLIBC_2.30 _IO_file_close F
+GLIBC_2.30 _IO_file_close_it F
+GLIBC_2.30 _IO_file_doallocate F
+GLIBC_2.30 _IO_file_finish F
+GLIBC_2.30 _IO_file_fopen F
+GLIBC_2.30 _IO_file_init F
+GLIBC_2.30 _IO_file_jumps D 0x54
+GLIBC_2.30 _IO_file_open F
+GLIBC_2.30 _IO_file_overflow F
+GLIBC_2.30 _IO_file_read F
+GLIBC_2.30 _IO_file_seek F
+GLIBC_2.30 _IO_file_seekoff F
+GLIBC_2.30 _IO_file_setbuf F
+GLIBC_2.30 _IO_file_stat F
+GLIBC_2.30 _IO_file_sync F
+GLIBC_2.30 _IO_file_underflow F
+GLIBC_2.30 _IO_file_write F
+GLIBC_2.30 _IO_file_xsputn F
+GLIBC_2.30 _IO_flockfile F
+GLIBC_2.30 _IO_flush_all F
+GLIBC_2.30 _IO_flush_all_linebuffered F
+GLIBC_2.30 _IO_fopen F
+GLIBC_2.30 _IO_fprintf F
+GLIBC_2.30 _IO_fputs F
+GLIBC_2.30 _IO_fread F
+GLIBC_2.30 _IO_free_backup_area F
+GLIBC_2.30 _IO_free_wbackup_area F
+GLIBC_2.30 _IO_fsetpos F
+GLIBC_2.30 _IO_fsetpos64 F
+GLIBC_2.30 _IO_ftell F
+GLIBC_2.30 _IO_ftrylockfile F
+GLIBC_2.30 _IO_funlockfile F
+GLIBC_2.30 _IO_fwrite F
+GLIBC_2.30 _IO_getc F
+GLIBC_2.30 _IO_getline F
+GLIBC_2.30 _IO_getline_info F
+GLIBC_2.30 _IO_gets F
+GLIBC_2.30 _IO_init F
+GLIBC_2.30 _IO_init_marker F
+GLIBC_2.30 _IO_init_wmarker F
+GLIBC_2.30 _IO_iter_begin F
+GLIBC_2.30 _IO_iter_end F
+GLIBC_2.30 _IO_iter_file F
+GLIBC_2.30 _IO_iter_next F
+GLIBC_2.30 _IO_least_wmarker F
+GLIBC_2.30 _IO_link_in F
+GLIBC_2.30 _IO_list_all D 0x4
+GLIBC_2.30 _IO_list_lock F
+GLIBC_2.30 _IO_list_resetlock F
+GLIBC_2.30 _IO_list_unlock F
+GLIBC_2.30 _IO_marker_delta F
+GLIBC_2.30 _IO_marker_difference F
+GLIBC_2.30 _IO_padn F
+GLIBC_2.30 _IO_peekc_locked F
+GLIBC_2.30 _IO_popen F
+GLIBC_2.30 _IO_printf F
+GLIBC_2.30 _IO_proc_close F
+GLIBC_2.30 _IO_proc_open F
+GLIBC_2.30 _IO_putc F
+GLIBC_2.30 _IO_puts F
+GLIBC_2.30 _IO_remove_marker F
+GLIBC_2.30 _IO_seekmark F
+GLIBC_2.30 _IO_seekoff F
+GLIBC_2.30 _IO_seekpos F
+GLIBC_2.30 _IO_seekwmark F
+GLIBC_2.30 _IO_setb F
+GLIBC_2.30 _IO_setbuffer F
+GLIBC_2.30 _IO_setvbuf F
+GLIBC_2.30 _IO_sgetn F
+GLIBC_2.30 _IO_sprintf F
+GLIBC_2.30 _IO_sputbackc F
+GLIBC_2.30 _IO_sputbackwc F
+GLIBC_2.30 _IO_sscanf F
+GLIBC_2.30 _IO_str_init_readonly F
+GLIBC_2.30 _IO_str_init_static F
+GLIBC_2.30 _IO_str_overflow F
+GLIBC_2.30 _IO_str_pbackfail F
+GLIBC_2.30 _IO_str_seekoff F
+GLIBC_2.30 _IO_str_underflow F
+GLIBC_2.30 _IO_sungetc F
+GLIBC_2.30 _IO_sungetwc F
+GLIBC_2.30 _IO_switch_to_get_mode F
+GLIBC_2.30 _IO_switch_to_main_wget_area F
+GLIBC_2.30 _IO_switch_to_wbackup_area F
+GLIBC_2.30 _IO_switch_to_wget_mode F
+GLIBC_2.30 _IO_un_link F
+GLIBC_2.30 _IO_ungetc F
+GLIBC_2.30 _IO_unsave_markers F
+GLIBC_2.30 _IO_unsave_wmarkers F
+GLIBC_2.30 _IO_vfprintf F
+GLIBC_2.30 _IO_vsprintf F
+GLIBC_2.30 _IO_wdefault_doallocate F
+GLIBC_2.30 _IO_wdefault_finish F
+GLIBC_2.30 _IO_wdefault_pbackfail F
+GLIBC_2.30 _IO_wdefault_uflow F
+GLIBC_2.30 _IO_wdefault_xsgetn F
+GLIBC_2.30 _IO_wdefault_xsputn F
+GLIBC_2.30 _IO_wdo_write F
+GLIBC_2.30 _IO_wdoallocbuf F
+GLIBC_2.30 _IO_wfile_jumps D 0x54
+GLIBC_2.30 _IO_wfile_overflow F
+GLIBC_2.30 _IO_wfile_seekoff F
+GLIBC_2.30 _IO_wfile_sync F
+GLIBC_2.30 _IO_wfile_underflow F
+GLIBC_2.30 _IO_wfile_xsputn F
+GLIBC_2.30 _IO_wmarker_delta F
+GLIBC_2.30 _IO_wsetb F
+GLIBC_2.30 ___brk_addr D 0x4
+GLIBC_2.30 __adjtimex F
+GLIBC_2.30 __after_morecore_hook D 0x4
+GLIBC_2.30 __argz_count F
+GLIBC_2.30 __argz_next F
+GLIBC_2.30 __argz_stringify F
+GLIBC_2.30 __asprintf F
+GLIBC_2.30 __asprintf_chk F
+GLIBC_2.30 __assert F
+GLIBC_2.30 __assert_fail F
+GLIBC_2.30 __assert_perror_fail F
+GLIBC_2.30 __backtrace F
+GLIBC_2.30 __backtrace_symbols F
+GLIBC_2.30 __backtrace_symbols_fd F
+GLIBC_2.30 __bsd_getpgrp F
+GLIBC_2.30 __bzero F
+GLIBC_2.30 __check_rhosts_file D 0x4
+GLIBC_2.30 __chk_fail F
+GLIBC_2.30 __clone F
+GLIBC_2.30 __close F
+GLIBC_2.30 __cmsg_nxthdr F
+GLIBC_2.30 __confstr_chk F
+GLIBC_2.30 __connect F
+GLIBC_2.30 __ctype_b_loc F
+GLIBC_2.30 __ctype_get_mb_cur_max F
+GLIBC_2.30 __ctype_tolower_loc F
+GLIBC_2.30 __ctype_toupper_loc F
+GLIBC_2.30 __curbrk D 0x4
+GLIBC_2.30 __cxa_at_quick_exit F
+GLIBC_2.30 __cxa_atexit F
+GLIBC_2.30 __cxa_finalize F
+GLIBC_2.30 __cxa_thread_atexit_impl F
+GLIBC_2.30 __cyg_profile_func_enter F
+GLIBC_2.30 __cyg_profile_func_exit F
+GLIBC_2.30 __daylight D 0x4
+GLIBC_2.30 __dcgettext F
+GLIBC_2.30 __default_morecore F
+GLIBC_2.30 __dgettext F
+GLIBC_2.30 __dprintf_chk F
+GLIBC_2.30 __dup2 F
+GLIBC_2.30 __duplocale F
+GLIBC_2.30 __endmntent F
+GLIBC_2.30 __environ D 0x4
+GLIBC_2.30 __errno_location F
+GLIBC_2.30 __explicit_bzero_chk F
+GLIBC_2.30 __fbufsize F
+GLIBC_2.30 __fcntl F
+GLIBC_2.30 __fdelt_chk F
+GLIBC_2.30 __fdelt_warn F
+GLIBC_2.30 __ffs F
+GLIBC_2.30 __fgets_chk F
+GLIBC_2.30 __fgets_unlocked_chk F
+GLIBC_2.30 __fgetws_chk F
+GLIBC_2.30 __fgetws_unlocked_chk F
+GLIBC_2.30 __finite F
+GLIBC_2.30 __finitef F
+GLIBC_2.30 __flbf F
+GLIBC_2.30 __fork F
+GLIBC_2.30 __fpending F
+GLIBC_2.30 __fprintf_chk F
+GLIBC_2.30 __fpu_control D 0x4
+GLIBC_2.30 __fpurge F
+GLIBC_2.30 __fread_chk F
+GLIBC_2.30 __fread_unlocked_chk F
+GLIBC_2.30 __freadable F
+GLIBC_2.30 __freading F
+GLIBC_2.30 __free_hook D 0x4
+GLIBC_2.30 __freelocale F
+GLIBC_2.30 __fsetlocking F
+GLIBC_2.30 __fwprintf_chk F
+GLIBC_2.30 __fwritable F
+GLIBC_2.30 __fwriting F
+GLIBC_2.30 __fxstat F
+GLIBC_2.30 __fxstat64 F
+GLIBC_2.30 __fxstatat F
+GLIBC_2.30 __fxstatat64 F
+GLIBC_2.30 __getauxval F
+GLIBC_2.30 __getcwd_chk F
+GLIBC_2.30 __getdelim F
+GLIBC_2.30 __getdomainname_chk F
+GLIBC_2.30 __getgroups_chk F
+GLIBC_2.30 __gethostname_chk F
+GLIBC_2.30 __getlogin_r_chk F
+GLIBC_2.30 __getmntent_r F
+GLIBC_2.30 __getpagesize F
+GLIBC_2.30 __getpgid F
+GLIBC_2.30 __getpid F
+GLIBC_2.30 __gets_chk F
+GLIBC_2.30 __gettimeofday F
+GLIBC_2.30 __getwd_chk F
+GLIBC_2.30 __gmtime_r F
+GLIBC_2.30 __h_errno_location F
+GLIBC_2.30 __isalnum_l F
+GLIBC_2.30 __isalpha_l F
+GLIBC_2.30 __isascii_l F
+GLIBC_2.30 __isblank_l F
+GLIBC_2.30 __iscntrl_l F
+GLIBC_2.30 __isctype F
+GLIBC_2.30 __isdigit_l F
+GLIBC_2.30 __isgraph_l F
+GLIBC_2.30 __isinf F
+GLIBC_2.30 __isinff F
+GLIBC_2.30 __islower_l F
+GLIBC_2.30 __isnan F
+GLIBC_2.30 __isnanf F
+GLIBC_2.30 __isoc99_fscanf F
+GLIBC_2.30 __isoc99_fwscanf F
+GLIBC_2.30 __isoc99_scanf F
+GLIBC_2.30 __isoc99_sscanf F
+GLIBC_2.30 __isoc99_swscanf F
+GLIBC_2.30 __isoc99_vfscanf F
+GLIBC_2.30 __isoc99_vfwscanf F
+GLIBC_2.30 __isoc99_vscanf F
+GLIBC_2.30 __isoc99_vsscanf F
+GLIBC_2.30 __isoc99_vswscanf F
+GLIBC_2.30 __isoc99_vwscanf F
+GLIBC_2.30 __isoc99_wscanf F
+GLIBC_2.30 __isprint_l F
+GLIBC_2.30 __ispunct_l F
+GLIBC_2.30 __isspace_l F
+GLIBC_2.30 __isupper_l F
+GLIBC_2.30 __iswalnum_l F
+GLIBC_2.30 __iswalpha_l F
+GLIBC_2.30 __iswblank_l F
+GLIBC_2.30 __iswcntrl_l F
+GLIBC_2.30 __iswctype F
+GLIBC_2.30 __iswctype_l F
+GLIBC_2.30 __iswdigit_l F
+GLIBC_2.30 __iswgraph_l F
+GLIBC_2.30 __iswlower_l F
+GLIBC_2.30 __iswprint_l F
+GLIBC_2.30 __iswpunct_l F
+GLIBC_2.30 __iswspace_l F
+GLIBC_2.30 __iswupper_l F
+GLIBC_2.30 __iswxdigit_l F
+GLIBC_2.30 __isxdigit_l F
+GLIBC_2.30 __ivaliduser F
+GLIBC_2.30 __key_decryptsession_pk_LOCAL D 0x4
+GLIBC_2.30 __key_encryptsession_pk_LOCAL D 0x4
+GLIBC_2.30 __key_gendes_LOCAL D 0x4
+GLIBC_2.30 __libc_allocate_rtsig F
+GLIBC_2.30 __libc_calloc F
+GLIBC_2.30 __libc_current_sigrtmax F
+GLIBC_2.30 __libc_current_sigrtmin F
+GLIBC_2.30 __libc_free F
+GLIBC_2.30 __libc_freeres F
+GLIBC_2.30 __libc_init_first F
+GLIBC_2.30 __libc_mallinfo F
+GLIBC_2.30 __libc_malloc F
+GLIBC_2.30 __libc_mallopt F
+GLIBC_2.30 __libc_memalign F
+GLIBC_2.30 __libc_pvalloc F
+GLIBC_2.30 __libc_realloc F
+GLIBC_2.30 __libc_sa_len F
+GLIBC_2.30 __libc_start_main F
+GLIBC_2.30 __libc_valloc F
+GLIBC_2.30 __longjmp_chk F
+GLIBC_2.30 __lseek F
+GLIBC_2.30 __lxstat F
+GLIBC_2.30 __lxstat64 F
+GLIBC_2.30 __malloc_hook D 0x4
+GLIBC_2.30 __mbrlen F
+GLIBC_2.30 __mbrtowc F
+GLIBC_2.30 __mbsnrtowcs_chk F
+GLIBC_2.30 __mbsrtowcs_chk F
+GLIBC_2.30 __mbstowcs_chk F
+GLIBC_2.30 __memalign_hook D 0x4
+GLIBC_2.30 __memcpy_chk F
+GLIBC_2.30 __memmove_chk F
+GLIBC_2.30 __mempcpy F
+GLIBC_2.30 __mempcpy_chk F
+GLIBC_2.30 __memset_chk F
+GLIBC_2.30 __monstartup F
+GLIBC_2.30 __morecore D 0x4
+GLIBC_2.30 __nanosleep F
+GLIBC_2.30 __newlocale F
+GLIBC_2.30 __nl_langinfo_l F
+GLIBC_2.30 __nss_configure_lookup F
+GLIBC_2.30 __nss_hostname_digits_dots F
+GLIBC_2.30 __obstack_printf_chk F
+GLIBC_2.30 __obstack_vprintf_chk F
+GLIBC_2.30 __open F
+GLIBC_2.30 __open64 F
+GLIBC_2.30 __open64_2 F
+GLIBC_2.30 __open_2 F
+GLIBC_2.30 __openat64_2 F
+GLIBC_2.30 __openat_2 F
+GLIBC_2.30 __overflow F
+GLIBC_2.30 __pipe F
+GLIBC_2.30 __poll F
+GLIBC_2.30 __poll_chk F
+GLIBC_2.30 __posix_getopt F
+GLIBC_2.30 __ppoll_chk F
+GLIBC_2.30 __pread64 F
+GLIBC_2.30 __pread64_chk F
+GLIBC_2.30 __pread_chk F
+GLIBC_2.30 __printf_chk F
+GLIBC_2.30 __printf_fp F
+GLIBC_2.30 __profile_frequency F
+GLIBC_2.30 __progname D 0x4
+GLIBC_2.30 __progname_full D 0x4
+GLIBC_2.30 __ptsname_r_chk F
+GLIBC_2.30 __pwrite64 F
+GLIBC_2.30 __rawmemchr F
+GLIBC_2.30 __rcmd_errstr D 0x4
+GLIBC_2.30 __read F
+GLIBC_2.30 __read_chk F
+GLIBC_2.30 __readlink_chk F
+GLIBC_2.30 __readlinkat_chk F
+GLIBC_2.30 __realloc_hook D 0x4
+GLIBC_2.30 __realpath_chk F
+GLIBC_2.30 __recv_chk F
+GLIBC_2.30 __recvfrom_chk F
+GLIBC_2.30 __register_atfork F
+GLIBC_2.30 __res_init F
+GLIBC_2.30 __res_nclose F
+GLIBC_2.30 __res_ninit F
+GLIBC_2.30 __res_randomid F
+GLIBC_2.30 __res_state F
+GLIBC_2.30 __rpc_thread_createerr F
+GLIBC_2.30 __rpc_thread_svc_fdset F
+GLIBC_2.30 __rpc_thread_svc_max_pollfd F
+GLIBC_2.30 __rpc_thread_svc_pollfd F
+GLIBC_2.30 __sbrk F
+GLIBC_2.30 __sched_cpualloc F
+GLIBC_2.30 __sched_cpucount F
+GLIBC_2.30 __sched_cpufree F
+GLIBC_2.30 __sched_get_priority_max F
+GLIBC_2.30 __sched_get_priority_min F
+GLIBC_2.30 __sched_getparam F
+GLIBC_2.30 __sched_getscheduler F
+GLIBC_2.30 __sched_setscheduler F
+GLIBC_2.30 __sched_yield F
+GLIBC_2.30 __select F
+GLIBC_2.30 __send F
+GLIBC_2.30 __setmntent F
+GLIBC_2.30 __setpgid F
+GLIBC_2.30 __sigaction F
+GLIBC_2.30 __signbit F
+GLIBC_2.30 __signbitf F
+GLIBC_2.30 __sigpause F
+GLIBC_2.30 __sigsetjmp F
+GLIBC_2.30 __sigsuspend F
+GLIBC_2.30 __snprintf_chk F
+GLIBC_2.30 __sprintf_chk F
+GLIBC_2.30 __stack_chk_fail F
+GLIBC_2.30 __statfs F
+GLIBC_2.30 __stpcpy F
+GLIBC_2.30 __stpcpy_chk F
+GLIBC_2.30 __stpncpy F
+GLIBC_2.30 __stpncpy_chk F
+GLIBC_2.30 __strcasecmp F
+GLIBC_2.30 __strcasecmp_l F
+GLIBC_2.30 __strcasestr F
+GLIBC_2.30 __strcat_chk F
+GLIBC_2.30 __strcoll_l F
+GLIBC_2.30 __strcpy_chk F
+GLIBC_2.30 __strdup F
+GLIBC_2.30 __strerror_r F
+GLIBC_2.30 __strfmon_l F
+GLIBC_2.30 __strftime_l F
+GLIBC_2.30 __strncasecmp_l F
+GLIBC_2.30 __strncat_chk F
+GLIBC_2.30 __strncpy_chk F
+GLIBC_2.30 __strndup F
+GLIBC_2.30 __strsep_g F
+GLIBC_2.30 __strtod_internal F
+GLIBC_2.30 __strtod_l F
+GLIBC_2.30 __strtof_internal F
+GLIBC_2.30 __strtof_l F
+GLIBC_2.30 __strtok_r F
+GLIBC_2.30 __strtol_internal F
+GLIBC_2.30 __strtol_l F
+GLIBC_2.30 __strtold_internal F
+GLIBC_2.30 __strtold_l F
+GLIBC_2.30 __strtoll_internal F
+GLIBC_2.30 __strtoll_l F
+GLIBC_2.30 __strtoul_internal F
+GLIBC_2.30 __strtoul_l F
+GLIBC_2.30 __strtoull_internal F
+GLIBC_2.30 __strtoull_l F
+GLIBC_2.30 __strverscmp F
+GLIBC_2.30 __strxfrm_l F
+GLIBC_2.30 __swprintf_chk F
+GLIBC_2.30 __syscall_error F
+GLIBC_2.30 __sysconf F
+GLIBC_2.30 __syslog_chk F
+GLIBC_2.30 __sysv_signal F
+GLIBC_2.30 __timezone D 0x4
+GLIBC_2.30 __toascii_l F
+GLIBC_2.30 __tolower_l F
+GLIBC_2.30 __toupper_l F
+GLIBC_2.30 __towctrans F
+GLIBC_2.30 __towctrans_l F
+GLIBC_2.30 __towlower_l F
+GLIBC_2.30 __towupper_l F
+GLIBC_2.30 __ttyname_r_chk F
+GLIBC_2.30 __tzname D 0x8
+GLIBC_2.30 __uflow F
+GLIBC_2.30 __underflow F
+GLIBC_2.30 __uselocale F
+GLIBC_2.30 __vasprintf_chk F
+GLIBC_2.30 __vdprintf_chk F
+GLIBC_2.30 __vfork F
+GLIBC_2.30 __vfprintf_chk F
+GLIBC_2.30 __vfscanf F
+GLIBC_2.30 __vfwprintf_chk F
+GLIBC_2.30 __vprintf_chk F
+GLIBC_2.30 __vsnprintf F
+GLIBC_2.30 __vsnprintf_chk F
+GLIBC_2.30 __vsprintf_chk F
+GLIBC_2.30 __vsscanf F
+GLIBC_2.30 __vswprintf_chk F
+GLIBC_2.30 __vsyslog_chk F
+GLIBC_2.30 __vwprintf_chk F
+GLIBC_2.30 __wait F
+GLIBC_2.30 __waitpid F
+GLIBC_2.30 __wcpcpy_chk F
+GLIBC_2.30 __wcpncpy_chk F
+GLIBC_2.30 __wcrtomb_chk F
+GLIBC_2.30 __wcscasecmp_l F
+GLIBC_2.30 __wcscat_chk F
+GLIBC_2.30 __wcscoll_l F
+GLIBC_2.30 __wcscpy_chk F
+GLIBC_2.30 __wcsftime_l F
+GLIBC_2.30 __wcsncasecmp_l F
+GLIBC_2.30 __wcsncat_chk F
+GLIBC_2.30 __wcsncpy_chk F
+GLIBC_2.30 __wcsnrtombs_chk F
+GLIBC_2.30 __wcsrtombs_chk F
+GLIBC_2.30 __wcstod_internal F
+GLIBC_2.30 __wcstod_l F
+GLIBC_2.30 __wcstof_internal F
+GLIBC_2.30 __wcstof_l F
+GLIBC_2.30 __wcstol_internal F
+GLIBC_2.30 __wcstol_l F
+GLIBC_2.30 __wcstold_internal F
+GLIBC_2.30 __wcstold_l F
+GLIBC_2.30 __wcstoll_internal F
+GLIBC_2.30 __wcstoll_l F
+GLIBC_2.30 __wcstombs_chk F
+GLIBC_2.30 __wcstoul_internal F
+GLIBC_2.30 __wcstoul_l F
+GLIBC_2.30 __wcstoull_internal F
+GLIBC_2.30 __wcstoull_l F
+GLIBC_2.30 __wcsxfrm_l F
+GLIBC_2.30 __wctomb_chk F
+GLIBC_2.30 __wctrans_l F
+GLIBC_2.30 __wctype_l F
+GLIBC_2.30 __wmemcpy_chk F
+GLIBC_2.30 __wmemmove_chk F
+GLIBC_2.30 __wmempcpy_chk F
+GLIBC_2.30 __wmemset_chk F
+GLIBC_2.30 __woverflow F
+GLIBC_2.30 __wprintf_chk F
+GLIBC_2.30 __write F
+GLIBC_2.30 __wuflow F
+GLIBC_2.30 __wunderflow F
+GLIBC_2.30 __xmknod F
+GLIBC_2.30 __xmknodat F
+GLIBC_2.30 __xpg_basename F
+GLIBC_2.30 __xpg_sigpause F
+GLIBC_2.30 __xpg_strerror_r F
+GLIBC_2.30 __xstat F
+GLIBC_2.30 __xstat64 F
+GLIBC_2.30 _authenticate F
+GLIBC_2.30 _dl_mcount_wrapper F
+GLIBC_2.30 _dl_mcount_wrapper_check F
+GLIBC_2.30 _environ D 0x4
+GLIBC_2.30 _exit F
+GLIBC_2.30 _flush_cache F
+GLIBC_2.30 _flushlbf F
+GLIBC_2.30 _libc_intl_domainname D 0x5
+GLIBC_2.30 _longjmp F
+GLIBC_2.30 _mcleanup F
+GLIBC_2.30 _mcount F
+GLIBC_2.30 _nl_default_dirname D 0x12
+GLIBC_2.30 _nl_domain_bindings D 0x4
+GLIBC_2.30 _nl_msg_cat_cntr D 0x4
+GLIBC_2.30 _null_auth D 0xc
+GLIBC_2.30 _obstack_allocated_p F
+GLIBC_2.30 _obstack_begin F
+GLIBC_2.30 _obstack_begin_1 F
+GLIBC_2.30 _obstack_free F
+GLIBC_2.30 _obstack_memory_used F
+GLIBC_2.30 _obstack_newchunk F
+GLIBC_2.30 _res D 0x200
+GLIBC_2.30 _res_hconf D 0x30
+GLIBC_2.30 _rpc_dtablesize F
+GLIBC_2.30 _seterr_reply F
+GLIBC_2.30 _setjmp F
+GLIBC_2.30 _sys_errlist D 0x21c
+GLIBC_2.30 _sys_nerr D 0x4
+GLIBC_2.30 _sys_siglist D 0x104
+GLIBC_2.30 _tolower F
+GLIBC_2.30 _toupper F
+GLIBC_2.30 a64l F
+GLIBC_2.30 abort F
+GLIBC_2.30 abs F
+GLIBC_2.30 accept F
+GLIBC_2.30 accept4 F
+GLIBC_2.30 access F
+GLIBC_2.30 acct F
+GLIBC_2.30 addmntent F
+GLIBC_2.30 addseverity F
+GLIBC_2.30 adjtime F
+GLIBC_2.30 adjtimex F
+GLIBC_2.30 alarm F
+GLIBC_2.30 aligned_alloc F
+GLIBC_2.30 alphasort F
+GLIBC_2.30 alphasort64 F
+GLIBC_2.30 argp_err_exit_status D 0x4
+GLIBC_2.30 argp_error F
+GLIBC_2.30 argp_failure F
+GLIBC_2.30 argp_help F
+GLIBC_2.30 argp_parse F
+GLIBC_2.30 argp_program_bug_address D 0x4
+GLIBC_2.30 argp_program_version D 0x4
+GLIBC_2.30 argp_program_version_hook D 0x4
+GLIBC_2.30 argp_state_help F
+GLIBC_2.30 argp_usage F
+GLIBC_2.30 argz_add F
+GLIBC_2.30 argz_add_sep F
+GLIBC_2.30 argz_append F
+GLIBC_2.30 argz_count F
+GLIBC_2.30 argz_create F
+GLIBC_2.30 argz_create_sep F
+GLIBC_2.30 argz_delete F
+GLIBC_2.30 argz_extract F
+GLIBC_2.30 argz_insert F
+GLIBC_2.30 argz_next F
+GLIBC_2.30 argz_replace F
+GLIBC_2.30 argz_stringify F
+GLIBC_2.30 asctime F
+GLIBC_2.30 asctime_r F
+GLIBC_2.30 asprintf F
+GLIBC_2.30 atof F
+GLIBC_2.30 atoi F
+GLIBC_2.30 atol F
+GLIBC_2.30 atoll F
+GLIBC_2.30 authdes_create F
+GLIBC_2.30 authdes_getucred F
+GLIBC_2.30 authdes_pk_create F
+GLIBC_2.30 authnone_create F
+GLIBC_2.30 authunix_create F
+GLIBC_2.30 authunix_create_default F
+GLIBC_2.30 backtrace F
+GLIBC_2.30 backtrace_symbols F
+GLIBC_2.30 backtrace_symbols_fd F
+GLIBC_2.30 basename F
+GLIBC_2.30 bcmp F
+GLIBC_2.30 bcopy F
+GLIBC_2.30 bind F
+GLIBC_2.30 bind_textdomain_codeset F
+GLIBC_2.30 bindresvport F
+GLIBC_2.30 bindtextdomain F
+GLIBC_2.30 brk F
+GLIBC_2.30 bsd_signal F
+GLIBC_2.30 bsearch F
+GLIBC_2.30 btowc F
+GLIBC_2.30 bzero F
+GLIBC_2.30 c16rtomb F
+GLIBC_2.30 c32rtomb F
+GLIBC_2.30 cacheflush F
+GLIBC_2.30 calloc F
+GLIBC_2.30 callrpc F
+GLIBC_2.30 canonicalize_file_name F
+GLIBC_2.30 capget F
+GLIBC_2.30 capset F
+GLIBC_2.30 catclose F
+GLIBC_2.30 catgets F
+GLIBC_2.30 catopen F
+GLIBC_2.30 cbc_crypt F
+GLIBC_2.30 cfgetispeed F
+GLIBC_2.30 cfgetospeed F
+GLIBC_2.30 cfmakeraw F
+GLIBC_2.30 cfsetispeed F
+GLIBC_2.30 cfsetospeed F
+GLIBC_2.30 cfsetspeed F
+GLIBC_2.30 chdir F
+GLIBC_2.30 chflags F
+GLIBC_2.30 chmod F
+GLIBC_2.30 chown F
+GLIBC_2.30 chroot F
+GLIBC_2.30 clearenv F
+GLIBC_2.30 clearerr F
+GLIBC_2.30 clearerr_unlocked F
+GLIBC_2.30 clnt_broadcast F
+GLIBC_2.30 clnt_create F
+GLIBC_2.30 clnt_pcreateerror F
+GLIBC_2.30 clnt_perrno F
+GLIBC_2.30 clnt_perror F
+GLIBC_2.30 clnt_spcreateerror F
+GLIBC_2.30 clnt_sperrno F
+GLIBC_2.30 clnt_sperror F
+GLIBC_2.30 clntraw_create F
+GLIBC_2.30 clnttcp_create F
+GLIBC_2.30 clntudp_bufcreate F
+GLIBC_2.30 clntudp_create F
+GLIBC_2.30 clntunix_create F
+GLIBC_2.30 clock F
+GLIBC_2.30 clock_adjtime F
+GLIBC_2.30 clock_getcpuclockid F
+GLIBC_2.30 clock_getres F
+GLIBC_2.30 clock_gettime F
+GLIBC_2.30 clock_nanosleep F
+GLIBC_2.30 clock_settime F
+GLIBC_2.30 clone F
+GLIBC_2.30 close F
+GLIBC_2.30 closedir F
+GLIBC_2.30 closelog F
+GLIBC_2.30 confstr F
+GLIBC_2.30 connect F
+GLIBC_2.30 copy_file_range F
+GLIBC_2.30 copysign F
+GLIBC_2.30 copysignf F
+GLIBC_2.30 copysignl F
+GLIBC_2.30 creat F
+GLIBC_2.30 creat64 F
+GLIBC_2.30 ctermid F
+GLIBC_2.30 ctime F
+GLIBC_2.30 ctime_r F
+GLIBC_2.30 cuserid F
+GLIBC_2.30 daemon F
+GLIBC_2.30 daylight D 0x4
+GLIBC_2.30 dcgettext F
+GLIBC_2.30 dcngettext F
+GLIBC_2.30 delete_module F
+GLIBC_2.30 des_setparity F
+GLIBC_2.30 dgettext F
+GLIBC_2.30 difftime F
+GLIBC_2.30 dirfd F
+GLIBC_2.30 dirname F
+GLIBC_2.30 div F
+GLIBC_2.30 dl_iterate_phdr F
+GLIBC_2.30 dngettext F
+GLIBC_2.30 dprintf F
+GLIBC_2.30 drand48 F
+GLIBC_2.30 drand48_r F
+GLIBC_2.30 dup F
+GLIBC_2.30 dup2 F
+GLIBC_2.30 dup3 F
+GLIBC_2.30 duplocale F
+GLIBC_2.30 dysize F
+GLIBC_2.30 eaccess F
+GLIBC_2.30 ecb_crypt F
+GLIBC_2.30 ecvt F
+GLIBC_2.30 ecvt_r F
+GLIBC_2.30 endaliasent F
+GLIBC_2.30 endfsent F
+GLIBC_2.30 endgrent F
+GLIBC_2.30 endhostent F
+GLIBC_2.30 endmntent F
+GLIBC_2.30 endnetent F
+GLIBC_2.30 endnetgrent F
+GLIBC_2.30 endprotoent F
+GLIBC_2.30 endpwent F
+GLIBC_2.30 endrpcent F
+GLIBC_2.30 endservent F
+GLIBC_2.30 endsgent F
+GLIBC_2.30 endspent F
+GLIBC_2.30 endttyent F
+GLIBC_2.30 endusershell F
+GLIBC_2.30 endutent F
+GLIBC_2.30 endutxent F
+GLIBC_2.30 environ D 0x4
+GLIBC_2.30 envz_add F
+GLIBC_2.30 envz_entry F
+GLIBC_2.30 envz_get F
+GLIBC_2.30 envz_merge F
+GLIBC_2.30 envz_remove F
+GLIBC_2.30 envz_strip F
+GLIBC_2.30 epoll_create F
+GLIBC_2.30 epoll_create1 F
+GLIBC_2.30 epoll_ctl F
+GLIBC_2.30 epoll_pwait F
+GLIBC_2.30 epoll_wait F
+GLIBC_2.30 erand48 F
+GLIBC_2.30 erand48_r F
+GLIBC_2.30 err F
+GLIBC_2.30 error F
+GLIBC_2.30 error_at_line F
+GLIBC_2.30 error_message_count D 0x4
+GLIBC_2.30 error_one_per_line D 0x4
+GLIBC_2.30 error_print_progname D 0x4
+GLIBC_2.30 errx F
+GLIBC_2.30 ether_aton F
+GLIBC_2.30 ether_aton_r F
+GLIBC_2.30 ether_hostton F
+GLIBC_2.30 ether_line F
+GLIBC_2.30 ether_ntoa F
+GLIBC_2.30 ether_ntoa_r F
+GLIBC_2.30 ether_ntohost F
+GLIBC_2.30 euidaccess F
+GLIBC_2.30 eventfd F
+GLIBC_2.30 eventfd_read F
+GLIBC_2.30 eventfd_write F
+GLIBC_2.30 execl F
+GLIBC_2.30 execle F
+GLIBC_2.30 execlp F
+GLIBC_2.30 execv F
+GLIBC_2.30 execve F
+GLIBC_2.30 execvp F
+GLIBC_2.30 execvpe F
+GLIBC_2.30 exit F
+GLIBC_2.30 explicit_bzero F
+GLIBC_2.30 faccessat F
+GLIBC_2.30 fallocate F
+GLIBC_2.30 fallocate64 F
+GLIBC_2.30 fanotify_init F
+GLIBC_2.30 fanotify_mark F
+GLIBC_2.30 fchdir F
+GLIBC_2.30 fchflags F
+GLIBC_2.30 fchmod F
+GLIBC_2.30 fchmodat F
+GLIBC_2.30 fchown F
+GLIBC_2.30 fchownat F
+GLIBC_2.30 fclose F
+GLIBC_2.30 fcloseall F
+GLIBC_2.30 fcntl F
+GLIBC_2.30 fcntl64 F
+GLIBC_2.30 fcvt F
+GLIBC_2.30 fcvt_r F
+GLIBC_2.30 fdatasync F
+GLIBC_2.30 fdopen F
+GLIBC_2.30 fdopendir F
+GLIBC_2.30 feof F
+GLIBC_2.30 feof_unlocked F
+GLIBC_2.30 ferror F
+GLIBC_2.30 ferror_unlocked F
+GLIBC_2.30 fexecve F
+GLIBC_2.30 fflush F
+GLIBC_2.30 fflush_unlocked F
+GLIBC_2.30 ffs F
+GLIBC_2.30 ffsl F
+GLIBC_2.30 ffsll F
+GLIBC_2.30 fgetc F
+GLIBC_2.30 fgetc_unlocked F
+GLIBC_2.30 fgetgrent F
+GLIBC_2.30 fgetgrent_r F
+GLIBC_2.30 fgetpos F
+GLIBC_2.30 fgetpos64 F
+GLIBC_2.30 fgetpwent F
+GLIBC_2.30 fgetpwent_r F
+GLIBC_2.30 fgets F
+GLIBC_2.30 fgets_unlocked F
+GLIBC_2.30 fgetsgent F
+GLIBC_2.30 fgetsgent_r F
+GLIBC_2.30 fgetspent F
+GLIBC_2.30 fgetspent_r F
+GLIBC_2.30 fgetwc F
+GLIBC_2.30 fgetwc_unlocked F
+GLIBC_2.30 fgetws F
+GLIBC_2.30 fgetws_unlocked F
+GLIBC_2.30 fgetxattr F
+GLIBC_2.30 fileno F
+GLIBC_2.30 fileno_unlocked F
+GLIBC_2.30 finite F
+GLIBC_2.30 finitef F
+GLIBC_2.30 finitel F
+GLIBC_2.30 flistxattr F
+GLIBC_2.30 flock F
+GLIBC_2.30 flockfile F
+GLIBC_2.30 fmemopen F
+GLIBC_2.30 fmtmsg F
+GLIBC_2.30 fnmatch F
+GLIBC_2.30 fopen F
+GLIBC_2.30 fopen64 F
+GLIBC_2.30 fopencookie F
+GLIBC_2.30 fork F
+GLIBC_2.30 fpathconf F
+GLIBC_2.30 fprintf F
+GLIBC_2.30 fputc F
+GLIBC_2.30 fputc_unlocked F
+GLIBC_2.30 fputs F
+GLIBC_2.30 fputs_unlocked F
+GLIBC_2.30 fputwc F
+GLIBC_2.30 fputwc_unlocked F
+GLIBC_2.30 fputws F
+GLIBC_2.30 fputws_unlocked F
+GLIBC_2.30 fread F
+GLIBC_2.30 fread_unlocked F
+GLIBC_2.30 free F
+GLIBC_2.30 freeaddrinfo F
+GLIBC_2.30 freeifaddrs F
+GLIBC_2.30 freelocale F
+GLIBC_2.30 fremovexattr F
+GLIBC_2.30 freopen F
+GLIBC_2.30 freopen64 F
+GLIBC_2.30 frexp F
+GLIBC_2.30 frexpf F
+GLIBC_2.30 frexpl F
+GLIBC_2.30 fscanf F
+GLIBC_2.30 fseek F
+GLIBC_2.30 fseeko F
+GLIBC_2.30 fseeko64 F
+GLIBC_2.30 fsetpos F
+GLIBC_2.30 fsetpos64 F
+GLIBC_2.30 fsetxattr F
+GLIBC_2.30 fstatfs F
+GLIBC_2.30 fstatfs64 F
+GLIBC_2.30 fstatvfs F
+GLIBC_2.30 fstatvfs64 F
+GLIBC_2.30 fsync F
+GLIBC_2.30 ftell F
+GLIBC_2.30 ftello F
+GLIBC_2.30 ftello64 F
+GLIBC_2.30 ftime F
+GLIBC_2.30 ftok F
+GLIBC_2.30 ftruncate F
+GLIBC_2.30 ftruncate64 F
+GLIBC_2.30 ftrylockfile F
+GLIBC_2.30 fts64_children F
+GLIBC_2.30 fts64_close F
+GLIBC_2.30 fts64_open F
+GLIBC_2.30 fts64_read F
+GLIBC_2.30 fts64_set F
+GLIBC_2.30 fts_children F
+GLIBC_2.30 fts_close F
+GLIBC_2.30 fts_open F
+GLIBC_2.30 fts_read F
+GLIBC_2.30 fts_set F
+GLIBC_2.30 ftw F
+GLIBC_2.30 ftw64 F
+GLIBC_2.30 funlockfile F
+GLIBC_2.30 futimens F
+GLIBC_2.30 futimes F
+GLIBC_2.30 futimesat F
+GLIBC_2.30 fwide F
+GLIBC_2.30 fwprintf F
+GLIBC_2.30 fwrite F
+GLIBC_2.30 fwrite_unlocked F
+GLIBC_2.30 fwscanf F
+GLIBC_2.30 gai_strerror F
+GLIBC_2.30 gcvt F
+GLIBC_2.30 get_avphys_pages F
+GLIBC_2.30 get_current_dir_name F
+GLIBC_2.30 get_myaddress F
+GLIBC_2.30 get_nprocs F
+GLIBC_2.30 get_nprocs_conf F
+GLIBC_2.30 get_phys_pages F
+GLIBC_2.30 getaddrinfo F
+GLIBC_2.30 getaliasbyname F
+GLIBC_2.30 getaliasbyname_r F
+GLIBC_2.30 getaliasent F
+GLIBC_2.30 getaliasent_r F
+GLIBC_2.30 getauxval F
+GLIBC_2.30 getc F
+GLIBC_2.30 getc_unlocked F
+GLIBC_2.30 getchar F
+GLIBC_2.30 getchar_unlocked F
+GLIBC_2.30 getcontext F
+GLIBC_2.30 getcpu F
+GLIBC_2.30 getcwd F
+GLIBC_2.30 getdate F
+GLIBC_2.30 getdate_err D 0x4
+GLIBC_2.30 getdate_r F
+GLIBC_2.30 getdelim F
+GLIBC_2.30 getdents64 F
+GLIBC_2.30 getdirentries F
+GLIBC_2.30 getdirentries64 F
+GLIBC_2.30 getdomainname F
+GLIBC_2.30 getdtablesize F
+GLIBC_2.30 getegid F
+GLIBC_2.30 getentropy F
+GLIBC_2.30 getenv F
+GLIBC_2.30 geteuid F
+GLIBC_2.30 getfsent F
+GLIBC_2.30 getfsfile F
+GLIBC_2.30 getfsspec F
+GLIBC_2.30 getgid F
+GLIBC_2.30 getgrent F
+GLIBC_2.30 getgrent_r F
+GLIBC_2.30 getgrgid F
+GLIBC_2.30 getgrgid_r F
+GLIBC_2.30 getgrnam F
+GLIBC_2.30 getgrnam_r F
+GLIBC_2.30 getgrouplist F
+GLIBC_2.30 getgroups F
+GLIBC_2.30 gethostbyaddr F
+GLIBC_2.30 gethostbyaddr_r F
+GLIBC_2.30 gethostbyname F
+GLIBC_2.30 gethostbyname2 F
+GLIBC_2.30 gethostbyname2_r F
+GLIBC_2.30 gethostbyname_r F
+GLIBC_2.30 gethostent F
+GLIBC_2.30 gethostent_r F
+GLIBC_2.30 gethostid F
+GLIBC_2.30 gethostname F
+GLIBC_2.30 getifaddrs F
+GLIBC_2.30 getipv4sourcefilter F
+GLIBC_2.30 getitimer F
+GLIBC_2.30 getline F
+GLIBC_2.30 getloadavg F
+GLIBC_2.30 getlogin F
+GLIBC_2.30 getlogin_r F
+GLIBC_2.30 getmntent F
+GLIBC_2.30 getmntent_r F
+GLIBC_2.30 getnameinfo F
+GLIBC_2.30 getnetbyaddr F
+GLIBC_2.30 getnetbyaddr_r F
+GLIBC_2.30 getnetbyname F
+GLIBC_2.30 getnetbyname_r F
+GLIBC_2.30 getnetent F
+GLIBC_2.30 getnetent_r F
+GLIBC_2.30 getnetgrent F
+GLIBC_2.30 getnetgrent_r F
+GLIBC_2.30 getnetname F
+GLIBC_2.30 getopt F
+GLIBC_2.30 getopt_long F
+GLIBC_2.30 getopt_long_only F
+GLIBC_2.30 getpagesize F
+GLIBC_2.30 getpass F
+GLIBC_2.30 getpeername F
+GLIBC_2.30 getpgid F
+GLIBC_2.30 getpgrp F
+GLIBC_2.30 getpid F
+GLIBC_2.30 getppid F
+GLIBC_2.30 getpriority F
+GLIBC_2.30 getprotobyname F
+GLIBC_2.30 getprotobyname_r F
+GLIBC_2.30 getprotobynumber F
+GLIBC_2.30 getprotobynumber_r F
+GLIBC_2.30 getprotoent F
+GLIBC_2.30 getprotoent_r F
+GLIBC_2.30 getpt F
+GLIBC_2.30 getpublickey F
+GLIBC_2.30 getpw F
+GLIBC_2.30 getpwent F
+GLIBC_2.30 getpwent_r F
+GLIBC_2.30 getpwnam F
+GLIBC_2.30 getpwnam_r F
+GLIBC_2.30 getpwuid F
+GLIBC_2.30 getpwuid_r F
+GLIBC_2.30 getrandom F
+GLIBC_2.30 getresgid F
+GLIBC_2.30 getresuid F
+GLIBC_2.30 getrlimit F
+GLIBC_2.30 getrlimit64 F
+GLIBC_2.30 getrpcbyname F
+GLIBC_2.30 getrpcbyname_r F
+GLIBC_2.30 getrpcbynumber F
+GLIBC_2.30 getrpcbynumber_r F
+GLIBC_2.30 getrpcent F
+GLIBC_2.30 getrpcent_r F
+GLIBC_2.30 getrpcport F
+GLIBC_2.30 getrusage F
+GLIBC_2.30 gets F
+GLIBC_2.30 getsecretkey F
+GLIBC_2.30 getservbyname F
+GLIBC_2.30 getservbyname_r F
+GLIBC_2.30 getservbyport F
+GLIBC_2.30 getservbyport_r F
+GLIBC_2.30 getservent F
+GLIBC_2.30 getservent_r F
+GLIBC_2.30 getsgent F
+GLIBC_2.30 getsgent_r F
+GLIBC_2.30 getsgnam F
+GLIBC_2.30 getsgnam_r F
+GLIBC_2.30 getsid F
+GLIBC_2.30 getsockname F
+GLIBC_2.30 getsockopt F
+GLIBC_2.30 getsourcefilter F
+GLIBC_2.30 getspent F
+GLIBC_2.30 getspent_r F
+GLIBC_2.30 getspnam F
+GLIBC_2.30 getspnam_r F
+GLIBC_2.30 getsubopt F
+GLIBC_2.30 gettext F
+GLIBC_2.30 gettid F
+GLIBC_2.30 gettimeofday F
+GLIBC_2.30 getttyent F
+GLIBC_2.30 getttynam F
+GLIBC_2.30 getuid F
+GLIBC_2.30 getusershell F
+GLIBC_2.30 getutent F
+GLIBC_2.30 getutent_r F
+GLIBC_2.30 getutid F
+GLIBC_2.30 getutid_r F
+GLIBC_2.30 getutline F
+GLIBC_2.30 getutline_r F
+GLIBC_2.30 getutmp F
+GLIBC_2.30 getutmpx F
+GLIBC_2.30 getutxent F
+GLIBC_2.30 getutxid F
+GLIBC_2.30 getutxline F
+GLIBC_2.30 getw F
+GLIBC_2.30 getwc F
+GLIBC_2.30 getwc_unlocked F
+GLIBC_2.30 getwchar F
+GLIBC_2.30 getwchar_unlocked F
+GLIBC_2.30 getwd F
+GLIBC_2.30 getxattr F
+GLIBC_2.30 glob F
+GLIBC_2.30 glob64 F
+GLIBC_2.30 glob_pattern_p F
+GLIBC_2.30 globfree F
+GLIBC_2.30 globfree64 F
+GLIBC_2.30 gmtime F
+GLIBC_2.30 gmtime_r F
+GLIBC_2.30 gnu_dev_major F
+GLIBC_2.30 gnu_dev_makedev F
+GLIBC_2.30 gnu_dev_minor F
+GLIBC_2.30 gnu_get_libc_release F
+GLIBC_2.30 gnu_get_libc_version F
+GLIBC_2.30 grantpt F
+GLIBC_2.30 group_member F
+GLIBC_2.30 gsignal F
+GLIBC_2.30 gtty F
+GLIBC_2.30 h_errlist D 0x14
+GLIBC_2.30 h_nerr D 0x4
+GLIBC_2.30 hasmntopt F
+GLIBC_2.30 hcreate F
+GLIBC_2.30 hcreate_r F
+GLIBC_2.30 hdestroy F
+GLIBC_2.30 hdestroy_r F
+GLIBC_2.30 herror F
+GLIBC_2.30 host2netname F
+GLIBC_2.30 hsearch F
+GLIBC_2.30 hsearch_r F
+GLIBC_2.30 hstrerror F
+GLIBC_2.30 htonl F
+GLIBC_2.30 htons F
+GLIBC_2.30 iconv F
+GLIBC_2.30 iconv_close F
+GLIBC_2.30 iconv_open F
+GLIBC_2.30 if_freenameindex F
+GLIBC_2.30 if_indextoname F
+GLIBC_2.30 if_nameindex F
+GLIBC_2.30 if_nametoindex F
+GLIBC_2.30 imaxabs F
+GLIBC_2.30 imaxdiv F
+GLIBC_2.30 in6addr_any D 0x10
+GLIBC_2.30 in6addr_loopback D 0x10
+GLIBC_2.30 index F
+GLIBC_2.30 inet6_opt_append F
+GLIBC_2.30 inet6_opt_find F
+GLIBC_2.30 inet6_opt_finish F
+GLIBC_2.30 inet6_opt_get_val F
+GLIBC_2.30 inet6_opt_init F
+GLIBC_2.30 inet6_opt_next F
+GLIBC_2.30 inet6_opt_set_val F
+GLIBC_2.30 inet6_option_alloc F
+GLIBC_2.30 inet6_option_append F
+GLIBC_2.30 inet6_option_find F
+GLIBC_2.30 inet6_option_init F
+GLIBC_2.30 inet6_option_next F
+GLIBC_2.30 inet6_option_space F
+GLIBC_2.30 inet6_rth_add F
+GLIBC_2.30 inet6_rth_getaddr F
+GLIBC_2.30 inet6_rth_init F
+GLIBC_2.30 inet6_rth_reverse F
+GLIBC_2.30 inet6_rth_segments F
+GLIBC_2.30 inet6_rth_space F
+GLIBC_2.30 inet_addr F
+GLIBC_2.30 inet_aton F
+GLIBC_2.30 inet_lnaof F
+GLIBC_2.30 inet_makeaddr F
+GLIBC_2.30 inet_netof F
+GLIBC_2.30 inet_network F
+GLIBC_2.30 inet_nsap_addr F
+GLIBC_2.30 inet_nsap_ntoa F
+GLIBC_2.30 inet_ntoa F
+GLIBC_2.30 inet_ntop F
+GLIBC_2.30 inet_pton F
+GLIBC_2.30 init_module F
+GLIBC_2.30 initgroups F
+GLIBC_2.30 initstate F
+GLIBC_2.30 initstate_r F
+GLIBC_2.30 innetgr F
+GLIBC_2.30 inotify_add_watch F
+GLIBC_2.30 inotify_init F
+GLIBC_2.30 inotify_init1 F
+GLIBC_2.30 inotify_rm_watch F
+GLIBC_2.30 insque F
+GLIBC_2.30 ioctl F
+GLIBC_2.30 iruserok F
+GLIBC_2.30 iruserok_af F
+GLIBC_2.30 isalnum F
+GLIBC_2.30 isalnum_l F
+GLIBC_2.30 isalpha F
+GLIBC_2.30 isalpha_l F
+GLIBC_2.30 isascii F
+GLIBC_2.30 isatty F
+GLIBC_2.30 isblank F
+GLIBC_2.30 isblank_l F
+GLIBC_2.30 iscntrl F
+GLIBC_2.30 iscntrl_l F
+GLIBC_2.30 isctype F
+GLIBC_2.30 isdigit F
+GLIBC_2.30 isdigit_l F
+GLIBC_2.30 isfdtype F
+GLIBC_2.30 isgraph F
+GLIBC_2.30 isgraph_l F
+GLIBC_2.30 isinf F
+GLIBC_2.30 isinff F
+GLIBC_2.30 isinfl F
+GLIBC_2.30 islower F
+GLIBC_2.30 islower_l F
+GLIBC_2.30 isnan F
+GLIBC_2.30 isnanf F
+GLIBC_2.30 isnanl F
+GLIBC_2.30 isprint F
+GLIBC_2.30 isprint_l F
+GLIBC_2.30 ispunct F
+GLIBC_2.30 ispunct_l F
+GLIBC_2.30 isspace F
+GLIBC_2.30 isspace_l F
+GLIBC_2.30 isupper F
+GLIBC_2.30 isupper_l F
+GLIBC_2.30 iswalnum F
+GLIBC_2.30 iswalnum_l F
+GLIBC_2.30 iswalpha F
+GLIBC_2.30 iswalpha_l F
+GLIBC_2.30 iswblank F
+GLIBC_2.30 iswblank_l F
+GLIBC_2.30 iswcntrl F
+GLIBC_2.30 iswcntrl_l F
+GLIBC_2.30 iswctype F
+GLIBC_2.30 iswctype_l F
+GLIBC_2.30 iswdigit F
+GLIBC_2.30 iswdigit_l F
+GLIBC_2.30 iswgraph F
+GLIBC_2.30 iswgraph_l F
+GLIBC_2.30 iswlower F
+GLIBC_2.30 iswlower_l F
+GLIBC_2.30 iswprint F
+GLIBC_2.30 iswprint_l F
+GLIBC_2.30 iswpunct F
+GLIBC_2.30 iswpunct_l F
+GLIBC_2.30 iswspace F
+GLIBC_2.30 iswspace_l F
+GLIBC_2.30 iswupper F
+GLIBC_2.30 iswupper_l F
+GLIBC_2.30 iswxdigit F
+GLIBC_2.30 iswxdigit_l F
+GLIBC_2.30 isxdigit F
+GLIBC_2.30 isxdigit_l F
+GLIBC_2.30 jrand48 F
+GLIBC_2.30 jrand48_r F
+GLIBC_2.30 key_decryptsession F
+GLIBC_2.30 key_decryptsession_pk F
+GLIBC_2.30 key_encryptsession F
+GLIBC_2.30 key_encryptsession_pk F
+GLIBC_2.30 key_gendes F
+GLIBC_2.30 key_get_conv F
+GLIBC_2.30 key_secretkey_is_set F
+GLIBC_2.30 key_setnet F
+GLIBC_2.30 key_setsecret F
+GLIBC_2.30 kill F
+GLIBC_2.30 killpg F
+GLIBC_2.30 klogctl F
+GLIBC_2.30 l64a F
+GLIBC_2.30 labs F
+GLIBC_2.30 lchmod F
+GLIBC_2.30 lchown F
+GLIBC_2.30 lckpwdf F
+GLIBC_2.30 lcong48 F
+GLIBC_2.30 lcong48_r F
+GLIBC_2.30 ldexp F
+GLIBC_2.30 ldexpf F
+GLIBC_2.30 ldexpl F
+GLIBC_2.30 ldiv F
+GLIBC_2.30 lfind F
+GLIBC_2.30 lgetxattr F
+GLIBC_2.30 link F
+GLIBC_2.30 linkat F
+GLIBC_2.30 listen F
+GLIBC_2.30 listxattr F
+GLIBC_2.30 llabs F
+GLIBC_2.30 lldiv F
+GLIBC_2.30 llistxattr F
+GLIBC_2.30 localeconv F
+GLIBC_2.30 localtime F
+GLIBC_2.30 localtime_r F
+GLIBC_2.30 lockf F
+GLIBC_2.30 lockf64 F
+GLIBC_2.30 longjmp F
+GLIBC_2.30 lrand48 F
+GLIBC_2.30 lrand48_r F
+GLIBC_2.30 lremovexattr F
+GLIBC_2.30 lsearch F
+GLIBC_2.30 lseek F
+GLIBC_2.30 lseek64 F
+GLIBC_2.30 lsetxattr F
+GLIBC_2.30 lutimes F
+GLIBC_2.30 madvise F
+GLIBC_2.30 makecontext F
+GLIBC_2.30 mallinfo F
+GLIBC_2.30 malloc F
+GLIBC_2.30 malloc_info F
+GLIBC_2.30 malloc_stats F
+GLIBC_2.30 malloc_trim F
+GLIBC_2.30 malloc_usable_size F
+GLIBC_2.30 mallopt F
+GLIBC_2.30 mallwatch D 0x4
+GLIBC_2.30 mblen F
+GLIBC_2.30 mbrlen F
+GLIBC_2.30 mbrtoc16 F
+GLIBC_2.30 mbrtoc32 F
+GLIBC_2.30 mbrtowc F
+GLIBC_2.30 mbsinit F
+GLIBC_2.30 mbsnrtowcs F
+GLIBC_2.30 mbsrtowcs F
+GLIBC_2.30 mbstowcs F
+GLIBC_2.30 mbtowc F
+GLIBC_2.30 mcheck F
+GLIBC_2.30 mcheck_check_all F
+GLIBC_2.30 mcheck_pedantic F
+GLIBC_2.30 memalign F
+GLIBC_2.30 memccpy F
+GLIBC_2.30 memchr F
+GLIBC_2.30 memcmp F
+GLIBC_2.30 memcpy F
+GLIBC_2.30 memfd_create F
+GLIBC_2.30 memfrob F
+GLIBC_2.30 memmem F
+GLIBC_2.30 memmove F
+GLIBC_2.30 mempcpy F
+GLIBC_2.30 memrchr F
+GLIBC_2.30 memset F
+GLIBC_2.30 mincore F
+GLIBC_2.30 mkdir F
+GLIBC_2.30 mkdirat F
+GLIBC_2.30 mkdtemp F
+GLIBC_2.30 mkfifo F
+GLIBC_2.30 mkfifoat F
+GLIBC_2.30 mkostemp F
+GLIBC_2.30 mkostemp64 F
+GLIBC_2.30 mkostemps F
+GLIBC_2.30 mkostemps64 F
+GLIBC_2.30 mkstemp F
+GLIBC_2.30 mkstemp64 F
+GLIBC_2.30 mkstemps F
+GLIBC_2.30 mkstemps64 F
+GLIBC_2.30 mktemp F
+GLIBC_2.30 mktime F
+GLIBC_2.30 mlock F
+GLIBC_2.30 mlock2 F
+GLIBC_2.30 mlockall F
+GLIBC_2.30 mmap F
+GLIBC_2.30 mmap64 F
+GLIBC_2.30 modf F
+GLIBC_2.30 modff F
+GLIBC_2.30 modfl F
+GLIBC_2.30 moncontrol F
+GLIBC_2.30 monstartup F
+GLIBC_2.30 mount F
+GLIBC_2.30 mprobe F
+GLIBC_2.30 mprotect F
+GLIBC_2.30 mrand48 F
+GLIBC_2.30 mrand48_r F
+GLIBC_2.30 mremap F
+GLIBC_2.30 msgctl F
+GLIBC_2.30 msgget F
+GLIBC_2.30 msgrcv F
+GLIBC_2.30 msgsnd F
+GLIBC_2.30 msync F
+GLIBC_2.30 mtrace F
+GLIBC_2.30 munlock F
+GLIBC_2.30 munlockall F
+GLIBC_2.30 munmap F
+GLIBC_2.30 muntrace F
+GLIBC_2.30 name_to_handle_at F
+GLIBC_2.30 nanosleep F
+GLIBC_2.30 netname2host F
+GLIBC_2.30 netname2user F
+GLIBC_2.30 newlocale F
+GLIBC_2.30 nftw F
+GLIBC_2.30 nftw64 F
+GLIBC_2.30 ngettext F
+GLIBC_2.30 nice F
+GLIBC_2.30 nl_langinfo F
+GLIBC_2.30 nl_langinfo_l F
+GLIBC_2.30 nrand48 F
+GLIBC_2.30 nrand48_r F
+GLIBC_2.30 ntohl F
+GLIBC_2.30 ntohs F
+GLIBC_2.30 ntp_adjtime F
+GLIBC_2.30 ntp_gettime F
+GLIBC_2.30 ntp_gettimex F
+GLIBC_2.30 obstack_alloc_failed_handler D 0x4
+GLIBC_2.30 obstack_exit_failure D 0x4
+GLIBC_2.30 obstack_free F
+GLIBC_2.30 obstack_printf F
+GLIBC_2.30 obstack_vprintf F
+GLIBC_2.30 on_exit F
+GLIBC_2.30 open F
+GLIBC_2.30 open64 F
+GLIBC_2.30 open_by_handle_at F
+GLIBC_2.30 open_memstream F
+GLIBC_2.30 open_wmemstream F
+GLIBC_2.30 openat F
+GLIBC_2.30 openat64 F
+GLIBC_2.30 opendir F
+GLIBC_2.30 openlog F
+GLIBC_2.30 optarg D 0x4
+GLIBC_2.30 opterr D 0x4
+GLIBC_2.30 optind D 0x4
+GLIBC_2.30 optopt D 0x4
+GLIBC_2.30 parse_printf_format F
+GLIBC_2.30 passwd2des F
+GLIBC_2.30 pathconf F
+GLIBC_2.30 pause F
+GLIBC_2.30 pclose F
+GLIBC_2.30 perror F
+GLIBC_2.30 personality F
+GLIBC_2.30 pipe F
+GLIBC_2.30 pipe2 F
+GLIBC_2.30 pivot_root F
+GLIBC_2.30 pkey_alloc F
+GLIBC_2.30 pkey_free F
+GLIBC_2.30 pkey_get F
+GLIBC_2.30 pkey_mprotect F
+GLIBC_2.30 pkey_set F
+GLIBC_2.30 pmap_getmaps F
+GLIBC_2.30 pmap_getport F
+GLIBC_2.30 pmap_rmtcall F
+GLIBC_2.30 pmap_set F
+GLIBC_2.30 pmap_unset F
+GLIBC_2.30 poll F
+GLIBC_2.30 popen F
+GLIBC_2.30 posix_fadvise F
+GLIBC_2.30 posix_fadvise64 F
+GLIBC_2.30 posix_fallocate F
+GLIBC_2.30 posix_fallocate64 F
+GLIBC_2.30 posix_madvise F
+GLIBC_2.30 posix_memalign F
+GLIBC_2.30 posix_openpt F
+GLIBC_2.30 posix_spawn F
+GLIBC_2.30 posix_spawn_file_actions_addchdir_np F
+GLIBC_2.30 posix_spawn_file_actions_addclose F
+GLIBC_2.30 posix_spawn_file_actions_adddup2 F
+GLIBC_2.30 posix_spawn_file_actions_addfchdir_np F
+GLIBC_2.30 posix_spawn_file_actions_addopen F
+GLIBC_2.30 posix_spawn_file_actions_destroy F
+GLIBC_2.30 posix_spawn_file_actions_init F
+GLIBC_2.30 posix_spawnattr_destroy F
+GLIBC_2.30 posix_spawnattr_getflags F
+GLIBC_2.30 posix_spawnattr_getpgroup F
+GLIBC_2.30 posix_spawnattr_getschedparam F
+GLIBC_2.30 posix_spawnattr_getschedpolicy F
+GLIBC_2.30 posix_spawnattr_getsigdefault F
+GLIBC_2.30 posix_spawnattr_getsigmask F
+GLIBC_2.30 posix_spawnattr_init F
+GLIBC_2.30 posix_spawnattr_setflags F
+GLIBC_2.30 posix_spawnattr_setpgroup F
+GLIBC_2.30 posix_spawnattr_setschedparam F
+GLIBC_2.30 posix_spawnattr_setschedpolicy F
+GLIBC_2.30 posix_spawnattr_setsigdefault F
+GLIBC_2.30 posix_spawnattr_setsigmask F
+GLIBC_2.30 posix_spawnp F
+GLIBC_2.30 ppoll F
+GLIBC_2.30 prctl F
+GLIBC_2.30 pread F
+GLIBC_2.30 pread64 F
+GLIBC_2.30 preadv F
+GLIBC_2.30 preadv2 F
+GLIBC_2.30 preadv64 F
+GLIBC_2.30 preadv64v2 F
+GLIBC_2.30 printf F
+GLIBC_2.30 printf_size F
+GLIBC_2.30 printf_size_info F
+GLIBC_2.30 prlimit F
+GLIBC_2.30 prlimit64 F
+GLIBC_2.30 process_vm_readv F
+GLIBC_2.30 process_vm_writev F
+GLIBC_2.30 profil F
+GLIBC_2.30 program_invocation_name D 0x4
+GLIBC_2.30 program_invocation_short_name D 0x4
+GLIBC_2.30 pselect F
+GLIBC_2.30 psiginfo F
+GLIBC_2.30 psignal F
+GLIBC_2.30 pthread_attr_destroy F
+GLIBC_2.30 pthread_attr_getdetachstate F
+GLIBC_2.30 pthread_attr_getinheritsched F
+GLIBC_2.30 pthread_attr_getschedparam F
+GLIBC_2.30 pthread_attr_getschedpolicy F
+GLIBC_2.30 pthread_attr_getscope F
+GLIBC_2.30 pthread_attr_init F
+GLIBC_2.30 pthread_attr_setdetachstate F
+GLIBC_2.30 pthread_attr_setinheritsched F
+GLIBC_2.30 pthread_attr_setschedparam F
+GLIBC_2.30 pthread_attr_setschedpolicy F
+GLIBC_2.30 pthread_attr_setscope F
+GLIBC_2.30 pthread_cond_broadcast F
+GLIBC_2.30 pthread_cond_destroy F
+GLIBC_2.30 pthread_cond_init F
+GLIBC_2.30 pthread_cond_signal F
+GLIBC_2.30 pthread_cond_timedwait F
+GLIBC_2.30 pthread_cond_wait F
+GLIBC_2.30 pthread_condattr_destroy F
+GLIBC_2.30 pthread_condattr_init F
+GLIBC_2.30 pthread_equal F
+GLIBC_2.30 pthread_exit F
+GLIBC_2.30 pthread_getschedparam F
+GLIBC_2.30 pthread_mutex_destroy F
+GLIBC_2.30 pthread_mutex_init F
+GLIBC_2.30 pthread_mutex_lock F
+GLIBC_2.30 pthread_mutex_unlock F
+GLIBC_2.30 pthread_self F
+GLIBC_2.30 pthread_setcancelstate F
+GLIBC_2.30 pthread_setcanceltype F
+GLIBC_2.30 pthread_setschedparam F
+GLIBC_2.30 ptrace F
+GLIBC_2.30 ptsname F
+GLIBC_2.30 ptsname_r F
+GLIBC_2.30 putc F
+GLIBC_2.30 putc_unlocked F
+GLIBC_2.30 putchar F
+GLIBC_2.30 putchar_unlocked F
+GLIBC_2.30 putenv F
+GLIBC_2.30 putgrent F
+GLIBC_2.30 putpwent F
+GLIBC_2.30 puts F
+GLIBC_2.30 putsgent F
+GLIBC_2.30 putspent F
+GLIBC_2.30 pututline F
+GLIBC_2.30 pututxline F
+GLIBC_2.30 putw F
+GLIBC_2.30 putwc F
+GLIBC_2.30 putwc_unlocked F
+GLIBC_2.30 putwchar F
+GLIBC_2.30 putwchar_unlocked F
+GLIBC_2.30 pvalloc F
+GLIBC_2.30 pwrite F
+GLIBC_2.30 pwrite64 F
+GLIBC_2.30 pwritev F
+GLIBC_2.30 pwritev2 F
+GLIBC_2.30 pwritev64 F
+GLIBC_2.30 pwritev64v2 F
+GLIBC_2.30 qecvt F
+GLIBC_2.30 qecvt_r F
+GLIBC_2.30 qfcvt F
+GLIBC_2.30 qfcvt_r F
+GLIBC_2.30 qgcvt F
+GLIBC_2.30 qsort F
+GLIBC_2.30 qsort_r F
+GLIBC_2.30 quick_exit F
+GLIBC_2.30 quotactl F
+GLIBC_2.30 raise F
+GLIBC_2.30 rand F
+GLIBC_2.30 rand_r F
+GLIBC_2.30 random F
+GLIBC_2.30 random_r F
+GLIBC_2.30 rawmemchr F
+GLIBC_2.30 rcmd F
+GLIBC_2.30 rcmd_af F
+GLIBC_2.30 re_comp F
+GLIBC_2.30 re_compile_fastmap F
+GLIBC_2.30 re_compile_pattern F
+GLIBC_2.30 re_exec F
+GLIBC_2.30 re_match F
+GLIBC_2.30 re_match_2 F
+GLIBC_2.30 re_search F
+GLIBC_2.30 re_search_2 F
+GLIBC_2.30 re_set_registers F
+GLIBC_2.30 re_set_syntax F
+GLIBC_2.30 re_syntax_options D 0x4
+GLIBC_2.30 read F
+GLIBC_2.30 readahead F
+GLIBC_2.30 readdir F
+GLIBC_2.30 readdir64 F
+GLIBC_2.30 readdir64_r F
+GLIBC_2.30 readdir_r F
+GLIBC_2.30 readlink F
+GLIBC_2.30 readlinkat F
+GLIBC_2.30 readv F
+GLIBC_2.30 realloc F
+GLIBC_2.30 reallocarray F
+GLIBC_2.30 realpath F
+GLIBC_2.30 reboot F
+GLIBC_2.30 recv F
+GLIBC_2.30 recvfrom F
+GLIBC_2.30 recvmmsg F
+GLIBC_2.30 recvmsg F
+GLIBC_2.30 regcomp F
+GLIBC_2.30 regerror F
+GLIBC_2.30 regexec F
+GLIBC_2.30 regfree F
+GLIBC_2.30 register_printf_function F
+GLIBC_2.30 register_printf_modifier F
+GLIBC_2.30 register_printf_specifier F
+GLIBC_2.30 register_printf_type F
+GLIBC_2.30 registerrpc F
+GLIBC_2.30 remap_file_pages F
+GLIBC_2.30 remove F
+GLIBC_2.30 removexattr F
+GLIBC_2.30 remque F
+GLIBC_2.30 rename F
+GLIBC_2.30 renameat F
+GLIBC_2.30 renameat2 F
+GLIBC_2.30 revoke F
+GLIBC_2.30 rewind F
+GLIBC_2.30 rewinddir F
+GLIBC_2.30 rexec F
+GLIBC_2.30 rexec_af F
+GLIBC_2.30 rexecoptions D 0x4
+GLIBC_2.30 rindex F
+GLIBC_2.30 rmdir F
+GLIBC_2.30 rpc_createerr D 0x10
+GLIBC_2.30 rpmatch F
+GLIBC_2.30 rresvport F
+GLIBC_2.30 rresvport_af F
+GLIBC_2.30 rtime F
+GLIBC_2.30 ruserok F
+GLIBC_2.30 ruserok_af F
+GLIBC_2.30 ruserpass F
+GLIBC_2.30 sbrk F
+GLIBC_2.30 scalbn F
+GLIBC_2.30 scalbnf F
+GLIBC_2.30 scalbnl F
+GLIBC_2.30 scandir F
+GLIBC_2.30 scandir64 F
+GLIBC_2.30 scandirat F
+GLIBC_2.30 scandirat64 F
+GLIBC_2.30 scanf F
+GLIBC_2.30 sched_get_priority_max F
+GLIBC_2.30 sched_get_priority_min F
+GLIBC_2.30 sched_getaffinity F
+GLIBC_2.30 sched_getcpu F
+GLIBC_2.30 sched_getparam F
+GLIBC_2.30 sched_getscheduler F
+GLIBC_2.30 sched_rr_get_interval F
+GLIBC_2.30 sched_setaffinity F
+GLIBC_2.30 sched_setparam F
+GLIBC_2.30 sched_setscheduler F
+GLIBC_2.30 sched_yield F
+GLIBC_2.30 secure_getenv F
+GLIBC_2.30 seed48 F
+GLIBC_2.30 seed48_r F
+GLIBC_2.30 seekdir F
+GLIBC_2.30 select F
+GLIBC_2.30 semctl F
+GLIBC_2.30 semget F
+GLIBC_2.30 semop F
+GLIBC_2.30 semtimedop F
+GLIBC_2.30 send F
+GLIBC_2.30 sendfile F
+GLIBC_2.30 sendfile64 F
+GLIBC_2.30 sendmmsg F
+GLIBC_2.30 sendmsg F
+GLIBC_2.30 sendto F
+GLIBC_2.30 setaliasent F
+GLIBC_2.30 setbuf F
+GLIBC_2.30 setbuffer F
+GLIBC_2.30 setcontext F
+GLIBC_2.30 setdomainname F
+GLIBC_2.30 setegid F
+GLIBC_2.30 setenv F
+GLIBC_2.30 seteuid F
+GLIBC_2.30 setfsent F
+GLIBC_2.30 setfsgid F
+GLIBC_2.30 setfsuid F
+GLIBC_2.30 setgid F
+GLIBC_2.30 setgrent F
+GLIBC_2.30 setgroups F
+GLIBC_2.30 sethostent F
+GLIBC_2.30 sethostid F
+GLIBC_2.30 sethostname F
+GLIBC_2.30 setipv4sourcefilter F
+GLIBC_2.30 setitimer F
+GLIBC_2.30 setjmp F
+GLIBC_2.30 setlinebuf F
+GLIBC_2.30 setlocale F
+GLIBC_2.30 setlogin F
+GLIBC_2.30 setlogmask F
+GLIBC_2.30 setmntent F
+GLIBC_2.30 setnetent F
+GLIBC_2.30 setnetgrent F
+GLIBC_2.30 setns F
+GLIBC_2.30 setpgid F
+GLIBC_2.30 setpgrp F
+GLIBC_2.30 setpriority F
+GLIBC_2.30 setprotoent F
+GLIBC_2.30 setpwent F
+GLIBC_2.30 setregid F
+GLIBC_2.30 setresgid F
+GLIBC_2.30 setresuid F
+GLIBC_2.30 setreuid F
+GLIBC_2.30 setrlimit F
+GLIBC_2.30 setrlimit64 F
+GLIBC_2.30 setrpcent F
+GLIBC_2.30 setservent F
+GLIBC_2.30 setsgent F
+GLIBC_2.30 setsid F
+GLIBC_2.30 setsockopt F
+GLIBC_2.30 setsourcefilter F
+GLIBC_2.30 setspent F
+GLIBC_2.30 setstate F
+GLIBC_2.30 setstate_r F
+GLIBC_2.30 settimeofday F
+GLIBC_2.30 setttyent F
+GLIBC_2.30 setuid F
+GLIBC_2.30 setusershell F
+GLIBC_2.30 setutent F
+GLIBC_2.30 setutxent F
+GLIBC_2.30 setvbuf F
+GLIBC_2.30 setxattr F
+GLIBC_2.30 sgetsgent F
+GLIBC_2.30 sgetsgent_r F
+GLIBC_2.30 sgetspent F
+GLIBC_2.30 sgetspent_r F
+GLIBC_2.30 shmat F
+GLIBC_2.30 shmctl F
+GLIBC_2.30 shmdt F
+GLIBC_2.30 shmget F
+GLIBC_2.30 shutdown F
+GLIBC_2.30 sigaction F
+GLIBC_2.30 sigaddset F
+GLIBC_2.30 sigaltstack F
+GLIBC_2.30 sigandset F
+GLIBC_2.30 sigblock F
+GLIBC_2.30 sigdelset F
+GLIBC_2.30 sigemptyset F
+GLIBC_2.30 sigfillset F
+GLIBC_2.30 siggetmask F
+GLIBC_2.30 sighold F
+GLIBC_2.30 sigignore F
+GLIBC_2.30 siginterrupt F
+GLIBC_2.30 sigisemptyset F
+GLIBC_2.30 sigismember F
+GLIBC_2.30 siglongjmp F
+GLIBC_2.30 signal F
+GLIBC_2.30 signalfd F
+GLIBC_2.30 sigorset F
+GLIBC_2.30 sigpause F
+GLIBC_2.30 sigpending F
+GLIBC_2.30 sigprocmask F
+GLIBC_2.30 sigqueue F
+GLIBC_2.30 sigrelse F
+GLIBC_2.30 sigreturn F
+GLIBC_2.30 sigset F
+GLIBC_2.30 sigsetmask F
+GLIBC_2.30 sigstack F
+GLIBC_2.30 sigsuspend F
+GLIBC_2.30 sigtimedwait F
+GLIBC_2.30 sigwait F
+GLIBC_2.30 sigwaitinfo F
+GLIBC_2.30 sleep F
+GLIBC_2.30 snprintf F
+GLIBC_2.30 sockatmark F
+GLIBC_2.30 socket F
+GLIBC_2.30 socketpair F
+GLIBC_2.30 splice F
+GLIBC_2.30 sprintf F
+GLIBC_2.30 sprofil F
+GLIBC_2.30 srand F
+GLIBC_2.30 srand48 F
+GLIBC_2.30 srand48_r F
+GLIBC_2.30 srandom F
+GLIBC_2.30 srandom_r F
+GLIBC_2.30 sscanf F
+GLIBC_2.30 ssignal F
+GLIBC_2.30 sstk F
+GLIBC_2.30 statfs F
+GLIBC_2.30 statfs64 F
+GLIBC_2.30 statvfs F
+GLIBC_2.30 statvfs64 F
+GLIBC_2.30 statx F
+GLIBC_2.30 stderr D 0x4
+GLIBC_2.30 stdin D 0x4
+GLIBC_2.30 stdout D 0x4
+GLIBC_2.30 stime F
+GLIBC_2.30 stpcpy F
+GLIBC_2.30 stpncpy F
+GLIBC_2.30 strcasecmp F
+GLIBC_2.30 strcasecmp_l F
+GLIBC_2.30 strcasestr F
+GLIBC_2.30 strcat F
+GLIBC_2.30 strchr F
+GLIBC_2.30 strchrnul F
+GLIBC_2.30 strcmp F
+GLIBC_2.30 strcoll F
+GLIBC_2.30 strcoll_l F
+GLIBC_2.30 strcpy F
+GLIBC_2.30 strcspn F
+GLIBC_2.30 strdup F
+GLIBC_2.30 strerror F
+GLIBC_2.30 strerror_l F
+GLIBC_2.30 strerror_r F
+GLIBC_2.30 strfmon F
+GLIBC_2.30 strfmon_l F
+GLIBC_2.30 strfromd F
+GLIBC_2.30 strfromf F
+GLIBC_2.30 strfromf32 F
+GLIBC_2.30 strfromf32x F
+GLIBC_2.30 strfromf64 F
+GLIBC_2.30 strfroml F
+GLIBC_2.30 strfry F
+GLIBC_2.30 strftime F
+GLIBC_2.30 strftime_l F
+GLIBC_2.30 strlen F
+GLIBC_2.30 strncasecmp F
+GLIBC_2.30 strncasecmp_l F
+GLIBC_2.30 strncat F
+GLIBC_2.30 strncmp F
+GLIBC_2.30 strncpy F
+GLIBC_2.30 strndup F
+GLIBC_2.30 strnlen F
+GLIBC_2.30 strpbrk F
+GLIBC_2.30 strptime F
+GLIBC_2.30 strptime_l F
+GLIBC_2.30 strrchr F
+GLIBC_2.30 strsep F
+GLIBC_2.30 strsignal F
+GLIBC_2.30 strspn F
+GLIBC_2.30 strstr F
+GLIBC_2.30 strtod F
+GLIBC_2.30 strtod_l F
+GLIBC_2.30 strtof F
+GLIBC_2.30 strtof32 F
+GLIBC_2.30 strtof32_l F
+GLIBC_2.30 strtof32x F
+GLIBC_2.30 strtof32x_l F
+GLIBC_2.30 strtof64 F
+GLIBC_2.30 strtof64_l F
+GLIBC_2.30 strtof_l F
+GLIBC_2.30 strtoimax F
+GLIBC_2.30 strtok F
+GLIBC_2.30 strtok_r F
+GLIBC_2.30 strtol F
+GLIBC_2.30 strtol_l F
+GLIBC_2.30 strtold F
+GLIBC_2.30 strtold_l F
+GLIBC_2.30 strtoll F
+GLIBC_2.30 strtoll_l F
+GLIBC_2.30 strtoq F
+GLIBC_2.30 strtoul F
+GLIBC_2.30 strtoul_l F
+GLIBC_2.30 strtoull F
+GLIBC_2.30 strtoull_l F
+GLIBC_2.30 strtoumax F
+GLIBC_2.30 strtouq F
+GLIBC_2.30 strverscmp F
+GLIBC_2.30 strxfrm F
+GLIBC_2.30 strxfrm_l F
+GLIBC_2.30 stty F
+GLIBC_2.30 svc_exit F
+GLIBC_2.30 svc_fdset D 0x80
+GLIBC_2.30 svc_getreq F
+GLIBC_2.30 svc_getreq_common F
+GLIBC_2.30 svc_getreq_poll F
+GLIBC_2.30 svc_getreqset F
+GLIBC_2.30 svc_max_pollfd D 0x4
+GLIBC_2.30 svc_pollfd D 0x4
+GLIBC_2.30 svc_register F
+GLIBC_2.30 svc_run F
+GLIBC_2.30 svc_sendreply F
+GLIBC_2.30 svc_unregister F
+GLIBC_2.30 svcauthdes_stats D 0xc
+GLIBC_2.30 svcerr_auth F
+GLIBC_2.30 svcerr_decode F
+GLIBC_2.30 svcerr_noproc F
+GLIBC_2.30 svcerr_noprog F
+GLIBC_2.30 svcerr_progvers F
+GLIBC_2.30 svcerr_systemerr F
+GLIBC_2.30 svcerr_weakauth F
+GLIBC_2.30 svcfd_create F
+GLIBC_2.30 svcraw_create F
+GLIBC_2.30 svctcp_create F
+GLIBC_2.30 svcudp_bufcreate F
+GLIBC_2.30 svcudp_create F
+GLIBC_2.30 svcudp_enablecache F
+GLIBC_2.30 svcunix_create F
+GLIBC_2.30 svcunixfd_create F
+GLIBC_2.30 swab F
+GLIBC_2.30 swapcontext F
+GLIBC_2.30 swapoff F
+GLIBC_2.30 swapon F
+GLIBC_2.30 swprintf F
+GLIBC_2.30 swscanf F
+GLIBC_2.30 symlink F
+GLIBC_2.30 symlinkat F
+GLIBC_2.30 sync F
+GLIBC_2.30 sync_file_range F
+GLIBC_2.30 syncfs F
+GLIBC_2.30 sys_errlist D 0x21c
+GLIBC_2.30 sys_nerr D 0x4
+GLIBC_2.30 sys_sigabbrev D 0x104
+GLIBC_2.30 sys_siglist D 0x104
+GLIBC_2.30 syscall F
+GLIBC_2.30 sysconf F
+GLIBC_2.30 sysctl F
+GLIBC_2.30 sysinfo F
+GLIBC_2.30 syslog F
+GLIBC_2.30 system F
+GLIBC_2.30 sysv_signal F
+GLIBC_2.30 tcdrain F
+GLIBC_2.30 tcflow F
+GLIBC_2.30 tcflush F
+GLIBC_2.30 tcgetattr F
+GLIBC_2.30 tcgetpgrp F
+GLIBC_2.30 tcgetsid F
+GLIBC_2.30 tcsendbreak F
+GLIBC_2.30 tcsetattr F
+GLIBC_2.30 tcsetpgrp F
+GLIBC_2.30 tdelete F
+GLIBC_2.30 tdestroy F
+GLIBC_2.30 tee F
+GLIBC_2.30 telldir F
+GLIBC_2.30 tempnam F
+GLIBC_2.30 textdomain F
+GLIBC_2.30 tfind F
+GLIBC_2.30 tgkill F
+GLIBC_2.30 thrd_current F
+GLIBC_2.30 thrd_equal F
+GLIBC_2.30 thrd_sleep F
+GLIBC_2.30 thrd_yield F
+GLIBC_2.30 time F
+GLIBC_2.30 timegm F
+GLIBC_2.30 timelocal F
+GLIBC_2.30 timerfd_create F
+GLIBC_2.30 timerfd_gettime F
+GLIBC_2.30 timerfd_settime F
+GLIBC_2.30 times F
+GLIBC_2.30 timespec_get F
+GLIBC_2.30 timezone D 0x4
+GLIBC_2.30 tmpfile F
+GLIBC_2.30 tmpfile64 F
+GLIBC_2.30 tmpnam F
+GLIBC_2.30 tmpnam_r F
+GLIBC_2.30 toascii F
+GLIBC_2.30 tolower F
+GLIBC_2.30 tolower_l F
+GLIBC_2.30 toupper F
+GLIBC_2.30 toupper_l F
+GLIBC_2.30 towctrans F
+GLIBC_2.30 towctrans_l F
+GLIBC_2.30 towlower F
+GLIBC_2.30 towlower_l F
+GLIBC_2.30 towupper F
+GLIBC_2.30 towupper_l F
+GLIBC_2.30 tr_break F
+GLIBC_2.30 truncate F
+GLIBC_2.30 truncate64 F
+GLIBC_2.30 tsearch F
+GLIBC_2.30 ttyname F
+GLIBC_2.30 ttyname_r F
+GLIBC_2.30 ttyslot F
+GLIBC_2.30 twalk F
+GLIBC_2.30 twalk_r F
+GLIBC_2.30 tzname D 0x8
+GLIBC_2.30 tzset F
+GLIBC_2.30 ualarm F
+GLIBC_2.30 ulckpwdf F
+GLIBC_2.30 ulimit F
+GLIBC_2.30 umask F
+GLIBC_2.30 umount F
+GLIBC_2.30 umount2 F
+GLIBC_2.30 uname F
+GLIBC_2.30 ungetc F
+GLIBC_2.30 ungetwc F
+GLIBC_2.30 unlink F
+GLIBC_2.30 unlinkat F
+GLIBC_2.30 unlockpt F
+GLIBC_2.30 unsetenv F
+GLIBC_2.30 unshare F
+GLIBC_2.30 updwtmp F
+GLIBC_2.30 updwtmpx F
+GLIBC_2.30 uselocale F
+GLIBC_2.30 user2netname F
+GLIBC_2.30 usleep F
+GLIBC_2.30 utime F
+GLIBC_2.30 utimensat F
+GLIBC_2.30 utimes F
+GLIBC_2.30 utmpname F
+GLIBC_2.30 utmpxname F
+GLIBC_2.30 valloc F
+GLIBC_2.30 vasprintf F
+GLIBC_2.30 vdprintf F
+GLIBC_2.30 verr F
+GLIBC_2.30 verrx F
+GLIBC_2.30 versionsort F
+GLIBC_2.30 versionsort64 F
+GLIBC_2.30 vfork F
+GLIBC_2.30 vfprintf F
+GLIBC_2.30 vfscanf F
+GLIBC_2.30 vfwprintf F
+GLIBC_2.30 vfwscanf F
+GLIBC_2.30 vhangup F
+GLIBC_2.30 vlimit F
+GLIBC_2.30 vmsplice F
+GLIBC_2.30 vprintf F
+GLIBC_2.30 vscanf F
+GLIBC_2.30 vsnprintf F
+GLIBC_2.30 vsprintf F
+GLIBC_2.30 vsscanf F
+GLIBC_2.30 vswprintf F
+GLIBC_2.30 vswscanf F
+GLIBC_2.30 vsyslog F
+GLIBC_2.30 vtimes F
+GLIBC_2.30 vwarn F
+GLIBC_2.30 vwarnx F
+GLIBC_2.30 vwprintf F
+GLIBC_2.30 vwscanf F
+GLIBC_2.30 wait F
+GLIBC_2.30 wait3 F
+GLIBC_2.30 wait4 F
+GLIBC_2.30 waitid F
+GLIBC_2.30 waitpid F
+GLIBC_2.30 warn F
+GLIBC_2.30 warnx F
+GLIBC_2.30 wcpcpy F
+GLIBC_2.30 wcpncpy F
+GLIBC_2.30 wcrtomb F
+GLIBC_2.30 wcscasecmp F
+GLIBC_2.30 wcscasecmp_l F
+GLIBC_2.30 wcscat F
+GLIBC_2.30 wcschr F
+GLIBC_2.30 wcschrnul F
+GLIBC_2.30 wcscmp F
+GLIBC_2.30 wcscoll F
+GLIBC_2.30 wcscoll_l F
+GLIBC_2.30 wcscpy F
+GLIBC_2.30 wcscspn F
+GLIBC_2.30 wcsdup F
+GLIBC_2.30 wcsftime F
+GLIBC_2.30 wcsftime_l F
+GLIBC_2.30 wcslen F
+GLIBC_2.30 wcsncasecmp F
+GLIBC_2.30 wcsncasecmp_l F
+GLIBC_2.30 wcsncat F
+GLIBC_2.30 wcsncmp F
+GLIBC_2.30 wcsncpy F
+GLIBC_2.30 wcsnlen F
+GLIBC_2.30 wcsnrtombs F
+GLIBC_2.30 wcspbrk F
+GLIBC_2.30 wcsrchr F
+GLIBC_2.30 wcsrtombs F
+GLIBC_2.30 wcsspn F
+GLIBC_2.30 wcsstr F
+GLIBC_2.30 wcstod F
+GLIBC_2.30 wcstod_l F
+GLIBC_2.30 wcstof F
+GLIBC_2.30 wcstof32 F
+GLIBC_2.30 wcstof32_l F
+GLIBC_2.30 wcstof32x F
+GLIBC_2.30 wcstof32x_l F
+GLIBC_2.30 wcstof64 F
+GLIBC_2.30 wcstof64_l F
+GLIBC_2.30 wcstof_l F
+GLIBC_2.30 wcstoimax F
+GLIBC_2.30 wcstok F
+GLIBC_2.30 wcstol F
+GLIBC_2.30 wcstol_l F
+GLIBC_2.30 wcstold F
+GLIBC_2.30 wcstold_l F
+GLIBC_2.30 wcstoll F
+GLIBC_2.30 wcstoll_l F
+GLIBC_2.30 wcstombs F
+GLIBC_2.30 wcstoq F
+GLIBC_2.30 wcstoul F
+GLIBC_2.30 wcstoul_l F
+GLIBC_2.30 wcstoull F
+GLIBC_2.30 wcstoull_l F
+GLIBC_2.30 wcstoumax F
+GLIBC_2.30 wcstouq F
+GLIBC_2.30 wcswcs F
+GLIBC_2.30 wcswidth F
+GLIBC_2.30 wcsxfrm F
+GLIBC_2.30 wcsxfrm_l F
+GLIBC_2.30 wctob F
+GLIBC_2.30 wctomb F
+GLIBC_2.30 wctrans F
+GLIBC_2.30 wctrans_l F
+GLIBC_2.30 wctype F
+GLIBC_2.30 wctype_l F
+GLIBC_2.30 wcwidth F
+GLIBC_2.30 wmemchr F
+GLIBC_2.30 wmemcmp F
+GLIBC_2.30 wmemcpy F
+GLIBC_2.30 wmemmove F
+GLIBC_2.30 wmempcpy F
+GLIBC_2.30 wmemset F
+GLIBC_2.30 wordexp F
+GLIBC_2.30 wordfree F
+GLIBC_2.30 wprintf F
+GLIBC_2.30 write F
+GLIBC_2.30 writev F
+GLIBC_2.30 wscanf F
+GLIBC_2.30 xdecrypt F
+GLIBC_2.30 xdr_accepted_reply F
+GLIBC_2.30 xdr_array F
+GLIBC_2.30 xdr_authdes_cred F
+GLIBC_2.30 xdr_authdes_verf F
+GLIBC_2.30 xdr_authunix_parms F
+GLIBC_2.30 xdr_bool F
+GLIBC_2.30 xdr_bytes F
+GLIBC_2.30 xdr_callhdr F
+GLIBC_2.30 xdr_callmsg F
+GLIBC_2.30 xdr_char F
+GLIBC_2.30 xdr_cryptkeyarg F
+GLIBC_2.30 xdr_cryptkeyarg2 F
+GLIBC_2.30 xdr_cryptkeyres F
+GLIBC_2.30 xdr_des_block F
+GLIBC_2.30 xdr_double F
+GLIBC_2.30 xdr_enum F
+GLIBC_2.30 xdr_float F
+GLIBC_2.30 xdr_free F
+GLIBC_2.30 xdr_getcredres F
+GLIBC_2.30 xdr_hyper F
+GLIBC_2.30 xdr_int F
+GLIBC_2.30 xdr_int16_t F
+GLIBC_2.30 xdr_int32_t F
+GLIBC_2.30 xdr_int64_t F
+GLIBC_2.30 xdr_int8_t F
+GLIBC_2.30 xdr_key_netstarg F
+GLIBC_2.30 xdr_key_netstres F
+GLIBC_2.30 xdr_keybuf F
+GLIBC_2.30 xdr_keystatus F
+GLIBC_2.30 xdr_long F
+GLIBC_2.30 xdr_longlong_t F
+GLIBC_2.30 xdr_netnamestr F
+GLIBC_2.30 xdr_netobj F
+GLIBC_2.30 xdr_opaque F
+GLIBC_2.30 xdr_opaque_auth F
+GLIBC_2.30 xdr_pmap F
+GLIBC_2.30 xdr_pmaplist F
+GLIBC_2.30 xdr_pointer F
+GLIBC_2.30 xdr_quad_t F
+GLIBC_2.30 xdr_reference F
+GLIBC_2.30 xdr_rejected_reply F
+GLIBC_2.30 xdr_replymsg F
+GLIBC_2.30 xdr_rmtcall_args F
+GLIBC_2.30 xdr_rmtcallres F
+GLIBC_2.30 xdr_short F
+GLIBC_2.30 xdr_sizeof F
+GLIBC_2.30 xdr_string F
+GLIBC_2.30 xdr_u_char F
+GLIBC_2.30 xdr_u_hyper F
+GLIBC_2.30 xdr_u_int F
+GLIBC_2.30 xdr_u_long F
+GLIBC_2.30 xdr_u_longlong_t F
+GLIBC_2.30 xdr_u_quad_t F
+GLIBC_2.30 xdr_u_short F
+GLIBC_2.30 xdr_uint16_t F
+GLIBC_2.30 xdr_uint32_t F
+GLIBC_2.30 xdr_uint64_t F
+GLIBC_2.30 xdr_uint8_t F
+GLIBC_2.30 xdr_union F
+GLIBC_2.30 xdr_unixcred F
+GLIBC_2.30 xdr_vector F
+GLIBC_2.30 xdr_void F
+GLIBC_2.30 xdr_wrapstring F
+GLIBC_2.30 xdrmem_create F
+GLIBC_2.30 xdrrec_create F
+GLIBC_2.30 xdrrec_endofrecord F
+GLIBC_2.30 xdrrec_eof F
+GLIBC_2.30 xdrrec_skiprecord F
+GLIBC_2.30 xdrstdio_create F
+GLIBC_2.30 xencrypt F
+GLIBC_2.30 xprt_register F
+GLIBC_2.30 xprt_unregister F
diff --git a/sysdeps/unix/sysv/linux/arc/libcrypt.abilist b/sysdeps/unix/sysv/linux/arc/libcrypt.abilist
new file mode 100644
index 0000000000..8d83578d8c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libcrypt.abilist
@@ -0,0 +1,2 @@
+GLIBC_2.30 crypt F
+GLIBC_2.30 crypt_r F
diff --git a/sysdeps/unix/sysv/linux/arc/libdl.abilist b/sysdeps/unix/sysv/linux/arc/libdl.abilist
new file mode 100644
index 0000000000..3fc6d95b85
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libdl.abilist
@@ -0,0 +1,9 @@
+GLIBC_2.30 dladdr F
+GLIBC_2.30 dladdr1 F
+GLIBC_2.30 dlclose F
+GLIBC_2.30 dlerror F
+GLIBC_2.30 dlinfo F
+GLIBC_2.30 dlmopen F
+GLIBC_2.30 dlopen F
+GLIBC_2.30 dlsym F
+GLIBC_2.30 dlvsym F
diff --git a/sysdeps/unix/sysv/linux/arc/libm.abilist b/sysdeps/unix/sysv/linux/arc/libm.abilist
new file mode 100644
index 0000000000..43f3a97e6f
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libm.abilist
@@ -0,0 +1,753 @@
+GLIBC_2.30 __acos_finite F
+GLIBC_2.30 __acosf_finite F
+GLIBC_2.30 __acosh_finite F
+GLIBC_2.30 __acoshf_finite F
+GLIBC_2.30 __asin_finite F
+GLIBC_2.30 __asinf_finite F
+GLIBC_2.30 __atan2_finite F
+GLIBC_2.30 __atan2f_finite F
+GLIBC_2.30 __atanh_finite F
+GLIBC_2.30 __atanhf_finite F
+GLIBC_2.30 __clog10 F
+GLIBC_2.30 __clog10f F
+GLIBC_2.30 __clog10l F
+GLIBC_2.30 __cosh_finite F
+GLIBC_2.30 __coshf_finite F
+GLIBC_2.30 __exp10_finite F
+GLIBC_2.30 __exp10f_finite F
+GLIBC_2.30 __exp2_finite F
+GLIBC_2.30 __exp2f_finite F
+GLIBC_2.30 __exp_finite F
+GLIBC_2.30 __expf_finite F
+GLIBC_2.30 __finite F
+GLIBC_2.30 __finitef F
+GLIBC_2.30 __fmod_finite F
+GLIBC_2.30 __fmodf_finite F
+GLIBC_2.30 __fpclassify F
+GLIBC_2.30 __fpclassifyf F
+GLIBC_2.30 __gamma_r_finite F
+GLIBC_2.30 __gammaf_r_finite F
+GLIBC_2.30 __hypot_finite F
+GLIBC_2.30 __hypotf_finite F
+GLIBC_2.30 __iseqsig F
+GLIBC_2.30 __iseqsigf F
+GLIBC_2.30 __issignaling F
+GLIBC_2.30 __issignalingf F
+GLIBC_2.30 __j0_finite F
+GLIBC_2.30 __j0f_finite F
+GLIBC_2.30 __j1_finite F
+GLIBC_2.30 __j1f_finite F
+GLIBC_2.30 __jn_finite F
+GLIBC_2.30 __jnf_finite F
+GLIBC_2.30 __lgamma_r_finite F
+GLIBC_2.30 __lgammaf_r_finite F
+GLIBC_2.30 __log10_finite F
+GLIBC_2.30 __log10f_finite F
+GLIBC_2.30 __log2_finite F
+GLIBC_2.30 __log2f_finite F
+GLIBC_2.30 __log_finite F
+GLIBC_2.30 __logf_finite F
+GLIBC_2.30 __pow_finite F
+GLIBC_2.30 __powf_finite F
+GLIBC_2.30 __remainder_finite F
+GLIBC_2.30 __remainderf_finite F
+GLIBC_2.30 __scalb_finite F
+GLIBC_2.30 __scalbf_finite F
+GLIBC_2.30 __signbit F
+GLIBC_2.30 __signbitf F
+GLIBC_2.30 __signgam D 0x4
+GLIBC_2.30 __sinh_finite F
+GLIBC_2.30 __sinhf_finite F
+GLIBC_2.30 __sqrt_finite F
+GLIBC_2.30 __sqrtf_finite F
+GLIBC_2.30 __y0_finite F
+GLIBC_2.30 __y0f_finite F
+GLIBC_2.30 __y1_finite F
+GLIBC_2.30 __y1f_finite F
+GLIBC_2.30 __yn_finite F
+GLIBC_2.30 __ynf_finite F
+GLIBC_2.30 acos F
+GLIBC_2.30 acosf F
+GLIBC_2.30 acosf32 F
+GLIBC_2.30 acosf32x F
+GLIBC_2.30 acosf64 F
+GLIBC_2.30 acosh F
+GLIBC_2.30 acoshf F
+GLIBC_2.30 acoshf32 F
+GLIBC_2.30 acoshf32x F
+GLIBC_2.30 acoshf64 F
+GLIBC_2.30 acoshl F
+GLIBC_2.30 acosl F
+GLIBC_2.30 asin F
+GLIBC_2.30 asinf F
+GLIBC_2.30 asinf32 F
+GLIBC_2.30 asinf32x F
+GLIBC_2.30 asinf64 F
+GLIBC_2.30 asinh F
+GLIBC_2.30 asinhf F
+GLIBC_2.30 asinhf32 F
+GLIBC_2.30 asinhf32x F
+GLIBC_2.30 asinhf64 F
+GLIBC_2.30 asinhl F
+GLIBC_2.30 asinl F
+GLIBC_2.30 atan F
+GLIBC_2.30 atan2 F
+GLIBC_2.30 atan2f F
+GLIBC_2.30 atan2f32 F
+GLIBC_2.30 atan2f32x F
+GLIBC_2.30 atan2f64 F
+GLIBC_2.30 atan2l F
+GLIBC_2.30 atanf F
+GLIBC_2.30 atanf32 F
+GLIBC_2.30 atanf32x F
+GLIBC_2.30 atanf64 F
+GLIBC_2.30 atanh F
+GLIBC_2.30 atanhf F
+GLIBC_2.30 atanhf32 F
+GLIBC_2.30 atanhf32x F
+GLIBC_2.30 atanhf64 F
+GLIBC_2.30 atanhl F
+GLIBC_2.30 atanl F
+GLIBC_2.30 cabs F
+GLIBC_2.30 cabsf F
+GLIBC_2.30 cabsf32 F
+GLIBC_2.30 cabsf32x F
+GLIBC_2.30 cabsf64 F
+GLIBC_2.30 cabsl F
+GLIBC_2.30 cacos F
+GLIBC_2.30 cacosf F
+GLIBC_2.30 cacosf32 F
+GLIBC_2.30 cacosf32x F
+GLIBC_2.30 cacosf64 F
+GLIBC_2.30 cacosh F
+GLIBC_2.30 cacoshf F
+GLIBC_2.30 cacoshf32 F
+GLIBC_2.30 cacoshf32x F
+GLIBC_2.30 cacoshf64 F
+GLIBC_2.30 cacoshl F
+GLIBC_2.30 cacosl F
+GLIBC_2.30 canonicalize F
+GLIBC_2.30 canonicalizef F
+GLIBC_2.30 canonicalizef32 F
+GLIBC_2.30 canonicalizef32x F
+GLIBC_2.30 canonicalizef64 F
+GLIBC_2.30 canonicalizel F
+GLIBC_2.30 carg F
+GLIBC_2.30 cargf F
+GLIBC_2.30 cargf32 F
+GLIBC_2.30 cargf32x F
+GLIBC_2.30 cargf64 F
+GLIBC_2.30 cargl F
+GLIBC_2.30 casin F
+GLIBC_2.30 casinf F
+GLIBC_2.30 casinf32 F
+GLIBC_2.30 casinf32x F
+GLIBC_2.30 casinf64 F
+GLIBC_2.30 casinh F
+GLIBC_2.30 casinhf F
+GLIBC_2.30 casinhf32 F
+GLIBC_2.30 casinhf32x F
+GLIBC_2.30 casinhf64 F
+GLIBC_2.30 casinhl F
+GLIBC_2.30 casinl F
+GLIBC_2.30 catan F
+GLIBC_2.30 catanf F
+GLIBC_2.30 catanf32 F
+GLIBC_2.30 catanf32x F
+GLIBC_2.30 catanf64 F
+GLIBC_2.30 catanh F
+GLIBC_2.30 catanhf F
+GLIBC_2.30 catanhf32 F
+GLIBC_2.30 catanhf32x F
+GLIBC_2.30 catanhf64 F
+GLIBC_2.30 catanhl F
+GLIBC_2.30 catanl F
+GLIBC_2.30 cbrt F
+GLIBC_2.30 cbrtf F
+GLIBC_2.30 cbrtf32 F
+GLIBC_2.30 cbrtf32x F
+GLIBC_2.30 cbrtf64 F
+GLIBC_2.30 cbrtl F
+GLIBC_2.30 ccos F
+GLIBC_2.30 ccosf F
+GLIBC_2.30 ccosf32 F
+GLIBC_2.30 ccosf32x F
+GLIBC_2.30 ccosf64 F
+GLIBC_2.30 ccosh F
+GLIBC_2.30 ccoshf F
+GLIBC_2.30 ccoshf32 F
+GLIBC_2.30 ccoshf32x F
+GLIBC_2.30 ccoshf64 F
+GLIBC_2.30 ccoshl F
+GLIBC_2.30 ccosl F
+GLIBC_2.30 ceil F
+GLIBC_2.30 ceilf F
+GLIBC_2.30 ceilf32 F
+GLIBC_2.30 ceilf32x F
+GLIBC_2.30 ceilf64 F
+GLIBC_2.30 ceill F
+GLIBC_2.30 cexp F
+GLIBC_2.30 cexpf F
+GLIBC_2.30 cexpf32 F
+GLIBC_2.30 cexpf32x F
+GLIBC_2.30 cexpf64 F
+GLIBC_2.30 cexpl F
+GLIBC_2.30 cimag F
+GLIBC_2.30 cimagf F
+GLIBC_2.30 cimagf32 F
+GLIBC_2.30 cimagf32x F
+GLIBC_2.30 cimagf64 F
+GLIBC_2.30 cimagl F
+GLIBC_2.30 clog F
+GLIBC_2.30 clog10 F
+GLIBC_2.30 clog10f F
+GLIBC_2.30 clog10f32 F
+GLIBC_2.30 clog10f32x F
+GLIBC_2.30 clog10f64 F
+GLIBC_2.30 clog10l F
+GLIBC_2.30 clogf F
+GLIBC_2.30 clogf32 F
+GLIBC_2.30 clogf32x F
+GLIBC_2.30 clogf64 F
+GLIBC_2.30 clogl F
+GLIBC_2.30 conj F
+GLIBC_2.30 conjf F
+GLIBC_2.30 conjf32 F
+GLIBC_2.30 conjf32x F
+GLIBC_2.30 conjf64 F
+GLIBC_2.30 conjl F
+GLIBC_2.30 copysign F
+GLIBC_2.30 copysignf F
+GLIBC_2.30 copysignf32 F
+GLIBC_2.30 copysignf32x F
+GLIBC_2.30 copysignf64 F
+GLIBC_2.30 copysignl F
+GLIBC_2.30 cos F
+GLIBC_2.30 cosf F
+GLIBC_2.30 cosf32 F
+GLIBC_2.30 cosf32x F
+GLIBC_2.30 cosf64 F
+GLIBC_2.30 cosh F
+GLIBC_2.30 coshf F
+GLIBC_2.30 coshf32 F
+GLIBC_2.30 coshf32x F
+GLIBC_2.30 coshf64 F
+GLIBC_2.30 coshl F
+GLIBC_2.30 cosl F
+GLIBC_2.30 cpow F
+GLIBC_2.30 cpowf F
+GLIBC_2.30 cpowf32 F
+GLIBC_2.30 cpowf32x F
+GLIBC_2.30 cpowf64 F
+GLIBC_2.30 cpowl F
+GLIBC_2.30 cproj F
+GLIBC_2.30 cprojf F
+GLIBC_2.30 cprojf32 F
+GLIBC_2.30 cprojf32x F
+GLIBC_2.30 cprojf64 F
+GLIBC_2.30 cprojl F
+GLIBC_2.30 creal F
+GLIBC_2.30 crealf F
+GLIBC_2.30 crealf32 F
+GLIBC_2.30 crealf32x F
+GLIBC_2.30 crealf64 F
+GLIBC_2.30 creall F
+GLIBC_2.30 csin F
+GLIBC_2.30 csinf F
+GLIBC_2.30 csinf32 F
+GLIBC_2.30 csinf32x F
+GLIBC_2.30 csinf64 F
+GLIBC_2.30 csinh F
+GLIBC_2.30 csinhf F
+GLIBC_2.30 csinhf32 F
+GLIBC_2.30 csinhf32x F
+GLIBC_2.30 csinhf64 F
+GLIBC_2.30 csinhl F
+GLIBC_2.30 csinl F
+GLIBC_2.30 csqrt F
+GLIBC_2.30 csqrtf F
+GLIBC_2.30 csqrtf32 F
+GLIBC_2.30 csqrtf32x F
+GLIBC_2.30 csqrtf64 F
+GLIBC_2.30 csqrtl F
+GLIBC_2.30 ctan F
+GLIBC_2.30 ctanf F
+GLIBC_2.30 ctanf32 F
+GLIBC_2.30 ctanf32x F
+GLIBC_2.30 ctanf64 F
+GLIBC_2.30 ctanh F
+GLIBC_2.30 ctanhf F
+GLIBC_2.30 ctanhf32 F
+GLIBC_2.30 ctanhf32x F
+GLIBC_2.30 ctanhf64 F
+GLIBC_2.30 ctanhl F
+GLIBC_2.30 ctanl F
+GLIBC_2.30 daddl F
+GLIBC_2.30 ddivl F
+GLIBC_2.30 dmull F
+GLIBC_2.30 drem F
+GLIBC_2.30 dremf F
+GLIBC_2.30 dreml F
+GLIBC_2.30 dsubl F
+GLIBC_2.30 erf F
+GLIBC_2.30 erfc F
+GLIBC_2.30 erfcf F
+GLIBC_2.30 erfcf32 F
+GLIBC_2.30 erfcf32x F
+GLIBC_2.30 erfcf64 F
+GLIBC_2.30 erfcl F
+GLIBC_2.30 erff F
+GLIBC_2.30 erff32 F
+GLIBC_2.30 erff32x F
+GLIBC_2.30 erff64 F
+GLIBC_2.30 erfl F
+GLIBC_2.30 exp F
+GLIBC_2.30 exp10 F
+GLIBC_2.30 exp10f F
+GLIBC_2.30 exp10f32 F
+GLIBC_2.30 exp10f32x F
+GLIBC_2.30 exp10f64 F
+GLIBC_2.30 exp10l F
+GLIBC_2.30 exp2 F
+GLIBC_2.30 exp2f F
+GLIBC_2.30 exp2f32 F
+GLIBC_2.30 exp2f32x F
+GLIBC_2.30 exp2f64 F
+GLIBC_2.30 exp2l F
+GLIBC_2.30 expf F
+GLIBC_2.30 expf32 F
+GLIBC_2.30 expf32x F
+GLIBC_2.30 expf64 F
+GLIBC_2.30 expl F
+GLIBC_2.30 expm1 F
+GLIBC_2.30 expm1f F
+GLIBC_2.30 expm1f32 F
+GLIBC_2.30 expm1f32x F
+GLIBC_2.30 expm1f64 F
+GLIBC_2.30 expm1l F
+GLIBC_2.30 f32addf32x F
+GLIBC_2.30 f32addf64 F
+GLIBC_2.30 f32divf32x F
+GLIBC_2.30 f32divf64 F
+GLIBC_2.30 f32mulf32x F
+GLIBC_2.30 f32mulf64 F
+GLIBC_2.30 f32subf32x F
+GLIBC_2.30 f32subf64 F
+GLIBC_2.30 f32xaddf64 F
+GLIBC_2.30 f32xdivf64 F
+GLIBC_2.30 f32xmulf64 F
+GLIBC_2.30 f32xsubf64 F
+GLIBC_2.30 fabs F
+GLIBC_2.30 fabsf F
+GLIBC_2.30 fabsf32 F
+GLIBC_2.30 fabsf32x F
+GLIBC_2.30 fabsf64 F
+GLIBC_2.30 fabsl F
+GLIBC_2.30 fadd F
+GLIBC_2.30 faddl F
+GLIBC_2.30 fdim F
+GLIBC_2.30 fdimf F
+GLIBC_2.30 fdimf32 F
+GLIBC_2.30 fdimf32x F
+GLIBC_2.30 fdimf64 F
+GLIBC_2.30 fdiml F
+GLIBC_2.30 fdiv F
+GLIBC_2.30 fdivl F
+GLIBC_2.30 feclearexcept F
+GLIBC_2.30 fedisableexcept F
+GLIBC_2.30 feenableexcept F
+GLIBC_2.30 fegetenv F
+GLIBC_2.30 fegetexcept F
+GLIBC_2.30 fegetexceptflag F
+GLIBC_2.30 fegetmode F
+GLIBC_2.30 fegetround F
+GLIBC_2.30 feholdexcept F
+GLIBC_2.30 feraiseexcept F
+GLIBC_2.30 fesetenv F
+GLIBC_2.30 fesetexcept F
+GLIBC_2.30 fesetexceptflag F
+GLIBC_2.30 fesetmode F
+GLIBC_2.30 fesetround F
+GLIBC_2.30 fetestexcept F
+GLIBC_2.30 fetestexceptflag F
+GLIBC_2.30 feupdateenv F
+GLIBC_2.30 finite F
+GLIBC_2.30 finitef F
+GLIBC_2.30 finitel F
+GLIBC_2.30 floor F
+GLIBC_2.30 floorf F
+GLIBC_2.30 floorf32 F
+GLIBC_2.30 floorf32x F
+GLIBC_2.30 floorf64 F
+GLIBC_2.30 floorl F
+GLIBC_2.30 fma F
+GLIBC_2.30 fmaf F
+GLIBC_2.30 fmaf32 F
+GLIBC_2.30 fmaf32x F
+GLIBC_2.30 fmaf64 F
+GLIBC_2.30 fmal F
+GLIBC_2.30 fmax F
+GLIBC_2.30 fmaxf F
+GLIBC_2.30 fmaxf32 F
+GLIBC_2.30 fmaxf32x F
+GLIBC_2.30 fmaxf64 F
+GLIBC_2.30 fmaxl F
+GLIBC_2.30 fmaxmag F
+GLIBC_2.30 fmaxmagf F
+GLIBC_2.30 fmaxmagf32 F
+GLIBC_2.30 fmaxmagf32x F
+GLIBC_2.30 fmaxmagf64 F
+GLIBC_2.30 fmaxmagl F
+GLIBC_2.30 fmin F
+GLIBC_2.30 fminf F
+GLIBC_2.30 fminf32 F
+GLIBC_2.30 fminf32x F
+GLIBC_2.30 fminf64 F
+GLIBC_2.30 fminl F
+GLIBC_2.30 fminmag F
+GLIBC_2.30 fminmagf F
+GLIBC_2.30 fminmagf32 F
+GLIBC_2.30 fminmagf32x F
+GLIBC_2.30 fminmagf64 F
+GLIBC_2.30 fminmagl F
+GLIBC_2.30 fmod F
+GLIBC_2.30 fmodf F
+GLIBC_2.30 fmodf32 F
+GLIBC_2.30 fmodf32x F
+GLIBC_2.30 fmodf64 F
+GLIBC_2.30 fmodl F
+GLIBC_2.30 fmul F
+GLIBC_2.30 fmull F
+GLIBC_2.30 frexp F
+GLIBC_2.30 frexpf F
+GLIBC_2.30 frexpf32 F
+GLIBC_2.30 frexpf32x F
+GLIBC_2.30 frexpf64 F
+GLIBC_2.30 frexpl F
+GLIBC_2.30 fromfp F
+GLIBC_2.30 fromfpf F
+GLIBC_2.30 fromfpf32 F
+GLIBC_2.30 fromfpf32x F
+GLIBC_2.30 fromfpf64 F
+GLIBC_2.30 fromfpl F
+GLIBC_2.30 fromfpx F
+GLIBC_2.30 fromfpxf F
+GLIBC_2.30 fromfpxf32 F
+GLIBC_2.30 fromfpxf32x F
+GLIBC_2.30 fromfpxf64 F
+GLIBC_2.30 fromfpxl F
+GLIBC_2.30 fsub F
+GLIBC_2.30 fsubl F
+GLIBC_2.30 gamma F
+GLIBC_2.30 gammaf F
+GLIBC_2.30 gammal F
+GLIBC_2.30 getpayload F
+GLIBC_2.30 getpayloadf F
+GLIBC_2.30 getpayloadf32 F
+GLIBC_2.30 getpayloadf32x F
+GLIBC_2.30 getpayloadf64 F
+GLIBC_2.30 getpayloadl F
+GLIBC_2.30 hypot F
+GLIBC_2.30 hypotf F
+GLIBC_2.30 hypotf32 F
+GLIBC_2.30 hypotf32x F
+GLIBC_2.30 hypotf64 F
+GLIBC_2.30 hypotl F
+GLIBC_2.30 ilogb F
+GLIBC_2.30 ilogbf F
+GLIBC_2.30 ilogbf32 F
+GLIBC_2.30 ilogbf32x F
+GLIBC_2.30 ilogbf64 F
+GLIBC_2.30 ilogbl F
+GLIBC_2.30 j0 F
+GLIBC_2.30 j0f F
+GLIBC_2.30 j0f32 F
+GLIBC_2.30 j0f32x F
+GLIBC_2.30 j0f64 F
+GLIBC_2.30 j0l F
+GLIBC_2.30 j1 F
+GLIBC_2.30 j1f F
+GLIBC_2.30 j1f32 F
+GLIBC_2.30 j1f32x F
+GLIBC_2.30 j1f64 F
+GLIBC_2.30 j1l F
+GLIBC_2.30 jn F
+GLIBC_2.30 jnf F
+GLIBC_2.30 jnf32 F
+GLIBC_2.30 jnf32x F
+GLIBC_2.30 jnf64 F
+GLIBC_2.30 jnl F
+GLIBC_2.30 ldexp F
+GLIBC_2.30 ldexpf F
+GLIBC_2.30 ldexpf32 F
+GLIBC_2.30 ldexpf32x F
+GLIBC_2.30 ldexpf64 F
+GLIBC_2.30 ldexpl F
+GLIBC_2.30 lgamma F
+GLIBC_2.30 lgamma_r F
+GLIBC_2.30 lgammaf F
+GLIBC_2.30 lgammaf32 F
+GLIBC_2.30 lgammaf32_r F
+GLIBC_2.30 lgammaf32x F
+GLIBC_2.30 lgammaf32x_r F
+GLIBC_2.30 lgammaf64 F
+GLIBC_2.30 lgammaf64_r F
+GLIBC_2.30 lgammaf_r F
+GLIBC_2.30 lgammal F
+GLIBC_2.30 lgammal_r F
+GLIBC_2.30 llogb F
+GLIBC_2.30 llogbf F
+GLIBC_2.30 llogbf32 F
+GLIBC_2.30 llogbf32x F
+GLIBC_2.30 llogbf64 F
+GLIBC_2.30 llogbl F
+GLIBC_2.30 llrint F
+GLIBC_2.30 llrintf F
+GLIBC_2.30 llrintf32 F
+GLIBC_2.30 llrintf32x F
+GLIBC_2.30 llrintf64 F
+GLIBC_2.30 llrintl F
+GLIBC_2.30 llround F
+GLIBC_2.30 llroundf F
+GLIBC_2.30 llroundf32 F
+GLIBC_2.30 llroundf32x F
+GLIBC_2.30 llroundf64 F
+GLIBC_2.30 llroundl F
+GLIBC_2.30 log F
+GLIBC_2.30 log10 F
+GLIBC_2.30 log10f F
+GLIBC_2.30 log10f32 F
+GLIBC_2.30 log10f32x F
+GLIBC_2.30 log10f64 F
+GLIBC_2.30 log10l F
+GLIBC_2.30 log1p F
+GLIBC_2.30 log1pf F
+GLIBC_2.30 log1pf32 F
+GLIBC_2.30 log1pf32x F
+GLIBC_2.30 log1pf64 F
+GLIBC_2.30 log1pl F
+GLIBC_2.30 log2 F
+GLIBC_2.30 log2f F
+GLIBC_2.30 log2f32 F
+GLIBC_2.30 log2f32x F
+GLIBC_2.30 log2f64 F
+GLIBC_2.30 log2l F
+GLIBC_2.30 logb F
+GLIBC_2.30 logbf F
+GLIBC_2.30 logbf32 F
+GLIBC_2.30 logbf32x F
+GLIBC_2.30 logbf64 F
+GLIBC_2.30 logbl F
+GLIBC_2.30 logf F
+GLIBC_2.30 logf32 F
+GLIBC_2.30 logf32x F
+GLIBC_2.30 logf64 F
+GLIBC_2.30 logl F
+GLIBC_2.30 lrint F
+GLIBC_2.30 lrintf F
+GLIBC_2.30 lrintf32 F
+GLIBC_2.30 lrintf32x F
+GLIBC_2.30 lrintf64 F
+GLIBC_2.30 lrintl F
+GLIBC_2.30 lround F
+GLIBC_2.30 lroundf F
+GLIBC_2.30 lroundf32 F
+GLIBC_2.30 lroundf32x F
+GLIBC_2.30 lroundf64 F
+GLIBC_2.30 lroundl F
+GLIBC_2.30 modf F
+GLIBC_2.30 modff F
+GLIBC_2.30 modff32 F
+GLIBC_2.30 modff32x F
+GLIBC_2.30 modff64 F
+GLIBC_2.30 modfl F
+GLIBC_2.30 nan F
+GLIBC_2.30 nanf F
+GLIBC_2.30 nanf32 F
+GLIBC_2.30 nanf32x F
+GLIBC_2.30 nanf64 F
+GLIBC_2.30 nanl F
+GLIBC_2.30 nearbyint F
+GLIBC_2.30 nearbyintf F
+GLIBC_2.30 nearbyintf32 F
+GLIBC_2.30 nearbyintf32x F
+GLIBC_2.30 nearbyintf64 F
+GLIBC_2.30 nearbyintl F
+GLIBC_2.30 nextafter F
+GLIBC_2.30 nextafterf F
+GLIBC_2.30 nextafterf32 F
+GLIBC_2.30 nextafterf32x F
+GLIBC_2.30 nextafterf64 F
+GLIBC_2.30 nextafterl F
+GLIBC_2.30 nextdown F
+GLIBC_2.30 nextdownf F
+GLIBC_2.30 nextdownf32 F
+GLIBC_2.30 nextdownf32x F
+GLIBC_2.30 nextdownf64 F
+GLIBC_2.30 nextdownl F
+GLIBC_2.30 nexttoward F
+GLIBC_2.30 nexttowardf F
+GLIBC_2.30 nexttowardl F
+GLIBC_2.30 nextup F
+GLIBC_2.30 nextupf F
+GLIBC_2.30 nextupf32 F
+GLIBC_2.30 nextupf32x F
+GLIBC_2.30 nextupf64 F
+GLIBC_2.30 nextupl F
+GLIBC_2.30 pow F
+GLIBC_2.30 powf F
+GLIBC_2.30 powf32 F
+GLIBC_2.30 powf32x F
+GLIBC_2.30 powf64 F
+GLIBC_2.30 powl F
+GLIBC_2.30 remainder F
+GLIBC_2.30 remainderf F
+GLIBC_2.30 remainderf32 F
+GLIBC_2.30 remainderf32x F
+GLIBC_2.30 remainderf64 F
+GLIBC_2.30 remainderl F
+GLIBC_2.30 remquo F
+GLIBC_2.30 remquof F
+GLIBC_2.30 remquof32 F
+GLIBC_2.30 remquof32x F
+GLIBC_2.30 remquof64 F
+GLIBC_2.30 remquol F
+GLIBC_2.30 rint F
+GLIBC_2.30 rintf F
+GLIBC_2.30 rintf32 F
+GLIBC_2.30 rintf32x F
+GLIBC_2.30 rintf64 F
+GLIBC_2.30 rintl F
+GLIBC_2.30 round F
+GLIBC_2.30 roundeven F
+GLIBC_2.30 roundevenf F
+GLIBC_2.30 roundevenf32 F
+GLIBC_2.30 roundevenf32x F
+GLIBC_2.30 roundevenf64 F
+GLIBC_2.30 roundevenl F
+GLIBC_2.30 roundf F
+GLIBC_2.30 roundf32 F
+GLIBC_2.30 roundf32x F
+GLIBC_2.30 roundf64 F
+GLIBC_2.30 roundl F
+GLIBC_2.30 scalb F
+GLIBC_2.30 scalbf F
+GLIBC_2.30 scalbl F
+GLIBC_2.30 scalbln F
+GLIBC_2.30 scalblnf F
+GLIBC_2.30 scalblnf32 F
+GLIBC_2.30 scalblnf32x F
+GLIBC_2.30 scalblnf64 F
+GLIBC_2.30 scalblnl F
+GLIBC_2.30 scalbn F
+GLIBC_2.30 scalbnf F
+GLIBC_2.30 scalbnf32 F
+GLIBC_2.30 scalbnf32x F
+GLIBC_2.30 scalbnf64 F
+GLIBC_2.30 scalbnl F
+GLIBC_2.30 setpayload F
+GLIBC_2.30 setpayloadf F
+GLIBC_2.30 setpayloadf32 F
+GLIBC_2.30 setpayloadf32x F
+GLIBC_2.30 setpayloadf64 F
+GLIBC_2.30 setpayloadl F
+GLIBC_2.30 setpayloadsig F
+GLIBC_2.30 setpayloadsigf F
+GLIBC_2.30 setpayloadsigf32 F
+GLIBC_2.30 setpayloadsigf32x F
+GLIBC_2.30 setpayloadsigf64 F
+GLIBC_2.30 setpayloadsigl F
+GLIBC_2.30 signgam D 0x4
+GLIBC_2.30 significand F
+GLIBC_2.30 significandf F
+GLIBC_2.30 significandl F
+GLIBC_2.30 sin F
+GLIBC_2.30 sincos F
+GLIBC_2.30 sincosf F
+GLIBC_2.30 sincosf32 F
+GLIBC_2.30 sincosf32x F
+GLIBC_2.30 sincosf64 F
+GLIBC_2.30 sincosl F
+GLIBC_2.30 sinf F
+GLIBC_2.30 sinf32 F
+GLIBC_2.30 sinf32x F
+GLIBC_2.30 sinf64 F
+GLIBC_2.30 sinh F
+GLIBC_2.30 sinhf F
+GLIBC_2.30 sinhf32 F
+GLIBC_2.30 sinhf32x F
+GLIBC_2.30 sinhf64 F
+GLIBC_2.30 sinhl F
+GLIBC_2.30 sinl F
+GLIBC_2.30 sqrt F
+GLIBC_2.30 sqrtf F
+GLIBC_2.30 sqrtf32 F
+GLIBC_2.30 sqrtf32x F
+GLIBC_2.30 sqrtf64 F
+GLIBC_2.30 sqrtl F
+GLIBC_2.30 tan F
+GLIBC_2.30 tanf F
+GLIBC_2.30 tanf32 F
+GLIBC_2.30 tanf32x F
+GLIBC_2.30 tanf64 F
+GLIBC_2.30 tanh F
+GLIBC_2.30 tanhf F
+GLIBC_2.30 tanhf32 F
+GLIBC_2.30 tanhf32x F
+GLIBC_2.30 tanhf64 F
+GLIBC_2.30 tanhl F
+GLIBC_2.30 tanl F
+GLIBC_2.30 tgamma F
+GLIBC_2.30 tgammaf F
+GLIBC_2.30 tgammaf32 F
+GLIBC_2.30 tgammaf32x F
+GLIBC_2.30 tgammaf64 F
+GLIBC_2.30 tgammal F
+GLIBC_2.30 totalorder F
+GLIBC_2.30 totalorderf F
+GLIBC_2.30 totalorderf32 F
+GLIBC_2.30 totalorderf32x F
+GLIBC_2.30 totalorderf64 F
+GLIBC_2.30 totalorderl F
+GLIBC_2.30 totalordermag F
+GLIBC_2.30 totalordermagf F
+GLIBC_2.30 totalordermagf32 F
+GLIBC_2.30 totalordermagf32x F
+GLIBC_2.30 totalordermagf64 F
+GLIBC_2.30 totalordermagl F
+GLIBC_2.30 trunc F
+GLIBC_2.30 truncf F
+GLIBC_2.30 truncf32 F
+GLIBC_2.30 truncf32x F
+GLIBC_2.30 truncf64 F
+GLIBC_2.30 truncl F
+GLIBC_2.30 ufromfp F
+GLIBC_2.30 ufromfpf F
+GLIBC_2.30 ufromfpf32 F
+GLIBC_2.30 ufromfpf32x F
+GLIBC_2.30 ufromfpf64 F
+GLIBC_2.30 ufromfpl F
+GLIBC_2.30 ufromfpx F
+GLIBC_2.30 ufromfpxf F
+GLIBC_2.30 ufromfpxf32 F
+GLIBC_2.30 ufromfpxf32x F
+GLIBC_2.30 ufromfpxf64 F
+GLIBC_2.30 ufromfpxl F
+GLIBC_2.30 y0 F
+GLIBC_2.30 y0f F
+GLIBC_2.30 y0f32 F
+GLIBC_2.30 y0f32x F
+GLIBC_2.30 y0f64 F
+GLIBC_2.30 y0l F
+GLIBC_2.30 y1 F
+GLIBC_2.30 y1f F
+GLIBC_2.30 y1f32 F
+GLIBC_2.30 y1f32x F
+GLIBC_2.30 y1f64 F
+GLIBC_2.30 y1l F
+GLIBC_2.30 yn F
+GLIBC_2.30 ynf F
+GLIBC_2.30 ynf32 F
+GLIBC_2.30 ynf32x F
+GLIBC_2.30 ynf64 F
+GLIBC_2.30 ynl F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
new file mode 100644
index 0000000000..d89cf8d301
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -0,0 +1,240 @@
+GLIBC_2.30 _IO_flockfile F
+GLIBC_2.30 _IO_ftrylockfile F
+GLIBC_2.30 _IO_funlockfile F
+GLIBC_2.30 __close F
+GLIBC_2.30 __connect F
+GLIBC_2.30 __errno_location F
+GLIBC_2.30 __h_errno_location F
+GLIBC_2.30 __libc_allocate_rtsig F
+GLIBC_2.30 __libc_current_sigrtmax F
+GLIBC_2.30 __libc_current_sigrtmin F
+GLIBC_2.30 __lseek F
+GLIBC_2.30 __nanosleep F
+GLIBC_2.30 __open F
+GLIBC_2.30 __open64 F
+GLIBC_2.30 __pread64 F
+GLIBC_2.30 __pthread_cleanup_routine F
+GLIBC_2.30 __pthread_getspecific F
+GLIBC_2.30 __pthread_key_create F
+GLIBC_2.30 __pthread_mutex_destroy F
+GLIBC_2.30 __pthread_mutex_init F
+GLIBC_2.30 __pthread_mutex_lock F
+GLIBC_2.30 __pthread_mutex_trylock F
+GLIBC_2.30 __pthread_mutex_unlock F
+GLIBC_2.30 __pthread_mutexattr_destroy F
+GLIBC_2.30 __pthread_mutexattr_init F
+GLIBC_2.30 __pthread_mutexattr_settype F
+GLIBC_2.30 __pthread_once F
+GLIBC_2.30 __pthread_register_cancel F
+GLIBC_2.30 __pthread_register_cancel_defer F
+GLIBC_2.30 __pthread_rwlock_destroy F
+GLIBC_2.30 __pthread_rwlock_init F
+GLIBC_2.30 __pthread_rwlock_rdlock F
+GLIBC_2.30 __pthread_rwlock_tryrdlock F
+GLIBC_2.30 __pthread_rwlock_trywrlock F
+GLIBC_2.30 __pthread_rwlock_unlock F
+GLIBC_2.30 __pthread_rwlock_wrlock F
+GLIBC_2.30 __pthread_setspecific F
+GLIBC_2.30 __pthread_unregister_cancel F
+GLIBC_2.30 __pthread_unregister_cancel_restore F
+GLIBC_2.30 __pthread_unwind_next F
+GLIBC_2.30 __pwrite64 F
+GLIBC_2.30 __read F
+GLIBC_2.30 __res_state F
+GLIBC_2.30 __send F
+GLIBC_2.30 __sigaction F
+GLIBC_2.30 __wait F
+GLIBC_2.30 __write F
+GLIBC_2.30 _pthread_cleanup_pop F
+GLIBC_2.30 _pthread_cleanup_pop_restore F
+GLIBC_2.30 _pthread_cleanup_push F
+GLIBC_2.30 _pthread_cleanup_push_defer F
+GLIBC_2.30 accept F
+GLIBC_2.30 call_once F
+GLIBC_2.30 close F
+GLIBC_2.30 cnd_broadcast F
+GLIBC_2.30 cnd_destroy F
+GLIBC_2.30 cnd_init F
+GLIBC_2.30 cnd_signal F
+GLIBC_2.30 cnd_timedwait F
+GLIBC_2.30 cnd_wait F
+GLIBC_2.30 connect F
+GLIBC_2.30 flockfile F
+GLIBC_2.30 fsync F
+GLIBC_2.30 ftrylockfile F
+GLIBC_2.30 funlockfile F
+GLIBC_2.30 lseek F
+GLIBC_2.30 lseek64 F
+GLIBC_2.30 msync F
+GLIBC_2.30 mtx_destroy F
+GLIBC_2.30 mtx_init F
+GLIBC_2.30 mtx_lock F
+GLIBC_2.30 mtx_timedlock F
+GLIBC_2.30 mtx_trylock F
+GLIBC_2.30 mtx_unlock F
+GLIBC_2.30 nanosleep F
+GLIBC_2.30 open F
+GLIBC_2.30 open64 F
+GLIBC_2.30 pause F
+GLIBC_2.30 pread F
+GLIBC_2.30 pread64 F
+GLIBC_2.30 pthread_attr_destroy F
+GLIBC_2.30 pthread_attr_getaffinity_np F
+GLIBC_2.30 pthread_attr_getdetachstate F
+GLIBC_2.30 pthread_attr_getguardsize F
+GLIBC_2.30 pthread_attr_getinheritsched F
+GLIBC_2.30 pthread_attr_getschedparam F
+GLIBC_2.30 pthread_attr_getschedpolicy F
+GLIBC_2.30 pthread_attr_getscope F
+GLIBC_2.30 pthread_attr_getstack F
+GLIBC_2.30 pthread_attr_getstackaddr F
+GLIBC_2.30 pthread_attr_getstacksize F
+GLIBC_2.30 pthread_attr_init F
+GLIBC_2.30 pthread_attr_setaffinity_np F
+GLIBC_2.30 pthread_attr_setdetachstate F
+GLIBC_2.30 pthread_attr_setguardsize F
+GLIBC_2.30 pthread_attr_setinheritsched F
+GLIBC_2.30 pthread_attr_setschedparam F
+GLIBC_2.30 pthread_attr_setschedpolicy F
+GLIBC_2.30 pthread_attr_setscope F
+GLIBC_2.30 pthread_attr_setstack F
+GLIBC_2.30 pthread_attr_setstackaddr F
+GLIBC_2.30 pthread_attr_setstacksize F
+GLIBC_2.30 pthread_barrier_destroy F
+GLIBC_2.30 pthread_barrier_init F
+GLIBC_2.30 pthread_barrier_wait F
+GLIBC_2.30 pthread_barrierattr_destroy F
+GLIBC_2.30 pthread_barrierattr_getpshared F
+GLIBC_2.30 pthread_barrierattr_init F
+GLIBC_2.30 pthread_barrierattr_setpshared F
+GLIBC_2.30 pthread_cancel F
+GLIBC_2.30 pthread_cond_broadcast F
+GLIBC_2.30 pthread_cond_clockwait F
+GLIBC_2.30 pthread_cond_destroy F
+GLIBC_2.30 pthread_cond_init F
+GLIBC_2.30 pthread_cond_signal F
+GLIBC_2.30 pthread_cond_timedwait F
+GLIBC_2.30 pthread_cond_wait F
+GLIBC_2.30 pthread_condattr_destroy F
+GLIBC_2.30 pthread_condattr_getclock F
+GLIBC_2.30 pthread_condattr_getpshared F
+GLIBC_2.30 pthread_condattr_init F
+GLIBC_2.30 pthread_condattr_setclock F
+GLIBC_2.30 pthread_condattr_setpshared F
+GLIBC_2.30 pthread_create F
+GLIBC_2.30 pthread_detach F
+GLIBC_2.30 pthread_equal F
+GLIBC_2.30 pthread_exit F
+GLIBC_2.30 pthread_getaffinity_np F
+GLIBC_2.30 pthread_getattr_default_np F
+GLIBC_2.30 pthread_getattr_np F
+GLIBC_2.30 pthread_getconcurrency F
+GLIBC_2.30 pthread_getcpuclockid F
+GLIBC_2.30 pthread_getname_np F
+GLIBC_2.30 pthread_getschedparam F
+GLIBC_2.30 pthread_getspecific F
+GLIBC_2.30 pthread_join F
+GLIBC_2.30 pthread_key_create F
+GLIBC_2.30 pthread_key_delete F
+GLIBC_2.30 pthread_kill F
+GLIBC_2.30 pthread_kill_other_threads_np F
+GLIBC_2.30 pthread_mutex_clocklock F
+GLIBC_2.30 pthread_mutex_consistent F
+GLIBC_2.30 pthread_mutex_consistent_np F
+GLIBC_2.30 pthread_mutex_destroy F
+GLIBC_2.30 pthread_mutex_getprioceiling F
+GLIBC_2.30 pthread_mutex_init F
+GLIBC_2.30 pthread_mutex_lock F
+GLIBC_2.30 pthread_mutex_setprioceiling F
+GLIBC_2.30 pthread_mutex_timedlock F
+GLIBC_2.30 pthread_mutex_trylock F
+GLIBC_2.30 pthread_mutex_unlock F
+GLIBC_2.30 pthread_mutexattr_destroy F
+GLIBC_2.30 pthread_mutexattr_getkind_np F
+GLIBC_2.30 pthread_mutexattr_getprioceiling F
+GLIBC_2.30 pthread_mutexattr_getprotocol F
+GLIBC_2.30 pthread_mutexattr_getpshared F
+GLIBC_2.30 pthread_mutexattr_getrobust F
+GLIBC_2.30 pthread_mutexattr_getrobust_np F
+GLIBC_2.30 pthread_mutexattr_gettype F
+GLIBC_2.30 pthread_mutexattr_init F
+GLIBC_2.30 pthread_mutexattr_setkind_np F
+GLIBC_2.30 pthread_mutexattr_setprioceiling F
+GLIBC_2.30 pthread_mutexattr_setprotocol F
+GLIBC_2.30 pthread_mutexattr_setpshared F
+GLIBC_2.30 pthread_mutexattr_setrobust F
+GLIBC_2.30 pthread_mutexattr_setrobust_np F
+GLIBC_2.30 pthread_mutexattr_settype F
+GLIBC_2.30 pthread_once F
+GLIBC_2.30 pthread_rwlock_clockrdlock F
+GLIBC_2.30 pthread_rwlock_clockwrlock F
+GLIBC_2.30 pthread_rwlock_destroy F
+GLIBC_2.30 pthread_rwlock_init F
+GLIBC_2.30 pthread_rwlock_rdlock F
+GLIBC_2.30 pthread_rwlock_timedrdlock F
+GLIBC_2.30 pthread_rwlock_timedwrlock F
+GLIBC_2.30 pthread_rwlock_tryrdlock F
+GLIBC_2.30 pthread_rwlock_trywrlock F
+GLIBC_2.30 pthread_rwlock_unlock F
+GLIBC_2.30 pthread_rwlock_wrlock F
+GLIBC_2.30 pthread_rwlockattr_destroy F
+GLIBC_2.30 pthread_rwlockattr_getkind_np F
+GLIBC_2.30 pthread_rwlockattr_getpshared F
+GLIBC_2.30 pthread_rwlockattr_init F
+GLIBC_2.30 pthread_rwlockattr_setkind_np F
+GLIBC_2.30 pthread_rwlockattr_setpshared F
+GLIBC_2.30 pthread_setaffinity_np F
+GLIBC_2.30 pthread_setattr_default_np F
+GLIBC_2.30 pthread_setcancelstate F
+GLIBC_2.30 pthread_setcanceltype F
+GLIBC_2.30 pthread_setconcurrency F
+GLIBC_2.30 pthread_setname_np F
+GLIBC_2.30 pthread_setschedparam F
+GLIBC_2.30 pthread_setschedprio F
+GLIBC_2.30 pthread_setspecific F
+GLIBC_2.30 pthread_sigmask F
+GLIBC_2.30 pthread_sigqueue F
+GLIBC_2.30 pthread_spin_destroy F
+GLIBC_2.30 pthread_spin_init F
+GLIBC_2.30 pthread_spin_lock F
+GLIBC_2.30 pthread_spin_trylock F
+GLIBC_2.30 pthread_spin_unlock F
+GLIBC_2.30 pthread_testcancel F
+GLIBC_2.30 pthread_timedjoin_np F
+GLIBC_2.30 pthread_tryjoin_np F
+GLIBC_2.30 pthread_yield F
+GLIBC_2.30 pwrite F
+GLIBC_2.30 pwrite64 F
+GLIBC_2.30 raise F
+GLIBC_2.30 read F
+GLIBC_2.30 recv F
+GLIBC_2.30 recvfrom F
+GLIBC_2.30 recvmsg F
+GLIBC_2.30 sem_clockwait F
+GLIBC_2.30 sem_close F
+GLIBC_2.30 sem_destroy F
+GLIBC_2.30 sem_getvalue F
+GLIBC_2.30 sem_init F
+GLIBC_2.30 sem_open F
+GLIBC_2.30 sem_post F
+GLIBC_2.30 sem_timedwait F
+GLIBC_2.30 sem_trywait F
+GLIBC_2.30 sem_unlink F
+GLIBC_2.30 sem_wait F
+GLIBC_2.30 send F
+GLIBC_2.30 sendmsg F
+GLIBC_2.30 sendto F
+GLIBC_2.30 sigaction F
+GLIBC_2.30 sigwait F
+GLIBC_2.30 tcdrain F
+GLIBC_2.30 thrd_create F
+GLIBC_2.30 thrd_detach F
+GLIBC_2.30 thrd_exit F
+GLIBC_2.30 thrd_join F
+GLIBC_2.30 tss_create F
+GLIBC_2.30 tss_delete F
+GLIBC_2.30 tss_get F
+GLIBC_2.30 tss_set F
+GLIBC_2.30 wait F
+GLIBC_2.30 waitpid F
+GLIBC_2.30 write F
diff --git a/sysdeps/unix/sysv/linux/arc/libresolv.abilist b/sysdeps/unix/sysv/linux/arc/libresolv.abilist
new file mode 100644
index 0000000000..ca745f5b98
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libresolv.abilist
@@ -0,0 +1,79 @@
+GLIBC_2.30 __b64_ntop F
+GLIBC_2.30 __b64_pton F
+GLIBC_2.30 __dn_comp F
+GLIBC_2.30 __dn_count_labels F
+GLIBC_2.30 __dn_expand F
+GLIBC_2.30 __dn_skipname F
+GLIBC_2.30 __fp_nquery F
+GLIBC_2.30 __fp_query F
+GLIBC_2.30 __fp_resstat F
+GLIBC_2.30 __hostalias F
+GLIBC_2.30 __loc_aton F
+GLIBC_2.30 __loc_ntoa F
+GLIBC_2.30 __p_cdname F
+GLIBC_2.30 __p_cdnname F
+GLIBC_2.30 __p_class F
+GLIBC_2.30 __p_class_syms D 0x54
+GLIBC_2.30 __p_fqname F
+GLIBC_2.30 __p_fqnname F
+GLIBC_2.30 __p_option F
+GLIBC_2.30 __p_query F
+GLIBC_2.30 __p_rcode F
+GLIBC_2.30 __p_time F
+GLIBC_2.30 __p_type F
+GLIBC_2.30 __p_type_syms D 0x228
+GLIBC_2.30 __putlong F
+GLIBC_2.30 __putshort F
+GLIBC_2.30 __res_close F
+GLIBC_2.30 __res_dnok F
+GLIBC_2.30 __res_hnok F
+GLIBC_2.30 __res_hostalias F
+GLIBC_2.30 __res_isourserver F
+GLIBC_2.30 __res_mailok F
+GLIBC_2.30 __res_mkquery F
+GLIBC_2.30 __res_nameinquery F
+GLIBC_2.30 __res_nmkquery F
+GLIBC_2.30 __res_nquery F
+GLIBC_2.30 __res_nquerydomain F
+GLIBC_2.30 __res_nsearch F
+GLIBC_2.30 __res_nsend F
+GLIBC_2.30 __res_ownok F
+GLIBC_2.30 __res_queriesmatch F
+GLIBC_2.30 __res_query F
+GLIBC_2.30 __res_querydomain F
+GLIBC_2.30 __res_search F
+GLIBC_2.30 __res_send F
+GLIBC_2.30 __sym_ntop F
+GLIBC_2.30 __sym_ntos F
+GLIBC_2.30 __sym_ston F
+GLIBC_2.30 _getlong F
+GLIBC_2.30 _getshort F
+GLIBC_2.30 inet_net_ntop F
+GLIBC_2.30 inet_net_pton F
+GLIBC_2.30 inet_neta F
+GLIBC_2.30 ns_datetosecs F
+GLIBC_2.30 ns_format_ttl F
+GLIBC_2.30 ns_get16 F
+GLIBC_2.30 ns_get32 F
+GLIBC_2.30 ns_initparse F
+GLIBC_2.30 ns_makecanon F
+GLIBC_2.30 ns_msg_getflag F
+GLIBC_2.30 ns_name_compress F
+GLIBC_2.30 ns_name_ntol F
+GLIBC_2.30 ns_name_ntop F
+GLIBC_2.30 ns_name_pack F
+GLIBC_2.30 ns_name_pton F
+GLIBC_2.30 ns_name_rollback F
+GLIBC_2.30 ns_name_skip F
+GLIBC_2.30 ns_name_uncompress F
+GLIBC_2.30 ns_name_unpack F
+GLIBC_2.30 ns_parse_ttl F
+GLIBC_2.30 ns_parserr F
+GLIBC_2.30 ns_put16 F
+GLIBC_2.30 ns_put32 F
+GLIBC_2.30 ns_samedomain F
+GLIBC_2.30 ns_samename F
+GLIBC_2.30 ns_skiprr F
+GLIBC_2.30 ns_sprintrr F
+GLIBC_2.30 ns_sprintrrf F
+GLIBC_2.30 ns_subdomain F
diff --git a/sysdeps/unix/sysv/linux/arc/librt.abilist b/sysdeps/unix/sysv/linux/arc/librt.abilist
new file mode 100644
index 0000000000..8d39a08696
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/librt.abilist
@@ -0,0 +1,35 @@
+GLIBC_2.30 __mq_open_2 F
+GLIBC_2.30 aio_cancel F
+GLIBC_2.30 aio_cancel64 F
+GLIBC_2.30 aio_error F
+GLIBC_2.30 aio_error64 F
+GLIBC_2.30 aio_fsync F
+GLIBC_2.30 aio_fsync64 F
+GLIBC_2.30 aio_init F
+GLIBC_2.30 aio_read F
+GLIBC_2.30 aio_read64 F
+GLIBC_2.30 aio_return F
+GLIBC_2.30 aio_return64 F
+GLIBC_2.30 aio_suspend F
+GLIBC_2.30 aio_suspend64 F
+GLIBC_2.30 aio_write F
+GLIBC_2.30 aio_write64 F
+GLIBC_2.30 lio_listio F
+GLIBC_2.30 lio_listio64 F
+GLIBC_2.30 mq_close F
+GLIBC_2.30 mq_getattr F
+GLIBC_2.30 mq_notify F
+GLIBC_2.30 mq_open F
+GLIBC_2.30 mq_receive F
+GLIBC_2.30 mq_send F
+GLIBC_2.30 mq_setattr F
+GLIBC_2.30 mq_timedreceive F
+GLIBC_2.30 mq_timedsend F
+GLIBC_2.30 mq_unlink F
+GLIBC_2.30 shm_open F
+GLIBC_2.30 shm_unlink F
+GLIBC_2.30 timer_create F
+GLIBC_2.30 timer_delete F
+GLIBC_2.30 timer_getoverrun F
+GLIBC_2.30 timer_gettime F
+GLIBC_2.30 timer_settime F
diff --git a/sysdeps/unix/sysv/linux/arc/libthread_db.abilist b/sysdeps/unix/sysv/linux/arc/libthread_db.abilist
new file mode 100644
index 0000000000..94220c9592
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libthread_db.abilist
@@ -0,0 +1,40 @@
+GLIBC_2.30 td_init F
+GLIBC_2.30 td_log F
+GLIBC_2.30 td_symbol_list F
+GLIBC_2.30 td_ta_clear_event F
+GLIBC_2.30 td_ta_delete F
+GLIBC_2.30 td_ta_enable_stats F
+GLIBC_2.30 td_ta_event_addr F
+GLIBC_2.30 td_ta_event_getmsg F
+GLIBC_2.30 td_ta_get_nthreads F
+GLIBC_2.30 td_ta_get_ph F
+GLIBC_2.30 td_ta_get_stats F
+GLIBC_2.30 td_ta_map_id2thr F
+GLIBC_2.30 td_ta_map_lwp2thr F
+GLIBC_2.30 td_ta_new F
+GLIBC_2.30 td_ta_reset_stats F
+GLIBC_2.30 td_ta_set_event F
+GLIBC_2.30 td_ta_setconcurrency F
+GLIBC_2.30 td_ta_thr_iter F
+GLIBC_2.30 td_ta_tsd_iter F
+GLIBC_2.30 td_thr_clear_event F
+GLIBC_2.30 td_thr_dbresume F
+GLIBC_2.30 td_thr_dbsuspend F
+GLIBC_2.30 td_thr_event_enable F
+GLIBC_2.30 td_thr_event_getmsg F
+GLIBC_2.30 td_thr_get_info F
+GLIBC_2.30 td_thr_getfpregs F
+GLIBC_2.30 td_thr_getgregs F
+GLIBC_2.30 td_thr_getxregs F
+GLIBC_2.30 td_thr_getxregsize F
+GLIBC_2.30 td_thr_set_event F
+GLIBC_2.30 td_thr_setfpregs F
+GLIBC_2.30 td_thr_setgregs F
+GLIBC_2.30 td_thr_setprio F
+GLIBC_2.30 td_thr_setsigpending F
+GLIBC_2.30 td_thr_setxregs F
+GLIBC_2.30 td_thr_sigsetmask F
+GLIBC_2.30 td_thr_tls_get_addr F
+GLIBC_2.30 td_thr_tlsbase F
+GLIBC_2.30 td_thr_tsd F
+GLIBC_2.30 td_thr_validate F
diff --git a/sysdeps/unix/sysv/linux/arc/libutil.abilist b/sysdeps/unix/sysv/linux/arc/libutil.abilist
new file mode 100644
index 0000000000..f745157afa
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libutil.abilist
@@ -0,0 +1,6 @@
+GLIBC_2.30 forkpty F
+GLIBC_2.30 login F
+GLIBC_2.30 login_tty F
+GLIBC_2.30 logout F
+GLIBC_2.30 logwtmp F
+GLIBC_2.30 openpty F
diff --git a/sysdeps/unix/sysv/linux/arc/localplt.data b/sysdeps/unix/sysv/linux/arc/localplt.data
new file mode 100644
index 0000000000..e902fd0607
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/localplt.data
@@ -0,0 +1,16 @@
+libc.so: realloc
+libc.so: malloc
+libc.so: memalign
+libc.so: calloc
+libc.so: free
+# At -Os, a struct assignment in libgcc-static pulls this in
+libc.so: memcpy ?
+ld.so: malloc
+ld.so: calloc
+ld.so: realloc
+ld.so: free
+# The TLS-enabled version of these functions is interposed from libc.so.
+ld.so: _dl_signal_error
+ld.so: _dl_catch_error
+ld.so: _dl_signal_exception
+ld.so: _dl_catch_exception
diff --git a/sysdeps/unix/sysv/linux/arc/makecontext.c b/sysdeps/unix/sysv/linux/arc/makecontext.c
new file mode 100644
index 0000000000..3d46452e17
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/makecontext.c
@@ -0,0 +1,75 @@
+/* Create new context for ARC.
+ Copyright (C) 2015-2019 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 <stdarg.h>
+#include <stdint.h>
+#include <sys/ucontext.h>
+
+void
+__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
+{
+ extern void __startcontext (void) attribute_hidden;
+ unsigned long int sp, *r;
+ va_list vl;
+ int i, reg_args, stack_args;
+
+ sp = ((unsigned long int) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size) & ~7;
+
+ ucp->uc_mcontext.__scratch.__sp = sp;
+ ucp->uc_mcontext.__scratch.__fp = 0;
+
+ /* __startcontext is sort of trampoline to invoke @func
+ From setcontext() pov, the resume address is __startcontext,
+ set it up in BLINK place holder. */
+
+ ucp->uc_mcontext.__scratch.__blink = (unsigned long int) &__startcontext;
+
+ /* __startcontext passed 2 types of args
+ - args to @func setup in canonical r0-r7
+ - @func itself in r9, and next function in r10. */
+
+ ucp->uc_mcontext.__callee.__r13 = (unsigned long int) func;
+ ucp->uc_mcontext.__callee.__r14 = (unsigned long int) ucp->uc_link;
+
+ r = &ucp->uc_mcontext.__scratch.__r0;
+
+ va_start (vl, argc);
+
+ reg_args = argc > 8 ? 8 : argc;
+ for (i = 0; i < reg_args; i++) {
+ *r-- = va_arg(vl, unsigned long int);
+ }
+
+ stack_args = argc - reg_args;
+
+ if (__glibc_unlikely (stack_args > 0)) {
+
+ sp -= stack_args * sizeof (unsigned long int);
+ ucp->uc_mcontext.__scratch.__sp = sp;
+ r = (unsigned long int *)sp;
+
+ for (i = 0; i < stack_args; i++) {
+ *r++ = va_arg(vl, unsigned long int);
+ }
+ }
+
+ va_end (vl);
+}
+
+weak_alias (__makecontext, makecontext)
diff --git a/sysdeps/unix/sysv/linux/arc/mmap_internal.h b/sysdeps/unix/sysv/linux/arc/mmap_internal.h
new file mode 100644
index 0000000000..51d0a25f26
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/mmap_internal.h
@@ -0,0 +1,27 @@
+/* mmap - map files or devices into memory. Linux/ARC version.
+ Copyright (C) 2017-2019 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/>. */
+
+#ifndef MMAP_ARC_INTERNAL_H
+#define MMAP_ARC_INTERNAL_H
+
+/* Determine the shift dynamically with getpagesize. */
+#define MMAP2_PAGE_UNIT -1
+
+#include_next <mmap_internal.h>
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/arc/pt-vfork.S b/sysdeps/unix/sysv/linux/arc/pt-vfork.S
new file mode 100644
index 0000000000..1cc8931700
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/pt-vfork.S
@@ -0,0 +1 @@
+/* Not needed. */
diff --git a/sysdeps/unix/sysv/linux/arc/setcontext.S b/sysdeps/unix/sysv/linux/arc/setcontext.S
new file mode 100644
index 0000000000..8cf4ffcaf5
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/setcontext.S
@@ -0,0 +1,92 @@
+/* Set current context for ARC.
+ Copyright (C) 2009-2019 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 "ucontext-macros.h"
+
+/* int setcontext (const ucontext_t *ucp)
+ - Restores the machine context in @ucp and resumes execution
+ (doesn't return to caller). */
+
+ENTRY (__setcontext)
+
+ mov r9, r0 /* Stash @ucp across syscall. */
+
+ /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8) */
+ mov r3, _NSIG8
+ mov r2, 0
+ add r1, r0, UCONTEXT_SIGMASK
+ mov r0, SIG_SETMASK
+ mov r8, __NR_rt_sigprocmask
+ ARC_TRAP_INSN
+ brhi r0, -1024, .Lcall_syscall_err
+
+ /* Restore scratch/arg regs for makecontext() case. */
+ LOAD_REG (r0, r9, 22)
+ LOAD_REG (r1, r9, 21)
+ LOAD_REG (r2, r9, 20)
+ LOAD_REG (r3, r9, 19)
+ LOAD_REG (r4, r9, 18)
+ LOAD_REG (r5, r9, 17)
+ LOAD_REG (r6, r9, 16)
+ LOAD_REG (r7, r9, 15)
+
+ /* Restore callee saved registers. */
+ LOAD_REG (r13, r9, 37)
+ LOAD_REG (r14, r9, 36)
+ LOAD_REG (r15, r9, 35)
+ LOAD_REG (r16, r9, 34)
+ LOAD_REG (r17, r9, 33)
+ LOAD_REG (r18, r9, 32)
+ LOAD_REG (r19, r9, 31)
+ LOAD_REG (r20, r9, 30)
+ LOAD_REG (r21, r9, 29)
+ LOAD_REG (r22, r9, 28)
+ LOAD_REG (r23, r9, 27)
+ LOAD_REG (r24, r9, 26)
+ LOAD_REG (r25, r9, 25)
+
+ LOAD_REG (blink, r9, 7)
+ LOAD_REG (fp, r9, 8)
+ LOAD_REG (sp, r9, 23)
+
+ j [blink]
+
+PSEUDO_END (__setcontext)
+weak_alias (__setcontext, setcontext)
+
+
+/* Helper for activating makecontext() created context
+ - r13 has @func, r14 has uc_link. */
+
+ENTRY (__startcontext)
+
+ .cfi_label .Ldummy
+ cfi_undefined (blink)
+
+ /* Call user @func, loaded in r13 by setcontext(). */
+ jl [r13]
+
+ /* If uc_link (r14) call setcontext with that. */
+ mov r0, r14
+ breq r0, 0, 1f
+
+ bl __setcontext
+1:
+ /* Exit with status 0. */
+ b HIDDEN_JUMPTARGET(exit)
+END (__startcontext)
diff --git a/sysdeps/unix/sysv/linux/arc/shlib-versions b/sysdeps/unix/sysv/linux/arc/shlib-versions
new file mode 100644
index 0000000000..cbe457b9db
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/shlib-versions
@@ -0,0 +1,2 @@
+DEFAULT GLIBC_2.30
+ld=ld-linux-arc.so.2
diff --git a/sysdeps/unix/sysv/linux/arc/sigaction.c b/sysdeps/unix/sysv/linux/arc/sigaction.c
new file mode 100644
index 0000000000..db7293865f
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sigaction.c
@@ -0,0 +1,31 @@
+/* ARC specific sigaction.
+ Copyright (C) 1997-2019 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/>. */
+
+#define SA_RESTORER 0x04000000
+
+extern void __default_rt_sa_restorer (void);
+
+#define SET_SA_RESTORER(kact, act) \
+ ({ \
+ (kact)->sa_restorer = __default_rt_sa_restorer; \
+ (kact)->sa_flags |= SA_RESTORER; \
+ })
+
+#define RESET_SA_RESTORER(act, kact)
+
+#include <sysdeps/unix/sysv/linux/sigaction.c>
diff --git a/sysdeps/unix/sysv/linux/arc/sigcontextinfo.h b/sysdeps/unix/sysv/linux/arc/sigcontextinfo.h
new file mode 100644
index 0000000000..db5f4b6d21
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sigcontextinfo.h
@@ -0,0 +1,31 @@
+/* ARC definitions for signal handling calling conventions.
+ Copyright (C) 2017-2019 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/>. */
+
+#ifndef _SIGCONTEXTINFO_H
+#define _SIGCONTEXTINFO_H
+
+#include <stdint.h>
+#include <sys/ucontext.h>
+
+static inline uintptr_t
+sigcontext_get_pc (const ucontext_t *ctx)
+{
+ return ctx->uc_mcontext.__scratch.__ret;
+}
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/arc/sigrestorer.S b/sysdeps/unix/sysv/linux/arc/sigrestorer.S
new file mode 100644
index 0000000000..573b54e36c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sigrestorer.S
@@ -0,0 +1,29 @@
+/* Default sigreturn stub for ARC Linux.
+ Copyright (C) 2005-2019 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/syscall.h>
+#include <sysdep.h>
+#include <tcb-offsets.h>
+
+/* Note the NOP has to be outside body. */
+ nop
+ENTRY (__default_rt_sa_restorer)
+ mov r8, __NR_rt_sigreturn
+ ARC_TRAP_INSN
+ j_s [blink]
+PSEUDO_END_NOERRNO (__default_rt_sa_restorer)
diff --git a/sysdeps/unix/sysv/linux/arc/swapcontext.S b/sysdeps/unix/sysv/linux/arc/swapcontext.S
new file mode 100644
index 0000000000..853d3805de
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/swapcontext.S
@@ -0,0 +1,92 @@
+/* Save and set current context for ARC.
+ Copyright (C) 2009-2019 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 "ucontext-macros.h"
+
+/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp). */
+
+ENTRY (__swapcontext)
+
+ /* Save context into @oucp pointed to by r0. */
+
+ SAVE_REG (r13, r0, 37)
+ SAVE_REG (r14, r0, 36)
+ SAVE_REG (r15, r0, 35)
+ SAVE_REG (r16, r0, 34)
+ SAVE_REG (r17, r0, 33)
+ SAVE_REG (r18, r0, 32)
+ SAVE_REG (r19, r0, 31)
+ SAVE_REG (r20, r0, 30)
+ SAVE_REG (r21, r0, 29)
+ SAVE_REG (r22, r0, 28)
+ SAVE_REG (r23, r0, 27)
+ SAVE_REG (r24, r0, 26)
+ SAVE_REG (r25, r0, 25)
+
+ SAVE_REG (blink, r0, 7)
+ SAVE_REG (fp, r0, 8)
+ SAVE_REG (sp, r0, 23)
+
+ /* Save 0 in r0 placeholder to return 0 when @oucp activated. */
+ mov r9, 0
+ SAVE_REG (r9, r0, 22)
+
+ /* Load context from @ucp. */
+
+ mov r9, r1 /* Safekeep @ucp across syscall. */
+
+ /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, _NSIG8) */
+ mov r3, _NSIG8
+ add r2, r0, UCONTEXT_SIGMASK
+ add r1, r1, UCONTEXT_SIGMASK
+ mov r0, SIG_SETMASK
+ mov r8, __NR_rt_sigprocmask
+ ARC_TRAP_INSN
+ brhi r0, -1024, .Lcall_syscall_err
+
+ LOAD_REG (r0, r9, 22)
+ LOAD_REG (r1, r9, 21)
+ LOAD_REG (r2, r9, 20)
+ LOAD_REG (r3, r9, 19)
+ LOAD_REG (r4, r9, 18)
+ LOAD_REG (r5, r9, 17)
+ LOAD_REG (r6, r9, 16)
+ LOAD_REG (r7, r9, 15)
+
+ LOAD_REG (r13, r9, 37)
+ LOAD_REG (r14, r9, 36)
+ LOAD_REG (r15, r9, 35)
+ LOAD_REG (r16, r9, 34)
+ LOAD_REG (r17, r9, 33)
+ LOAD_REG (r18, r9, 32)
+ LOAD_REG (r19, r9, 31)
+ LOAD_REG (r20, r9, 30)
+ LOAD_REG (r21, r9, 29)
+ LOAD_REG (r22, r9, 28)
+ LOAD_REG (r23, r9, 27)
+ LOAD_REG (r24, r9, 26)
+ LOAD_REG (r25, r9, 25)
+
+ LOAD_REG (blink, r9, 7)
+ LOAD_REG (fp, r9, 8)
+ LOAD_REG (sp, r9, 23)
+
+ j [blink]
+
+PSEUDO_END (__swapcontext)
+weak_alias (__swapcontext, swapcontext)
diff --git a/sysdeps/unix/sysv/linux/arc/sys/cachectl.h b/sysdeps/unix/sysv/linux/arc/sys/cachectl.h
new file mode 100644
index 0000000000..2d93e49e6a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sys/cachectl.h
@@ -0,0 +1,36 @@
+/* cacheflush - flush contents of instruction and/or data cache.
+ Copyright (C) 2017-2019 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/>. */
+
+#ifndef _SYS_CACHECTL_H
+#define _SYS_CACHECTL_H 1
+
+#include <features.h>
+
+/* Get the kernel definition for the op bits. */
+#include <asm/cachectl.h>
+
+__BEGIN_DECLS
+
+#ifdef __USE_MISC
+extern int cacheflush (void *__addr, const int __nbytes, const int __op) __THROW;
+#endif
+extern int _flush_cache (char *__addr, const int __nbytes, const int __op) __THROW;
+
+__END_DECLS
+
+#endif /* sys/cachectl.h */
diff --git a/sysdeps/unix/sysv/linux/arc/sys/ucontext.h b/sysdeps/unix/sysv/linux/arc/sys/ucontext.h
new file mode 100644
index 0000000000..7e357bcd65
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sys/ucontext.h
@@ -0,0 +1,63 @@
+/* struct ucontext definition, ARC version.
+ Copyright (C) 2017-2019 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/>. */
+
+/* System V/ARC ABI compliant context switching support. */
+
+#ifndef _SYS_UCONTEXT_H
+#define _SYS_UCONTEXT_H 1
+
+#include <features.h>
+
+#include <bits/types/sigset_t.h>
+#include <bits/types/stack_t.h>
+
+typedef struct
+ {
+ unsigned long int __pad;
+ struct {
+ unsigned long int __bta;
+ unsigned long int __lp_start, __lp_end, __lp_count;
+ unsigned long int __status32, __ret, __blink;
+ unsigned long int __fp, __gp;
+ unsigned long int __r12, __r11, __r10, __r9, __r8, __r7;
+ unsigned long int __r6, __r5, __r4, __r3, __r2, __r1, __r0;
+ unsigned long int __sp;
+ } __scratch;
+ unsigned long int __pad2;
+ struct {
+ unsigned long int __r25, __r24, __r23, __r22, __r21, __r20;
+ unsigned long int __r19, __r18, __r17, __r16, __r15, __r14, __r13;
+ } __callee;
+ unsigned long int __efa;
+ unsigned long int __stop_pc;
+ unsigned long int __r30, __r58, __r59;
+ } mcontext_t;
+
+/* Userlevel context. */
+typedef struct ucontext_t
+ {
+ unsigned long int __uc_flags;
+ struct ucontext_t *uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ sigset_t uc_sigmask;
+ } ucontext_t;
+
+#undef __ctx
+
+#endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/arc/sys/user.h b/sysdeps/unix/sysv/linux/arc/sys/user.h
new file mode 100644
index 0000000000..50d0dc7827
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sys/user.h
@@ -0,0 +1,31 @@
+/* ptrace register data format definitions.
+ Copyright (C) 1998-2019 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/>. */
+
+#ifndef _SYS_USER_H
+#define _SYS_USER_H 1
+
+/* Struct user_regs_struct is exported by kernel header
+ However apps like strace also expect a struct user, so it's better to
+ have a dummy implementation. */
+#include <asm/ptrace.h>
+
+struct user {
+ int dummy;
+};
+
+#endif /* sys/user.h */
diff --git a/sysdeps/unix/sysv/linux/arc/syscall.S b/sysdeps/unix/sysv/linux/arc/syscall.S
new file mode 100644
index 0000000000..3fe5fcdd04
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/syscall.S
@@ -0,0 +1,38 @@
+/* syscall - indirect system call.
+ Copyright (C) 2017-2019 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>
+
+ENTRY (syscall)
+ mov_s r8, r0
+ mov_s r0, r1
+ 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, -1024, .Lcall_syscall_err
+ j [blink]
+PSEUDO_END (syscall)
diff --git a/sysdeps/unix/sysv/linux/arc/syscalls.list b/sysdeps/unix/sysv/linux/arc/syscalls.list
new file mode 100644
index 0000000000..d0ef5977ee
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/syscalls.list
@@ -0,0 +1,3 @@
+# File name Caller Syscall name Args Strong name Weak names
+
+cacheflush - cacheflush i:pii _flush_cache cacheflush
diff --git a/sysdeps/unix/sysv/linux/arc/sysdep.c b/sysdeps/unix/sysv/linux/arc/sysdep.c
new file mode 100644
index 0000000000..5618f37851
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sysdep.c
@@ -0,0 +1,33 @@
+/* ARC wrapper for setting errno.
+ Copyright (C) 1997-2019 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 <errno.h>
+
+/* All syscall handler come here to avoid generated code bloat due to
+ GOT reference to errno_location or it's equivalent. */
+int
+__syscall_error(int err_no)
+{
+ __set_errno(-err_no);
+ return -1;
+}
+
+#if IS_IN (libc)
+hidden_def (__syscall_error)
+#endif
diff --git a/sysdeps/unix/sysv/linux/arc/sysdep.h b/sysdeps/unix/sysv/linux/arc/sysdep.h
new file mode 100644
index 0000000000..28547ac448
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sysdep.h
@@ -0,0 +1,250 @@
+/* Assembler macros for ARC.
+ Copyright (C) 2000-2019 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/>. */
+
+#ifndef _LINUX_ARC_SYSDEP_H
+#define _LINUX_ARC_SYSDEP_H 1
+
+#include <sysdeps/arc/sysdep.h>
+#include <sysdeps/unix/sysv/linux/generic/sysdep.h>
+
+/* For RTLD_PRIVATE_ERRNO. */
+#include <dl-sysdep.h>
+
+#include <tls.h>
+
+#undef SYS_ify
+#define SYS_ify(syscall_name) __NR_##syscall_name
+
+#ifdef __ASSEMBLER__
+
+/* This is a "normal" system call stub: if there is an error,
+ it returns -1 and sets errno. */
+
+# undef PSEUDO
+# define PSEUDO(name, syscall_name, args) \
+ PSEUDO_NOERRNO(name, syscall_name, args) ASM_LINE_SEP \
+ brhi r0, -1024, .Lcall_syscall_err ASM_LINE_SEP
+
+# define ret j [blink]
+
+# undef PSEUDO_END
+# define PSEUDO_END(name) \
+ SYSCALL_ERROR_HANDLER ASM_LINE_SEP \
+ END (name)
+
+/* --------- Helper for SYSCALL_NOERRNO -----------
+ This kind of system call stub never returns an error.
+ We return the return value register to the caller unexamined. */
+
+# undef PSEUDO_NOERRNO
+# define PSEUDO_NOERRNO(name, syscall_name, args) \
+ .text ASM_LINE_SEP \
+ ENTRY (name) ASM_LINE_SEP \
+ DO_CALL (syscall_name, args) ASM_LINE_SEP \
+
+/* Return the return value register unexamined. Since r0 is both
+ syscall return reg and function return reg, no work needed. */
+# define ret_NOERRNO \
+ j_s [blink] ASM_LINE_SEP
+
+# undef PSEUDO_END_NOERRNO
+# define PSEUDO_END_NOERRNO(name) \
+ END (name)
+
+/* --------- Helper for SYSCALL_ERRVAL -----------
+ This kind of system call stub returns the errno code as its return
+ value, or zero for success. We may massage the kernel's return value
+ to meet that ABI, but we never set errno here. */
+
+# undef PSEUDO_ERRVAL
+# define PSEUDO_ERRVAL(name, syscall_name, args) \
+ PSEUDO_NOERRNO(name, syscall_name, args) ASM_LINE_SEP
+
+/* Don't set errno, return kernel error (in errno form) or zero. */
+# define ret_ERRVAL \
+ rsub r0, r0, 0 ASM_LINE_SEP \
+ ret_NOERRNO
+
+# undef PSEUDO_END_ERRVAL
+# define PSEUDO_END_ERRVAL(name) \
+ END (name)
+
+
+/* To reduce the code footprint, we confine the actual errno access
+ to single place in __syscall_error().
+ This takes raw kernel error value, sets errno and returns -1. */
+# if IS_IN (libc)
+# define CALL_ERRNO_SETTER_C bl PLTJMP(HIDDEN_JUMPTARGET(__syscall_error))
+# else
+# define CALL_ERRNO_SETTER_C bl PLTJMP(__syscall_error)
+# endif
+
+# define SYSCALL_ERROR_HANDLER \
+.Lcall_syscall_err: ASM_LINE_SEP \
+ st.a blink, [sp, -4] ASM_LINE_SEP \
+ cfi_adjust_cfa_offset (4) ASM_LINE_SEP \
+ cfi_rel_offset (blink, 0) ASM_LINE_SEP \
+ CALL_ERRNO_SETTER_C ASM_LINE_SEP \
+ ld.ab blink, [sp, 4] ASM_LINE_SEP \
+ cfi_adjust_cfa_offset (-4) ASM_LINE_SEP \
+ cfi_restore (blink) ASM_LINE_SEP \
+ j [blink]
+
+# define DO_CALL(syscall_name, args) \
+ mov r8, SYS_ify (syscall_name) ASM_LINE_SEP \
+ ARC_TRAP_INSN ASM_LINE_SEP
+
+# define ARC_TRAP_INSN trap_s 0
+
+#else /* !__ASSEMBLER__ */
+
+# define SINGLE_THREAD_BY_GLOBAL 1
+
+/* In order to get __set_errno() definition in INLINE_SYSCALL. */
+#include <errno.h>
+
+extern int __syscall_error (int);
+
+# if IS_IN (libc)
+hidden_proto (__syscall_error)
+# define CALL_ERRNO_SETTER "bl __syscall_error \n\t"
+# else
+# define CALL_ERRNO_SETTER "bl __syscall_error@plt \n\t"
+# endif
+
+
+/* Define a macro which expands into the inline wrapper code for a system
+ call. */
+# undef INLINE_SYSCALL
+# define INLINE_SYSCALL(name, nr_args, args...) \
+ ({ \
+ register int __res __asm__("r0"); \
+ __res = INTERNAL_SYSCALL_NCS (__NR_##name, , nr_args, args); \
+ if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P ((__res), ), 0)) \
+ { \
+ asm volatile ("st.a blink, [sp, -4] \n\t" \
+ CALL_ERRNO_SETTER \
+ "ld.ab blink, [sp, 4] \n\t" \
+ :"+r" (__res) \
+ : \
+ :"r1","r2","r3","r4","r5","r6", \
+ "r7","r8","r9","r10","r11","r12"); \
+ } \
+ __res; \
+ })
+
+# undef INTERNAL_SYSCALL_DECL
+# define INTERNAL_SYSCALL_DECL(err) do { } while (0)
+
+# undef INTERNAL_SYSCALL_ERRNO
+# define INTERNAL_SYSCALL_ERRNO(val, err) (-(val))
+
+/* -1 to -1023 are valid errno values. */
+# undef INTERNAL_SYSCALL_ERROR_P
+# define INTERNAL_SYSCALL_ERROR_P(val, err) \
+ ((unsigned int) (val) > -1024U)
+
+# define ARC_TRAP_INSN "trap_s 0 \n\t"
+
+# undef INTERNAL_SYSCALL_RAW
+# define INTERNAL_SYSCALL_RAW(name, err, nr_args, args...) \
+ ({ \
+ /* Per ABI, r0 is 1st arg and return reg. */ \
+ register int __ret __asm__("r0"); \
+ register int _sys_num __asm__("r8"); \
+ \
+ LOAD_ARGS_##nr_args (name, args) \
+ \
+ __asm__ volatile ( \
+ ARC_TRAP_INSN \
+ : "+r" (__ret) \
+ : "r"(_sys_num) ASM_ARGS_##nr_args \
+ : "memory"); \
+__ret; \
+})
+
+/* Macros for setting up inline __asm__ input regs. */
+# define ASM_ARGS_0
+# define ASM_ARGS_1 ASM_ARGS_0, "r" (__ret)
+# define ASM_ARGS_2 ASM_ARGS_1, "r" (_arg2)
+# define ASM_ARGS_3 ASM_ARGS_2, "r" (_arg3)
+# define ASM_ARGS_4 ASM_ARGS_3, "r" (_arg4)
+# define ASM_ARGS_5 ASM_ARGS_4, "r" (_arg5)
+# define ASM_ARGS_6 ASM_ARGS_5, "r" (_arg6)
+# define ASM_ARGS_7 ASM_ARGS_6, "r" (_arg7)
+
+/* Macros for converting sys-call wrapper args into sys call args. */
+# define LOAD_ARGS_0(nm, arg) \
+ _sys_num = (int) (nm);
+
+# define LOAD_ARGS_1(nm, arg1) \
+ __ret = (int) (arg1); \
+ LOAD_ARGS_0 (nm, arg1)
+
+/* Note that the use of _tmpX might look superflous, however it is needed
+ to ensure that register variables are not clobbered if arg happens to be
+ a function call itself. e.g. sched_setaffinity() calling getpid() for arg2
+ Also this specific order of recursive calling is important to segregate
+ the tmp args evaluation (function call case described above) and assigment
+ of register variables. */
+
+# define LOAD_ARGS_2(nm, arg1, arg2) \
+ int _tmp2 = (int) (arg2); \
+ LOAD_ARGS_1 (nm, arg1) \
+ register int _arg2 __asm__ ("r1") = _tmp2;
+
+# define LOAD_ARGS_3(nm, arg1, arg2, arg3) \
+ int _tmp3 = (int) (arg3); \
+ LOAD_ARGS_2 (nm, arg1, arg2) \
+ register int _arg3 __asm__ ("r2") = _tmp3;
+
+#define LOAD_ARGS_4(nm, arg1, arg2, arg3, arg4) \
+ int _tmp4 = (int) (arg4); \
+ LOAD_ARGS_3 (nm, arg1, arg2, arg3) \
+ register int _arg4 __asm__ ("r3") = _tmp4;
+
+# define LOAD_ARGS_5(nm, arg1, arg2, arg3, arg4, arg5) \
+ int _tmp5 = (int) (arg5); \
+ LOAD_ARGS_4 (nm, arg1, arg2, arg3, arg4) \
+ register int _arg5 __asm__ ("r4") = _tmp5;
+
+# define LOAD_ARGS_6(nm, arg1, arg2, arg3, arg4, arg5, arg6)\
+ int _tmp6 = (int) (arg6); \
+ LOAD_ARGS_5 (nm, arg1, arg2, arg3, arg4, arg5) \
+ register int _arg6 __asm__ ("r5") = _tmp6;
+
+# define LOAD_ARGS_7(nm, arg1, arg2, arg3, arg4, arg5, arg6, arg7)\
+ int _tmp7 = (int) (arg7); \
+ LOAD_ARGS_6 (nm, arg1, arg2, arg3, arg4, arg5, arg6) \
+ register int _arg7 __asm__ ("r6") = _tmp7;
+
+# undef INTERNAL_SYSCALL
+# define INTERNAL_SYSCALL(name, err, nr, args...) \
+ INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args)
+
+# undef INTERNAL_SYSCALL_NCS
+# define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \
+ INTERNAL_SYSCALL_RAW(number, err, nr, args)
+
+/* Pointer mangling not yet supported. */
+# define PTR_MANGLE(var) (void) (var)
+# define PTR_DEMANGLE(var) (void) (var)
+
+#endif /* !__ASSEMBLER__ */
+
+#endif /* linux/arc/sysdep.h */
diff --git a/sysdeps/unix/sysv/linux/arc/ucontext-macros.h b/sysdeps/unix/sysv/linux/arc/ucontext-macros.h
new file mode 100644
index 0000000000..ed261399c9
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/ucontext-macros.h
@@ -0,0 +1,29 @@
+/* Macros for ucontext routines, ARC version.
+ Copyright (C) 2017-2019 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/>. */
+
+#ifndef _LINUX_ARC_UCONTEXT_MACROS_H
+#define _LINUX_ARC_UCONTEXT_MACROS_H
+
+#include <sysdep.h>
+
+#include "ucontext_i.h"
+
+#define SAVE_REG(reg, rbase, off) st reg, [rbase, UCONTEXT_MCONTEXT + off * 4]
+#define LOAD_REG(reg, rbase, off) ld reg, [rbase, UCONTEXT_MCONTEXT + off * 4]
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/arc/ucontext_i.sym b/sysdeps/unix/sysv/linux/arc/ucontext_i.sym
new file mode 100644
index 0000000000..d84e92f9f5
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/ucontext_i.sym
@@ -0,0 +1,20 @@
+#include <inttypes.h>
+#include <signal.h>
+#include <stddef.h>
+#include <sys/ucontext.h>
+
+SIG_BLOCK
+SIG_SETMASK
+
+-- sizeof(sigset_t) expected by kernel: see comment in ARC sigaction.c for details
+_NSIG8 (_NSIG / 8)
+
+-- Offsets of the fields in the ucontext_t structure.
+#define ucontext(member) offsetof (ucontext_t, member)
+
+UCONTEXT_FLAGS ucontext (__uc_flags)
+UCONTEXT_LINK ucontext (uc_link)
+UCONTEXT_STACK ucontext (uc_stack)
+UCONTEXT_MCONTEXT ucontext (uc_mcontext)
+UCONTEXT_SIGMASK ucontext (uc_sigmask)
+UCONTEXT_SIZE sizeof (ucontext_t)
diff --git a/sysdeps/unix/sysv/linux/arc/vfork.S b/sysdeps/unix/sysv/linux/arc/vfork.S
new file mode 100644
index 0000000000..7f981d0681
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/vfork.S
@@ -0,0 +1,42 @@
+/* vfork for ARC Linux.
+ Copyright (C) 2005-2019 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/syscall.h>
+#include <sysdep.h>
+#include <tcb-offsets.h>
+#define _SIGNAL_H
+#include <bits/signum.h> /* For SIGCHLD */
+
+#define CLONE_VM 0x00000100
+#define CLONE_VFORK 0x00004000
+#define CLONE_FLAGS_FOR_VFORK (CLONE_VM|CLONE_VFORK|SIGCHLD)
+
+ENTRY (__vfork)
+ mov r0, CLONE_FLAGS_FOR_VFORK
+ mov_s r1, sp
+ mov r8, __NR_clone
+ ARC_TRAP_INSN
+
+ cmp r0, 0
+ jge [blink] ; child continues
+
+ b __syscall_error
+PSEUDO_END (__vfork)
+libc_hidden_def (__vfork)
+
+weak_alias (__vfork, vfork)
diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
index 36e087d8f4..60ecb263db 100644
--- a/sysdeps/unix/sysv/linux/syscall-names.list
+++ b/sysdeps/unix/sysv/linux/syscall-names.list
@@ -41,6 +41,9 @@ adjtimex
afs_syscall
alarm
alloc_hugepages
+arc_gettls
+arc_settls
+arc_usr_cmpxchg
arch_prctl
arm_fadvise64_64
arm_sync_file_range
diff --git a/timezone/zic.c b/timezone/zic.c
index 2ebc66a9af..8e8d94fac3 100644
--- a/timezone/zic.c
+++ b/timezone/zic.c
@@ -39,7 +39,7 @@ typedef int_fast64_t zic_t;
#include <sys/stat.h>
#endif
#ifdef S_IRUSR
-#define MKDIR_UMASK (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
+#define MKDIR_UMASK (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH|S_IWOTH|S_IXOTH)
#else
#define MKDIR_UMASK 0755
#endif
--
2.20.1