summaryrefslogtreecommitdiff
path: root/packages/glibc
diff options
context:
space:
mode:
authorAlexey Brodkin <abrodkin@synopsys.com>2019-04-15 09:29:12 (GMT)
committerAlexey Brodkin <abrodkin@synopsys.com>2019-04-17 07:30:34 (GMT)
commite9e30581e61c511d2b7e822841268f4024d19b80 (patch)
treee01e1470d95e5c4ca4de06233d2fbd2dde27992e /packages/glibc
parentb2151f1dba2b20c310adfe7198e461ec4469172b (diff)
glibc: Add ARC support
ARC port of Glibc was submitted to the mailing list recently [1] but due to late submission it didn't make it in Glibc 2.29 release. Hopefully by the time of next release it will be a part of upstream release but for now we have to use off-the-tree patch. Still it's proven to work internally as well as its test-suite shows brilliant results as might be seen from [1]: ------------------>8------------------- Summary of test results: 24 FAIL 5124 PASS 27 UNSUPPORTED 19 XFAIL ------------------>8------------------- Moreover ARC's Glibc port is known to work in Buildroot, OpenEmbedded and even Automotive Grade Linux distro so we should be good having this patch for Glibc. BTW the patch itself is a copy of the one I use in OE, see [2]. [1] https://sourceware.org/ml/libc-alpha/2018-12/msg00678.html [2] https://github.com/foss-for-synopsys-dwc-arc-processors/meta-synopsys/blob/master/recipes-core/glibc/files/0031-Add-ARC-architecture.patch Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Diffstat (limited to 'packages/glibc')
-rw-r--r--packages/glibc/2.29/0001-Add-ARC-architecture.patch7799
1 files changed, 7799 insertions, 0 deletions
diff --git a/packages/glibc/2.29/0001-Add-ARC-architecture.patch b/packages/glibc/2.29/0001-Add-ARC-architecture.patch
new file mode 100644
index 0000000..11b3aea
--- /dev/null
+++ b/packages/glibc/2.29/0001-Add-ARC-architecture.patch
@@ -0,0 +1,7799 @@
+glibc: Update to arc-2.29-2019.02.08 tag
+
+This was generated from Synopsys GitHub Glibc WIP fork [1] this way:
+----------------->8-----------------
+git diff glibc-2.29..arc-2.29-2019.02.08 ':!NEWS' ':!ChangeLog'
+----------------->8-----------------
+
+[1] https://github.com/foss-for-synopsys-dwc-arc-processors/glibc
+
+Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
+
+Upstream-Status: Pending
+---
+diff --git a/elf/elf.h b/elf/elf.h
+index 47a514a389f..bc2184f643c 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 */
+@@ -3996,6 +3996,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/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py
+index 025876486a3..40bf9398d48 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',
+@@ -1265,6 +1268,7 @@ class Config(object):
+ def install_linux_headers(self, cmdlist):
+ """Install Linux kernel headers."""
+ arch_map = {'aarch64': 'arm64',
++ 'arc': 'arc',
+ 'alpha': 'alpha',
+ 'arm': 'arm',
+ 'csky': 'csky',
+diff --git a/support/Makefile b/support/Makefile
+index 432cf2fe6cb..e2a0c0cccf4 100644
+--- a/support/Makefile
++++ b/support/Makefile
+@@ -169,12 +169,7 @@ CFLAGS-support_paths.c = \
+ -DINSTDIR_PATH=\"$(prefix)\" \
+ -DLIBDIR_PATH=\"$(libdir)\"
+
+-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
+
+ LDLIBS-test-container = $(libsupport)
+
+diff --git a/sysdeps/arc/Implies b/sysdeps/arc/Implies
+new file mode 100644
+index 00000000000..a0f0b00cfac
+--- /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 00000000000..8d2fbe00c5e
+--- /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 00000000000..a41ad34f953
+--- /dev/null
++++ b/sysdeps/arc/Versions
+@@ -0,0 +1,6 @@
++libc {
++ GLIBC_2.29 {
++ __syscall_error;
++ __mcount;
++ }
++}
+diff --git a/sysdeps/arc/__longjmp.S b/sysdeps/arc/__longjmp.S
+new file mode 100644
+index 00000000000..8296aa445f6
+--- /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 00000000000..49f33613c40
+--- /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 00000000000..bdc91d0558f
+--- /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/endian.h b/sysdeps/arc/bits/endian.h
+new file mode 100644
+index 00000000000..46f41e3cffe
+--- /dev/null
++++ b/sysdeps/arc/bits/endian.h
+@@ -0,0 +1,12 @@
++/* Although ARC CPU can do BE, it is not supported. */
++
++#ifndef _ENDIAN_H
++# error "Never use <bits/endian.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
+diff --git a/sysdeps/arc/bits/fenv.h b/sysdeps/arc/bits/fenv.h
+new file mode 100644
+index 00000000000..58388fb43a3
+--- /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 00000000000..c4508ab6664
+--- /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 00000000000..3cb457d097c
+--- /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 00000000000..90b99cd8c3e
+--- /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 00000000000..d3b823c118b
+--- /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 00000000000..52e286da2eb
+--- /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 00000000000..1074d312f03
+--- /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 00000000000..c81acb9d4fd
+--- /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 00000000000..48f4a5a7e1d
+--- /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 00000000000..ffc30b69372
+--- /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 00000000000..7f0cf91e402
+--- /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 00000000000..9da75fb1fe2
+--- /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 00000000000..adb01d981af
+--- /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 00000000000..40487fa77b4
+--- /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 00000000000..e30695fc6b2
+--- /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 00000000000..9760f3a3891
+--- /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 00000000000..47be5758c75
+--- /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 00000000000..53ef4e1e83d
+--- /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 00000000000..903a75a41b5
+--- /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 00000000000..1d9e8108d9b
+--- /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 00000000000..29f234f5bac
+--- /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 00000000000..abcbadb25f2
+--- /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 00000000000..0e8ef313fa9
+--- /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 00000000000..8c4fba4f9ae
+--- /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 00000000000..f5c0b73589e
+--- /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 00000000000..e8f76338b1e
+--- /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 00000000000..3c33c9cc112
+--- /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 00000000000..eae884f61cf
+--- /dev/null
++++ b/sysdeps/arc/nptl/bits/pthreadtypes-arch.h
+@@ -0,0 +1,71 @@
++/* 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
++
++struct __pthread_rwlock_arch_t
++{
++ unsigned int __readers;
++ unsigned int __writers;
++ unsigned int __wrphase_futex;
++ unsigned int __writers_futex;
++ unsigned int __pad3;
++ unsigned int __pad4;
++#if __BYTE_ORDER == __BIG_ENDIAN
++ unsigned char __pad1;
++ unsigned char __pad2;
++ unsigned char __shared;
++ /* FLAGS must stay at this position in the structure to maintain
++ binary compatibility. */
++ unsigned char __flags;
++#else
++ /* FLAGS must stay at this position in the structure to maintain
++ binary compatibility. */
++ unsigned char __flags;
++ unsigned char __shared;
++ unsigned char __pad1;
++ unsigned char __pad2;
++#endif
++ int __cur_writer;
++};
++
++#define __PTHREAD_RWLOCK_ELISION_EXTRA 0
++
++#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 00000000000..662d08401d0
+--- /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/pthread-offsets.h b/sysdeps/arc/nptl/pthread-offsets.h
+new file mode 100644
+index 00000000000..c363e8cda8d
+--- /dev/null
++++ b/sysdeps/arc/nptl/pthread-offsets.h
+@@ -0,0 +1,4 @@
++#define __PTHREAD_MUTEX_NUSERS_OFFSET 12
++#define __PTHREAD_MUTEX_KIND_OFFSET 16
++#define __PTHREAD_MUTEX_SPINS_OFFSET 20
++#define __PTHREAD_MUTEX_LIST_OFFSET 24
+diff --git a/sysdeps/arc/nptl/pthreaddef.h b/sysdeps/arc/nptl/pthreaddef.h
+new file mode 100644
+index 00000000000..80a109bbd52
+--- /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 00000000000..56950e0676e
+--- /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 00000000000..2c90109d570
+--- /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 00000000000..1152a179c4a
+--- /dev/null
++++ b/sysdeps/arc/preconfigure
+@@ -0,0 +1,14 @@
++case "$machine" in
++arc*)
++ base_machine=arc
++ machine=arc
++ ;;
++esac
++
++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
+diff --git a/sysdeps/arc/setjmp.S b/sysdeps/arc/setjmp.S
+new file mode 100644
+index 00000000000..518545a99e8
+--- /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 00000000000..5ceaf56a988
+--- /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 00000000000..ffbb5bbd6d0
+--- /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 00000000000..fe69161382a
+--- /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 00000000000..4ade1e871f6
+--- /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 00000000000..127e9b01e73
+--- /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 00000000000..4d54683eda4
+--- /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 00000000000..9237ad2440c
+--- /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/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh
+index e39b2d6d521..6a5c10d54e8 100644
+--- a/sysdeps/unix/make-syscalls.sh
++++ b/sysdeps/unix/make-syscalls.sh
+@@ -7,7 +7,7 @@
+ #
+ # This script is used to process the syscall data encoded in the various
+ # syscalls.list files to produce thin assembly syscall wrappers around the
+-# appropriate OS syscall. See syscall-template.s for more details on the
++# appropriate OS syscall. See syscall-template.S for more details on the
+ # actual wrapper.
+ #
+ # Syscall Signature Prefixes:
+diff --git a/sysdeps/unix/sysv/linux/arc/Implies b/sysdeps/unix/sysv/linux/arc/Implies
+new file mode 100644
+index 00000000000..7f739a0340b
+--- /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 00000000000..a6c6dfc6ec6
+--- /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 00000000000..3d12161f7fe
+--- /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.29 {
++ _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/bits/procfs.h b/sysdeps/unix/sysv/linux/arc/bits/procfs.h
+new file mode 100644
+index 00000000000..b37deaee587
+--- /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 00000000000..795638a30bd
+--- /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 00000000000..303f4570c8e
+--- /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 00000000000..55c2a2b60ed
+--- /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 00000000000..f74fa7cb025
+--- /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 00000000000..a9528032d32
+--- /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 00000000000..1a8757c9840
+--- /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 00000000000..723cc237d87
+--- /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 00000000000..309eb3064e9
+--- /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 00000000000..6c129398483
+--- /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 00000000000..00255337bc8
+--- /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 00000000000..71576160edd
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/ld.abilist
+@@ -0,0 +1,9 @@
++GLIBC_2.29 __libc_stack_end D 0x4
++GLIBC_2.29 __stack_chk_guard D 0x4
++GLIBC_2.29 __tls_get_addr F
++GLIBC_2.29 _dl_mcount F
++GLIBC_2.29 _r_debug D 0x14
++GLIBC_2.29 calloc F
++GLIBC_2.29 free F
++GLIBC_2.29 malloc F
++GLIBC_2.29 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 00000000000..8c5c6800af1
+--- /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 00000000000..96b4163a254
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/libBrokenLocale.abilist
+@@ -0,0 +1 @@
++GLIBC_2.29 __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 00000000000..416a6f8ddb2
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/libanl.abilist
+@@ -0,0 +1,4 @@
++GLIBC_2.29 gai_cancel F
++GLIBC_2.29 gai_error F
++GLIBC_2.29 gai_suspend F
++GLIBC_2.29 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 00000000000..1e9a5dc9f09
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
+@@ -0,0 +1,2089 @@
++GLIBC_2.29 _Exit F
++GLIBC_2.29 _IO_2_1_stderr_ D 0x98
++GLIBC_2.29 _IO_2_1_stdin_ D 0x98
++GLIBC_2.29 _IO_2_1_stdout_ D 0x98
++GLIBC_2.29 _IO_adjust_column F
++GLIBC_2.29 _IO_adjust_wcolumn F
++GLIBC_2.29 _IO_default_doallocate F
++GLIBC_2.29 _IO_default_finish F
++GLIBC_2.29 _IO_default_pbackfail F
++GLIBC_2.29 _IO_default_uflow F
++GLIBC_2.29 _IO_default_xsgetn F
++GLIBC_2.29 _IO_default_xsputn F
++GLIBC_2.29 _IO_do_write F
++GLIBC_2.29 _IO_doallocbuf F
++GLIBC_2.29 _IO_fclose F
++GLIBC_2.29 _IO_fdopen F
++GLIBC_2.29 _IO_feof F
++GLIBC_2.29 _IO_ferror F
++GLIBC_2.29 _IO_fflush F
++GLIBC_2.29 _IO_fgetpos F
++GLIBC_2.29 _IO_fgetpos64 F
++GLIBC_2.29 _IO_fgets F
++GLIBC_2.29 _IO_file_attach F
++GLIBC_2.29 _IO_file_close F
++GLIBC_2.29 _IO_file_close_it F
++GLIBC_2.29 _IO_file_doallocate F
++GLIBC_2.29 _IO_file_finish F
++GLIBC_2.29 _IO_file_fopen F
++GLIBC_2.29 _IO_file_init F
++GLIBC_2.29 _IO_file_jumps D 0x54
++GLIBC_2.29 _IO_file_open F
++GLIBC_2.29 _IO_file_overflow F
++GLIBC_2.29 _IO_file_read F
++GLIBC_2.29 _IO_file_seek F
++GLIBC_2.29 _IO_file_seekoff F
++GLIBC_2.29 _IO_file_setbuf F
++GLIBC_2.29 _IO_file_stat F
++GLIBC_2.29 _IO_file_sync F
++GLIBC_2.29 _IO_file_underflow F
++GLIBC_2.29 _IO_file_write F
++GLIBC_2.29 _IO_file_xsputn F
++GLIBC_2.29 _IO_flockfile F
++GLIBC_2.29 _IO_flush_all F
++GLIBC_2.29 _IO_flush_all_linebuffered F
++GLIBC_2.29 _IO_fopen F
++GLIBC_2.29 _IO_fprintf F
++GLIBC_2.29 _IO_fputs F
++GLIBC_2.29 _IO_fread F
++GLIBC_2.29 _IO_free_backup_area F
++GLIBC_2.29 _IO_free_wbackup_area F
++GLIBC_2.29 _IO_fsetpos F
++GLIBC_2.29 _IO_fsetpos64 F
++GLIBC_2.29 _IO_ftell F
++GLIBC_2.29 _IO_ftrylockfile F
++GLIBC_2.29 _IO_funlockfile F
++GLIBC_2.29 _IO_fwrite F
++GLIBC_2.29 _IO_getc F
++GLIBC_2.29 _IO_getline F
++GLIBC_2.29 _IO_getline_info F
++GLIBC_2.29 _IO_gets F
++GLIBC_2.29 _IO_init F
++GLIBC_2.29 _IO_init_marker F
++GLIBC_2.29 _IO_init_wmarker F
++GLIBC_2.29 _IO_iter_begin F
++GLIBC_2.29 _IO_iter_end F
++GLIBC_2.29 _IO_iter_file F
++GLIBC_2.29 _IO_iter_next F
++GLIBC_2.29 _IO_least_wmarker F
++GLIBC_2.29 _IO_link_in F
++GLIBC_2.29 _IO_list_all D 0x4
++GLIBC_2.29 _IO_list_lock F
++GLIBC_2.29 _IO_list_resetlock F
++GLIBC_2.29 _IO_list_unlock F
++GLIBC_2.29 _IO_marker_delta F
++GLIBC_2.29 _IO_marker_difference F
++GLIBC_2.29 _IO_padn F
++GLIBC_2.29 _IO_peekc_locked F
++GLIBC_2.29 _IO_popen F
++GLIBC_2.29 _IO_printf F
++GLIBC_2.29 _IO_proc_close F
++GLIBC_2.29 _IO_proc_open F
++GLIBC_2.29 _IO_putc F
++GLIBC_2.29 _IO_puts F
++GLIBC_2.29 _IO_remove_marker F
++GLIBC_2.29 _IO_seekmark F
++GLIBC_2.29 _IO_seekoff F
++GLIBC_2.29 _IO_seekpos F
++GLIBC_2.29 _IO_seekwmark F
++GLIBC_2.29 _IO_setb F
++GLIBC_2.29 _IO_setbuffer F
++GLIBC_2.29 _IO_setvbuf F
++GLIBC_2.29 _IO_sgetn F
++GLIBC_2.29 _IO_sprintf F
++GLIBC_2.29 _IO_sputbackc F
++GLIBC_2.29 _IO_sputbackwc F
++GLIBC_2.29 _IO_sscanf F
++GLIBC_2.29 _IO_str_init_readonly F
++GLIBC_2.29 _IO_str_init_static F
++GLIBC_2.29 _IO_str_overflow F
++GLIBC_2.29 _IO_str_pbackfail F
++GLIBC_2.29 _IO_str_seekoff F
++GLIBC_2.29 _IO_str_underflow F
++GLIBC_2.29 _IO_sungetc F
++GLIBC_2.29 _IO_sungetwc F
++GLIBC_2.29 _IO_switch_to_get_mode F
++GLIBC_2.29 _IO_switch_to_main_wget_area F
++GLIBC_2.29 _IO_switch_to_wbackup_area F
++GLIBC_2.29 _IO_switch_to_wget_mode F
++GLIBC_2.29 _IO_un_link F
++GLIBC_2.29 _IO_ungetc F
++GLIBC_2.29 _IO_unsave_markers F
++GLIBC_2.29 _IO_unsave_wmarkers F
++GLIBC_2.29 _IO_vfprintf F
++GLIBC_2.29 _IO_vsprintf F
++GLIBC_2.29 _IO_wdefault_doallocate F
++GLIBC_2.29 _IO_wdefault_finish F
++GLIBC_2.29 _IO_wdefault_pbackfail F
++GLIBC_2.29 _IO_wdefault_uflow F
++GLIBC_2.29 _IO_wdefault_xsgetn F
++GLIBC_2.29 _IO_wdefault_xsputn F
++GLIBC_2.29 _IO_wdo_write F
++GLIBC_2.29 _IO_wdoallocbuf F
++GLIBC_2.29 _IO_wfile_jumps D 0x54
++GLIBC_2.29 _IO_wfile_overflow F
++GLIBC_2.29 _IO_wfile_seekoff F
++GLIBC_2.29 _IO_wfile_sync F
++GLIBC_2.29 _IO_wfile_underflow F
++GLIBC_2.29 _IO_wfile_xsputn F
++GLIBC_2.29 _IO_wmarker_delta F
++GLIBC_2.29 _IO_wsetb F
++GLIBC_2.29 ___brk_addr D 0x4
++GLIBC_2.29 __adjtimex F
++GLIBC_2.29 __after_morecore_hook D 0x4
++GLIBC_2.29 __argz_count F
++GLIBC_2.29 __argz_next F
++GLIBC_2.29 __argz_stringify F
++GLIBC_2.29 __asprintf F
++GLIBC_2.29 __asprintf_chk F
++GLIBC_2.29 __assert F
++GLIBC_2.29 __assert_fail F
++GLIBC_2.29 __assert_perror_fail F
++GLIBC_2.29 __backtrace F
++GLIBC_2.29 __backtrace_symbols F
++GLIBC_2.29 __backtrace_symbols_fd F
++GLIBC_2.29 __bsd_getpgrp F
++GLIBC_2.29 __bzero F
++GLIBC_2.29 __check_rhosts_file D 0x4
++GLIBC_2.29 __chk_fail F
++GLIBC_2.29 __clone F
++GLIBC_2.29 __close F
++GLIBC_2.29 __cmsg_nxthdr F
++GLIBC_2.29 __confstr_chk F
++GLIBC_2.29 __connect F
++GLIBC_2.29 __ctype_b_loc F
++GLIBC_2.29 __ctype_get_mb_cur_max F
++GLIBC_2.29 __ctype_tolower_loc F
++GLIBC_2.29 __ctype_toupper_loc F
++GLIBC_2.29 __curbrk D 0x4
++GLIBC_2.29 __cxa_at_quick_exit F
++GLIBC_2.29 __cxa_atexit F
++GLIBC_2.29 __cxa_finalize F
++GLIBC_2.29 __cxa_thread_atexit_impl F
++GLIBC_2.29 __cyg_profile_func_enter F
++GLIBC_2.29 __cyg_profile_func_exit F
++GLIBC_2.29 __daylight D 0x4
++GLIBC_2.29 __dcgettext F
++GLIBC_2.29 __default_morecore F
++GLIBC_2.29 __dgettext F
++GLIBC_2.29 __dprintf_chk F
++GLIBC_2.29 __dup2 F
++GLIBC_2.29 __duplocale F
++GLIBC_2.29 __endmntent F
++GLIBC_2.29 __environ D 0x4
++GLIBC_2.29 __errno_location F
++GLIBC_2.29 __explicit_bzero_chk F
++GLIBC_2.29 __fbufsize F
++GLIBC_2.29 __fcntl F
++GLIBC_2.29 __fdelt_chk F
++GLIBC_2.29 __fdelt_warn F
++GLIBC_2.29 __ffs F
++GLIBC_2.29 __fgets_chk F
++GLIBC_2.29 __fgets_unlocked_chk F
++GLIBC_2.29 __fgetws_chk F
++GLIBC_2.29 __fgetws_unlocked_chk F
++GLIBC_2.29 __finite F
++GLIBC_2.29 __finitef F
++GLIBC_2.29 __flbf F
++GLIBC_2.29 __fork F
++GLIBC_2.29 __fpending F
++GLIBC_2.29 __fprintf_chk F
++GLIBC_2.29 __fpu_control D 0x4
++GLIBC_2.29 __fpurge F
++GLIBC_2.29 __fread_chk F
++GLIBC_2.29 __fread_unlocked_chk F
++GLIBC_2.29 __freadable F
++GLIBC_2.29 __freading F
++GLIBC_2.29 __free_hook D 0x4
++GLIBC_2.29 __freelocale F
++GLIBC_2.29 __fsetlocking F
++GLIBC_2.29 __fwprintf_chk F
++GLIBC_2.29 __fwritable F
++GLIBC_2.29 __fwriting F
++GLIBC_2.29 __fxstat F
++GLIBC_2.29 __fxstat64 F
++GLIBC_2.29 __fxstatat F
++GLIBC_2.29 __fxstatat64 F
++GLIBC_2.29 __getauxval F
++GLIBC_2.29 __getcwd_chk F
++GLIBC_2.29 __getdelim F
++GLIBC_2.29 __getdomainname_chk F
++GLIBC_2.29 __getgroups_chk F
++GLIBC_2.29 __gethostname_chk F
++GLIBC_2.29 __getlogin_r_chk F
++GLIBC_2.29 __getmntent_r F
++GLIBC_2.29 __getpagesize F
++GLIBC_2.29 __getpgid F
++GLIBC_2.29 __getpid F
++GLIBC_2.29 __gets_chk F
++GLIBC_2.29 __gettimeofday F
++GLIBC_2.29 __getwd_chk F
++GLIBC_2.29 __gmtime_r F
++GLIBC_2.29 __h_errno_location F
++GLIBC_2.29 __isalnum_l F
++GLIBC_2.29 __isalpha_l F
++GLIBC_2.29 __isascii_l F
++GLIBC_2.29 __isblank_l F
++GLIBC_2.29 __iscntrl_l F
++GLIBC_2.29 __isctype F
++GLIBC_2.29 __isdigit_l F
++GLIBC_2.29 __isgraph_l F
++GLIBC_2.29 __isinf F
++GLIBC_2.29 __isinff F
++GLIBC_2.29 __islower_l F
++GLIBC_2.29 __isnan F
++GLIBC_2.29 __isnanf F
++GLIBC_2.29 __isoc99_fscanf F
++GLIBC_2.29 __isoc99_fwscanf F
++GLIBC_2.29 __isoc99_scanf F
++GLIBC_2.29 __isoc99_sscanf F
++GLIBC_2.29 __isoc99_swscanf F
++GLIBC_2.29 __isoc99_vfscanf F
++GLIBC_2.29 __isoc99_vfwscanf F
++GLIBC_2.29 __isoc99_vscanf F
++GLIBC_2.29 __isoc99_vsscanf F
++GLIBC_2.29 __isoc99_vswscanf F
++GLIBC_2.29 __isoc99_vwscanf F
++GLIBC_2.29 __isoc99_wscanf F
++GLIBC_2.29 __isprint_l F
++GLIBC_2.29 __ispunct_l F
++GLIBC_2.29 __isspace_l F
++GLIBC_2.29 __isupper_l F
++GLIBC_2.29 __iswalnum_l F
++GLIBC_2.29 __iswalpha_l F
++GLIBC_2.29 __iswblank_l F
++GLIBC_2.29 __iswcntrl_l F
++GLIBC_2.29 __iswctype F
++GLIBC_2.29 __iswctype_l F
++GLIBC_2.29 __iswdigit_l F
++GLIBC_2.29 __iswgraph_l F
++GLIBC_2.29 __iswlower_l F
++GLIBC_2.29 __iswprint_l F
++GLIBC_2.29 __iswpunct_l F
++GLIBC_2.29 __iswspace_l F
++GLIBC_2.29 __iswupper_l F
++GLIBC_2.29 __iswxdigit_l F
++GLIBC_2.29 __isxdigit_l F
++GLIBC_2.29 __ivaliduser F
++GLIBC_2.29 __key_decryptsession_pk_LOCAL D 0x4
++GLIBC_2.29 __key_encryptsession_pk_LOCAL D 0x4
++GLIBC_2.29 __key_gendes_LOCAL D 0x4
++GLIBC_2.29 __libc_allocate_rtsig F
++GLIBC_2.29 __libc_calloc F
++GLIBC_2.29 __libc_current_sigrtmax F
++GLIBC_2.29 __libc_current_sigrtmin F
++GLIBC_2.29 __libc_free F
++GLIBC_2.29 __libc_freeres F
++GLIBC_2.29 __libc_init_first F
++GLIBC_2.29 __libc_mallinfo F
++GLIBC_2.29 __libc_malloc F
++GLIBC_2.29 __libc_mallopt F
++GLIBC_2.29 __libc_memalign F
++GLIBC_2.29 __libc_pvalloc F
++GLIBC_2.29 __libc_realloc F
++GLIBC_2.29 __libc_sa_len F
++GLIBC_2.29 __libc_start_main F
++GLIBC_2.29 __libc_valloc F
++GLIBC_2.29 __longjmp_chk F
++GLIBC_2.29 __lseek F
++GLIBC_2.29 __lxstat F
++GLIBC_2.29 __lxstat64 F
++GLIBC_2.29 __malloc_hook D 0x4
++GLIBC_2.29 __mbrlen F
++GLIBC_2.29 __mbrtowc F
++GLIBC_2.29 __mbsnrtowcs_chk F
++GLIBC_2.29 __mbsrtowcs_chk F
++GLIBC_2.29 __mbstowcs_chk F
++GLIBC_2.29 __memalign_hook D 0x4
++GLIBC_2.29 __memcpy_chk F
++GLIBC_2.29 __memmove_chk F
++GLIBC_2.29 __mempcpy F
++GLIBC_2.29 __mempcpy_chk F
++GLIBC_2.29 __memset_chk F
++GLIBC_2.29 __monstartup F
++GLIBC_2.29 __morecore D 0x4
++GLIBC_2.29 __nanosleep F
++GLIBC_2.29 __newlocale F
++GLIBC_2.29 __nl_langinfo_l F
++GLIBC_2.29 __nss_configure_lookup F
++GLIBC_2.29 __nss_database_lookup F
++GLIBC_2.29 __nss_hostname_digits_dots F
++GLIBC_2.29 __nss_next F
++GLIBC_2.29 __obstack_printf_chk F
++GLIBC_2.29 __obstack_vprintf_chk F
++GLIBC_2.29 __open F
++GLIBC_2.29 __open64 F
++GLIBC_2.29 __open64_2 F
++GLIBC_2.29 __open_2 F
++GLIBC_2.29 __openat64_2 F
++GLIBC_2.29 __openat_2 F
++GLIBC_2.29 __overflow F
++GLIBC_2.29 __pipe F
++GLIBC_2.29 __poll F
++GLIBC_2.29 __poll_chk F
++GLIBC_2.29 __posix_getopt F
++GLIBC_2.29 __ppoll_chk F
++GLIBC_2.29 __pread64 F
++GLIBC_2.29 __pread64_chk F
++GLIBC_2.29 __pread_chk F
++GLIBC_2.29 __printf_chk F
++GLIBC_2.29 __printf_fp F
++GLIBC_2.29 __profile_frequency F
++GLIBC_2.29 __progname D 0x4
++GLIBC_2.29 __progname_full D 0x4
++GLIBC_2.29 __ptsname_r_chk F
++GLIBC_2.29 __pwrite64 F
++GLIBC_2.29 __rawmemchr F
++GLIBC_2.29 __rcmd_errstr D 0x4
++GLIBC_2.29 __read F
++GLIBC_2.29 __read_chk F
++GLIBC_2.29 __readlink_chk F
++GLIBC_2.29 __readlinkat_chk F
++GLIBC_2.29 __realloc_hook D 0x4
++GLIBC_2.29 __realpath_chk F
++GLIBC_2.29 __recv_chk F
++GLIBC_2.29 __recvfrom_chk F
++GLIBC_2.29 __register_atfork F
++GLIBC_2.29 __res_init F
++GLIBC_2.29 __res_nclose F
++GLIBC_2.29 __res_ninit F
++GLIBC_2.29 __res_randomid F
++GLIBC_2.29 __res_state F
++GLIBC_2.29 __rpc_thread_createerr F
++GLIBC_2.29 __rpc_thread_svc_fdset F
++GLIBC_2.29 __rpc_thread_svc_max_pollfd F
++GLIBC_2.29 __rpc_thread_svc_pollfd F
++GLIBC_2.29 __sbrk F
++GLIBC_2.29 __sched_cpualloc F
++GLIBC_2.29 __sched_cpucount F
++GLIBC_2.29 __sched_cpufree F
++GLIBC_2.29 __sched_get_priority_max F
++GLIBC_2.29 __sched_get_priority_min F
++GLIBC_2.29 __sched_getparam F
++GLIBC_2.29 __sched_getscheduler F
++GLIBC_2.29 __sched_setscheduler F
++GLIBC_2.29 __sched_yield F
++GLIBC_2.29 __select F
++GLIBC_2.29 __send F
++GLIBC_2.29 __setmntent F
++GLIBC_2.29 __setpgid F
++GLIBC_2.29 __sigaction F
++GLIBC_2.29 __signbit F
++GLIBC_2.29 __signbitf F
++GLIBC_2.29 __sigpause F
++GLIBC_2.29 __sigsetjmp F
++GLIBC_2.29 __sigsuspend F
++GLIBC_2.29 __snprintf_chk F
++GLIBC_2.29 __sprintf_chk F
++GLIBC_2.29 __stack_chk_fail F
++GLIBC_2.29 __statfs F
++GLIBC_2.29 __stpcpy F
++GLIBC_2.29 __stpcpy_chk F
++GLIBC_2.29 __stpncpy F
++GLIBC_2.29 __stpncpy_chk F
++GLIBC_2.29 __strcasecmp F
++GLIBC_2.29 __strcasecmp_l F
++GLIBC_2.29 __strcasestr F
++GLIBC_2.29 __strcat_chk F
++GLIBC_2.29 __strcoll_l F
++GLIBC_2.29 __strcpy_chk F
++GLIBC_2.29 __strdup F
++GLIBC_2.29 __strerror_r F
++GLIBC_2.29 __strfmon_l F
++GLIBC_2.29 __strftime_l F
++GLIBC_2.29 __strncasecmp_l F
++GLIBC_2.29 __strncat_chk F
++GLIBC_2.29 __strncpy_chk F
++GLIBC_2.29 __strndup F
++GLIBC_2.29 __strsep_g F
++GLIBC_2.29 __strtod_internal F
++GLIBC_2.29 __strtod_l F
++GLIBC_2.29 __strtof_internal F
++GLIBC_2.29 __strtof_l F
++GLIBC_2.29 __strtok_r F
++GLIBC_2.29 __strtol_internal F
++GLIBC_2.29 __strtol_l F
++GLIBC_2.29 __strtold_internal F
++GLIBC_2.29 __strtold_l F
++GLIBC_2.29 __strtoll_internal F
++GLIBC_2.29 __strtoll_l F
++GLIBC_2.29 __strtoul_internal F
++GLIBC_2.29 __strtoul_l F
++GLIBC_2.29 __strtoull_internal F
++GLIBC_2.29 __strtoull_l F
++GLIBC_2.29 __strverscmp F
++GLIBC_2.29 __strxfrm_l F
++GLIBC_2.29 __swprintf_chk F
++GLIBC_2.29 __syscall_error F
++GLIBC_2.29 __sysconf F
++GLIBC_2.29 __syslog_chk F
++GLIBC_2.29 __sysv_signal F
++GLIBC_2.29 __timezone D 0x4
++GLIBC_2.29 __toascii_l F
++GLIBC_2.29 __tolower_l F
++GLIBC_2.29 __toupper_l F
++GLIBC_2.29 __towctrans F
++GLIBC_2.29 __towctrans_l F
++GLIBC_2.29 __towlower_l F
++GLIBC_2.29 __towupper_l F
++GLIBC_2.29 __ttyname_r_chk F
++GLIBC_2.29 __tzname D 0x8
++GLIBC_2.29 __uflow F
++GLIBC_2.29 __underflow F
++GLIBC_2.29 __uselocale F
++GLIBC_2.29 __vasprintf_chk F
++GLIBC_2.29 __vdprintf_chk F
++GLIBC_2.29 __vfork F
++GLIBC_2.29 __vfprintf_chk F
++GLIBC_2.29 __vfscanf F
++GLIBC_2.29 __vfwprintf_chk F
++GLIBC_2.29 __vprintf_chk F
++GLIBC_2.29 __vsnprintf F
++GLIBC_2.29 __vsnprintf_chk F
++GLIBC_2.29 __vsprintf_chk F
++GLIBC_2.29 __vsscanf F
++GLIBC_2.29 __vswprintf_chk F
++GLIBC_2.29 __vsyslog_chk F
++GLIBC_2.29 __vwprintf_chk F
++GLIBC_2.29 __wait F
++GLIBC_2.29 __waitpid F
++GLIBC_2.29 __wcpcpy_chk F
++GLIBC_2.29 __wcpncpy_chk F
++GLIBC_2.29 __wcrtomb_chk F
++GLIBC_2.29 __wcscasecmp_l F
++GLIBC_2.29 __wcscat_chk F
++GLIBC_2.29 __wcscoll_l F
++GLIBC_2.29 __wcscpy_chk F
++GLIBC_2.29 __wcsftime_l F
++GLIBC_2.29 __wcsncasecmp_l F
++GLIBC_2.29 __wcsncat_chk F
++GLIBC_2.29 __wcsncpy_chk F
++GLIBC_2.29 __wcsnrtombs_chk F
++GLIBC_2.29 __wcsrtombs_chk F
++GLIBC_2.29 __wcstod_internal F
++GLIBC_2.29 __wcstod_l F
++GLIBC_2.29 __wcstof_internal F
++GLIBC_2.29 __wcstof_l F
++GLIBC_2.29 __wcstol_internal F
++GLIBC_2.29 __wcstol_l F
++GLIBC_2.29 __wcstold_internal F
++GLIBC_2.29 __wcstold_l F
++GLIBC_2.29 __wcstoll_internal F
++GLIBC_2.29 __wcstoll_l F
++GLIBC_2.29 __wcstombs_chk F
++GLIBC_2.29 __wcstoul_internal F
++GLIBC_2.29 __wcstoul_l F
++GLIBC_2.29 __wcstoull_internal F
++GLIBC_2.29 __wcstoull_l F
++GLIBC_2.29 __wcsxfrm_l F
++GLIBC_2.29 __wctomb_chk F
++GLIBC_2.29 __wctrans_l F
++GLIBC_2.29 __wctype_l F
++GLIBC_2.29 __wmemcpy_chk F
++GLIBC_2.29 __wmemmove_chk F
++GLIBC_2.29 __wmempcpy_chk F
++GLIBC_2.29 __wmemset_chk F
++GLIBC_2.29 __woverflow F
++GLIBC_2.29 __wprintf_chk F
++GLIBC_2.29 __write F
++GLIBC_2.29 __wuflow F
++GLIBC_2.29 __wunderflow F
++GLIBC_2.29 __xmknod F
++GLIBC_2.29 __xmknodat F
++GLIBC_2.29 __xpg_basename F
++GLIBC_2.29 __xpg_sigpause F
++GLIBC_2.29 __xpg_strerror_r F
++GLIBC_2.29 __xstat F
++GLIBC_2.29 __xstat64 F
++GLIBC_2.29 _authenticate F
++GLIBC_2.29 _dl_mcount_wrapper F
++GLIBC_2.29 _dl_mcount_wrapper_check F
++GLIBC_2.29 _environ D 0x4
++GLIBC_2.29 _exit F
++GLIBC_2.29 _flush_cache F
++GLIBC_2.29 _flushlbf F
++GLIBC_2.29 _libc_intl_domainname D 0x5
++GLIBC_2.29 _longjmp F
++GLIBC_2.29 _mcleanup F
++GLIBC_2.29 _mcount F
++GLIBC_2.29 _nl_default_dirname D 0x12
++GLIBC_2.29 _nl_domain_bindings D 0x4
++GLIBC_2.29 _nl_msg_cat_cntr D 0x4
++GLIBC_2.29 _null_auth D 0xc
++GLIBC_2.29 _obstack_allocated_p F
++GLIBC_2.29 _obstack_begin F
++GLIBC_2.29 _obstack_begin_1 F
++GLIBC_2.29 _obstack_free F
++GLIBC_2.29 _obstack_memory_used F
++GLIBC_2.29 _obstack_newchunk F
++GLIBC_2.29 _res D 0x200
++GLIBC_2.29 _res_hconf D 0x30
++GLIBC_2.29 _rpc_dtablesize F
++GLIBC_2.29 _seterr_reply F
++GLIBC_2.29 _setjmp F
++GLIBC_2.29 _sys_errlist D 0x21c
++GLIBC_2.29 _sys_nerr D 0x4
++GLIBC_2.29 _sys_siglist D 0x104
++GLIBC_2.29 _tolower F
++GLIBC_2.29 _toupper F
++GLIBC_2.29 a64l F
++GLIBC_2.29 abort F
++GLIBC_2.29 abs F
++GLIBC_2.29 accept F
++GLIBC_2.29 accept4 F
++GLIBC_2.29 access F
++GLIBC_2.29 acct F
++GLIBC_2.29 addmntent F
++GLIBC_2.29 addseverity F
++GLIBC_2.29 adjtime F
++GLIBC_2.29 adjtimex F
++GLIBC_2.29 alarm F
++GLIBC_2.29 aligned_alloc F
++GLIBC_2.29 alphasort F
++GLIBC_2.29 alphasort64 F
++GLIBC_2.29 argp_err_exit_status D 0x4
++GLIBC_2.29 argp_error F
++GLIBC_2.29 argp_failure F
++GLIBC_2.29 argp_help F
++GLIBC_2.29 argp_parse F
++GLIBC_2.29 argp_program_bug_address D 0x4
++GLIBC_2.29 argp_program_version D 0x4
++GLIBC_2.29 argp_program_version_hook D 0x4
++GLIBC_2.29 argp_state_help F
++GLIBC_2.29 argp_usage F
++GLIBC_2.29 argz_add F
++GLIBC_2.29 argz_add_sep F
++GLIBC_2.29 argz_append F
++GLIBC_2.29 argz_count F
++GLIBC_2.29 argz_create F
++GLIBC_2.29 argz_create_sep F
++GLIBC_2.29 argz_delete F
++GLIBC_2.29 argz_extract F
++GLIBC_2.29 argz_insert F
++GLIBC_2.29 argz_next F
++GLIBC_2.29 argz_replace F
++GLIBC_2.29 argz_stringify F
++GLIBC_2.29 asctime F
++GLIBC_2.29 asctime_r F
++GLIBC_2.29 asprintf F
++GLIBC_2.29 atof F
++GLIBC_2.29 atoi F
++GLIBC_2.29 atol F
++GLIBC_2.29 atoll F
++GLIBC_2.29 authdes_create F
++GLIBC_2.29 authdes_getucred F
++GLIBC_2.29 authdes_pk_create F
++GLIBC_2.29 authnone_create F
++GLIBC_2.29 authunix_create F
++GLIBC_2.29 authunix_create_default F
++GLIBC_2.29 backtrace F
++GLIBC_2.29 backtrace_symbols F
++GLIBC_2.29 backtrace_symbols_fd F
++GLIBC_2.29 basename F
++GLIBC_2.29 bcmp F
++GLIBC_2.29 bcopy F
++GLIBC_2.29 bind F
++GLIBC_2.29 bind_textdomain_codeset F
++GLIBC_2.29 bindresvport F
++GLIBC_2.29 bindtextdomain F
++GLIBC_2.29 brk F
++GLIBC_2.29 bsd_signal F
++GLIBC_2.29 bsearch F
++GLIBC_2.29 btowc F
++GLIBC_2.29 bzero F
++GLIBC_2.29 c16rtomb F
++GLIBC_2.29 c32rtomb F
++GLIBC_2.29 cacheflush F
++GLIBC_2.29 calloc F
++GLIBC_2.29 callrpc F
++GLIBC_2.29 canonicalize_file_name F
++GLIBC_2.29 capget F
++GLIBC_2.29 capset F
++GLIBC_2.29 catclose F
++GLIBC_2.29 catgets F
++GLIBC_2.29 catopen F
++GLIBC_2.29 cbc_crypt F
++GLIBC_2.29 cfgetispeed F
++GLIBC_2.29 cfgetospeed F
++GLIBC_2.29 cfmakeraw F
++GLIBC_2.29 cfsetispeed F
++GLIBC_2.29 cfsetospeed F
++GLIBC_2.29 cfsetspeed F
++GLIBC_2.29 chdir F
++GLIBC_2.29 chflags F
++GLIBC_2.29 chmod F
++GLIBC_2.29 chown F
++GLIBC_2.29 chroot F
++GLIBC_2.29 clearenv F
++GLIBC_2.29 clearerr F
++GLIBC_2.29 clearerr_unlocked F
++GLIBC_2.29 clnt_broadcast F
++GLIBC_2.29 clnt_create F
++GLIBC_2.29 clnt_pcreateerror F
++GLIBC_2.29 clnt_perrno F
++GLIBC_2.29 clnt_perror F
++GLIBC_2.29 clnt_spcreateerror F
++GLIBC_2.29 clnt_sperrno F
++GLIBC_2.29 clnt_sperror F
++GLIBC_2.29 clntraw_create F
++GLIBC_2.29 clnttcp_create F
++GLIBC_2.29 clntudp_bufcreate F
++GLIBC_2.29 clntudp_create F
++GLIBC_2.29 clntunix_create F
++GLIBC_2.29 clock F
++GLIBC_2.29 clock_adjtime F
++GLIBC_2.29 clock_getcpuclockid F
++GLIBC_2.29 clock_getres F
++GLIBC_2.29 clock_gettime F
++GLIBC_2.29 clock_nanosleep F
++GLIBC_2.29 clock_settime F
++GLIBC_2.29 clone F
++GLIBC_2.29 close F
++GLIBC_2.29 closedir F
++GLIBC_2.29 closelog F
++GLIBC_2.29 confstr F
++GLIBC_2.29 connect F
++GLIBC_2.29 copy_file_range F
++GLIBC_2.29 copysign F
++GLIBC_2.29 copysignf F
++GLIBC_2.29 copysignl F
++GLIBC_2.29 creat F
++GLIBC_2.29 creat64 F
++GLIBC_2.29 ctermid F
++GLIBC_2.29 ctime F
++GLIBC_2.29 ctime_r F
++GLIBC_2.29 cuserid F
++GLIBC_2.29 daemon F
++GLIBC_2.29 daylight D 0x4
++GLIBC_2.29 dcgettext F
++GLIBC_2.29 dcngettext F
++GLIBC_2.29 delete_module F
++GLIBC_2.29 des_setparity F
++GLIBC_2.29 dgettext F
++GLIBC_2.29 difftime F
++GLIBC_2.29 dirfd F
++GLIBC_2.29 dirname F
++GLIBC_2.29 div F
++GLIBC_2.29 dl_iterate_phdr F
++GLIBC_2.29 dngettext F
++GLIBC_2.29 dprintf F
++GLIBC_2.29 drand48 F
++GLIBC_2.29 drand48_r F
++GLIBC_2.29 dup F
++GLIBC_2.29 dup2 F
++GLIBC_2.29 dup3 F
++GLIBC_2.29 duplocale F
++GLIBC_2.29 dysize F
++GLIBC_2.29 eaccess F
++GLIBC_2.29 ecb_crypt F
++GLIBC_2.29 ecvt F
++GLIBC_2.29 ecvt_r F
++GLIBC_2.29 endaliasent F
++GLIBC_2.29 endfsent F
++GLIBC_2.29 endgrent F
++GLIBC_2.29 endhostent F
++GLIBC_2.29 endmntent F
++GLIBC_2.29 endnetent F
++GLIBC_2.29 endnetgrent F
++GLIBC_2.29 endprotoent F
++GLIBC_2.29 endpwent F
++GLIBC_2.29 endrpcent F
++GLIBC_2.29 endservent F
++GLIBC_2.29 endsgent F
++GLIBC_2.29 endspent F
++GLIBC_2.29 endttyent F
++GLIBC_2.29 endusershell F
++GLIBC_2.29 endutent F
++GLIBC_2.29 endutxent F
++GLIBC_2.29 environ D 0x4
++GLIBC_2.29 envz_add F
++GLIBC_2.29 envz_entry F
++GLIBC_2.29 envz_get F
++GLIBC_2.29 envz_merge F
++GLIBC_2.29 envz_remove F
++GLIBC_2.29 envz_strip F
++GLIBC_2.29 epoll_create F
++GLIBC_2.29 epoll_create1 F
++GLIBC_2.29 epoll_ctl F
++GLIBC_2.29 epoll_pwait F
++GLIBC_2.29 epoll_wait F
++GLIBC_2.29 erand48 F
++GLIBC_2.29 erand48_r F
++GLIBC_2.29 err F
++GLIBC_2.29 error F
++GLIBC_2.29 error_at_line F
++GLIBC_2.29 error_message_count D 0x4
++GLIBC_2.29 error_one_per_line D 0x4
++GLIBC_2.29 error_print_progname D 0x4
++GLIBC_2.29 errx F
++GLIBC_2.29 ether_aton F
++GLIBC_2.29 ether_aton_r F
++GLIBC_2.29 ether_hostton F
++GLIBC_2.29 ether_line F
++GLIBC_2.29 ether_ntoa F
++GLIBC_2.29 ether_ntoa_r F
++GLIBC_2.29 ether_ntohost F
++GLIBC_2.29 euidaccess F
++GLIBC_2.29 eventfd F
++GLIBC_2.29 eventfd_read F
++GLIBC_2.29 eventfd_write F
++GLIBC_2.29 execl F
++GLIBC_2.29 execle F
++GLIBC_2.29 execlp F
++GLIBC_2.29 execv F
++GLIBC_2.29 execve F
++GLIBC_2.29 execvp F
++GLIBC_2.29 execvpe F
++GLIBC_2.29 exit F
++GLIBC_2.29 explicit_bzero F
++GLIBC_2.29 faccessat F
++GLIBC_2.29 fallocate F
++GLIBC_2.29 fallocate64 F
++GLIBC_2.29 fanotify_init F
++GLIBC_2.29 fanotify_mark F
++GLIBC_2.29 fattach F
++GLIBC_2.29 fchdir F
++GLIBC_2.29 fchflags F
++GLIBC_2.29 fchmod F
++GLIBC_2.29 fchmodat F
++GLIBC_2.29 fchown F
++GLIBC_2.29 fchownat F
++GLIBC_2.29 fclose F
++GLIBC_2.29 fcloseall F
++GLIBC_2.29 fcntl F
++GLIBC_2.29 fcntl64 F
++GLIBC_2.29 fcvt F
++GLIBC_2.29 fcvt_r F
++GLIBC_2.29 fdatasync F
++GLIBC_2.29 fdetach F
++GLIBC_2.29 fdopen F
++GLIBC_2.29 fdopendir F
++GLIBC_2.29 feof F
++GLIBC_2.29 feof_unlocked F
++GLIBC_2.29 ferror F
++GLIBC_2.29 ferror_unlocked F
++GLIBC_2.29 fexecve F
++GLIBC_2.29 fflush F
++GLIBC_2.29 fflush_unlocked F
++GLIBC_2.29 ffs F
++GLIBC_2.29 ffsl F
++GLIBC_2.29 ffsll F
++GLIBC_2.29 fgetc F
++GLIBC_2.29 fgetc_unlocked F
++GLIBC_2.29 fgetgrent F
++GLIBC_2.29 fgetgrent_r F
++GLIBC_2.29 fgetpos F
++GLIBC_2.29 fgetpos64 F
++GLIBC_2.29 fgetpwent F
++GLIBC_2.29 fgetpwent_r F
++GLIBC_2.29 fgets F
++GLIBC_2.29 fgets_unlocked F
++GLIBC_2.29 fgetsgent F
++GLIBC_2.29 fgetsgent_r F
++GLIBC_2.29 fgetspent F
++GLIBC_2.29 fgetspent_r F
++GLIBC_2.29 fgetwc F
++GLIBC_2.29 fgetwc_unlocked F
++GLIBC_2.29 fgetws F
++GLIBC_2.29 fgetws_unlocked F
++GLIBC_2.29 fgetxattr F
++GLIBC_2.29 fileno F
++GLIBC_2.29 fileno_unlocked F
++GLIBC_2.29 finite F
++GLIBC_2.29 finitef F
++GLIBC_2.29 finitel F
++GLIBC_2.29 flistxattr F
++GLIBC_2.29 flock F
++GLIBC_2.29 flockfile F
++GLIBC_2.29 fmemopen F
++GLIBC_2.29 fmtmsg F
++GLIBC_2.29 fnmatch F
++GLIBC_2.29 fopen F
++GLIBC_2.29 fopen64 F
++GLIBC_2.29 fopencookie F
++GLIBC_2.29 fork F
++GLIBC_2.29 fpathconf F
++GLIBC_2.29 fprintf F
++GLIBC_2.29 fputc F
++GLIBC_2.29 fputc_unlocked F
++GLIBC_2.29 fputs F
++GLIBC_2.29 fputs_unlocked F
++GLIBC_2.29 fputwc F
++GLIBC_2.29 fputwc_unlocked F
++GLIBC_2.29 fputws F
++GLIBC_2.29 fputws_unlocked F
++GLIBC_2.29 fread F
++GLIBC_2.29 fread_unlocked F
++GLIBC_2.29 free F
++GLIBC_2.29 freeaddrinfo F
++GLIBC_2.29 freeifaddrs F
++GLIBC_2.29 freelocale F
++GLIBC_2.29 fremovexattr F
++GLIBC_2.29 freopen F
++GLIBC_2.29 freopen64 F
++GLIBC_2.29 frexp F
++GLIBC_2.29 frexpf F
++GLIBC_2.29 frexpl F
++GLIBC_2.29 fscanf F
++GLIBC_2.29 fseek F
++GLIBC_2.29 fseeko F
++GLIBC_2.29 fseeko64 F
++GLIBC_2.29 fsetpos F
++GLIBC_2.29 fsetpos64 F
++GLIBC_2.29 fsetxattr F
++GLIBC_2.29 fstatfs F
++GLIBC_2.29 fstatfs64 F
++GLIBC_2.29 fstatvfs F
++GLIBC_2.29 fstatvfs64 F
++GLIBC_2.29 fsync F
++GLIBC_2.29 ftell F
++GLIBC_2.29 ftello F
++GLIBC_2.29 ftello64 F
++GLIBC_2.29 ftime F
++GLIBC_2.29 ftok F
++GLIBC_2.29 ftruncate F
++GLIBC_2.29 ftruncate64 F
++GLIBC_2.29 ftrylockfile F
++GLIBC_2.29 fts64_children F
++GLIBC_2.29 fts64_close F
++GLIBC_2.29 fts64_open F
++GLIBC_2.29 fts64_read F
++GLIBC_2.29 fts64_set F
++GLIBC_2.29 fts_children F
++GLIBC_2.29 fts_close F
++GLIBC_2.29 fts_open F
++GLIBC_2.29 fts_read F
++GLIBC_2.29 fts_set F
++GLIBC_2.29 ftw F
++GLIBC_2.29 ftw64 F
++GLIBC_2.29 funlockfile F
++GLIBC_2.29 futimens F
++GLIBC_2.29 futimes F
++GLIBC_2.29 futimesat F
++GLIBC_2.29 fwide F
++GLIBC_2.29 fwprintf F
++GLIBC_2.29 fwrite F
++GLIBC_2.29 fwrite_unlocked F
++GLIBC_2.29 fwscanf F
++GLIBC_2.29 gai_strerror F
++GLIBC_2.29 gcvt F
++GLIBC_2.29 get_avphys_pages F
++GLIBC_2.29 get_current_dir_name F
++GLIBC_2.29 get_myaddress F
++GLIBC_2.29 get_nprocs F
++GLIBC_2.29 get_nprocs_conf F
++GLIBC_2.29 get_phys_pages F
++GLIBC_2.29 getaddrinfo F
++GLIBC_2.29 getaliasbyname F
++GLIBC_2.29 getaliasbyname_r F
++GLIBC_2.29 getaliasent F
++GLIBC_2.29 getaliasent_r F
++GLIBC_2.29 getauxval F
++GLIBC_2.29 getc F
++GLIBC_2.29 getc_unlocked F
++GLIBC_2.29 getchar F
++GLIBC_2.29 getchar_unlocked F
++GLIBC_2.29 getcontext F
++GLIBC_2.29 getcpu F
++GLIBC_2.29 getcwd F
++GLIBC_2.29 getdate F
++GLIBC_2.29 getdate_err D 0x4
++GLIBC_2.29 getdate_r F
++GLIBC_2.29 getdelim F
++GLIBC_2.29 getdirentries F
++GLIBC_2.29 getdirentries64 F
++GLIBC_2.29 getdomainname F
++GLIBC_2.29 getdtablesize F
++GLIBC_2.29 getegid F
++GLIBC_2.29 getentropy F
++GLIBC_2.29 getenv F
++GLIBC_2.29 geteuid F
++GLIBC_2.29 getfsent F
++GLIBC_2.29 getfsfile F
++GLIBC_2.29 getfsspec F
++GLIBC_2.29 getgid F
++GLIBC_2.29 getgrent F
++GLIBC_2.29 getgrent_r F
++GLIBC_2.29 getgrgid F
++GLIBC_2.29 getgrgid_r F
++GLIBC_2.29 getgrnam F
++GLIBC_2.29 getgrnam_r F
++GLIBC_2.29 getgrouplist F
++GLIBC_2.29 getgroups F
++GLIBC_2.29 gethostbyaddr F
++GLIBC_2.29 gethostbyaddr_r F
++GLIBC_2.29 gethostbyname F
++GLIBC_2.29 gethostbyname2 F
++GLIBC_2.29 gethostbyname2_r F
++GLIBC_2.29 gethostbyname_r F
++GLIBC_2.29 gethostent F
++GLIBC_2.29 gethostent_r F
++GLIBC_2.29 gethostid F
++GLIBC_2.29 gethostname F
++GLIBC_2.29 getifaddrs F
++GLIBC_2.29 getipv4sourcefilter F
++GLIBC_2.29 getitimer F
++GLIBC_2.29 getline F
++GLIBC_2.29 getloadavg F
++GLIBC_2.29 getlogin F
++GLIBC_2.29 getlogin_r F
++GLIBC_2.29 getmntent F
++GLIBC_2.29 getmntent_r F
++GLIBC_2.29 getmsg F
++GLIBC_2.29 getnameinfo F
++GLIBC_2.29 getnetbyaddr F
++GLIBC_2.29 getnetbyaddr_r F
++GLIBC_2.29 getnetbyname F
++GLIBC_2.29 getnetbyname_r F
++GLIBC_2.29 getnetent F
++GLIBC_2.29 getnetent_r F
++GLIBC_2.29 getnetgrent F
++GLIBC_2.29 getnetgrent_r F
++GLIBC_2.29 getnetname F
++GLIBC_2.29 getopt F
++GLIBC_2.29 getopt_long F
++GLIBC_2.29 getopt_long_only F
++GLIBC_2.29 getpagesize F
++GLIBC_2.29 getpass F
++GLIBC_2.29 getpeername F
++GLIBC_2.29 getpgid F
++GLIBC_2.29 getpgrp F
++GLIBC_2.29 getpid F
++GLIBC_2.29 getpmsg F
++GLIBC_2.29 getppid F
++GLIBC_2.29 getpriority F
++GLIBC_2.29 getprotobyname F
++GLIBC_2.29 getprotobyname_r F
++GLIBC_2.29 getprotobynumber F
++GLIBC_2.29 getprotobynumber_r F
++GLIBC_2.29 getprotoent F
++GLIBC_2.29 getprotoent_r F
++GLIBC_2.29 getpt F
++GLIBC_2.29 getpublickey F
++GLIBC_2.29 getpw F
++GLIBC_2.29 getpwent F
++GLIBC_2.29 getpwent_r F
++GLIBC_2.29 getpwnam F
++GLIBC_2.29 getpwnam_r F
++GLIBC_2.29 getpwuid F
++GLIBC_2.29 getpwuid_r F
++GLIBC_2.29 getrandom F
++GLIBC_2.29 getresgid F
++GLIBC_2.29 getresuid F
++GLIBC_2.29 getrlimit F
++GLIBC_2.29 getrlimit64 F
++GLIBC_2.29 getrpcbyname F
++GLIBC_2.29 getrpcbyname_r F
++GLIBC_2.29 getrpcbynumber F
++GLIBC_2.29 getrpcbynumber_r F
++GLIBC_2.29 getrpcent F
++GLIBC_2.29 getrpcent_r F
++GLIBC_2.29 getrpcport F
++GLIBC_2.29 getrusage F
++GLIBC_2.29 gets F
++GLIBC_2.29 getsecretkey F
++GLIBC_2.29 getservbyname F
++GLIBC_2.29 getservbyname_r F
++GLIBC_2.29 getservbyport F
++GLIBC_2.29 getservbyport_r F
++GLIBC_2.29 getservent F
++GLIBC_2.29 getservent_r F
++GLIBC_2.29 getsgent F
++GLIBC_2.29 getsgent_r F
++GLIBC_2.29 getsgnam F
++GLIBC_2.29 getsgnam_r F
++GLIBC_2.29 getsid F
++GLIBC_2.29 getsockname F
++GLIBC_2.29 getsockopt F
++GLIBC_2.29 getsourcefilter F
++GLIBC_2.29 getspent F
++GLIBC_2.29 getspent_r F
++GLIBC_2.29 getspnam F
++GLIBC_2.29 getspnam_r F
++GLIBC_2.29 getsubopt F
++GLIBC_2.29 gettext F
++GLIBC_2.29 gettimeofday F
++GLIBC_2.29 getttyent F
++GLIBC_2.29 getttynam F
++GLIBC_2.29 getuid F
++GLIBC_2.29 getusershell F
++GLIBC_2.29 getutent F
++GLIBC_2.29 getutent_r F
++GLIBC_2.29 getutid F
++GLIBC_2.29 getutid_r F
++GLIBC_2.29 getutline F
++GLIBC_2.29 getutline_r F
++GLIBC_2.29 getutmp F
++GLIBC_2.29 getutmpx F
++GLIBC_2.29 getutxent F
++GLIBC_2.29 getutxid F
++GLIBC_2.29 getutxline F
++GLIBC_2.29 getw F
++GLIBC_2.29 getwc F
++GLIBC_2.29 getwc_unlocked F
++GLIBC_2.29 getwchar F
++GLIBC_2.29 getwchar_unlocked F
++GLIBC_2.29 getwd F
++GLIBC_2.29 getxattr F
++GLIBC_2.29 glob F
++GLIBC_2.29 glob64 F
++GLIBC_2.29 glob_pattern_p F
++GLIBC_2.29 globfree F
++GLIBC_2.29 globfree64 F
++GLIBC_2.29 gmtime F
++GLIBC_2.29 gmtime_r F
++GLIBC_2.29 gnu_dev_major F
++GLIBC_2.29 gnu_dev_makedev F
++GLIBC_2.29 gnu_dev_minor F
++GLIBC_2.29 gnu_get_libc_release F
++GLIBC_2.29 gnu_get_libc_version F
++GLIBC_2.29 grantpt F
++GLIBC_2.29 group_member F
++GLIBC_2.29 gsignal F
++GLIBC_2.29 gtty F
++GLIBC_2.29 h_errlist D 0x14
++GLIBC_2.29 h_nerr D 0x4
++GLIBC_2.29 hasmntopt F
++GLIBC_2.29 hcreate F
++GLIBC_2.29 hcreate_r F
++GLIBC_2.29 hdestroy F
++GLIBC_2.29 hdestroy_r F
++GLIBC_2.29 herror F
++GLIBC_2.29 host2netname F
++GLIBC_2.29 hsearch F
++GLIBC_2.29 hsearch_r F
++GLIBC_2.29 hstrerror F
++GLIBC_2.29 htonl F
++GLIBC_2.29 htons F
++GLIBC_2.29 iconv F
++GLIBC_2.29 iconv_close F
++GLIBC_2.29 iconv_open F
++GLIBC_2.29 if_freenameindex F
++GLIBC_2.29 if_indextoname F
++GLIBC_2.29 if_nameindex F
++GLIBC_2.29 if_nametoindex F
++GLIBC_2.29 imaxabs F
++GLIBC_2.29 imaxdiv F
++GLIBC_2.29 in6addr_any D 0x10
++GLIBC_2.29 in6addr_loopback D 0x10
++GLIBC_2.29 index F
++GLIBC_2.29 inet6_opt_append F
++GLIBC_2.29 inet6_opt_find F
++GLIBC_2.29 inet6_opt_finish F
++GLIBC_2.29 inet6_opt_get_val F
++GLIBC_2.29 inet6_opt_init F
++GLIBC_2.29 inet6_opt_next F
++GLIBC_2.29 inet6_opt_set_val F
++GLIBC_2.29 inet6_option_alloc F
++GLIBC_2.29 inet6_option_append F
++GLIBC_2.29 inet6_option_find F
++GLIBC_2.29 inet6_option_init F
++GLIBC_2.29 inet6_option_next F
++GLIBC_2.29 inet6_option_space F
++GLIBC_2.29 inet6_rth_add F
++GLIBC_2.29 inet6_rth_getaddr F
++GLIBC_2.29 inet6_rth_init F
++GLIBC_2.29 inet6_rth_reverse F
++GLIBC_2.29 inet6_rth_segments F
++GLIBC_2.29 inet6_rth_space F
++GLIBC_2.29 inet_addr F
++GLIBC_2.29 inet_aton F
++GLIBC_2.29 inet_lnaof F
++GLIBC_2.29 inet_makeaddr F
++GLIBC_2.29 inet_netof F
++GLIBC_2.29 inet_network F
++GLIBC_2.29 inet_nsap_addr F
++GLIBC_2.29 inet_nsap_ntoa F
++GLIBC_2.29 inet_ntoa F
++GLIBC_2.29 inet_ntop F
++GLIBC_2.29 inet_pton F
++GLIBC_2.29 init_module F
++GLIBC_2.29 initgroups F
++GLIBC_2.29 initstate F
++GLIBC_2.29 initstate_r F
++GLIBC_2.29 innetgr F
++GLIBC_2.29 inotify_add_watch F
++GLIBC_2.29 inotify_init F
++GLIBC_2.29 inotify_init1 F
++GLIBC_2.29 inotify_rm_watch F
++GLIBC_2.29 insque F
++GLIBC_2.29 ioctl F
++GLIBC_2.29 iruserok F
++GLIBC_2.29 iruserok_af F
++GLIBC_2.29 isalnum F
++GLIBC_2.29 isalnum_l F
++GLIBC_2.29 isalpha F
++GLIBC_2.29 isalpha_l F
++GLIBC_2.29 isascii F
++GLIBC_2.29 isastream F
++GLIBC_2.29 isatty F
++GLIBC_2.29 isblank F
++GLIBC_2.29 isblank_l F
++GLIBC_2.29 iscntrl F
++GLIBC_2.29 iscntrl_l F
++GLIBC_2.29 isctype F
++GLIBC_2.29 isdigit F
++GLIBC_2.29 isdigit_l F
++GLIBC_2.29 isfdtype F
++GLIBC_2.29 isgraph F
++GLIBC_2.29 isgraph_l F
++GLIBC_2.29 isinf F
++GLIBC_2.29 isinff F
++GLIBC_2.29 isinfl F
++GLIBC_2.29 islower F
++GLIBC_2.29 islower_l F
++GLIBC_2.29 isnan F
++GLIBC_2.29 isnanf F
++GLIBC_2.29 isnanl F
++GLIBC_2.29 isprint F
++GLIBC_2.29 isprint_l F
++GLIBC_2.29 ispunct F
++GLIBC_2.29 ispunct_l F
++GLIBC_2.29 isspace F
++GLIBC_2.29 isspace_l F
++GLIBC_2.29 isupper F
++GLIBC_2.29 isupper_l F
++GLIBC_2.29 iswalnum F
++GLIBC_2.29 iswalnum_l F
++GLIBC_2.29 iswalpha F
++GLIBC_2.29 iswalpha_l F
++GLIBC_2.29 iswblank F
++GLIBC_2.29 iswblank_l F
++GLIBC_2.29 iswcntrl F
++GLIBC_2.29 iswcntrl_l F
++GLIBC_2.29 iswctype F
++GLIBC_2.29 iswctype_l F
++GLIBC_2.29 iswdigit F
++GLIBC_2.29 iswdigit_l F
++GLIBC_2.29 iswgraph F
++GLIBC_2.29 iswgraph_l F
++GLIBC_2.29 iswlower F
++GLIBC_2.29 iswlower_l F
++GLIBC_2.29 iswprint F
++GLIBC_2.29 iswprint_l F
++GLIBC_2.29 iswpunct F
++GLIBC_2.29 iswpunct_l F
++GLIBC_2.29 iswspace F
++GLIBC_2.29 iswspace_l F
++GLIBC_2.29 iswupper F
++GLIBC_2.29 iswupper_l F
++GLIBC_2.29 iswxdigit F
++GLIBC_2.29 iswxdigit_l F
++GLIBC_2.29 isxdigit F
++GLIBC_2.29 isxdigit_l F
++GLIBC_2.29 jrand48 F
++GLIBC_2.29 jrand48_r F
++GLIBC_2.29 key_decryptsession F
++GLIBC_2.29 key_decryptsession_pk F
++GLIBC_2.29 key_encryptsession F
++GLIBC_2.29 key_encryptsession_pk F
++GLIBC_2.29 key_gendes F
++GLIBC_2.29 key_get_conv F
++GLIBC_2.29 key_secretkey_is_set F
++GLIBC_2.29 key_setnet F
++GLIBC_2.29 key_setsecret F
++GLIBC_2.29 kill F
++GLIBC_2.29 killpg F
++GLIBC_2.29 klogctl F
++GLIBC_2.29 l64a F
++GLIBC_2.29 labs F
++GLIBC_2.29 lchmod F
++GLIBC_2.29 lchown F
++GLIBC_2.29 lckpwdf F
++GLIBC_2.29 lcong48 F
++GLIBC_2.29 lcong48_r F
++GLIBC_2.29 ldexp F
++GLIBC_2.29 ldexpf F
++GLIBC_2.29 ldexpl F
++GLIBC_2.29 ldiv F
++GLIBC_2.29 lfind F
++GLIBC_2.29 lgetxattr F
++GLIBC_2.29 link F
++GLIBC_2.29 linkat F
++GLIBC_2.29 listen F
++GLIBC_2.29 listxattr F
++GLIBC_2.29 llabs F
++GLIBC_2.29 lldiv F
++GLIBC_2.29 llistxattr F
++GLIBC_2.29 localeconv F
++GLIBC_2.29 localtime F
++GLIBC_2.29 localtime_r F
++GLIBC_2.29 lockf F
++GLIBC_2.29 lockf64 F
++GLIBC_2.29 longjmp F
++GLIBC_2.29 lrand48 F
++GLIBC_2.29 lrand48_r F
++GLIBC_2.29 lremovexattr F
++GLIBC_2.29 lsearch F
++GLIBC_2.29 lseek F
++GLIBC_2.29 lseek64 F
++GLIBC_2.29 lsetxattr F
++GLIBC_2.29 lutimes F
++GLIBC_2.29 madvise F
++GLIBC_2.29 makecontext F
++GLIBC_2.29 mallinfo F
++GLIBC_2.29 malloc F
++GLIBC_2.29 malloc_info F
++GLIBC_2.29 malloc_stats F
++GLIBC_2.29 malloc_trim F
++GLIBC_2.29 malloc_usable_size F
++GLIBC_2.29 mallopt F
++GLIBC_2.29 mallwatch D 0x4
++GLIBC_2.29 mblen F
++GLIBC_2.29 mbrlen F
++GLIBC_2.29 mbrtoc16 F
++GLIBC_2.29 mbrtoc32 F
++GLIBC_2.29 mbrtowc F
++GLIBC_2.29 mbsinit F
++GLIBC_2.29 mbsnrtowcs F
++GLIBC_2.29 mbsrtowcs F
++GLIBC_2.29 mbstowcs F
++GLIBC_2.29 mbtowc F
++GLIBC_2.29 mcheck F
++GLIBC_2.29 mcheck_check_all F
++GLIBC_2.29 mcheck_pedantic F
++GLIBC_2.29 memalign F
++GLIBC_2.29 memccpy F
++GLIBC_2.29 memchr F
++GLIBC_2.29 memcmp F
++GLIBC_2.29 memcpy F
++GLIBC_2.29 memfd_create F
++GLIBC_2.29 memfrob F
++GLIBC_2.29 memmem F
++GLIBC_2.29 memmove F
++GLIBC_2.29 mempcpy F
++GLIBC_2.29 memrchr F
++GLIBC_2.29 memset F
++GLIBC_2.29 mincore F
++GLIBC_2.29 mkdir F
++GLIBC_2.29 mkdirat F
++GLIBC_2.29 mkdtemp F
++GLIBC_2.29 mkfifo F
++GLIBC_2.29 mkfifoat F
++GLIBC_2.29 mkostemp F
++GLIBC_2.29 mkostemp64 F
++GLIBC_2.29 mkostemps F
++GLIBC_2.29 mkostemps64 F
++GLIBC_2.29 mkstemp F
++GLIBC_2.29 mkstemp64 F
++GLIBC_2.29 mkstemps F
++GLIBC_2.29 mkstemps64 F
++GLIBC_2.29 mktemp F
++GLIBC_2.29 mktime F
++GLIBC_2.29 mlock F
++GLIBC_2.29 mlock2 F
++GLIBC_2.29 mlockall F
++GLIBC_2.29 mmap F
++GLIBC_2.29 mmap64 F
++GLIBC_2.29 modf F
++GLIBC_2.29 modff F
++GLIBC_2.29 modfl F
++GLIBC_2.29 moncontrol F
++GLIBC_2.29 monstartup F
++GLIBC_2.29 mount F
++GLIBC_2.29 mprobe F
++GLIBC_2.29 mprotect F
++GLIBC_2.29 mrand48 F
++GLIBC_2.29 mrand48_r F
++GLIBC_2.29 mremap F
++GLIBC_2.29 msgctl F
++GLIBC_2.29 msgget F
++GLIBC_2.29 msgrcv F
++GLIBC_2.29 msgsnd F
++GLIBC_2.29 msync F
++GLIBC_2.29 mtrace F
++GLIBC_2.29 munlock F
++GLIBC_2.29 munlockall F
++GLIBC_2.29 munmap F
++GLIBC_2.29 muntrace F
++GLIBC_2.29 name_to_handle_at F
++GLIBC_2.29 nanosleep F
++GLIBC_2.29 netname2host F
++GLIBC_2.29 netname2user F
++GLIBC_2.29 newlocale F
++GLIBC_2.29 nftw F
++GLIBC_2.29 nftw64 F
++GLIBC_2.29 ngettext F
++GLIBC_2.29 nice F
++GLIBC_2.29 nl_langinfo F
++GLIBC_2.29 nl_langinfo_l F
++GLIBC_2.29 nrand48 F
++GLIBC_2.29 nrand48_r F
++GLIBC_2.29 ntohl F
++GLIBC_2.29 ntohs F
++GLIBC_2.29 ntp_adjtime F
++GLIBC_2.29 ntp_gettime F
++GLIBC_2.29 ntp_gettimex F
++GLIBC_2.29 obstack_alloc_failed_handler D 0x4
++GLIBC_2.29 obstack_exit_failure D 0x4
++GLIBC_2.29 obstack_free F
++GLIBC_2.29 obstack_printf F
++GLIBC_2.29 obstack_vprintf F
++GLIBC_2.29 on_exit F
++GLIBC_2.29 open F
++GLIBC_2.29 open64 F
++GLIBC_2.29 open_by_handle_at F
++GLIBC_2.29 open_memstream F
++GLIBC_2.29 open_wmemstream F
++GLIBC_2.29 openat F
++GLIBC_2.29 openat64 F
++GLIBC_2.29 opendir F
++GLIBC_2.29 openlog F
++GLIBC_2.29 optarg D 0x4
++GLIBC_2.29 opterr D 0x4
++GLIBC_2.29 optind D 0x4
++GLIBC_2.29 optopt D 0x4
++GLIBC_2.29 parse_printf_format F
++GLIBC_2.29 passwd2des F
++GLIBC_2.29 pathconf F
++GLIBC_2.29 pause F
++GLIBC_2.29 pclose F
++GLIBC_2.29 perror F
++GLIBC_2.29 personality F
++GLIBC_2.29 pipe F
++GLIBC_2.29 pipe2 F
++GLIBC_2.29 pivot_root F
++GLIBC_2.29 pkey_alloc F
++GLIBC_2.29 pkey_free F
++GLIBC_2.29 pkey_get F
++GLIBC_2.29 pkey_mprotect F
++GLIBC_2.29 pkey_set F
++GLIBC_2.29 pmap_getmaps F
++GLIBC_2.29 pmap_getport F
++GLIBC_2.29 pmap_rmtcall F
++GLIBC_2.29 pmap_set F
++GLIBC_2.29 pmap_unset F
++GLIBC_2.29 poll F
++GLIBC_2.29 popen F
++GLIBC_2.29 posix_fadvise F
++GLIBC_2.29 posix_fadvise64 F
++GLIBC_2.29 posix_fallocate F
++GLIBC_2.29 posix_fallocate64 F
++GLIBC_2.29 posix_madvise F
++GLIBC_2.29 posix_memalign F
++GLIBC_2.29 posix_openpt F
++GLIBC_2.29 posix_spawn F
++GLIBC_2.29 posix_spawn_file_actions_addchdir_np F
++GLIBC_2.29 posix_spawn_file_actions_addclose F
++GLIBC_2.29 posix_spawn_file_actions_adddup2 F
++GLIBC_2.29 posix_spawn_file_actions_addfchdir_np F
++GLIBC_2.29 posix_spawn_file_actions_addopen F
++GLIBC_2.29 posix_spawn_file_actions_destroy F
++GLIBC_2.29 posix_spawn_file_actions_init F
++GLIBC_2.29 posix_spawnattr_destroy F
++GLIBC_2.29 posix_spawnattr_getflags F
++GLIBC_2.29 posix_spawnattr_getpgroup F
++GLIBC_2.29 posix_spawnattr_getschedparam F
++GLIBC_2.29 posix_spawnattr_getschedpolicy F
++GLIBC_2.29 posix_spawnattr_getsigdefault F
++GLIBC_2.29 posix_spawnattr_getsigmask F
++GLIBC_2.29 posix_spawnattr_init F
++GLIBC_2.29 posix_spawnattr_setflags F
++GLIBC_2.29 posix_spawnattr_setpgroup F
++GLIBC_2.29 posix_spawnattr_setschedparam F
++GLIBC_2.29 posix_spawnattr_setschedpolicy F
++GLIBC_2.29 posix_spawnattr_setsigdefault F
++GLIBC_2.29 posix_spawnattr_setsigmask F
++GLIBC_2.29 posix_spawnp F
++GLIBC_2.29 ppoll F
++GLIBC_2.29 prctl F
++GLIBC_2.29 pread F
++GLIBC_2.29 pread64 F
++GLIBC_2.29 preadv F
++GLIBC_2.29 preadv2 F
++GLIBC_2.29 preadv64 F
++GLIBC_2.29 preadv64v2 F
++GLIBC_2.29 printf F
++GLIBC_2.29 printf_size F
++GLIBC_2.29 printf_size_info F
++GLIBC_2.29 prlimit F
++GLIBC_2.29 prlimit64 F
++GLIBC_2.29 process_vm_readv F
++GLIBC_2.29 process_vm_writev F
++GLIBC_2.29 profil F
++GLIBC_2.29 program_invocation_name D 0x4
++GLIBC_2.29 program_invocation_short_name D 0x4
++GLIBC_2.29 pselect F
++GLIBC_2.29 psiginfo F
++GLIBC_2.29 psignal F
++GLIBC_2.29 pthread_attr_destroy F
++GLIBC_2.29 pthread_attr_getdetachstate F
++GLIBC_2.29 pthread_attr_getinheritsched F
++GLIBC_2.29 pthread_attr_getschedparam F
++GLIBC_2.29 pthread_attr_getschedpolicy F
++GLIBC_2.29 pthread_attr_getscope F
++GLIBC_2.29 pthread_attr_init F
++GLIBC_2.29 pthread_attr_setdetachstate F
++GLIBC_2.29 pthread_attr_setinheritsched F
++GLIBC_2.29 pthread_attr_setschedparam F
++GLIBC_2.29 pthread_attr_setschedpolicy F
++GLIBC_2.29 pthread_attr_setscope F
++GLIBC_2.29 pthread_cond_broadcast F
++GLIBC_2.29 pthread_cond_destroy F
++GLIBC_2.29 pthread_cond_init F
++GLIBC_2.29 pthread_cond_signal F
++GLIBC_2.29 pthread_cond_timedwait F
++GLIBC_2.29 pthread_cond_wait F
++GLIBC_2.29 pthread_condattr_destroy F
++GLIBC_2.29 pthread_condattr_init F
++GLIBC_2.29 pthread_equal F
++GLIBC_2.29 pthread_exit F
++GLIBC_2.29 pthread_getschedparam F
++GLIBC_2.29 pthread_mutex_destroy F
++GLIBC_2.29 pthread_mutex_init F
++GLIBC_2.29 pthread_mutex_lock F
++GLIBC_2.29 pthread_mutex_unlock F
++GLIBC_2.29 pthread_self F
++GLIBC_2.29 pthread_setcancelstate F
++GLIBC_2.29 pthread_setcanceltype F
++GLIBC_2.29 pthread_setschedparam F
++GLIBC_2.29 ptrace F
++GLIBC_2.29 ptsname F
++GLIBC_2.29 ptsname_r F
++GLIBC_2.29 putc F
++GLIBC_2.29 putc_unlocked F
++GLIBC_2.29 putchar F
++GLIBC_2.29 putchar_unlocked F
++GLIBC_2.29 putenv F
++GLIBC_2.29 putgrent F
++GLIBC_2.29 putmsg F
++GLIBC_2.29 putpmsg F
++GLIBC_2.29 putpwent F
++GLIBC_2.29 puts F
++GLIBC_2.29 putsgent F
++GLIBC_2.29 putspent F
++GLIBC_2.29 pututline F
++GLIBC_2.29 pututxline F
++GLIBC_2.29 putw F
++GLIBC_2.29 putwc F
++GLIBC_2.29 putwc_unlocked F
++GLIBC_2.29 putwchar F
++GLIBC_2.29 putwchar_unlocked F
++GLIBC_2.29 pvalloc F
++GLIBC_2.29 pwrite F
++GLIBC_2.29 pwrite64 F
++GLIBC_2.29 pwritev F
++GLIBC_2.29 pwritev2 F
++GLIBC_2.29 pwritev64 F
++GLIBC_2.29 pwritev64v2 F
++GLIBC_2.29 qecvt F
++GLIBC_2.29 qecvt_r F
++GLIBC_2.29 qfcvt F
++GLIBC_2.29 qfcvt_r F
++GLIBC_2.29 qgcvt F
++GLIBC_2.29 qsort F
++GLIBC_2.29 qsort_r F
++GLIBC_2.29 quick_exit F
++GLIBC_2.29 quotactl F
++GLIBC_2.29 raise F
++GLIBC_2.29 rand F
++GLIBC_2.29 rand_r F
++GLIBC_2.29 random F
++GLIBC_2.29 random_r F
++GLIBC_2.29 rawmemchr F
++GLIBC_2.29 rcmd F
++GLIBC_2.29 rcmd_af F
++GLIBC_2.29 re_comp F
++GLIBC_2.29 re_compile_fastmap F
++GLIBC_2.29 re_compile_pattern F
++GLIBC_2.29 re_exec F
++GLIBC_2.29 re_match F
++GLIBC_2.29 re_match_2 F
++GLIBC_2.29 re_search F
++GLIBC_2.29 re_search_2 F
++GLIBC_2.29 re_set_registers F
++GLIBC_2.29 re_set_syntax F
++GLIBC_2.29 re_syntax_options D 0x4
++GLIBC_2.29 read F
++GLIBC_2.29 readahead F
++GLIBC_2.29 readdir F
++GLIBC_2.29 readdir64 F
++GLIBC_2.29 readdir64_r F
++GLIBC_2.29 readdir_r F
++GLIBC_2.29 readlink F
++GLIBC_2.29 readlinkat F
++GLIBC_2.29 readv F
++GLIBC_2.29 realloc F
++GLIBC_2.29 reallocarray F
++GLIBC_2.29 realpath F
++GLIBC_2.29 reboot F
++GLIBC_2.29 recv F
++GLIBC_2.29 recvfrom F
++GLIBC_2.29 recvmmsg F
++GLIBC_2.29 recvmsg F
++GLIBC_2.29 regcomp F
++GLIBC_2.29 regerror F
++GLIBC_2.29 regexec F
++GLIBC_2.29 regfree F
++GLIBC_2.29 register_printf_function F
++GLIBC_2.29 register_printf_modifier F
++GLIBC_2.29 register_printf_specifier F
++GLIBC_2.29 register_printf_type F
++GLIBC_2.29 registerrpc F
++GLIBC_2.29 remap_file_pages F
++GLIBC_2.29 remove F
++GLIBC_2.29 removexattr F
++GLIBC_2.29 remque F
++GLIBC_2.29 rename F
++GLIBC_2.29 renameat F
++GLIBC_2.29 renameat2 F
++GLIBC_2.29 revoke F
++GLIBC_2.29 rewind F
++GLIBC_2.29 rewinddir F
++GLIBC_2.29 rexec F
++GLIBC_2.29 rexec_af F
++GLIBC_2.29 rexecoptions D 0x4
++GLIBC_2.29 rindex F
++GLIBC_2.29 rmdir F
++GLIBC_2.29 rpc_createerr D 0x10
++GLIBC_2.29 rpmatch F
++GLIBC_2.29 rresvport F
++GLIBC_2.29 rresvport_af F
++GLIBC_2.29 rtime F
++GLIBC_2.29 ruserok F
++GLIBC_2.29 ruserok_af F
++GLIBC_2.29 ruserpass F
++GLIBC_2.29 sbrk F
++GLIBC_2.29 scalbn F
++GLIBC_2.29 scalbnf F
++GLIBC_2.29 scalbnl F
++GLIBC_2.29 scandir F
++GLIBC_2.29 scandir64 F
++GLIBC_2.29 scandirat F
++GLIBC_2.29 scandirat64 F
++GLIBC_2.29 scanf F
++GLIBC_2.29 sched_get_priority_max F
++GLIBC_2.29 sched_get_priority_min F
++GLIBC_2.29 sched_getaffinity F
++GLIBC_2.29 sched_getcpu F
++GLIBC_2.29 sched_getparam F
++GLIBC_2.29 sched_getscheduler F
++GLIBC_2.29 sched_rr_get_interval F
++GLIBC_2.29 sched_setaffinity F
++GLIBC_2.29 sched_setparam F
++GLIBC_2.29 sched_setscheduler F
++GLIBC_2.29 sched_yield F
++GLIBC_2.29 secure_getenv F
++GLIBC_2.29 seed48 F
++GLIBC_2.29 seed48_r F
++GLIBC_2.29 seekdir F
++GLIBC_2.29 select F
++GLIBC_2.29 semctl F
++GLIBC_2.29 semget F
++GLIBC_2.29 semop F
++GLIBC_2.29 semtimedop F
++GLIBC_2.29 send F
++GLIBC_2.29 sendfile F
++GLIBC_2.29 sendfile64 F
++GLIBC_2.29 sendmmsg F
++GLIBC_2.29 sendmsg F
++GLIBC_2.29 sendto F
++GLIBC_2.29 setaliasent F
++GLIBC_2.29 setbuf F
++GLIBC_2.29 setbuffer F
++GLIBC_2.29 setcontext F
++GLIBC_2.29 setdomainname F
++GLIBC_2.29 setegid F
++GLIBC_2.29 setenv F
++GLIBC_2.29 seteuid F
++GLIBC_2.29 setfsent F
++GLIBC_2.29 setfsgid F
++GLIBC_2.29 setfsuid F
++GLIBC_2.29 setgid F
++GLIBC_2.29 setgrent F
++GLIBC_2.29 setgroups F
++GLIBC_2.29 sethostent F
++GLIBC_2.29 sethostid F
++GLIBC_2.29 sethostname F
++GLIBC_2.29 setipv4sourcefilter F
++GLIBC_2.29 setitimer F
++GLIBC_2.29 setjmp F
++GLIBC_2.29 setlinebuf F
++GLIBC_2.29 setlocale F
++GLIBC_2.29 setlogin F
++GLIBC_2.29 setlogmask F
++GLIBC_2.29 setmntent F
++GLIBC_2.29 setnetent F
++GLIBC_2.29 setnetgrent F
++GLIBC_2.29 setns F
++GLIBC_2.29 setpgid F
++GLIBC_2.29 setpgrp F
++GLIBC_2.29 setpriority F
++GLIBC_2.29 setprotoent F
++GLIBC_2.29 setpwent F
++GLIBC_2.29 setregid F
++GLIBC_2.29 setresgid F
++GLIBC_2.29 setresuid F
++GLIBC_2.29 setreuid F
++GLIBC_2.29 setrlimit F
++GLIBC_2.29 setrlimit64 F
++GLIBC_2.29 setrpcent F
++GLIBC_2.29 setservent F
++GLIBC_2.29 setsgent F
++GLIBC_2.29 setsid F
++GLIBC_2.29 setsockopt F
++GLIBC_2.29 setsourcefilter F
++GLIBC_2.29 setspent F
++GLIBC_2.29 setstate F
++GLIBC_2.29 setstate_r F
++GLIBC_2.29 settimeofday F
++GLIBC_2.29 setttyent F
++GLIBC_2.29 setuid F
++GLIBC_2.29 setusershell F
++GLIBC_2.29 setutent F
++GLIBC_2.29 setutxent F
++GLIBC_2.29 setvbuf F
++GLIBC_2.29 setxattr F
++GLIBC_2.29 sgetsgent F
++GLIBC_2.29 sgetsgent_r F
++GLIBC_2.29 sgetspent F
++GLIBC_2.29 sgetspent_r F
++GLIBC_2.29 shmat F
++GLIBC_2.29 shmctl F
++GLIBC_2.29 shmdt F
++GLIBC_2.29 shmget F
++GLIBC_2.29 shutdown F
++GLIBC_2.29 sigaction F
++GLIBC_2.29 sigaddset F
++GLIBC_2.29 sigaltstack F
++GLIBC_2.29 sigandset F
++GLIBC_2.29 sigblock F
++GLIBC_2.29 sigdelset F
++GLIBC_2.29 sigemptyset F
++GLIBC_2.29 sigfillset F
++GLIBC_2.29 siggetmask F
++GLIBC_2.29 sighold F
++GLIBC_2.29 sigignore F
++GLIBC_2.29 siginterrupt F
++GLIBC_2.29 sigisemptyset F
++GLIBC_2.29 sigismember F
++GLIBC_2.29 siglongjmp F
++GLIBC_2.29 signal F
++GLIBC_2.29 signalfd F
++GLIBC_2.29 sigorset F
++GLIBC_2.29 sigpause F
++GLIBC_2.29 sigpending F
++GLIBC_2.29 sigprocmask F
++GLIBC_2.29 sigqueue F
++GLIBC_2.29 sigrelse F
++GLIBC_2.29 sigreturn F
++GLIBC_2.29 sigset F
++GLIBC_2.29 sigsetmask F
++GLIBC_2.29 sigstack F
++GLIBC_2.29 sigsuspend F
++GLIBC_2.29 sigtimedwait F
++GLIBC_2.29 sigwait F
++GLIBC_2.29 sigwaitinfo F
++GLIBC_2.29 sleep F
++GLIBC_2.29 snprintf F
++GLIBC_2.29 sockatmark F
++GLIBC_2.29 socket F
++GLIBC_2.29 socketpair F
++GLIBC_2.29 splice F
++GLIBC_2.29 sprintf F
++GLIBC_2.29 sprofil F
++GLIBC_2.29 srand F
++GLIBC_2.29 srand48 F
++GLIBC_2.29 srand48_r F
++GLIBC_2.29 srandom F
++GLIBC_2.29 srandom_r F
++GLIBC_2.29 sscanf F
++GLIBC_2.29 ssignal F
++GLIBC_2.29 sstk F
++GLIBC_2.29 statfs F
++GLIBC_2.29 statfs64 F
++GLIBC_2.29 statvfs F
++GLIBC_2.29 statvfs64 F
++GLIBC_2.29 statx F
++GLIBC_2.29 stderr D 0x4
++GLIBC_2.29 stdin D 0x4
++GLIBC_2.29 stdout D 0x4
++GLIBC_2.29 stime F
++GLIBC_2.29 stpcpy F
++GLIBC_2.29 stpncpy F
++GLIBC_2.29 strcasecmp F
++GLIBC_2.29 strcasecmp_l F
++GLIBC_2.29 strcasestr F
++GLIBC_2.29 strcat F
++GLIBC_2.29 strchr F
++GLIBC_2.29 strchrnul F
++GLIBC_2.29 strcmp F
++GLIBC_2.29 strcoll F
++GLIBC_2.29 strcoll_l F
++GLIBC_2.29 strcpy F
++GLIBC_2.29 strcspn F
++GLIBC_2.29 strdup F
++GLIBC_2.29 strerror F
++GLIBC_2.29 strerror_l F
++GLIBC_2.29 strerror_r F
++GLIBC_2.29 strfmon F
++GLIBC_2.29 strfmon_l F
++GLIBC_2.29 strfromd F
++GLIBC_2.29 strfromf F
++GLIBC_2.29 strfromf32 F
++GLIBC_2.29 strfromf32x F
++GLIBC_2.29 strfromf64 F
++GLIBC_2.29 strfroml F
++GLIBC_2.29 strfry F
++GLIBC_2.29 strftime F
++GLIBC_2.29 strftime_l F
++GLIBC_2.29 strlen F
++GLIBC_2.29 strncasecmp F
++GLIBC_2.29 strncasecmp_l F
++GLIBC_2.29 strncat F
++GLIBC_2.29 strncmp F
++GLIBC_2.29 strncpy F
++GLIBC_2.29 strndup F
++GLIBC_2.29 strnlen F
++GLIBC_2.29 strpbrk F
++GLIBC_2.29 strptime F
++GLIBC_2.29 strptime_l F
++GLIBC_2.29 strrchr F
++GLIBC_2.29 strsep F
++GLIBC_2.29 strsignal F
++GLIBC_2.29 strspn F
++GLIBC_2.29 strstr F
++GLIBC_2.29 strtod F
++GLIBC_2.29 strtod_l F
++GLIBC_2.29 strtof F
++GLIBC_2.29 strtof32 F
++GLIBC_2.29 strtof32_l F
++GLIBC_2.29 strtof32x F
++GLIBC_2.29 strtof32x_l F
++GLIBC_2.29 strtof64 F
++GLIBC_2.29 strtof64_l F
++GLIBC_2.29 strtof_l F
++GLIBC_2.29 strtoimax F
++GLIBC_2.29 strtok F
++GLIBC_2.29 strtok_r F
++GLIBC_2.29 strtol F
++GLIBC_2.29 strtol_l F
++GLIBC_2.29 strtold F
++GLIBC_2.29 strtold_l F
++GLIBC_2.29 strtoll F
++GLIBC_2.29 strtoll_l F
++GLIBC_2.29 strtoq F
++GLIBC_2.29 strtoul F
++GLIBC_2.29 strtoul_l F
++GLIBC_2.29 strtoull F
++GLIBC_2.29 strtoull_l F
++GLIBC_2.29 strtoumax F
++GLIBC_2.29 strtouq F
++GLIBC_2.29 strverscmp F
++GLIBC_2.29 strxfrm F
++GLIBC_2.29 strxfrm_l F
++GLIBC_2.29 stty F
++GLIBC_2.29 svc_exit F
++GLIBC_2.29 svc_fdset D 0x80
++GLIBC_2.29 svc_getreq F
++GLIBC_2.29 svc_getreq_common F
++GLIBC_2.29 svc_getreq_poll F
++GLIBC_2.29 svc_getreqset F
++GLIBC_2.29 svc_max_pollfd D 0x4
++GLIBC_2.29 svc_pollfd D 0x4
++GLIBC_2.29 svc_register F
++GLIBC_2.29 svc_run F
++GLIBC_2.29 svc_sendreply F
++GLIBC_2.29 svc_unregister F
++GLIBC_2.29 svcauthdes_stats D 0xc
++GLIBC_2.29 svcerr_auth F
++GLIBC_2.29 svcerr_decode F
++GLIBC_2.29 svcerr_noproc F
++GLIBC_2.29 svcerr_noprog F
++GLIBC_2.29 svcerr_progvers F
++GLIBC_2.29 svcerr_systemerr F
++GLIBC_2.29 svcerr_weakauth F
++GLIBC_2.29 svcfd_create F
++GLIBC_2.29 svcraw_create F
++GLIBC_2.29 svctcp_create F
++GLIBC_2.29 svcudp_bufcreate F
++GLIBC_2.29 svcudp_create F
++GLIBC_2.29 svcudp_enablecache F
++GLIBC_2.29 svcunix_create F
++GLIBC_2.29 svcunixfd_create F
++GLIBC_2.29 swab F
++GLIBC_2.29 swapcontext F
++GLIBC_2.29 swapoff F
++GLIBC_2.29 swapon F
++GLIBC_2.29 swprintf F
++GLIBC_2.29 swscanf F
++GLIBC_2.29 symlink F
++GLIBC_2.29 symlinkat F
++GLIBC_2.29 sync F
++GLIBC_2.29 sync_file_range F
++GLIBC_2.29 syncfs F
++GLIBC_2.29 sys_errlist D 0x21c
++GLIBC_2.29 sys_nerr D 0x4
++GLIBC_2.29 sys_sigabbrev D 0x104
++GLIBC_2.29 sys_siglist D 0x104
++GLIBC_2.29 syscall F
++GLIBC_2.29 sysconf F
++GLIBC_2.29 sysctl F
++GLIBC_2.29 sysinfo F
++GLIBC_2.29 syslog F
++GLIBC_2.29 system F
++GLIBC_2.29 sysv_signal F
++GLIBC_2.29 tcdrain F
++GLIBC_2.29 tcflow F
++GLIBC_2.29 tcflush F
++GLIBC_2.29 tcgetattr F
++GLIBC_2.29 tcgetpgrp F
++GLIBC_2.29 tcgetsid F
++GLIBC_2.29 tcsendbreak F
++GLIBC_2.29 tcsetattr F
++GLIBC_2.29 tcsetpgrp F
++GLIBC_2.29 tdelete F
++GLIBC_2.29 tdestroy F
++GLIBC_2.29 tee F
++GLIBC_2.29 telldir F
++GLIBC_2.29 tempnam F
++GLIBC_2.29 textdomain F
++GLIBC_2.29 tfind F
++GLIBC_2.29 thrd_current F
++GLIBC_2.29 thrd_equal F
++GLIBC_2.29 thrd_sleep F
++GLIBC_2.29 thrd_yield F
++GLIBC_2.29 time F
++GLIBC_2.29 timegm F
++GLIBC_2.29 timelocal F
++GLIBC_2.29 timerfd_create F
++GLIBC_2.29 timerfd_gettime F
++GLIBC_2.29 timerfd_settime F
++GLIBC_2.29 times F
++GLIBC_2.29 timespec_get F
++GLIBC_2.29 timezone D 0x4
++GLIBC_2.29 tmpfile F
++GLIBC_2.29 tmpfile64 F
++GLIBC_2.29 tmpnam F
++GLIBC_2.29 tmpnam_r F
++GLIBC_2.29 toascii F
++GLIBC_2.29 tolower F
++GLIBC_2.29 tolower_l F
++GLIBC_2.29 toupper F
++GLIBC_2.29 toupper_l F
++GLIBC_2.29 towctrans F
++GLIBC_2.29 towctrans_l F
++GLIBC_2.29 towlower F
++GLIBC_2.29 towlower_l F
++GLIBC_2.29 towupper F
++GLIBC_2.29 towupper_l F
++GLIBC_2.29 tr_break F
++GLIBC_2.29 truncate F
++GLIBC_2.29 truncate64 F
++GLIBC_2.29 tsearch F
++GLIBC_2.29 ttyname F
++GLIBC_2.29 ttyname_r F
++GLIBC_2.29 ttyslot F
++GLIBC_2.29 twalk F
++GLIBC_2.29 tzname D 0x8
++GLIBC_2.29 tzset F
++GLIBC_2.29 ualarm F
++GLIBC_2.29 ulckpwdf F
++GLIBC_2.29 ulimit F
++GLIBC_2.29 umask F
++GLIBC_2.29 umount F
++GLIBC_2.29 umount2 F
++GLIBC_2.29 uname F
++GLIBC_2.29 ungetc F
++GLIBC_2.29 ungetwc F
++GLIBC_2.29 unlink F
++GLIBC_2.29 unlinkat F
++GLIBC_2.29 unlockpt F
++GLIBC_2.29 unsetenv F
++GLIBC_2.29 unshare F
++GLIBC_2.29 updwtmp F
++GLIBC_2.29 updwtmpx F
++GLIBC_2.29 uselocale F
++GLIBC_2.29 user2netname F
++GLIBC_2.29 usleep F
++GLIBC_2.29 utime F
++GLIBC_2.29 utimensat F
++GLIBC_2.29 utimes F
++GLIBC_2.29 utmpname F
++GLIBC_2.29 utmpxname F
++GLIBC_2.29 valloc F
++GLIBC_2.29 vasprintf F
++GLIBC_2.29 vdprintf F
++GLIBC_2.29 verr F
++GLIBC_2.29 verrx F
++GLIBC_2.29 versionsort F
++GLIBC_2.29 versionsort64 F
++GLIBC_2.29 vfork F
++GLIBC_2.29 vfprintf F
++GLIBC_2.29 vfscanf F
++GLIBC_2.29 vfwprintf F
++GLIBC_2.29 vfwscanf F
++GLIBC_2.29 vhangup F
++GLIBC_2.29 vlimit F
++GLIBC_2.29 vmsplice F
++GLIBC_2.29 vprintf F
++GLIBC_2.29 vscanf F
++GLIBC_2.29 vsnprintf F
++GLIBC_2.29 vsprintf F
++GLIBC_2.29 vsscanf F
++GLIBC_2.29 vswprintf F
++GLIBC_2.29 vswscanf F
++GLIBC_2.29 vsyslog F
++GLIBC_2.29 vtimes F
++GLIBC_2.29 vwarn F
++GLIBC_2.29 vwarnx F
++GLIBC_2.29 vwprintf F
++GLIBC_2.29 vwscanf F
++GLIBC_2.29 wait F
++GLIBC_2.29 wait3 F
++GLIBC_2.29 wait4 F
++GLIBC_2.29 waitid F
++GLIBC_2.29 waitpid F
++GLIBC_2.29 warn F
++GLIBC_2.29 warnx F
++GLIBC_2.29 wcpcpy F
++GLIBC_2.29 wcpncpy F
++GLIBC_2.29 wcrtomb F
++GLIBC_2.29 wcscasecmp F
++GLIBC_2.29 wcscasecmp_l F
++GLIBC_2.29 wcscat F
++GLIBC_2.29 wcschr F
++GLIBC_2.29 wcschrnul F
++GLIBC_2.29 wcscmp F
++GLIBC_2.29 wcscoll F
++GLIBC_2.29 wcscoll_l F
++GLIBC_2.29 wcscpy F
++GLIBC_2.29 wcscspn F
++GLIBC_2.29 wcsdup F
++GLIBC_2.29 wcsftime F
++GLIBC_2.29 wcsftime_l F
++GLIBC_2.29 wcslen F
++GLIBC_2.29 wcsncasecmp F
++GLIBC_2.29 wcsncasecmp_l F
++GLIBC_2.29 wcsncat F
++GLIBC_2.29 wcsncmp F
++GLIBC_2.29 wcsncpy F
++GLIBC_2.29 wcsnlen F
++GLIBC_2.29 wcsnrtombs F
++GLIBC_2.29 wcspbrk F
++GLIBC_2.29 wcsrchr F
++GLIBC_2.29 wcsrtombs F
++GLIBC_2.29 wcsspn F
++GLIBC_2.29 wcsstr F
++GLIBC_2.29 wcstod F
++GLIBC_2.29 wcstod_l F
++GLIBC_2.29 wcstof F
++GLIBC_2.29 wcstof32 F
++GLIBC_2.29 wcstof32_l F
++GLIBC_2.29 wcstof32x F
++GLIBC_2.29 wcstof32x_l F
++GLIBC_2.29 wcstof64 F
++GLIBC_2.29 wcstof64_l F
++GLIBC_2.29 wcstof_l F
++GLIBC_2.29 wcstoimax F
++GLIBC_2.29 wcstok F
++GLIBC_2.29 wcstol F
++GLIBC_2.29 wcstol_l F
++GLIBC_2.29 wcstold F
++GLIBC_2.29 wcstold_l F
++GLIBC_2.29 wcstoll F
++GLIBC_2.29 wcstoll_l F
++GLIBC_2.29 wcstombs F
++GLIBC_2.29 wcstoq F
++GLIBC_2.29 wcstoul F
++GLIBC_2.29 wcstoul_l F
++GLIBC_2.29 wcstoull F
++GLIBC_2.29 wcstoull_l F
++GLIBC_2.29 wcstoumax F
++GLIBC_2.29 wcstouq F
++GLIBC_2.29 wcswcs F
++GLIBC_2.29 wcswidth F
++GLIBC_2.29 wcsxfrm F
++GLIBC_2.29 wcsxfrm_l F
++GLIBC_2.29 wctob F
++GLIBC_2.29 wctomb F
++GLIBC_2.29 wctrans F
++GLIBC_2.29 wctrans_l F
++GLIBC_2.29 wctype F
++GLIBC_2.29 wctype_l F
++GLIBC_2.29 wcwidth F
++GLIBC_2.29 wmemchr F
++GLIBC_2.29 wmemcmp F
++GLIBC_2.29 wmemcpy F
++GLIBC_2.29 wmemmove F
++GLIBC_2.29 wmempcpy F
++GLIBC_2.29 wmemset F
++GLIBC_2.29 wordexp F
++GLIBC_2.29 wordfree F
++GLIBC_2.29 wprintf F
++GLIBC_2.29 write F
++GLIBC_2.29 writev F
++GLIBC_2.29 wscanf F
++GLIBC_2.29 xdecrypt F
++GLIBC_2.29 xdr_accepted_reply F
++GLIBC_2.29 xdr_array F
++GLIBC_2.29 xdr_authdes_cred F
++GLIBC_2.29 xdr_authdes_verf F
++GLIBC_2.29 xdr_authunix_parms F
++GLIBC_2.29 xdr_bool F
++GLIBC_2.29 xdr_bytes F
++GLIBC_2.29 xdr_callhdr F
++GLIBC_2.29 xdr_callmsg F
++GLIBC_2.29 xdr_char F
++GLIBC_2.29 xdr_cryptkeyarg F
++GLIBC_2.29 xdr_cryptkeyarg2 F
++GLIBC_2.29 xdr_cryptkeyres F
++GLIBC_2.29 xdr_des_block F
++GLIBC_2.29 xdr_double F
++GLIBC_2.29 xdr_enum F
++GLIBC_2.29 xdr_float F
++GLIBC_2.29 xdr_free F
++GLIBC_2.29 xdr_getcredres F
++GLIBC_2.29 xdr_hyper F
++GLIBC_2.29 xdr_int F
++GLIBC_2.29 xdr_int16_t F
++GLIBC_2.29 xdr_int32_t F
++GLIBC_2.29 xdr_int64_t F
++GLIBC_2.29 xdr_int8_t F
++GLIBC_2.29 xdr_key_netstarg F
++GLIBC_2.29 xdr_key_netstres F
++GLIBC_2.29 xdr_keybuf F
++GLIBC_2.29 xdr_keystatus F
++GLIBC_2.29 xdr_long F
++GLIBC_2.29 xdr_longlong_t F
++GLIBC_2.29 xdr_netnamestr F
++GLIBC_2.29 xdr_netobj F
++GLIBC_2.29 xdr_opaque F
++GLIBC_2.29 xdr_opaque_auth F
++GLIBC_2.29 xdr_pmap F
++GLIBC_2.29 xdr_pmaplist F
++GLIBC_2.29 xdr_pointer F
++GLIBC_2.29 xdr_quad_t F
++GLIBC_2.29 xdr_reference F
++GLIBC_2.29 xdr_rejected_reply F
++GLIBC_2.29 xdr_replymsg F
++GLIBC_2.29 xdr_rmtcall_args F
++GLIBC_2.29 xdr_rmtcallres F
++GLIBC_2.29 xdr_short F
++GLIBC_2.29 xdr_sizeof F
++GLIBC_2.29 xdr_string F
++GLIBC_2.29 xdr_u_char F
++GLIBC_2.29 xdr_u_hyper F
++GLIBC_2.29 xdr_u_int F
++GLIBC_2.29 xdr_u_long F
++GLIBC_2.29 xdr_u_longlong_t F
++GLIBC_2.29 xdr_u_quad_t F
++GLIBC_2.29 xdr_u_short F
++GLIBC_2.29 xdr_uint16_t F
++GLIBC_2.29 xdr_uint32_t F
++GLIBC_2.29 xdr_uint64_t F
++GLIBC_2.29 xdr_uint8_t F
++GLIBC_2.29 xdr_union F
++GLIBC_2.29 xdr_unixcred F
++GLIBC_2.29 xdr_vector F
++GLIBC_2.29 xdr_void F
++GLIBC_2.29 xdr_wrapstring F
++GLIBC_2.29 xdrmem_create F
++GLIBC_2.29 xdrrec_create F
++GLIBC_2.29 xdrrec_endofrecord F
++GLIBC_2.29 xdrrec_eof F
++GLIBC_2.29 xdrrec_skiprecord F
++GLIBC_2.29 xdrstdio_create F
++GLIBC_2.29 xencrypt F
++GLIBC_2.29 xprt_register F
++GLIBC_2.29 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 00000000000..da3abbf8fb8
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/libcrypt.abilist
+@@ -0,0 +1,2 @@
++GLIBC_2.29 crypt F
++GLIBC_2.29 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 00000000000..8fcb609ddcf
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/libdl.abilist
+@@ -0,0 +1,9 @@
++GLIBC_2.29 dladdr F
++GLIBC_2.29 dladdr1 F
++GLIBC_2.29 dlclose F
++GLIBC_2.29 dlerror F
++GLIBC_2.29 dlinfo F
++GLIBC_2.29 dlmopen F
++GLIBC_2.29 dlopen F
++GLIBC_2.29 dlsym F
++GLIBC_2.29 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 00000000000..497f6226447
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/libm.abilist
+@@ -0,0 +1,753 @@
++GLIBC_2.29 __acos_finite F
++GLIBC_2.29 __acosf_finite F
++GLIBC_2.29 __acosh_finite F
++GLIBC_2.29 __acoshf_finite F
++GLIBC_2.29 __asin_finite F
++GLIBC_2.29 __asinf_finite F
++GLIBC_2.29 __atan2_finite F
++GLIBC_2.29 __atan2f_finite F
++GLIBC_2.29 __atanh_finite F
++GLIBC_2.29 __atanhf_finite F
++GLIBC_2.29 __clog10 F
++GLIBC_2.29 __clog10f F
++GLIBC_2.29 __clog10l F
++GLIBC_2.29 __cosh_finite F
++GLIBC_2.29 __coshf_finite F
++GLIBC_2.29 __exp10_finite F
++GLIBC_2.29 __exp10f_finite F
++GLIBC_2.29 __exp2_finite F
++GLIBC_2.29 __exp2f_finite F
++GLIBC_2.29 __exp_finite F
++GLIBC_2.29 __expf_finite F
++GLIBC_2.29 __finite F
++GLIBC_2.29 __finitef F
++GLIBC_2.29 __fmod_finite F
++GLIBC_2.29 __fmodf_finite F
++GLIBC_2.29 __fpclassify F
++GLIBC_2.29 __fpclassifyf F
++GLIBC_2.29 __gamma_r_finite F
++GLIBC_2.29 __gammaf_r_finite F
++GLIBC_2.29 __hypot_finite F
++GLIBC_2.29 __hypotf_finite F
++GLIBC_2.29 __iseqsig F
++GLIBC_2.29 __iseqsigf F
++GLIBC_2.29 __issignaling F
++GLIBC_2.29 __issignalingf F
++GLIBC_2.29 __j0_finite F
++GLIBC_2.29 __j0f_finite F
++GLIBC_2.29 __j1_finite F
++GLIBC_2.29 __j1f_finite F
++GLIBC_2.29 __jn_finite F
++GLIBC_2.29 __jnf_finite F
++GLIBC_2.29 __lgamma_r_finite F
++GLIBC_2.29 __lgammaf_r_finite F
++GLIBC_2.29 __log10_finite F
++GLIBC_2.29 __log10f_finite F
++GLIBC_2.29 __log2_finite F
++GLIBC_2.29 __log2f_finite F
++GLIBC_2.29 __log_finite F
++GLIBC_2.29 __logf_finite F
++GLIBC_2.29 __pow_finite F
++GLIBC_2.29 __powf_finite F
++GLIBC_2.29 __remainder_finite F
++GLIBC_2.29 __remainderf_finite F
++GLIBC_2.29 __scalb_finite F
++GLIBC_2.29 __scalbf_finite F
++GLIBC_2.29 __signbit F
++GLIBC_2.29 __signbitf F
++GLIBC_2.29 __signgam D 0x4
++GLIBC_2.29 __sinh_finite F
++GLIBC_2.29 __sinhf_finite F
++GLIBC_2.29 __sqrt_finite F
++GLIBC_2.29 __sqrtf_finite F
++GLIBC_2.29 __y0_finite F
++GLIBC_2.29 __y0f_finite F
++GLIBC_2.29 __y1_finite F
++GLIBC_2.29 __y1f_finite F
++GLIBC_2.29 __yn_finite F
++GLIBC_2.29 __ynf_finite F
++GLIBC_2.29 acos F
++GLIBC_2.29 acosf F
++GLIBC_2.29 acosf32 F
++GLIBC_2.29 acosf32x F
++GLIBC_2.29 acosf64 F
++GLIBC_2.29 acosh F
++GLIBC_2.29 acoshf F
++GLIBC_2.29 acoshf32 F
++GLIBC_2.29 acoshf32x F
++GLIBC_2.29 acoshf64 F
++GLIBC_2.29 acoshl F
++GLIBC_2.29 acosl F
++GLIBC_2.29 asin F
++GLIBC_2.29 asinf F
++GLIBC_2.29 asinf32 F
++GLIBC_2.29 asinf32x F
++GLIBC_2.29 asinf64 F
++GLIBC_2.29 asinh F
++GLIBC_2.29 asinhf F
++GLIBC_2.29 asinhf32 F
++GLIBC_2.29 asinhf32x F
++GLIBC_2.29 asinhf64 F
++GLIBC_2.29 asinhl F
++GLIBC_2.29 asinl F
++GLIBC_2.29 atan F
++GLIBC_2.29 atan2 F
++GLIBC_2.29 atan2f F
++GLIBC_2.29 atan2f32 F
++GLIBC_2.29 atan2f32x F
++GLIBC_2.29 atan2f64 F
++GLIBC_2.29 atan2l F
++GLIBC_2.29 atanf F
++GLIBC_2.29 atanf32 F
++GLIBC_2.29 atanf32x F
++GLIBC_2.29 atanf64 F
++GLIBC_2.29 atanh F
++GLIBC_2.29 atanhf F
++GLIBC_2.29 atanhf32 F
++GLIBC_2.29 atanhf32x F
++GLIBC_2.29 atanhf64 F
++GLIBC_2.29 atanhl F
++GLIBC_2.29 atanl F
++GLIBC_2.29 cabs F
++GLIBC_2.29 cabsf F
++GLIBC_2.29 cabsf32 F
++GLIBC_2.29 cabsf32x F
++GLIBC_2.29 cabsf64 F
++GLIBC_2.29 cabsl F
++GLIBC_2.29 cacos F
++GLIBC_2.29 cacosf F
++GLIBC_2.29 cacosf32 F
++GLIBC_2.29 cacosf32x F
++GLIBC_2.29 cacosf64 F
++GLIBC_2.29 cacosh F
++GLIBC_2.29 cacoshf F
++GLIBC_2.29 cacoshf32 F
++GLIBC_2.29 cacoshf32x F
++GLIBC_2.29 cacoshf64 F
++GLIBC_2.29 cacoshl F
++GLIBC_2.29 cacosl F
++GLIBC_2.29 canonicalize F
++GLIBC_2.29 canonicalizef F
++GLIBC_2.29 canonicalizef32 F
++GLIBC_2.29 canonicalizef32x F
++GLIBC_2.29 canonicalizef64 F
++GLIBC_2.29 canonicalizel F
++GLIBC_2.29 carg F
++GLIBC_2.29 cargf F
++GLIBC_2.29 cargf32 F
++GLIBC_2.29 cargf32x F
++GLIBC_2.29 cargf64 F
++GLIBC_2.29 cargl F
++GLIBC_2.29 casin F
++GLIBC_2.29 casinf F
++GLIBC_2.29 casinf32 F
++GLIBC_2.29 casinf32x F
++GLIBC_2.29 casinf64 F
++GLIBC_2.29 casinh F
++GLIBC_2.29 casinhf F
++GLIBC_2.29 casinhf32 F
++GLIBC_2.29 casinhf32x F
++GLIBC_2.29 casinhf64 F
++GLIBC_2.29 casinhl F
++GLIBC_2.29 casinl F
++GLIBC_2.29 catan F
++GLIBC_2.29 catanf F
++GLIBC_2.29 catanf32 F
++GLIBC_2.29 catanf32x F
++GLIBC_2.29 catanf64 F
++GLIBC_2.29 catanh F
++GLIBC_2.29 catanhf F
++GLIBC_2.29 catanhf32 F
++GLIBC_2.29 catanhf32x F
++GLIBC_2.29 catanhf64 F
++GLIBC_2.29 catanhl F
++GLIBC_2.29 catanl F
++GLIBC_2.29 cbrt F
++GLIBC_2.29 cbrtf F
++GLIBC_2.29 cbrtf32 F
++GLIBC_2.29 cbrtf32x F
++GLIBC_2.29 cbrtf64 F
++GLIBC_2.29 cbrtl F
++GLIBC_2.29 ccos F
++GLIBC_2.29 ccosf F
++GLIBC_2.29 ccosf32 F
++GLIBC_2.29 ccosf32x F
++GLIBC_2.29 ccosf64 F
++GLIBC_2.29 ccosh F
++GLIBC_2.29 ccoshf F
++GLIBC_2.29 ccoshf32 F
++GLIBC_2.29 ccoshf32x F
++GLIBC_2.29 ccoshf64 F
++GLIBC_2.29 ccoshl F
++GLIBC_2.29 ccosl F
++GLIBC_2.29 ceil F
++GLIBC_2.29 ceilf F
++GLIBC_2.29 ceilf32 F
++GLIBC_2.29 ceilf32x F
++GLIBC_2.29 ceilf64 F
++GLIBC_2.29 ceill F
++GLIBC_2.29 cexp F
++GLIBC_2.29 cexpf F
++GLIBC_2.29 cexpf32 F
++GLIBC_2.29 cexpf32x F
++GLIBC_2.29 cexpf64 F
++GLIBC_2.29 cexpl F
++GLIBC_2.29 cimag F
++GLIBC_2.29 cimagf F
++GLIBC_2.29 cimagf32 F
++GLIBC_2.29 cimagf32x F
++GLIBC_2.29 cimagf64 F
++GLIBC_2.29 cimagl F
++GLIBC_2.29 clog F
++GLIBC_2.29 clog10 F
++GLIBC_2.29 clog10f F
++GLIBC_2.29 clog10f32 F
++GLIBC_2.29 clog10f32x F
++GLIBC_2.29 clog10f64 F
++GLIBC_2.29 clog10l F
++GLIBC_2.29 clogf F
++GLIBC_2.29 clogf32 F
++GLIBC_2.29 clogf32x F
++GLIBC_2.29 clogf64 F
++GLIBC_2.29 clogl F
++GLIBC_2.29 conj F
++GLIBC_2.29 conjf F
++GLIBC_2.29 conjf32 F
++GLIBC_2.29 conjf32x F
++GLIBC_2.29 conjf64 F
++GLIBC_2.29 conjl F
++GLIBC_2.29 copysign F
++GLIBC_2.29 copysignf F
++GLIBC_2.29 copysignf32 F
++GLIBC_2.29 copysignf32x F
++GLIBC_2.29 copysignf64 F
++GLIBC_2.29 copysignl F
++GLIBC_2.29 cos F
++GLIBC_2.29 cosf F
++GLIBC_2.29 cosf32 F
++GLIBC_2.29 cosf32x F
++GLIBC_2.29 cosf64 F
++GLIBC_2.29 cosh F
++GLIBC_2.29 coshf F
++GLIBC_2.29 coshf32 F
++GLIBC_2.29 coshf32x F
++GLIBC_2.29 coshf64 F
++GLIBC_2.29 coshl F
++GLIBC_2.29 cosl F
++GLIBC_2.29 cpow F
++GLIBC_2.29 cpowf F
++GLIBC_2.29 cpowf32 F
++GLIBC_2.29 cpowf32x F
++GLIBC_2.29 cpowf64 F
++GLIBC_2.29 cpowl F
++GLIBC_2.29 cproj F
++GLIBC_2.29 cprojf F
++GLIBC_2.29 cprojf32 F
++GLIBC_2.29 cprojf32x F
++GLIBC_2.29 cprojf64 F
++GLIBC_2.29 cprojl F
++GLIBC_2.29 creal F
++GLIBC_2.29 crealf F
++GLIBC_2.29 crealf32 F
++GLIBC_2.29 crealf32x F
++GLIBC_2.29 crealf64 F
++GLIBC_2.29 creall F
++GLIBC_2.29 csin F
++GLIBC_2.29 csinf F
++GLIBC_2.29 csinf32 F
++GLIBC_2.29 csinf32x F
++GLIBC_2.29 csinf64 F
++GLIBC_2.29 csinh F
++GLIBC_2.29 csinhf F
++GLIBC_2.29 csinhf32 F
++GLIBC_2.29 csinhf32x F
++GLIBC_2.29 csinhf64 F
++GLIBC_2.29 csinhl F
++GLIBC_2.29 csinl F
++GLIBC_2.29 csqrt F
++GLIBC_2.29 csqrtf F
++GLIBC_2.29 csqrtf32 F
++GLIBC_2.29 csqrtf32x F
++GLIBC_2.29 csqrtf64 F
++GLIBC_2.29 csqrtl F
++GLIBC_2.29 ctan F
++GLIBC_2.29 ctanf F
++GLIBC_2.29 ctanf32 F
++GLIBC_2.29 ctanf32x F
++GLIBC_2.29 ctanf64 F
++GLIBC_2.29 ctanh F
++GLIBC_2.29 ctanhf F
++GLIBC_2.29 ctanhf32 F
++GLIBC_2.29 ctanhf32x F
++GLIBC_2.29 ctanhf64 F
++GLIBC_2.29 ctanhl F
++GLIBC_2.29 ctanl F
++GLIBC_2.29 daddl F
++GLIBC_2.29 ddivl F
++GLIBC_2.29 dmull F
++GLIBC_2.29 drem F
++GLIBC_2.29 dremf F
++GLIBC_2.29 dreml F
++GLIBC_2.29 dsubl F
++GLIBC_2.29 erf F
++GLIBC_2.29 erfc F
++GLIBC_2.29 erfcf F
++GLIBC_2.29 erfcf32 F
++GLIBC_2.29 erfcf32x F
++GLIBC_2.29 erfcf64 F
++GLIBC_2.29 erfcl F
++GLIBC_2.29 erff F
++GLIBC_2.29 erff32 F
++GLIBC_2.29 erff32x F
++GLIBC_2.29 erff64 F
++GLIBC_2.29 erfl F
++GLIBC_2.29 exp F
++GLIBC_2.29 exp10 F
++GLIBC_2.29 exp10f F
++GLIBC_2.29 exp10f32 F
++GLIBC_2.29 exp10f32x F
++GLIBC_2.29 exp10f64 F
++GLIBC_2.29 exp10l F
++GLIBC_2.29 exp2 F
++GLIBC_2.29 exp2f F
++GLIBC_2.29 exp2f32 F
++GLIBC_2.29 exp2f32x F
++GLIBC_2.29 exp2f64 F
++GLIBC_2.29 exp2l F
++GLIBC_2.29 expf F
++GLIBC_2.29 expf32 F
++GLIBC_2.29 expf32x F
++GLIBC_2.29 expf64 F
++GLIBC_2.29 expl F
++GLIBC_2.29 expm1 F
++GLIBC_2.29 expm1f F
++GLIBC_2.29 expm1f32 F
++GLIBC_2.29 expm1f32x F
++GLIBC_2.29 expm1f64 F
++GLIBC_2.29 expm1l F
++GLIBC_2.29 f32addf32x F
++GLIBC_2.29 f32addf64 F
++GLIBC_2.29 f32divf32x F
++GLIBC_2.29 f32divf64 F
++GLIBC_2.29 f32mulf32x F
++GLIBC_2.29 f32mulf64 F
++GLIBC_2.29 f32subf32x F
++GLIBC_2.29 f32subf64 F
++GLIBC_2.29 f32xaddf64 F
++GLIBC_2.29 f32xdivf64 F
++GLIBC_2.29 f32xmulf64 F
++GLIBC_2.29 f32xsubf64 F
++GLIBC_2.29 fabs F
++GLIBC_2.29 fabsf F
++GLIBC_2.29 fabsf32 F
++GLIBC_2.29 fabsf32x F
++GLIBC_2.29 fabsf64 F
++GLIBC_2.29 fabsl F
++GLIBC_2.29 fadd F
++GLIBC_2.29 faddl F
++GLIBC_2.29 fdim F
++GLIBC_2.29 fdimf F
++GLIBC_2.29 fdimf32 F
++GLIBC_2.29 fdimf32x F
++GLIBC_2.29 fdimf64 F
++GLIBC_2.29 fdiml F
++GLIBC_2.29 fdiv F
++GLIBC_2.29 fdivl F
++GLIBC_2.29 feclearexcept F
++GLIBC_2.29 fedisableexcept F
++GLIBC_2.29 feenableexcept F
++GLIBC_2.29 fegetenv F
++GLIBC_2.29 fegetexcept F
++GLIBC_2.29 fegetexceptflag F
++GLIBC_2.29 fegetmode F
++GLIBC_2.29 fegetround F
++GLIBC_2.29 feholdexcept F
++GLIBC_2.29 feraiseexcept F
++GLIBC_2.29 fesetenv F
++GLIBC_2.29 fesetexcept F
++GLIBC_2.29 fesetexceptflag F
++GLIBC_2.29 fesetmode F
++GLIBC_2.29 fesetround F
++GLIBC_2.29 fetestexcept F
++GLIBC_2.29 fetestexceptflag F
++GLIBC_2.29 feupdateenv F
++GLIBC_2.29 finite F
++GLIBC_2.29 finitef F
++GLIBC_2.29 finitel F
++GLIBC_2.29 floor F
++GLIBC_2.29 floorf F
++GLIBC_2.29 floorf32 F
++GLIBC_2.29 floorf32x F
++GLIBC_2.29 floorf64 F
++GLIBC_2.29 floorl F
++GLIBC_2.29 fma F
++GLIBC_2.29 fmaf F
++GLIBC_2.29 fmaf32 F
++GLIBC_2.29 fmaf32x F
++GLIBC_2.29 fmaf64 F
++GLIBC_2.29 fmal F
++GLIBC_2.29 fmax F
++GLIBC_2.29 fmaxf F
++GLIBC_2.29 fmaxf32 F
++GLIBC_2.29 fmaxf32x F
++GLIBC_2.29 fmaxf64 F
++GLIBC_2.29 fmaxl F
++GLIBC_2.29 fmaxmag F
++GLIBC_2.29 fmaxmagf F
++GLIBC_2.29 fmaxmagf32 F
++GLIBC_2.29 fmaxmagf32x F
++GLIBC_2.29 fmaxmagf64 F
++GLIBC_2.29 fmaxmagl F
++GLIBC_2.29 fmin F
++GLIBC_2.29 fminf F
++GLIBC_2.29 fminf32 F
++GLIBC_2.29 fminf32x F
++GLIBC_2.29 fminf64 F
++GLIBC_2.29 fminl F
++GLIBC_2.29 fminmag F
++GLIBC_2.29 fminmagf F
++GLIBC_2.29 fminmagf32 F
++GLIBC_2.29 fminmagf32x F
++GLIBC_2.29 fminmagf64 F
++GLIBC_2.29 fminmagl F
++GLIBC_2.29 fmod F
++GLIBC_2.29 fmodf F
++GLIBC_2.29 fmodf32 F
++GLIBC_2.29 fmodf32x F
++GLIBC_2.29 fmodf64 F
++GLIBC_2.29 fmodl F
++GLIBC_2.29 fmul F
++GLIBC_2.29 fmull F
++GLIBC_2.29 frexp F
++GLIBC_2.29 frexpf F
++GLIBC_2.29 frexpf32 F
++GLIBC_2.29 frexpf32x F
++GLIBC_2.29 frexpf64 F
++GLIBC_2.29 frexpl F
++GLIBC_2.29 fromfp F
++GLIBC_2.29 fromfpf F
++GLIBC_2.29 fromfpf32 F
++GLIBC_2.29 fromfpf32x F
++GLIBC_2.29 fromfpf64 F
++GLIBC_2.29 fromfpl F
++GLIBC_2.29 fromfpx F
++GLIBC_2.29 fromfpxf F
++GLIBC_2.29 fromfpxf32 F
++GLIBC_2.29 fromfpxf32x F
++GLIBC_2.29 fromfpxf64 F
++GLIBC_2.29 fromfpxl F
++GLIBC_2.29 fsub F
++GLIBC_2.29 fsubl F
++GLIBC_2.29 gamma F
++GLIBC_2.29 gammaf F
++GLIBC_2.29 gammal F
++GLIBC_2.29 getpayload F
++GLIBC_2.29 getpayloadf F
++GLIBC_2.29 getpayloadf32 F
++GLIBC_2.29 getpayloadf32x F
++GLIBC_2.29 getpayloadf64 F
++GLIBC_2.29 getpayloadl F
++GLIBC_2.29 hypot F
++GLIBC_2.29 hypotf F
++GLIBC_2.29 hypotf32 F
++GLIBC_2.29 hypotf32x F
++GLIBC_2.29 hypotf64 F
++GLIBC_2.29 hypotl F
++GLIBC_2.29 ilogb F
++GLIBC_2.29 ilogbf F
++GLIBC_2.29 ilogbf32 F
++GLIBC_2.29 ilogbf32x F
++GLIBC_2.29 ilogbf64 F
++GLIBC_2.29 ilogbl F
++GLIBC_2.29 j0 F
++GLIBC_2.29 j0f F
++GLIBC_2.29 j0f32 F
++GLIBC_2.29 j0f32x F
++GLIBC_2.29 j0f64 F
++GLIBC_2.29 j0l F
++GLIBC_2.29 j1 F
++GLIBC_2.29 j1f F
++GLIBC_2.29 j1f32 F
++GLIBC_2.29 j1f32x F
++GLIBC_2.29 j1f64 F
++GLIBC_2.29 j1l F
++GLIBC_2.29 jn F
++GLIBC_2.29 jnf F
++GLIBC_2.29 jnf32 F
++GLIBC_2.29 jnf32x F
++GLIBC_2.29 jnf64 F
++GLIBC_2.29 jnl F
++GLIBC_2.29 ldexp F
++GLIBC_2.29 ldexpf F
++GLIBC_2.29 ldexpf32 F
++GLIBC_2.29 ldexpf32x F
++GLIBC_2.29 ldexpf64 F
++GLIBC_2.29 ldexpl F
++GLIBC_2.29 lgamma F
++GLIBC_2.29 lgamma_r F
++GLIBC_2.29 lgammaf F
++GLIBC_2.29 lgammaf32 F
++GLIBC_2.29 lgammaf32_r F
++GLIBC_2.29 lgammaf32x F
++GLIBC_2.29 lgammaf32x_r F
++GLIBC_2.29 lgammaf64 F
++GLIBC_2.29 lgammaf64_r F
++GLIBC_2.29 lgammaf_r F
++GLIBC_2.29 lgammal F
++GLIBC_2.29 lgammal_r F
++GLIBC_2.29 llogb F
++GLIBC_2.29 llogbf F
++GLIBC_2.29 llogbf32 F
++GLIBC_2.29 llogbf32x F
++GLIBC_2.29 llogbf64 F
++GLIBC_2.29 llogbl F
++GLIBC_2.29 llrint F
++GLIBC_2.29 llrintf F
++GLIBC_2.29 llrintf32 F
++GLIBC_2.29 llrintf32x F
++GLIBC_2.29 llrintf64 F
++GLIBC_2.29 llrintl F
++GLIBC_2.29 llround F
++GLIBC_2.29 llroundf F
++GLIBC_2.29 llroundf32 F
++GLIBC_2.29 llroundf32x F
++GLIBC_2.29 llroundf64 F
++GLIBC_2.29 llroundl F
++GLIBC_2.29 log F
++GLIBC_2.29 log10 F
++GLIBC_2.29 log10f F
++GLIBC_2.29 log10f32 F
++GLIBC_2.29 log10f32x F
++GLIBC_2.29 log10f64 F
++GLIBC_2.29 log10l F
++GLIBC_2.29 log1p F
++GLIBC_2.29 log1pf F
++GLIBC_2.29 log1pf32 F
++GLIBC_2.29 log1pf32x F
++GLIBC_2.29 log1pf64 F
++GLIBC_2.29 log1pl F
++GLIBC_2.29 log2 F
++GLIBC_2.29 log2f F
++GLIBC_2.29 log2f32 F
++GLIBC_2.29 log2f32x F
++GLIBC_2.29 log2f64 F
++GLIBC_2.29 log2l F
++GLIBC_2.29 logb F
++GLIBC_2.29 logbf F
++GLIBC_2.29 logbf32 F
++GLIBC_2.29 logbf32x F
++GLIBC_2.29 logbf64 F
++GLIBC_2.29 logbl F
++GLIBC_2.29 logf F
++GLIBC_2.29 logf32 F
++GLIBC_2.29 logf32x F
++GLIBC_2.29 logf64 F
++GLIBC_2.29 logl F
++GLIBC_2.29 lrint F
++GLIBC_2.29 lrintf F
++GLIBC_2.29 lrintf32 F
++GLIBC_2.29 lrintf32x F
++GLIBC_2.29 lrintf64 F
++GLIBC_2.29 lrintl F
++GLIBC_2.29 lround F
++GLIBC_2.29 lroundf F
++GLIBC_2.29 lroundf32 F
++GLIBC_2.29 lroundf32x F
++GLIBC_2.29 lroundf64 F
++GLIBC_2.29 lroundl F
++GLIBC_2.29 modf F
++GLIBC_2.29 modff F
++GLIBC_2.29 modff32 F
++GLIBC_2.29 modff32x F
++GLIBC_2.29 modff64 F
++GLIBC_2.29 modfl F
++GLIBC_2.29 nan F
++GLIBC_2.29 nanf F
++GLIBC_2.29 nanf32 F
++GLIBC_2.29 nanf32x F
++GLIBC_2.29 nanf64 F
++GLIBC_2.29 nanl F
++GLIBC_2.29 nearbyint F
++GLIBC_2.29 nearbyintf F
++GLIBC_2.29 nearbyintf32 F
++GLIBC_2.29 nearbyintf32x F
++GLIBC_2.29 nearbyintf64 F
++GLIBC_2.29 nearbyintl F
++GLIBC_2.29 nextafter F
++GLIBC_2.29 nextafterf F
++GLIBC_2.29 nextafterf32 F
++GLIBC_2.29 nextafterf32x F
++GLIBC_2.29 nextafterf64 F
++GLIBC_2.29 nextafterl F
++GLIBC_2.29 nextdown F
++GLIBC_2.29 nextdownf F
++GLIBC_2.29 nextdownf32 F
++GLIBC_2.29 nextdownf32x F
++GLIBC_2.29 nextdownf64 F
++GLIBC_2.29 nextdownl F
++GLIBC_2.29 nexttoward F
++GLIBC_2.29 nexttowardf F
++GLIBC_2.29 nexttowardl F
++GLIBC_2.29 nextup F
++GLIBC_2.29 nextupf F
++GLIBC_2.29 nextupf32 F
++GLIBC_2.29 nextupf32x F
++GLIBC_2.29 nextupf64 F
++GLIBC_2.29 nextupl F
++GLIBC_2.29 pow F
++GLIBC_2.29 powf F
++GLIBC_2.29 powf32 F
++GLIBC_2.29 powf32x F
++GLIBC_2.29 powf64 F
++GLIBC_2.29 powl F
++GLIBC_2.29 remainder F
++GLIBC_2.29 remainderf F
++GLIBC_2.29 remainderf32 F
++GLIBC_2.29 remainderf32x F
++GLIBC_2.29 remainderf64 F
++GLIBC_2.29 remainderl F
++GLIBC_2.29 remquo F
++GLIBC_2.29 remquof F
++GLIBC_2.29 remquof32 F
++GLIBC_2.29 remquof32x F
++GLIBC_2.29 remquof64 F
++GLIBC_2.29 remquol F
++GLIBC_2.29 rint F
++GLIBC_2.29 rintf F
++GLIBC_2.29 rintf32 F
++GLIBC_2.29 rintf32x F
++GLIBC_2.29 rintf64 F
++GLIBC_2.29 rintl F
++GLIBC_2.29 round F
++GLIBC_2.29 roundeven F
++GLIBC_2.29 roundevenf F
++GLIBC_2.29 roundevenf32 F
++GLIBC_2.29 roundevenf32x F
++GLIBC_2.29 roundevenf64 F
++GLIBC_2.29 roundevenl F
++GLIBC_2.29 roundf F
++GLIBC_2.29 roundf32 F
++GLIBC_2.29 roundf32x F
++GLIBC_2.29 roundf64 F
++GLIBC_2.29 roundl F
++GLIBC_2.29 scalb F
++GLIBC_2.29 scalbf F
++GLIBC_2.29 scalbl F
++GLIBC_2.29 scalbln F
++GLIBC_2.29 scalblnf F
++GLIBC_2.29 scalblnf32 F
++GLIBC_2.29 scalblnf32x F
++GLIBC_2.29 scalblnf64 F
++GLIBC_2.29 scalblnl F
++GLIBC_2.29 scalbn F
++GLIBC_2.29 scalbnf F
++GLIBC_2.29 scalbnf32 F
++GLIBC_2.29 scalbnf32x F
++GLIBC_2.29 scalbnf64 F
++GLIBC_2.29 scalbnl F
++GLIBC_2.29 setpayload F
++GLIBC_2.29 setpayloadf F
++GLIBC_2.29 setpayloadf32 F
++GLIBC_2.29 setpayloadf32x F
++GLIBC_2.29 setpayloadf64 F
++GLIBC_2.29 setpayloadl F
++GLIBC_2.29 setpayloadsig F
++GLIBC_2.29 setpayloadsigf F
++GLIBC_2.29 setpayloadsigf32 F
++GLIBC_2.29 setpayloadsigf32x F
++GLIBC_2.29 setpayloadsigf64 F
++GLIBC_2.29 setpayloadsigl F
++GLIBC_2.29 signgam D 0x4
++GLIBC_2.29 significand F
++GLIBC_2.29 significandf F
++GLIBC_2.29 significandl F
++GLIBC_2.29 sin F
++GLIBC_2.29 sincos F
++GLIBC_2.29 sincosf F
++GLIBC_2.29 sincosf32 F
++GLIBC_2.29 sincosf32x F
++GLIBC_2.29 sincosf64 F
++GLIBC_2.29 sincosl F
++GLIBC_2.29 sinf F
++GLIBC_2.29 sinf32 F
++GLIBC_2.29 sinf32x F
++GLIBC_2.29 sinf64 F
++GLIBC_2.29 sinh F
++GLIBC_2.29 sinhf F
++GLIBC_2.29 sinhf32 F
++GLIBC_2.29 sinhf32x F
++GLIBC_2.29 sinhf64 F
++GLIBC_2.29 sinhl F
++GLIBC_2.29 sinl F
++GLIBC_2.29 sqrt F
++GLIBC_2.29 sqrtf F
++GLIBC_2.29 sqrtf32 F
++GLIBC_2.29 sqrtf32x F
++GLIBC_2.29 sqrtf64 F
++GLIBC_2.29 sqrtl F
++GLIBC_2.29 tan F
++GLIBC_2.29 tanf F
++GLIBC_2.29 tanf32 F
++GLIBC_2.29 tanf32x F
++GLIBC_2.29 tanf64 F
++GLIBC_2.29 tanh F
++GLIBC_2.29 tanhf F
++GLIBC_2.29 tanhf32 F
++GLIBC_2.29 tanhf32x F
++GLIBC_2.29 tanhf64 F
++GLIBC_2.29 tanhl F
++GLIBC_2.29 tanl F
++GLIBC_2.29 tgamma F
++GLIBC_2.29 tgammaf F
++GLIBC_2.29 tgammaf32 F
++GLIBC_2.29 tgammaf32x F
++GLIBC_2.29 tgammaf64 F
++GLIBC_2.29 tgammal F
++GLIBC_2.29 totalorder F
++GLIBC_2.29 totalorderf F
++GLIBC_2.29 totalorderf32 F
++GLIBC_2.29 totalorderf32x F
++GLIBC_2.29 totalorderf64 F
++GLIBC_2.29 totalorderl F
++GLIBC_2.29 totalordermag F
++GLIBC_2.29 totalordermagf F
++GLIBC_2.29 totalordermagf32 F
++GLIBC_2.29 totalordermagf32x F
++GLIBC_2.29 totalordermagf64 F
++GLIBC_2.29 totalordermagl F
++GLIBC_2.29 trunc F
++GLIBC_2.29 truncf F
++GLIBC_2.29 truncf32 F
++GLIBC_2.29 truncf32x F
++GLIBC_2.29 truncf64 F
++GLIBC_2.29 truncl F
++GLIBC_2.29 ufromfp F
++GLIBC_2.29 ufromfpf F
++GLIBC_2.29 ufromfpf32 F
++GLIBC_2.29 ufromfpf32x F
++GLIBC_2.29 ufromfpf64 F
++GLIBC_2.29 ufromfpl F
++GLIBC_2.29 ufromfpx F
++GLIBC_2.29 ufromfpxf F
++GLIBC_2.29 ufromfpxf32 F
++GLIBC_2.29 ufromfpxf32x F
++GLIBC_2.29 ufromfpxf64 F
++GLIBC_2.29 ufromfpxl F
++GLIBC_2.29 y0 F
++GLIBC_2.29 y0f F
++GLIBC_2.29 y0f32 F
++GLIBC_2.29 y0f32x F
++GLIBC_2.29 y0f64 F
++GLIBC_2.29 y0l F
++GLIBC_2.29 y1 F
++GLIBC_2.29 y1f F
++GLIBC_2.29 y1f32 F
++GLIBC_2.29 y1f32x F
++GLIBC_2.29 y1f64 F
++GLIBC_2.29 y1l F
++GLIBC_2.29 yn F
++GLIBC_2.29 ynf F
++GLIBC_2.29 ynf32 F
++GLIBC_2.29 ynf32x F
++GLIBC_2.29 ynf64 F
++GLIBC_2.29 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 00000000000..ea4b79a518e
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+@@ -0,0 +1,235 @@
++GLIBC_2.29 _IO_flockfile F
++GLIBC_2.29 _IO_ftrylockfile F
++GLIBC_2.29 _IO_funlockfile F
++GLIBC_2.29 __close F
++GLIBC_2.29 __connect F
++GLIBC_2.29 __errno_location F
++GLIBC_2.29 __h_errno_location F
++GLIBC_2.29 __libc_allocate_rtsig F
++GLIBC_2.29 __libc_current_sigrtmax F
++GLIBC_2.29 __libc_current_sigrtmin F
++GLIBC_2.29 __lseek F
++GLIBC_2.29 __nanosleep F
++GLIBC_2.29 __open F
++GLIBC_2.29 __open64 F
++GLIBC_2.29 __pread64 F
++GLIBC_2.29 __pthread_cleanup_routine F
++GLIBC_2.29 __pthread_getspecific F
++GLIBC_2.29 __pthread_key_create F
++GLIBC_2.29 __pthread_mutex_destroy F
++GLIBC_2.29 __pthread_mutex_init F
++GLIBC_2.29 __pthread_mutex_lock F
++GLIBC_2.29 __pthread_mutex_trylock F
++GLIBC_2.29 __pthread_mutex_unlock F
++GLIBC_2.29 __pthread_mutexattr_destroy F
++GLIBC_2.29 __pthread_mutexattr_init F
++GLIBC_2.29 __pthread_mutexattr_settype F
++GLIBC_2.29 __pthread_once F
++GLIBC_2.29 __pthread_register_cancel F
++GLIBC_2.29 __pthread_register_cancel_defer F
++GLIBC_2.29 __pthread_rwlock_destroy F
++GLIBC_2.29 __pthread_rwlock_init F
++GLIBC_2.29 __pthread_rwlock_rdlock F
++GLIBC_2.29 __pthread_rwlock_tryrdlock F
++GLIBC_2.29 __pthread_rwlock_trywrlock F
++GLIBC_2.29 __pthread_rwlock_unlock F
++GLIBC_2.29 __pthread_rwlock_wrlock F
++GLIBC_2.29 __pthread_setspecific F
++GLIBC_2.29 __pthread_unregister_cancel F
++GLIBC_2.29 __pthread_unregister_cancel_restore F
++GLIBC_2.29 __pthread_unwind_next F
++GLIBC_2.29 __pwrite64 F
++GLIBC_2.29 __read F
++GLIBC_2.29 __res_state F
++GLIBC_2.29 __send F
++GLIBC_2.29 __sigaction F
++GLIBC_2.29 __wait F
++GLIBC_2.29 __write F
++GLIBC_2.29 _pthread_cleanup_pop F
++GLIBC_2.29 _pthread_cleanup_pop_restore F
++GLIBC_2.29 _pthread_cleanup_push F
++GLIBC_2.29 _pthread_cleanup_push_defer F
++GLIBC_2.29 accept F
++GLIBC_2.29 call_once F
++GLIBC_2.29 close F
++GLIBC_2.29 cnd_broadcast F
++GLIBC_2.29 cnd_destroy F
++GLIBC_2.29 cnd_init F
++GLIBC_2.29 cnd_signal F
++GLIBC_2.29 cnd_timedwait F
++GLIBC_2.29 cnd_wait F
++GLIBC_2.29 connect F
++GLIBC_2.29 flockfile F
++GLIBC_2.29 fsync F
++GLIBC_2.29 ftrylockfile F
++GLIBC_2.29 funlockfile F
++GLIBC_2.29 lseek F
++GLIBC_2.29 lseek64 F
++GLIBC_2.29 msync F
++GLIBC_2.29 mtx_destroy F
++GLIBC_2.29 mtx_init F
++GLIBC_2.29 mtx_lock F
++GLIBC_2.29 mtx_timedlock F
++GLIBC_2.29 mtx_trylock F
++GLIBC_2.29 mtx_unlock F
++GLIBC_2.29 nanosleep F
++GLIBC_2.29 open F
++GLIBC_2.29 open64 F
++GLIBC_2.29 pause F
++GLIBC_2.29 pread F
++GLIBC_2.29 pread64 F
++GLIBC_2.29 pthread_attr_destroy F
++GLIBC_2.29 pthread_attr_getaffinity_np F
++GLIBC_2.29 pthread_attr_getdetachstate F
++GLIBC_2.29 pthread_attr_getguardsize F
++GLIBC_2.29 pthread_attr_getinheritsched F
++GLIBC_2.29 pthread_attr_getschedparam F
++GLIBC_2.29 pthread_attr_getschedpolicy F
++GLIBC_2.29 pthread_attr_getscope F
++GLIBC_2.29 pthread_attr_getstack F
++GLIBC_2.29 pthread_attr_getstackaddr F
++GLIBC_2.29 pthread_attr_getstacksize F
++GLIBC_2.29 pthread_attr_init F
++GLIBC_2.29 pthread_attr_setaffinity_np F
++GLIBC_2.29 pthread_attr_setdetachstate F
++GLIBC_2.29 pthread_attr_setguardsize F
++GLIBC_2.29 pthread_attr_setinheritsched F
++GLIBC_2.29 pthread_attr_setschedparam F
++GLIBC_2.29 pthread_attr_setschedpolicy F
++GLIBC_2.29 pthread_attr_setscope F
++GLIBC_2.29 pthread_attr_setstack F
++GLIBC_2.29 pthread_attr_setstackaddr F
++GLIBC_2.29 pthread_attr_setstacksize F
++GLIBC_2.29 pthread_barrier_destroy F
++GLIBC_2.29 pthread_barrier_init F
++GLIBC_2.29 pthread_barrier_wait F
++GLIBC_2.29 pthread_barrierattr_destroy F
++GLIBC_2.29 pthread_barrierattr_getpshared F
++GLIBC_2.29 pthread_barrierattr_init F
++GLIBC_2.29 pthread_barrierattr_setpshared F
++GLIBC_2.29 pthread_cancel F
++GLIBC_2.29 pthread_cond_broadcast F
++GLIBC_2.29 pthread_cond_destroy F
++GLIBC_2.29 pthread_cond_init F
++GLIBC_2.29 pthread_cond_signal F
++GLIBC_2.29 pthread_cond_timedwait F
++GLIBC_2.29 pthread_cond_wait F
++GLIBC_2.29 pthread_condattr_destroy F
++GLIBC_2.29 pthread_condattr_getclock F
++GLIBC_2.29 pthread_condattr_getpshared F
++GLIBC_2.29 pthread_condattr_init F
++GLIBC_2.29 pthread_condattr_setclock F
++GLIBC_2.29 pthread_condattr_setpshared F
++GLIBC_2.29 pthread_create F
++GLIBC_2.29 pthread_detach F
++GLIBC_2.29 pthread_equal F
++GLIBC_2.29 pthread_exit F
++GLIBC_2.29 pthread_getaffinity_np F
++GLIBC_2.29 pthread_getattr_default_np F
++GLIBC_2.29 pthread_getattr_np F
++GLIBC_2.29 pthread_getconcurrency F
++GLIBC_2.29 pthread_getcpuclockid F
++GLIBC_2.29 pthread_getname_np F
++GLIBC_2.29 pthread_getschedparam F
++GLIBC_2.29 pthread_getspecific F
++GLIBC_2.29 pthread_join F
++GLIBC_2.29 pthread_key_create F
++GLIBC_2.29 pthread_key_delete F
++GLIBC_2.29 pthread_kill F
++GLIBC_2.29 pthread_kill_other_threads_np F
++GLIBC_2.29 pthread_mutex_consistent F
++GLIBC_2.29 pthread_mutex_consistent_np F
++GLIBC_2.29 pthread_mutex_destroy F
++GLIBC_2.29 pthread_mutex_getprioceiling F
++GLIBC_2.29 pthread_mutex_init F
++GLIBC_2.29 pthread_mutex_lock F
++GLIBC_2.29 pthread_mutex_setprioceiling F
++GLIBC_2.29 pthread_mutex_timedlock F
++GLIBC_2.29 pthread_mutex_trylock F
++GLIBC_2.29 pthread_mutex_unlock F
++GLIBC_2.29 pthread_mutexattr_destroy F
++GLIBC_2.29 pthread_mutexattr_getkind_np F
++GLIBC_2.29 pthread_mutexattr_getprioceiling F
++GLIBC_2.29 pthread_mutexattr_getprotocol F
++GLIBC_2.29 pthread_mutexattr_getpshared F
++GLIBC_2.29 pthread_mutexattr_getrobust F
++GLIBC_2.29 pthread_mutexattr_getrobust_np F
++GLIBC_2.29 pthread_mutexattr_gettype F
++GLIBC_2.29 pthread_mutexattr_init F
++GLIBC_2.29 pthread_mutexattr_setkind_np F
++GLIBC_2.29 pthread_mutexattr_setprioceiling F
++GLIBC_2.29 pthread_mutexattr_setprotocol F
++GLIBC_2.29 pthread_mutexattr_setpshared F
++GLIBC_2.29 pthread_mutexattr_setrobust F
++GLIBC_2.29 pthread_mutexattr_setrobust_np F
++GLIBC_2.29 pthread_mutexattr_settype F
++GLIBC_2.29 pthread_once F
++GLIBC_2.29 pthread_rwlock_destroy F
++GLIBC_2.29 pthread_rwlock_init F
++GLIBC_2.29 pthread_rwlock_rdlock F
++GLIBC_2.29 pthread_rwlock_timedrdlock F
++GLIBC_2.29 pthread_rwlock_timedwrlock F
++GLIBC_2.29 pthread_rwlock_tryrdlock F
++GLIBC_2.29 pthread_rwlock_trywrlock F
++GLIBC_2.29 pthread_rwlock_unlock F
++GLIBC_2.29 pthread_rwlock_wrlock F
++GLIBC_2.29 pthread_rwlockattr_destroy F
++GLIBC_2.29 pthread_rwlockattr_getkind_np F
++GLIBC_2.29 pthread_rwlockattr_getpshared F
++GLIBC_2.29 pthread_rwlockattr_init F
++GLIBC_2.29 pthread_rwlockattr_setkind_np F
++GLIBC_2.29 pthread_rwlockattr_setpshared F
++GLIBC_2.29 pthread_setaffinity_np F
++GLIBC_2.29 pthread_setattr_default_np F
++GLIBC_2.29 pthread_setcancelstate F
++GLIBC_2.29 pthread_setcanceltype F
++GLIBC_2.29 pthread_setconcurrency F
++GLIBC_2.29 pthread_setname_np F
++GLIBC_2.29 pthread_setschedparam F
++GLIBC_2.29 pthread_setschedprio F
++GLIBC_2.29 pthread_setspecific F
++GLIBC_2.29 pthread_sigmask F
++GLIBC_2.29 pthread_sigqueue F
++GLIBC_2.29 pthread_spin_destroy F
++GLIBC_2.29 pthread_spin_init F
++GLIBC_2.29 pthread_spin_lock F
++GLIBC_2.29 pthread_spin_trylock F
++GLIBC_2.29 pthread_spin_unlock F
++GLIBC_2.29 pthread_testcancel F
++GLIBC_2.29 pthread_timedjoin_np F
++GLIBC_2.29 pthread_tryjoin_np F
++GLIBC_2.29 pthread_yield F
++GLIBC_2.29 pwrite F
++GLIBC_2.29 pwrite64 F
++GLIBC_2.29 raise F
++GLIBC_2.29 read F
++GLIBC_2.29 recv F
++GLIBC_2.29 recvfrom F
++GLIBC_2.29 recvmsg F
++GLIBC_2.29 sem_close F
++GLIBC_2.29 sem_destroy F
++GLIBC_2.29 sem_getvalue F
++GLIBC_2.29 sem_init F
++GLIBC_2.29 sem_open F
++GLIBC_2.29 sem_post F
++GLIBC_2.29 sem_timedwait F
++GLIBC_2.29 sem_trywait F
++GLIBC_2.29 sem_unlink F
++GLIBC_2.29 sem_wait F
++GLIBC_2.29 send F
++GLIBC_2.29 sendmsg F
++GLIBC_2.29 sendto F
++GLIBC_2.29 sigaction F
++GLIBC_2.29 sigwait F
++GLIBC_2.29 tcdrain F
++GLIBC_2.29 thrd_create F
++GLIBC_2.29 thrd_detach F
++GLIBC_2.29 thrd_exit F
++GLIBC_2.29 thrd_join F
++GLIBC_2.29 tss_create F
++GLIBC_2.29 tss_delete F
++GLIBC_2.29 tss_get F
++GLIBC_2.29 tss_set F
++GLIBC_2.29 wait F
++GLIBC_2.29 waitpid F
++GLIBC_2.29 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 00000000000..2830a7efd17
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/libresolv.abilist
+@@ -0,0 +1,79 @@
++GLIBC_2.29 __b64_ntop F
++GLIBC_2.29 __b64_pton F
++GLIBC_2.29 __dn_comp F
++GLIBC_2.29 __dn_count_labels F
++GLIBC_2.29 __dn_expand F
++GLIBC_2.29 __dn_skipname F
++GLIBC_2.29 __fp_nquery F
++GLIBC_2.29 __fp_query F
++GLIBC_2.29 __fp_resstat F
++GLIBC_2.29 __hostalias F
++GLIBC_2.29 __loc_aton F
++GLIBC_2.29 __loc_ntoa F
++GLIBC_2.29 __p_cdname F
++GLIBC_2.29 __p_cdnname F
++GLIBC_2.29 __p_class F
++GLIBC_2.29 __p_class_syms D 0x54
++GLIBC_2.29 __p_fqname F
++GLIBC_2.29 __p_fqnname F
++GLIBC_2.29 __p_option F
++GLIBC_2.29 __p_query F
++GLIBC_2.29 __p_rcode F
++GLIBC_2.29 __p_time F
++GLIBC_2.29 __p_type F
++GLIBC_2.29 __p_type_syms D 0x228
++GLIBC_2.29 __putlong F
++GLIBC_2.29 __putshort F
++GLIBC_2.29 __res_close F
++GLIBC_2.29 __res_dnok F
++GLIBC_2.29 __res_hnok F
++GLIBC_2.29 __res_hostalias F
++GLIBC_2.29 __res_isourserver F
++GLIBC_2.29 __res_mailok F
++GLIBC_2.29 __res_mkquery F
++GLIBC_2.29 __res_nameinquery F
++GLIBC_2.29 __res_nmkquery F
++GLIBC_2.29 __res_nquery F
++GLIBC_2.29 __res_nquerydomain F
++GLIBC_2.29 __res_nsearch F
++GLIBC_2.29 __res_nsend F
++GLIBC_2.29 __res_ownok F
++GLIBC_2.29 __res_queriesmatch F
++GLIBC_2.29 __res_query F
++GLIBC_2.29 __res_querydomain F
++GLIBC_2.29 __res_search F
++GLIBC_2.29 __res_send F
++GLIBC_2.29 __sym_ntop F
++GLIBC_2.29 __sym_ntos F
++GLIBC_2.29 __sym_ston F
++GLIBC_2.29 _getlong F
++GLIBC_2.29 _getshort F
++GLIBC_2.29 inet_net_ntop F
++GLIBC_2.29 inet_net_pton F
++GLIBC_2.29 inet_neta F
++GLIBC_2.29 ns_datetosecs F
++GLIBC_2.29 ns_format_ttl F
++GLIBC_2.29 ns_get16 F
++GLIBC_2.29 ns_get32 F
++GLIBC_2.29 ns_initparse F
++GLIBC_2.29 ns_makecanon F
++GLIBC_2.29 ns_msg_getflag F
++GLIBC_2.29 ns_name_compress F
++GLIBC_2.29 ns_name_ntol F
++GLIBC_2.29 ns_name_ntop F
++GLIBC_2.29 ns_name_pack F
++GLIBC_2.29 ns_name_pton F
++GLIBC_2.29 ns_name_rollback F
++GLIBC_2.29 ns_name_skip F
++GLIBC_2.29 ns_name_uncompress F
++GLIBC_2.29 ns_name_unpack F
++GLIBC_2.29 ns_parse_ttl F
++GLIBC_2.29 ns_parserr F
++GLIBC_2.29 ns_put16 F
++GLIBC_2.29 ns_put32 F
++GLIBC_2.29 ns_samedomain F
++GLIBC_2.29 ns_samename F
++GLIBC_2.29 ns_skiprr F
++GLIBC_2.29 ns_sprintrr F
++GLIBC_2.29 ns_sprintrrf F
++GLIBC_2.29 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 00000000000..c6690ef7c13
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/librt.abilist
+@@ -0,0 +1,35 @@
++GLIBC_2.29 __mq_open_2 F
++GLIBC_2.29 aio_cancel F
++GLIBC_2.29 aio_cancel64 F
++GLIBC_2.29 aio_error F
++GLIBC_2.29 aio_error64 F
++GLIBC_2.29 aio_fsync F
++GLIBC_2.29 aio_fsync64 F
++GLIBC_2.29 aio_init F
++GLIBC_2.29 aio_read F
++GLIBC_2.29 aio_read64 F
++GLIBC_2.29 aio_return F
++GLIBC_2.29 aio_return64 F
++GLIBC_2.29 aio_suspend F
++GLIBC_2.29 aio_suspend64 F
++GLIBC_2.29 aio_write F
++GLIBC_2.29 aio_write64 F
++GLIBC_2.29 lio_listio F
++GLIBC_2.29 lio_listio64 F
++GLIBC_2.29 mq_close F
++GLIBC_2.29 mq_getattr F
++GLIBC_2.29 mq_notify F
++GLIBC_2.29 mq_open F
++GLIBC_2.29 mq_receive F
++GLIBC_2.29 mq_send F
++GLIBC_2.29 mq_setattr F
++GLIBC_2.29 mq_timedreceive F
++GLIBC_2.29 mq_timedsend F
++GLIBC_2.29 mq_unlink F
++GLIBC_2.29 shm_open F
++GLIBC_2.29 shm_unlink F
++GLIBC_2.29 timer_create F
++GLIBC_2.29 timer_delete F
++GLIBC_2.29 timer_getoverrun F
++GLIBC_2.29 timer_gettime F
++GLIBC_2.29 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 00000000000..37e9bace552
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/libthread_db.abilist
+@@ -0,0 +1,40 @@
++GLIBC_2.29 td_init F
++GLIBC_2.29 td_log F
++GLIBC_2.29 td_symbol_list F
++GLIBC_2.29 td_ta_clear_event F
++GLIBC_2.29 td_ta_delete F
++GLIBC_2.29 td_ta_enable_stats F
++GLIBC_2.29 td_ta_event_addr F
++GLIBC_2.29 td_ta_event_getmsg F
++GLIBC_2.29 td_ta_get_nthreads F
++GLIBC_2.29 td_ta_get_ph F
++GLIBC_2.29 td_ta_get_stats F
++GLIBC_2.29 td_ta_map_id2thr F
++GLIBC_2.29 td_ta_map_lwp2thr F
++GLIBC_2.29 td_ta_new F
++GLIBC_2.29 td_ta_reset_stats F
++GLIBC_2.29 td_ta_set_event F
++GLIBC_2.29 td_ta_setconcurrency F
++GLIBC_2.29 td_ta_thr_iter F
++GLIBC_2.29 td_ta_tsd_iter F
++GLIBC_2.29 td_thr_clear_event F
++GLIBC_2.29 td_thr_dbresume F
++GLIBC_2.29 td_thr_dbsuspend F
++GLIBC_2.29 td_thr_event_enable F
++GLIBC_2.29 td_thr_event_getmsg F
++GLIBC_2.29 td_thr_get_info F
++GLIBC_2.29 td_thr_getfpregs F
++GLIBC_2.29 td_thr_getgregs F
++GLIBC_2.29 td_thr_getxregs F
++GLIBC_2.29 td_thr_getxregsize F
++GLIBC_2.29 td_thr_set_event F
++GLIBC_2.29 td_thr_setfpregs F
++GLIBC_2.29 td_thr_setgregs F
++GLIBC_2.29 td_thr_setprio F
++GLIBC_2.29 td_thr_setsigpending F
++GLIBC_2.29 td_thr_setxregs F
++GLIBC_2.29 td_thr_sigsetmask F
++GLIBC_2.29 td_thr_tls_get_addr F
++GLIBC_2.29 td_thr_tlsbase F
++GLIBC_2.29 td_thr_tsd F
++GLIBC_2.29 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 00000000000..cbd11999a4f
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/libutil.abilist
+@@ -0,0 +1,6 @@
++GLIBC_2.29 forkpty F
++GLIBC_2.29 login F
++GLIBC_2.29 login_tty F
++GLIBC_2.29 logout F
++GLIBC_2.29 logwtmp F
++GLIBC_2.29 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 00000000000..e902fd0607a
+--- /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 00000000000..3d46452e175
+--- /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 00000000000..3f28f352d91
+--- /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
++
++/* 8K page is default for ARC. */
++#define MMAP2_PAGE_UNIT 8192ULL
++
++#include_next <mmap_internal.h>
++
++#endif
+diff --git a/sysdeps/unix/sysv/linux/arc/profil-counter.h b/sysdeps/unix/sysv/linux/arc/profil-counter.h
+new file mode 100644
+index 00000000000..8a6a0bcf3d5
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/profil-counter.h
+@@ -0,0 +1,2 @@
++/* We can use the ix86 version. */
++#include <sysdeps/unix/sysv/linux/i386/profil-counter.h>
+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 00000000000..1cc89317007
+--- /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 00000000000..8cf4ffcaf5a
+--- /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 00000000000..e527acd7789
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/shlib-versions
+@@ -0,0 +1,2 @@
++DEFAULT GLIBC_2.29
++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 00000000000..db7293865f3
+--- /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 00000000000..acf03c6afd9
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/sigcontextinfo.h
+@@ -0,0 +1,23 @@
++/* 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/>. */
++
++#include <sys/ucontext.h>
++#include "kernel-features.h"
++
++#define SIGCONTEXT int _code, struct ucontext_t *
++#define GET_PC(ctx) ((void *) (ctx)->uc_mcontext.__scratch.__ret)
+diff --git a/sysdeps/unix/sysv/linux/arc/sigrestorer.S b/sysdeps/unix/sysv/linux/arc/sigrestorer.S
+new file mode 100644
+index 00000000000..573b54e36cf
+--- /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 00000000000..853d3805de6
+--- /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 00000000000..2d93e49e6a9
+--- /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 00000000000..7e357bcd65e
+--- /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 00000000000..50d0dc7827a
+--- /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 00000000000..3fe5fcdd041
+--- /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 00000000000..d0ef5977ee0
+--- /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 00000000000..5618f378515
+--- /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 00000000000..9ad95d97ae1
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/arc/sysdep.h
+@@ -0,0 +1,251 @@
++/* 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 <asm/unistd.h>
++#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 00000000000..ed261399c98
+--- /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 00000000000..d84e92f9f54
+--- /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 00000000000..7f981d0681c
+--- /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 b650dc07cc6..5a9f63ff511 100644
+--- a/sysdeps/unix/sysv/linux/syscall-names.list
++++ b/sysdeps/unix/sysv/linux/syscall-names.list
+@@ -42,6 +42,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 2ebc66a9af5..8e8d94fac3a 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