linux-snps-arc.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 00/14] glibc port to ARC processors
@ 2020-04-09  2:56 Vineet Gupta
  2020-04-09  2:56 ` [PATCH v5 01/14] ARC: ABI Implementation Vineet Gupta
                   ` (13 more replies)
  0 siblings, 14 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Hi,

This patchset implements glibc port to ARC HS48x processor from Synopsys.

It is based on 64-time time and offset work by Alistair and others.
Thank you guys for all the hard-work.

Code at

git@github.com:foss-for-synopsys-dwc-arc-processors/glibc.git  arc-glibc-post-v5

v5:
   * Big Endian formally supported as multi-ABI
   * Removed code for ARC700 processors
   * Hard-float code updates: fegetmode, fesetround, feupdateenv
   * socket-constant.h update for 64-bit ABI spun off as standalone patch
   * __syscall_error made glibc_private
   * math ulps regen
   * gmp-mparam.h removed
   * lint fixes as flagged by Joseph
v4:
   * Dropped 1/17: Merged upstream
   * Dropped 17/17:
       - 64-bit time/offset code chunked up into respective patches
   * sysctl removed
   * Updated README for arc gnu triplet
   * Updated install files for ARC gcc/binutils requirements
   * Updated NEWS with brief ISA/ABI info

v3:
   * Support for Hardware Floating Point
   * 64-bit time and offsets ABI (although all such changes are confined
     to a single patch)

v4: https://sourceware.org/pipermail/libc-alpha/2020-March/111855.html
v3: https://sourceware.org/legacy-ml/libc-alpha/2020-03/msg00167.html
v2: https://sourceware.org/legacy-ml/libc-alpha/2019-01/msg00681.html
v1: https://sourceware.org/legacy-ml/libc-alpha/2018-12/msg00678.html

Documentation:
--------------

(a) ABI doc:
https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/wiki/files/ARCv2_ABI.pdf

(b) Programmer's Reference Manual (PRM) : needs a download request to be filled
https://www.synopsys.com/dw/ipdir.php?ds=arc-hs44-hs46-hs48
https://www.synopsys.com/dw/doc.php/ds/cc/programmers-reference-manual-ARC-HS.pdf

Test Results:
--------------
(a) build-many-glibcs.py

| Summary of test results:
|   1251 PASS
|     15 XFAIL


(b) Full testsuite ran in a cross compile setup using buildroot on HSDK development
    platform. Bulk of failures come from cross testing setup and I
    intend to improve things with native testing going forward.

| Summary of test results:
|     33 FAIL
|
| FAIL: csu/test-as-const-tcb-offsets
| FAIL: elf/tst-ldconfig-ld_so_conf-update # not true: dlopen
| FAIL: iconv/test-iconvconfig		# Needs gconv installed
| FAIL: iconv/tst-gconv-init-failure
| FAIL: io/ftwtest			# Requires execution by non-root
| FAIL: io/tst-futimesat
| FAIL: io/tst-lockf
| FAIL: libio/tst-wfile-sync
| FAIL: locale/tst-C-locale
| FAIL: locale/tst-duplocale
| FAIL: locale/tst-locale-locpath
| FAIL: locale/tst-locname
| FAIL: localedata/sort-test
| FAIL: nptl/test-cond-printers		# needs Python3 and target GDB on target
| FAIL: nptl/test-condattr-printers	#    ditto
| FAIL: nptl/test-mutex-printers	#    ditto
| FAIL: nptl/test-mutexattr-printers	#    ditto
| FAIL: nptl/test-rwlock-printers	#    ditto
| FAIL: nptl/test-rwlockattr-printers	#    ditto
| FAIL: nptl/tst-umask1			# passes if run natively on target (NFS ACLv3 support needed)
| FAIL: nss/bug-erange
| FAIL: nss/tst-nss-files-hosts-getent	# Timed out
| FAIL: nss/tst-nss-files-hosts-multi	# Timed out
| FAIL: posix/bug-ga2			# DNS issue: google DNS vs. SNPS
| FAIL: posix/globtest			# require same user on target and host
| FAIL: posix/tst-getaddrinfo5		# passes outside corporate network
| FAIL: resolv/tst-resolv-basic
| FAIL: resolv/tst-resolv-edns
| FAIL: resolv/tst-resolv-rotate
| FAIL: resolv/tst-resolv-search
| FAIL: stdio-common/bug22		# Needs more RAM: 2 GB memory
| FAIL: sunrpc/bug20790			# missing cpp on target
| FAIL: timezone/tst-tzset		# passes outside corporate network


kindly review.

Thx,
-Vineet

Vineet Gupta (14):
  ARC: ABI Implementation
  ARC: startup and dynamic linking code
  ARC: Thread Local Storage support
  ARC: Atomics and Locking primitives
  ARC: math soft float support
  ARC: hardware floating point support
  ARC: Linux Syscall Interface
  ARC: Linux ABI
  ARC: Linux Startup and Dynamic Loading
  ARC: ABI lists
  ARC: Update syscall-names.list for ARC specific syscalls
  ARC: Build Infrastructure
  build-many-glibcs.py: Enable ARC builds
  Documentation for ARC port

 NEWS                                          |    9 +
 README                                        |    1 +
 config.h.in                                   |    3 +
 manual/install.texi                           |    5 +
 scripts/build-many-glibcs.py                  |   10 +
 sysdeps/arc/Implies                           |    3 +
 sysdeps/arc/Makefile                          |   21 +
 sysdeps/arc/Versions                          |    8 +
 sysdeps/arc/__longjmp.S                       |   50 +
 sysdeps/arc/abort-instr.h                     |    2 +
 sysdeps/arc/atomic-machine.h                  |   69 +
 sysdeps/arc/bits/endianness.h                 |   15 +
 sysdeps/arc/bits/fenv.h                       |   77 +
 sysdeps/arc/bits/link.h                       |   52 +
 sysdeps/arc/bits/setjmp.h                     |   26 +
 sysdeps/arc/bsd-_setjmp.S                     |    1 +
 sysdeps/arc/bsd-setjmp.S                      |    1 +
 sysdeps/arc/configure                         |  182 ++
 sysdeps/arc/configure.ac                      |   26 +
 sysdeps/arc/dl-machine.h                      |  340 +++
 sysdeps/arc/dl-runtime.c                      |   33 +
 sysdeps/arc/dl-sysdep.h                       |   25 +
 sysdeps/arc/dl-tls.h                          |   30 +
 sysdeps/arc/dl-trampoline.S                   |   80 +
 sysdeps/arc/entry.h                           |    5 +
 sysdeps/arc/fpu/e_sqrt.c                      |   27 +
 sysdeps/arc/fpu/e_sqrtf.c                     |   27 +
 sysdeps/arc/fpu/fclrexcpt.c                   |   36 +
 sysdeps/arc/fpu/fegetenv.c                    |   37 +
 sysdeps/arc/fpu/fegetmode.c                   |   31 +
 sysdeps/arc/fpu/fegetround.c                  |   32 +
 sysdeps/arc/fpu/feholdexcpt.c                 |   43 +
 sysdeps/arc/fpu/fesetenv.c                    |   48 +
 sysdeps/arc/fpu/fesetexcept.c                 |   32 +
 sysdeps/arc/fpu/fesetmode.c                   |   40 +
 sysdeps/arc/fpu/fesetround.c                  |   40 +
 sysdeps/arc/fpu/feupdateenv.c                 |   51 +
 sysdeps/arc/fpu/fgetexcptflg.c                |   31 +
 sysdeps/arc/fpu/fraiseexcpt.c                 |   39 +
 sysdeps/arc/fpu/fsetexcptflg.c                |   38 +
 sysdeps/arc/fpu/ftestexcept.c                 |   33 +
 sysdeps/arc/fpu/libm-test-ulps                | 1140 +++++++++
 sysdeps/arc/fpu/libm-test-ulps-name           |    1 +
 sysdeps/arc/fpu/s_fma.c                       |   28 +
 sysdeps/arc/fpu/s_fmaf.c                      |   28 +
 sysdeps/arc/fpu_control.h                     |  102 +
 sysdeps/arc/gccframe.h                        |   21 +
 sysdeps/arc/get-rounding-mode.h               |   38 +
 sysdeps/arc/jmpbuf-offsets.h                  |   47 +
 sysdeps/arc/jmpbuf-unwind.h                   |   47 +
 sysdeps/arc/ldsodefs.h                        |   43 +
 sysdeps/arc/libc-tls.c                        |   27 +
 sysdeps/arc/machine-gmon.h                    |   35 +
 sysdeps/arc/math-tests-trap.h                 |   27 +
 sysdeps/arc/memusage.h                        |   23 +
 sysdeps/arc/nofpu/Implies                     |    1 +
 sysdeps/arc/nofpu/libm-test-ulps              |  270 +++
 sysdeps/arc/nofpu/libm-test-ulps-name         |    1 +
 sysdeps/arc/nofpu/math-tests-exceptions.h     |   27 +
 sysdeps/arc/nofpu/math-tests-rounding.h       |   27 +
 sysdeps/arc/nptl/Makefile                     |   22 +
 sysdeps/arc/nptl/bits/semaphore.h             |   32 +
 sysdeps/arc/nptl/pthreaddef.h                 |   32 +
 sysdeps/arc/nptl/tcb-offsets.sym              |   11 +
 sysdeps/arc/nptl/tls.h                        |  150 ++
 sysdeps/arc/preconfigure                      |   14 +
 sysdeps/arc/setjmp.S                          |   66 +
 sysdeps/arc/sfp-machine.h                     |   73 +
 sysdeps/arc/sotruss-lib.c                     |   51 +
 sysdeps/arc/stackinfo.h                       |   33 +
 sysdeps/arc/start.S                           |   74 +
 sysdeps/arc/sysdep.h                          |   48 +
 sysdeps/arc/tininess.h                        |    1 +
 sysdeps/arc/tls-macros.h                      |   47 +
 sysdeps/arc/tst-audit.h                       |   23 +
 sysdeps/unix/sysv/linux/arc/Implies           |    3 +
 sysdeps/unix/sysv/linux/arc/Makefile          |   29 +
 sysdeps/unix/sysv/linux/arc/Versions          |   16 +
 sysdeps/unix/sysv/linux/arc/arch-syscall.h    |  317 +++
 sysdeps/unix/sysv/linux/arc/bits/procfs.h     |   35 +
 sysdeps/unix/sysv/linux/arc/bits/timesize.h   |   21 +
 .../sysv/linux/arc/bits/types/__sigset_t.h    |   12 +
 sysdeps/unix/sysv/linux/arc/c++-types.data    |   67 +
 sysdeps/unix/sysv/linux/arc/clone.S           |   98 +
 sysdeps/unix/sysv/linux/arc/configure         |    4 +
 sysdeps/unix/sysv/linux/arc/configure.ac      |    4 +
 sysdeps/unix/sysv/linux/arc/dl-static.c       |   84 +
 sysdeps/unix/sysv/linux/arc/getcontext.S      |   63 +
 sysdeps/unix/sysv/linux/arc/jmp_buf-macros.h  |    6 +
 sysdeps/unix/sysv/linux/arc/kernel-features.h |   28 +
 sysdeps/unix/sysv/linux/arc/kernel_stat.h     |   26 +
 sysdeps/unix/sysv/linux/arc/ld.abilist        |    5 +
 sysdeps/unix/sysv/linux/arc/ldconfig.h        |   27 +
 sysdeps/unix/sysv/linux/arc/ldsodefs.h        |   32 +
 .../sysv/linux/arc/libBrokenLocale.abilist    |    1 +
 sysdeps/unix/sysv/linux/arc/libanl.abilist    |    4 +
 sysdeps/unix/sysv/linux/arc/libc.abilist      | 2081 +++++++++++++++++
 sysdeps/unix/sysv/linux/arc/libcrypt.abilist  |    2 +
 sysdeps/unix/sysv/linux/arc/libdl.abilist     |    9 +
 sysdeps/unix/sysv/linux/arc/libm.abilist      |  699 ++++++
 .../unix/sysv/linux/arc/libpthread.abilist    |  217 ++
 sysdeps/unix/sysv/linux/arc/libresolv.abilist |   79 +
 sysdeps/unix/sysv/linux/arc/librt.abilist     |   35 +
 .../unix/sysv/linux/arc/libthread_db.abilist  |   40 +
 sysdeps/unix/sysv/linux/arc/libutil.abilist   |    6 +
 sysdeps/unix/sysv/linux/arc/localplt.data     |   12 +
 sysdeps/unix/sysv/linux/arc/makecontext.c     |   73 +
 sysdeps/unix/sysv/linux/arc/mmap_internal.h   |   27 +
 sysdeps/unix/sysv/linux/arc/pt-vfork.S        |    1 +
 sysdeps/unix/sysv/linux/arc/setcontext.S      |   92 +
 sysdeps/unix/sysv/linux/arc/shlib-versions    |    7 +
 sysdeps/unix/sysv/linux/arc/sigaction.c       |   31 +
 sysdeps/unix/sysv/linux/arc/sigcontextinfo.h  |   28 +
 sysdeps/unix/sysv/linux/arc/sigrestorer.S     |   29 +
 sysdeps/unix/sysv/linux/arc/swapcontext.S     |   92 +
 sysdeps/unix/sysv/linux/arc/sys/cachectl.h    |   36 +
 sysdeps/unix/sysv/linux/arc/sys/ucontext.h    |   61 +
 sysdeps/unix/sysv/linux/arc/sys/user.h        |   31 +
 sysdeps/unix/sysv/linux/arc/syscall.S         |   33 +
 sysdeps/unix/sysv/linux/arc/syscalls.list     |    3 +
 sysdeps/unix/sysv/linux/arc/sysctl.mk         |    1 +
 sysdeps/unix/sysv/linux/arc/sysdep.c          |   33 +
 sysdeps/unix/sysv/linux/arc/sysdep.h          |  219 ++
 sysdeps/unix/sysv/linux/arc/ucontext-macros.h |   29 +
 sysdeps/unix/sysv/linux/arc/ucontext_i.sym    |   20 +
 sysdeps/unix/sysv/linux/arc/vfork.S           |   42 +
 sysdeps/unix/sysv/linux/syscall-names.list    |    3 +
 127 files changed, 9222 insertions(+)
 create mode 100644 sysdeps/arc/Implies
 create mode 100644 sysdeps/arc/Makefile
 create mode 100644 sysdeps/arc/Versions
 create mode 100644 sysdeps/arc/__longjmp.S
 create mode 100644 sysdeps/arc/abort-instr.h
 create mode 100644 sysdeps/arc/atomic-machine.h
 create mode 100644 sysdeps/arc/bits/endianness.h
 create mode 100644 sysdeps/arc/bits/fenv.h
 create mode 100644 sysdeps/arc/bits/link.h
 create mode 100644 sysdeps/arc/bits/setjmp.h
 create mode 100644 sysdeps/arc/bsd-_setjmp.S
 create mode 100644 sysdeps/arc/bsd-setjmp.S
 create mode 100644 sysdeps/arc/configure
 create mode 100644 sysdeps/arc/configure.ac
 create mode 100644 sysdeps/arc/dl-machine.h
 create mode 100644 sysdeps/arc/dl-runtime.c
 create mode 100644 sysdeps/arc/dl-sysdep.h
 create mode 100644 sysdeps/arc/dl-tls.h
 create mode 100644 sysdeps/arc/dl-trampoline.S
 create mode 100644 sysdeps/arc/entry.h
 create mode 100644 sysdeps/arc/fpu/e_sqrt.c
 create mode 100644 sysdeps/arc/fpu/e_sqrtf.c
 create mode 100644 sysdeps/arc/fpu/fclrexcpt.c
 create mode 100644 sysdeps/arc/fpu/fegetenv.c
 create mode 100644 sysdeps/arc/fpu/fegetmode.c
 create mode 100644 sysdeps/arc/fpu/fegetround.c
 create mode 100644 sysdeps/arc/fpu/feholdexcpt.c
 create mode 100644 sysdeps/arc/fpu/fesetenv.c
 create mode 100644 sysdeps/arc/fpu/fesetexcept.c
 create mode 100644 sysdeps/arc/fpu/fesetmode.c
 create mode 100644 sysdeps/arc/fpu/fesetround.c
 create mode 100644 sysdeps/arc/fpu/feupdateenv.c
 create mode 100644 sysdeps/arc/fpu/fgetexcptflg.c
 create mode 100644 sysdeps/arc/fpu/fraiseexcpt.c
 create mode 100644 sysdeps/arc/fpu/fsetexcptflg.c
 create mode 100644 sysdeps/arc/fpu/ftestexcept.c
 create mode 100644 sysdeps/arc/fpu/libm-test-ulps
 create mode 100644 sysdeps/arc/fpu/libm-test-ulps-name
 create mode 100644 sysdeps/arc/fpu/s_fma.c
 create mode 100644 sysdeps/arc/fpu/s_fmaf.c
 create mode 100644 sysdeps/arc/fpu_control.h
 create mode 100644 sysdeps/arc/gccframe.h
 create mode 100644 sysdeps/arc/get-rounding-mode.h
 create mode 100644 sysdeps/arc/jmpbuf-offsets.h
 create mode 100644 sysdeps/arc/jmpbuf-unwind.h
 create mode 100644 sysdeps/arc/ldsodefs.h
 create mode 100644 sysdeps/arc/libc-tls.c
 create mode 100644 sysdeps/arc/machine-gmon.h
 create mode 100644 sysdeps/arc/math-tests-trap.h
 create mode 100644 sysdeps/arc/memusage.h
 create mode 100644 sysdeps/arc/nofpu/Implies
 create mode 100644 sysdeps/arc/nofpu/libm-test-ulps
 create mode 100644 sysdeps/arc/nofpu/libm-test-ulps-name
 create mode 100644 sysdeps/arc/nofpu/math-tests-exceptions.h
 create mode 100644 sysdeps/arc/nofpu/math-tests-rounding.h
 create mode 100644 sysdeps/arc/nptl/Makefile
 create mode 100644 sysdeps/arc/nptl/bits/semaphore.h
 create mode 100644 sysdeps/arc/nptl/pthreaddef.h
 create mode 100644 sysdeps/arc/nptl/tcb-offsets.sym
 create mode 100644 sysdeps/arc/nptl/tls.h
 create mode 100644 sysdeps/arc/preconfigure
 create mode 100644 sysdeps/arc/setjmp.S
 create mode 100644 sysdeps/arc/sfp-machine.h
 create mode 100644 sysdeps/arc/sotruss-lib.c
 create mode 100644 sysdeps/arc/stackinfo.h
 create mode 100644 sysdeps/arc/start.S
 create mode 100644 sysdeps/arc/sysdep.h
 create mode 100644 sysdeps/arc/tininess.h
 create mode 100644 sysdeps/arc/tls-macros.h
 create mode 100644 sysdeps/arc/tst-audit.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/Implies
 create mode 100644 sysdeps/unix/sysv/linux/arc/Makefile
 create mode 100644 sysdeps/unix/sysv/linux/arc/Versions
 create mode 100644 sysdeps/unix/sysv/linux/arc/arch-syscall.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/bits/procfs.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/bits/timesize.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/bits/types/__sigset_t.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/c++-types.data
 create mode 100644 sysdeps/unix/sysv/linux/arc/clone.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/configure
 create mode 100644 sysdeps/unix/sysv/linux/arc/configure.ac
 create mode 100644 sysdeps/unix/sysv/linux/arc/dl-static.c
 create mode 100644 sysdeps/unix/sysv/linux/arc/getcontext.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/jmp_buf-macros.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/kernel-features.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/kernel_stat.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/ld.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/ldconfig.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/ldsodefs.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/libBrokenLocale.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libanl.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libc.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libcrypt.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libdl.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libm.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libpthread.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libresolv.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/librt.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libthread_db.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libutil.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/localplt.data
 create mode 100644 sysdeps/unix/sysv/linux/arc/makecontext.c
 create mode 100644 sysdeps/unix/sysv/linux/arc/mmap_internal.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/pt-vfork.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/setcontext.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/shlib-versions
 create mode 100644 sysdeps/unix/sysv/linux/arc/sigaction.c
 create mode 100644 sysdeps/unix/sysv/linux/arc/sigcontextinfo.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/sigrestorer.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/swapcontext.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/sys/cachectl.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/sys/ucontext.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/sys/user.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/syscall.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/syscalls.list
 create mode 100644 sysdeps/unix/sysv/linux/arc/sysctl.mk
 create mode 100644 sysdeps/unix/sysv/linux/arc/sysdep.c
 create mode 100644 sysdeps/unix/sysv/linux/arc/sysdep.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/ucontext-macros.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/ucontext_i.sym
 create mode 100644 sysdeps/unix/sysv/linux/arc/vfork.S

-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* [PATCH v5 01/14] ARC: ABI Implementation
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-17 22:37   ` Joseph Myers
  2020-04-09  2:56 ` [PATCH v5 02/14] ARC: startup and dynamic linking code Vineet Gupta
                   ` (12 subsequent siblings)
  13 siblings, 1 reply; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

This code deals with the ARC ABI.

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 sysdeps/arc/__longjmp.S       | 50 ++++++++++++++++++++++
 sysdeps/arc/abort-instr.h     |  2 +
 sysdeps/arc/bits/endianness.h | 15 +++++++
 sysdeps/arc/bits/setjmp.h     | 26 ++++++++++++
 sysdeps/arc/bsd-_setjmp.S     |  1 +
 sysdeps/arc/bsd-setjmp.S      |  1 +
 sysdeps/arc/dl-runtime.c      | 33 +++++++++++++++
 sysdeps/arc/dl-sysdep.h       | 25 +++++++++++
 sysdeps/arc/dl-trampoline.S   | 80 +++++++++++++++++++++++++++++++++++
 sysdeps/arc/gccframe.h        | 21 +++++++++
 sysdeps/arc/jmpbuf-offsets.h  | 47 ++++++++++++++++++++
 sysdeps/arc/jmpbuf-unwind.h   | 47 ++++++++++++++++++++
 sysdeps/arc/machine-gmon.h    | 35 +++++++++++++++
 sysdeps/arc/memusage.h        | 23 ++++++++++
 sysdeps/arc/setjmp.S          | 66 +++++++++++++++++++++++++++++
 sysdeps/arc/sysdep.h          | 48 +++++++++++++++++++++
 sysdeps/arc/tls-macros.h      | 47 ++++++++++++++++++++
 17 files changed, 567 insertions(+)
 create mode 100644 sysdeps/arc/__longjmp.S
 create mode 100644 sysdeps/arc/abort-instr.h
 create mode 100644 sysdeps/arc/bits/endianness.h
 create mode 100644 sysdeps/arc/bits/setjmp.h
 create mode 100644 sysdeps/arc/bsd-_setjmp.S
 create mode 100644 sysdeps/arc/bsd-setjmp.S
 create mode 100644 sysdeps/arc/dl-runtime.c
 create mode 100644 sysdeps/arc/dl-sysdep.h
 create mode 100644 sysdeps/arc/dl-trampoline.S
 create mode 100644 sysdeps/arc/gccframe.h
 create mode 100644 sysdeps/arc/jmpbuf-offsets.h
 create mode 100644 sysdeps/arc/jmpbuf-unwind.h
 create mode 100644 sysdeps/arc/machine-gmon.h
 create mode 100644 sysdeps/arc/memusage.h
 create mode 100644 sysdeps/arc/setjmp.S
 create mode 100644 sysdeps/arc/sysdep.h
 create mode 100644 sysdeps/arc/tls-macros.h

diff --git a/sysdeps/arc/__longjmp.S b/sysdeps/arc/__longjmp.S
new file mode 100644
index 000000000000..ffc3daa7de72
--- /dev/null
+++ b/sysdeps/arc/__longjmp.S
@@ -0,0 +1,50 @@
+/* longjmp for ARC.
+   Copyright (C) 2017-2020 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
+   <https://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 000000000000..49f33613c404
--- /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/bits/endianness.h b/sysdeps/arc/bits/endianness.h
new file mode 100644
index 000000000000..8f17ca84b485
--- /dev/null
+++ b/sysdeps/arc/bits/endianness.h
@@ -0,0 +1,15 @@
+#ifndef _BITS_ENDIANNESS_H
+#define _BITS_ENDIANNESS_H 1
+
+#ifndef _BITS_ENDIAN_H
+# error "Never use <bits/endian.h> directly; include <endian.h> instead."
+#endif
+
+/* ARC has selectable endianness.  */
+#ifdef __BIG_ENDIAN__
+# define __BYTE_ORDER __BIG_ENDIAN
+#else
+# define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
+
+#endif /* bits/endianness.h */
diff --git a/sysdeps/arc/bits/setjmp.h b/sysdeps/arc/bits/setjmp.h
new file mode 100644
index 000000000000..333e5cce3bea
--- /dev/null
+++ b/sysdeps/arc/bits/setjmp.h
@@ -0,0 +1,26 @@
+/* Define the machine-dependent type `jmp_buf'.  ARC version.
+   Copyright (C) 1992-2020 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
+   <https://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 000000000000..90b99cd8c3e0
--- /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 000000000000..d3b823c118bc
--- /dev/null
+++ b/sysdeps/arc/bsd-setjmp.S
@@ -0,0 +1 @@
+/* setjmp is in setjmp.S.  */
diff --git a/sysdeps/arc/dl-runtime.c b/sysdeps/arc/dl-runtime.c
new file mode 100644
index 000000000000..42a62a3e8e4e
--- /dev/null
+++ b/sysdeps/arc/dl-runtime.c
@@ -0,0 +1,33 @@
+/* dl-runtime helpers for ARC.
+   Copyright (C) 2017-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+/* PLT jump into resolver passes PC of PLTn, while _dl_fixup expects the
+   address of corresponding .rela.plt entry.  */
+
+#define reloc_index						\
+({								\
+  unsigned long int plt0 = D_PTR (l, l_info[DT_PLTGOT]);	\
+  unsigned long int pltn = reloc_arg;				\
+  /* Exclude PLT0 and PLT1.  */					\
+  unsigned long int idx = ((pltn - plt0) / 16 ) - 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 000000000000..6382c05bf485
--- /dev/null
+++ b/sysdeps/arc/dl-sysdep.h
@@ -0,0 +1,25 @@
+/* System-specific settings for dynamic linker code.  ARC version.
+   Copyright (C) 2009-2020 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
+   <https://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-trampoline.S b/sysdeps/arc/dl-trampoline.S
new file mode 100644
index 000000000000..3dad904caaf9
--- /dev/null
+++ b/sysdeps/arc/dl-trampoline.S
@@ -0,0 +1,80 @@
+/* PLT trampolines.  ARC version.
+   Copyright (C) 2005-2020 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
+   <https://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/gccframe.h b/sysdeps/arc/gccframe.h
new file mode 100644
index 000000000000..5d547fd40a6c
--- /dev/null
+++ b/sysdeps/arc/gccframe.h
@@ -0,0 +1,21 @@
+/* Definition of object in frame unwind info.  ARC version.
+   Copyright (C) 2017-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#define FIRST_PSEUDO_REGISTER 40
+
+#include <sysdeps/generic/gccframe.h>
diff --git a/sysdeps/arc/jmpbuf-offsets.h b/sysdeps/arc/jmpbuf-offsets.h
new file mode 100644
index 000000000000..31556a423347
--- /dev/null
+++ b/sysdeps/arc/jmpbuf-offsets.h
@@ -0,0 +1,47 @@
+/* Private macros for accessing __jmp_buf contents.  ARC version.
+   Copyright (C) 2006-2020 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
+   <https://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 000000000000..b333cd51c80e
--- /dev/null
+++ b/sysdeps/arc/jmpbuf-unwind.h
@@ -0,0 +1,47 @@
+/* Examine __jmp_buf for unwinding frames.  ARC version.
+   Copyright (C) 2005-2020 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
+   <https://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/machine-gmon.h b/sysdeps/arc/machine-gmon.h
new file mode 100644
index 000000000000..5efbb55b9df5
--- /dev/null
+++ b/sysdeps/arc/machine-gmon.h
@@ -0,0 +1,35 @@
+/* Machine-dependent definitions for profiling support.  ARC version.
+   Copyright (C) 1996-2020 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
+   <https://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 000000000000..c72beb1ce9a4
--- /dev/null
+++ b/sysdeps/arc/memusage.h
@@ -0,0 +1,23 @@
+/* Machine-specific definitions for memory usage profiling, ARC version.
+   Copyright (C) 2000-2020 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
+   <https://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/setjmp.S b/sysdeps/arc/setjmp.S
new file mode 100644
index 000000000000..e745f81643e3
--- /dev/null
+++ b/sysdeps/arc/setjmp.S
@@ -0,0 +1,66 @@
+/* setjmp for ARC.
+   Copyright (C) 1991-2020 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
+   <https://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/sysdep.h b/sysdeps/arc/sysdep.h
new file mode 100644
index 000000000000..e94955ed9d5f
--- /dev/null
+++ b/sysdeps/arc/sysdep.h
@@ -0,0 +1,48 @@
+/* Assembler macros for ARC.
+   Copyright (C) 2017-2020 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
+   <https://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 000000000000..2793bd9d8a7c
--- /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-2020 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
+   <https://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; })
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v5 02/14] ARC: startup and dynamic linking code
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
  2020-04-09  2:56 ` [PATCH v5 01/14] ARC: ABI Implementation Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-17 22:42   ` Joseph Myers
  2020-04-09  2:56 ` [PATCH v5 03/14] ARC: Thread Local Storage support Vineet Gupta
                   ` (11 subsequent siblings)
  13 siblings, 1 reply; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Code for C runtime startup and dynamic loading including PLT layout.

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 sysdeps/arc/bits/link.h   |  52 ++++++
 sysdeps/arc/dl-machine.h  | 340 ++++++++++++++++++++++++++++++++++++++
 sysdeps/arc/entry.h       |   5 +
 sysdeps/arc/ldsodefs.h    |  43 +++++
 sysdeps/arc/sotruss-lib.c |  51 ++++++
 sysdeps/arc/start.S       |  74 +++++++++
 sysdeps/arc/tst-audit.h   |  23 +++
 7 files changed, 588 insertions(+)
 create mode 100644 sysdeps/arc/bits/link.h
 create mode 100644 sysdeps/arc/dl-machine.h
 create mode 100644 sysdeps/arc/entry.h
 create mode 100644 sysdeps/arc/ldsodefs.h
 create mode 100644 sysdeps/arc/sotruss-lib.c
 create mode 100644 sysdeps/arc/start.S
 create mode 100644 sysdeps/arc/tst-audit.h

diff --git a/sysdeps/arc/bits/link.h b/sysdeps/arc/bits/link.h
new file mode 100644
index 000000000000..0acbc1349e08
--- /dev/null
+++ b/sysdeps/arc/bits/link.h
@@ -0,0 +1,52 @@
+/* Machine-specific declarations for dynamic linker interface, ARC version.
+   Copyright (C) 2009-2020 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
+   <https://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/dl-machine.h b/sysdeps/arc/dl-machine.h
new file mode 100644
index 000000000000..70fe4bb01809
--- /dev/null
+++ b/sysdeps/arc/dl-machine.h
@@ -0,0 +1,340 @@
+/* Machine-dependent ELF dynamic relocation inline functions.  ARC version.
+   Copyright (C) 1995-2020 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
+   <https://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 DTPOFF 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/entry.h b/sysdeps/arc/entry.h
new file mode 100644
index 000000000000..adb01d981afd
--- /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/ldsodefs.h b/sysdeps/arc/ldsodefs.h
new file mode 100644
index 000000000000..c217a9d84b80
--- /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-2020 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
+   <https://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/sotruss-lib.c b/sysdeps/arc/sotruss-lib.c
new file mode 100644
index 000000000000..3253d610c5e0
--- /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-2020 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
+   <https://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/start.S b/sysdeps/arc/start.S
new file mode 100644
index 000000000000..25e43d71da9e
--- /dev/null
+++ b/sysdeps/arc/start.S
@@ -0,0 +1,74 @@
+/* Startup code for ARC.
+   Copyright (C) 1995-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#define __ASSEMBLY__ 1
+#include <entry.h>
+#include <sysdep.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.  */
+
+ENTRY (ENTRY_POINT)
+
+	/* Needed to make gdb backtraces stop here.  */
+	.cfi_label .Ldummy
+	cfi_undefined (blink)
+
+	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
+END (ENTRY_POINT)
+
+/* 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/tst-audit.h b/sysdeps/arc/tst-audit.h
new file mode 100644
index 000000000000..10a20c49c00c
--- /dev/null
+++ b/sysdeps/arc/tst-audit.h
@@ -0,0 +1,23 @@
+/* Definitions for testing PLT entry/exit auditing.  ARC version.
+   Copyright (C) 2009-2020 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
+   <https://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]
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v5 03/14] ARC: Thread Local Storage support
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
  2020-04-09  2:56 ` [PATCH v5 01/14] ARC: ABI Implementation Vineet Gupta
  2020-04-09  2:56 ` [PATCH v5 02/14] ARC: startup and dynamic linking code Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-17 22:44   ` Joseph Myers
  2020-04-09  2:56 ` [PATCH v5 04/14] ARC: Atomics and Locking primitives Vineet Gupta
                   ` (10 subsequent siblings)
  13 siblings, 1 reply; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

This includes all 4 TLS addressing models

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 sysdeps/arc/dl-tls.h             |  30 +++++++
 sysdeps/arc/libc-tls.c           |  27 ++++++
 sysdeps/arc/nptl/tcb-offsets.sym |  11 +++
 sysdeps/arc/nptl/tls.h           | 150 +++++++++++++++++++++++++++++++
 sysdeps/arc/stackinfo.h          |  33 +++++++
 5 files changed, 251 insertions(+)
 create mode 100644 sysdeps/arc/dl-tls.h
 create mode 100644 sysdeps/arc/libc-tls.c
 create mode 100644 sysdeps/arc/nptl/tcb-offsets.sym
 create mode 100644 sysdeps/arc/nptl/tls.h
 create mode 100644 sysdeps/arc/stackinfo.h

diff --git a/sysdeps/arc/dl-tls.h b/sysdeps/arc/dl-tls.h
new file mode 100644
index 000000000000..2269ac6c3daa
--- /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-2020 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
+   <https://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/libc-tls.c b/sysdeps/arc/libc-tls.c
new file mode 100644
index 000000000000..ec88282de60e
--- /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-2020 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
+   <https://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/nptl/tcb-offsets.sym b/sysdeps/arc/nptl/tcb-offsets.sym
new file mode 100644
index 000000000000..64c432c22e76
--- /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 000000000000..10c7117527ff
--- /dev/null
+++ b/sysdeps/arc/nptl/tls.h
@@ -0,0 +1,150 @@
+/* Definition for thread-local data handling.  NPTL/ARC version.
+   Copyright (C) 2012-2020 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
+   <https://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, 1, (tcbp));	\
+	INTERNAL_SYSCALL_ERROR_P (result_var)			\
+	? "settls syscall 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/stackinfo.h b/sysdeps/arc/stackinfo.h
new file mode 100644
index 000000000000..911efd928675
--- /dev/null
+++ b/sysdeps/arc/stackinfo.h
@@ -0,0 +1,33 @@
+/* Stack environment definitions for ARC.
+   Copyright (C) 2012-2020 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
+   <https://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 */
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v5 04/14] ARC: Atomics and Locking primitives
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
                   ` (2 preceding siblings ...)
  2020-04-09  2:56 ` [PATCH v5 03/14] ARC: Thread Local Storage support Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-09  2:56 ` [PATCH v5 05/14] ARC: math soft float support Vineet Gupta
                   ` (9 subsequent siblings)
  13 siblings, 0 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 sysdeps/arc/atomic-machine.h      | 69 +++++++++++++++++++++++++++++++
 sysdeps/arc/nptl/bits/semaphore.h | 32 ++++++++++++++
 2 files changed, 101 insertions(+)
 create mode 100644 sysdeps/arc/atomic-machine.h
 create mode 100644 sysdeps/arc/nptl/bits/semaphore.h

diff --git a/sysdeps/arc/atomic-machine.h b/sysdeps/arc/atomic-machine.h
new file mode 100644
index 000000000000..6cf128dc7fa8
--- /dev/null
+++ b/sysdeps/arc/atomic-machine.h
@@ -0,0 +1,69 @@
+/* Low-level functions for atomic operations. ARC version.
+   Copyright (C) 2012-2020 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
+   <https://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)
+
+#define atomic_full_barrier()  ({ asm volatile ("dmb 3":::"memory"); })
+
+#endif /* _ARC_BITS_ATOMIC_H */
diff --git a/sysdeps/arc/nptl/bits/semaphore.h b/sysdeps/arc/nptl/bits/semaphore.h
new file mode 100644
index 000000000000..772dc4cb9b01
--- /dev/null
+++ b/sysdeps/arc/nptl/bits/semaphore.h
@@ -0,0 +1,32 @@
+/* Machine-specific POSIX semaphore type layouts.  ARC version.
+   Copyright (C) 2002-2020 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
+   <https://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;
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v5 05/14] ARC: math soft float support
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
                   ` (3 preceding siblings ...)
  2020-04-09  2:56 ` [PATCH v5 04/14] ARC: Atomics and Locking primitives Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-09  2:56 ` [PATCH v5 06/14] ARC: hardware floating point support Vineet Gupta
                   ` (8 subsequent siblings)
  13 siblings, 0 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 sysdeps/arc/bits/fenv.h                   | 77 +++++++++++++++++++++++
 sysdeps/arc/nofpu/Implies                 |  1 +
 sysdeps/arc/nofpu/math-tests-exceptions.h | 27 ++++++++
 sysdeps/arc/nofpu/math-tests-rounding.h   | 27 ++++++++
 sysdeps/arc/sfp-machine.h                 | 73 +++++++++++++++++++++
 5 files changed, 205 insertions(+)
 create mode 100644 sysdeps/arc/bits/fenv.h
 create mode 100644 sysdeps/arc/nofpu/Implies
 create mode 100644 sysdeps/arc/nofpu/math-tests-exceptions.h
 create mode 100644 sysdeps/arc/nofpu/math-tests-rounding.h
 create mode 100644 sysdeps/arc/sfp-machine.h

diff --git a/sysdeps/arc/bits/fenv.h b/sysdeps/arc/bits/fenv.h
new file mode 100644
index 000000000000..80afa50db9c6
--- /dev/null
+++ b/sysdeps/arc/bits/fenv.h
@@ -0,0 +1,77 @@
+/* Copyright (C) 2012-2020 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
+   <https://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)	/* default */
+      FE_TONEAREST,
+    FE_UPWARD     =
+# define FE_UPWARD	(0x2)
+      FE_UPWARD,
+    FE_DOWNWARD   =
+# define FE_DOWNWARD	(0x3)
+      FE_DOWNWARD
+  };
+
+typedef unsigned int fexcept_t;
+
+typedef struct
+{
+  unsigned int __fpcr;
+  unsigned int __fpsr;
+} 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/nofpu/Implies b/sysdeps/arc/nofpu/Implies
new file mode 100644
index 000000000000..abcbadb25f22
--- /dev/null
+++ b/sysdeps/arc/nofpu/Implies
@@ -0,0 +1 @@
+ieee754/soft-fp
diff --git a/sysdeps/arc/nofpu/math-tests-exceptions.h b/sysdeps/arc/nofpu/math-tests-exceptions.h
new file mode 100644
index 000000000000..2ec58e088ebf
--- /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-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef ARC_NOFPU_MATH_TESTS_EXCEPTIONS_H
+#define ARC_NOFPU_MATH_TESTS_EXCEPTIONS_H 1
+
+/* Soft-float does not 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 000000000000..6e5376cb35b5
--- /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-2020 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
+   <https://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/sfp-machine.h b/sysdeps/arc/sfp-machine.h
new file mode 100644
index 000000000000..b2bfd33e944c
--- /dev/null
+++ b/sysdeps/arc/sfp-machine.h
@@ -0,0 +1,73 @@
+/* Machine-dependent software floating-point definitions.  ARC version.
+   Copyright (C) 2004-2020 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
+   <https://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 1
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v5 06/14] ARC: hardware floating point support
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
                   ` (4 preceding siblings ...)
  2020-04-09  2:56 ` [PATCH v5 05/14] ARC: math soft float support Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-17 22:59   ` Joseph Myers
  2020-04-09  2:56 ` [PATCH v5 07/14] ARC: Linux Syscall Interface Vineet Gupta
                   ` (7 subsequent siblings)
  13 siblings, 1 reply; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 sysdeps/arc/fpu/e_sqrt.c        |  27 +++++++++
 sysdeps/arc/fpu/e_sqrtf.c       |  27 +++++++++
 sysdeps/arc/fpu/fclrexcpt.c     |  36 +++++++++++
 sysdeps/arc/fpu/fegetenv.c      |  37 ++++++++++++
 sysdeps/arc/fpu/fegetmode.c     |  31 ++++++++++
 sysdeps/arc/fpu/fegetround.c    |  32 ++++++++++
 sysdeps/arc/fpu/feholdexcpt.c   |  43 ++++++++++++++
 sysdeps/arc/fpu/fesetenv.c      |  48 +++++++++++++++
 sysdeps/arc/fpu/fesetexcept.c   |  32 ++++++++++
 sysdeps/arc/fpu/fesetmode.c     |  40 +++++++++++++
 sysdeps/arc/fpu/fesetround.c    |  40 +++++++++++++
 sysdeps/arc/fpu/feupdateenv.c   |  51 ++++++++++++++++
 sysdeps/arc/fpu/fgetexcptflg.c  |  31 ++++++++++
 sysdeps/arc/fpu/fraiseexcpt.c   |  39 ++++++++++++
 sysdeps/arc/fpu/fsetexcptflg.c  |  38 ++++++++++++
 sysdeps/arc/fpu/ftestexcept.c   |  33 +++++++++++
 sysdeps/arc/fpu/s_fma.c         |  28 +++++++++
 sysdeps/arc/fpu/s_fmaf.c        |  28 +++++++++
 sysdeps/arc/fpu_control.h       | 102 ++++++++++++++++++++++++++++++++
 sysdeps/arc/get-rounding-mode.h |  38 ++++++++++++
 sysdeps/arc/math-tests-trap.h   |  27 +++++++++
 sysdeps/arc/tininess.h          |   1 +
 22 files changed, 809 insertions(+)
 create mode 100644 sysdeps/arc/fpu/e_sqrt.c
 create mode 100644 sysdeps/arc/fpu/e_sqrtf.c
 create mode 100644 sysdeps/arc/fpu/fclrexcpt.c
 create mode 100644 sysdeps/arc/fpu/fegetenv.c
 create mode 100644 sysdeps/arc/fpu/fegetmode.c
 create mode 100644 sysdeps/arc/fpu/fegetround.c
 create mode 100644 sysdeps/arc/fpu/feholdexcpt.c
 create mode 100644 sysdeps/arc/fpu/fesetenv.c
 create mode 100644 sysdeps/arc/fpu/fesetexcept.c
 create mode 100644 sysdeps/arc/fpu/fesetmode.c
 create mode 100644 sysdeps/arc/fpu/fesetround.c
 create mode 100644 sysdeps/arc/fpu/feupdateenv.c
 create mode 100644 sysdeps/arc/fpu/fgetexcptflg.c
 create mode 100644 sysdeps/arc/fpu/fraiseexcpt.c
 create mode 100644 sysdeps/arc/fpu/fsetexcptflg.c
 create mode 100644 sysdeps/arc/fpu/ftestexcept.c
 create mode 100644 sysdeps/arc/fpu/s_fma.c
 create mode 100644 sysdeps/arc/fpu/s_fmaf.c
 create mode 100644 sysdeps/arc/fpu_control.h
 create mode 100644 sysdeps/arc/get-rounding-mode.h
 create mode 100644 sysdeps/arc/math-tests-trap.h
 create mode 100644 sysdeps/arc/tininess.h

diff --git a/sysdeps/arc/fpu/e_sqrt.c b/sysdeps/arc/fpu/e_sqrt.c
new file mode 100644
index 000000000000..abb67ef7b061
--- /dev/null
+++ b/sysdeps/arc/fpu/e_sqrt.c
@@ -0,0 +1,27 @@
+/* Square root of floating point number.
+   Copyright (C) 2015-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <math_private.h>
+#include <libm-alias-finite.h>
+
+double
+__ieee754_sqrt (double d)
+{
+  return __builtin_sqrt (d);
+}
+libm_alias_finite (__ieee754_sqrt, __sqrt)
diff --git a/sysdeps/arc/fpu/e_sqrtf.c b/sysdeps/arc/fpu/e_sqrtf.c
new file mode 100644
index 000000000000..13008a4f45d6
--- /dev/null
+++ b/sysdeps/arc/fpu/e_sqrtf.c
@@ -0,0 +1,27 @@
+/* Single-precision floating point square root.
+   Copyright (C) 2015-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <math_private.h>
+#include <libm-alias-finite.h>
+
+float
+__ieee754_sqrtf (float s)
+{
+  return __builtin_sqrtf (s);
+}
+libm_alias_finite (__ieee754_sqrtf, __sqrtf)
diff --git a/sysdeps/arc/fpu/fclrexcpt.c b/sysdeps/arc/fpu/fclrexcpt.c
new file mode 100644
index 000000000000..549968dcd465
--- /dev/null
+++ b/sysdeps/arc/fpu/fclrexcpt.c
@@ -0,0 +1,36 @@
+/* Clear given exceptions in current floating-point environment.
+   Copyright (C) 2018-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+int
+feclearexcept (int excepts)
+{
+  unsigned int fpsr;
+
+  _FPU_GETS (fpsr);
+
+  /* Clear the relevant bits, FWE is preserved.  */
+  fpsr &= ~excepts;
+
+  _FPU_SETS (fpsr);
+
+  return 0;
+}
+libm_hidden_def (feclearexcept)
diff --git a/sysdeps/arc/fpu/fegetenv.c b/sysdeps/arc/fpu/fegetenv.c
new file mode 100644
index 000000000000..058652aeb685
--- /dev/null
+++ b/sysdeps/arc/fpu/fegetenv.c
@@ -0,0 +1,37 @@
+/* Store current floating-point environment.
+   Copyright (C) 2018-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+int
+__fegetenv (fenv_t *envp)
+{
+  unsigned int fpcr;
+  unsigned int fpsr;
+
+  _FPU_GETCW (fpcr);
+  _FPU_GETS (fpsr);
+  envp->__fpcr = fpcr;
+  envp->__fpsr = fpsr;
+
+  return 0;
+}
+libm_hidden_def (__fegetenv)
+weak_alias (__fegetenv, fegetenv)
+libm_hidden_weak (fegetenv)
diff --git a/sysdeps/arc/fpu/fegetmode.c b/sysdeps/arc/fpu/fegetmode.c
new file mode 100644
index 000000000000..1f04c2d745fa
--- /dev/null
+++ b/sysdeps/arc/fpu/fegetmode.c
@@ -0,0 +1,31 @@
+/* Store current floating-point control modes.
+   Copyright (C) 2018-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+int
+fegetmode (femode_t *modep)
+{
+  unsigned int fpcr;
+
+  _FPU_GETCW (fpcr);
+  *modep = fpcr;
+
+  return 0;
+}
diff --git a/sysdeps/arc/fpu/fegetround.c b/sysdeps/arc/fpu/fegetround.c
new file mode 100644
index 000000000000..99d4aeee31b7
--- /dev/null
+++ b/sysdeps/arc/fpu/fegetround.c
@@ -0,0 +1,32 @@
+/* Return current rounding direction.
+   Copyright (C) 1998-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fenv_private.h>
+
+int
+__fegetround (void)
+{
+  unsigned int fpcr;
+  _FPU_GETCW (fpcr);
+
+  return (fpcr >> __FPU_RND_SHIFT) & __FPU_RND_MASK;
+}
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
diff --git a/sysdeps/arc/fpu/feholdexcpt.c b/sysdeps/arc/fpu/feholdexcpt.c
new file mode 100644
index 000000000000..4b849a3cf05b
--- /dev/null
+++ b/sysdeps/arc/fpu/feholdexcpt.c
@@ -0,0 +1,43 @@
+/* Store current floating-point environment and clear exceptions.
+   Copyright (C) 2000-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fenv_private.h>
+
+int
+__feholdexcept (fenv_t *envp)
+{
+  unsigned int fpcr;
+  unsigned int fpsr;
+
+  _FPU_GETCW (fpcr);
+  _FPU_GETS (fpsr);
+
+  envp->__fpcr = fpcr;
+  envp->__fpsr = fpsr;
+
+  fpsr &= ~FE_ALL_EXCEPT;
+
+  _FPU_SETCW (fpcr);
+  _FPU_SETS (fpsr);
+
+  return 0;
+}
+libm_hidden_def (__feholdexcept)
+weak_alias (__feholdexcept, feholdexcept)
+libm_hidden_weak (feholdexcept)
diff --git a/sysdeps/arc/fpu/fesetenv.c b/sysdeps/arc/fpu/fesetenv.c
new file mode 100644
index 000000000000..828b51cf8afa
--- /dev/null
+++ b/sysdeps/arc/fpu/fesetenv.c
@@ -0,0 +1,48 @@
+/* Install given floating-point environment (doesnot raise exceptions).
+   Copyright (C) 2018-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+int
+__fesetenv (const fenv_t *envp)
+{
+  unsigned int fpcr;
+  unsigned int fpsr;
+
+  if (envp == FE_DFL_ENV)
+    {
+      fpcr = _FPU_DEFAULT;
+      fpsr = _FPU_FPSR_DEFAULT;
+    }
+  else
+    {
+      /* No need to mask out reserved bits as they are IoW.  */
+      fpcr = envp->__fpcr;
+      fpsr = envp->__fpsr;
+    }
+
+  _FPU_SETCW (fpcr);
+  _FPU_SETS (fpsr);
+
+  /* Success.  */
+  return 0;
+}
+libm_hidden_def (__fesetenv)
+weak_alias (__fesetenv, fesetenv)
+libm_hidden_weak (fesetenv)
diff --git a/sysdeps/arc/fpu/fesetexcept.c b/sysdeps/arc/fpu/fesetexcept.c
new file mode 100644
index 000000000000..0a1bcf763bee
--- /dev/null
+++ b/sysdeps/arc/fpu/fesetexcept.c
@@ -0,0 +1,32 @@
+/* Set given exception flags.
+   Copyright (C) 2018-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+int
+fesetexcept (int excepts)
+{
+  unsigned int fpsr;
+
+  _FPU_GETS (fpsr);
+  fpsr |= excepts;
+  _FPU_SETS (fpsr);
+
+  return 0;
+}
diff --git a/sysdeps/arc/fpu/fesetmode.c b/sysdeps/arc/fpu/fesetmode.c
new file mode 100644
index 000000000000..2fedaedb9e01
--- /dev/null
+++ b/sysdeps/arc/fpu/fesetmode.c
@@ -0,0 +1,40 @@
+/* Install given floating-point control modes.
+   Copyright (C) 2018-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+int
+fesetmode (const femode_t *modep)
+{
+  unsigned int fpcr;
+
+  if (modep == FE_DFL_MODE)
+    {
+      fpcr = _FPU_DEFAULT;
+    }
+  else
+    {
+      /* No need to mask out reserved bits as they are IoW.  */
+      fpcr = *modep;
+    }
+
+  _FPU_SETCW (fpcr);
+
+  return 0;
+}
diff --git a/sysdeps/arc/fpu/fesetround.c b/sysdeps/arc/fpu/fesetround.c
new file mode 100644
index 000000000000..7a3526112e30
--- /dev/null
+++ b/sysdeps/arc/fpu/fesetround.c
@@ -0,0 +1,40 @@
+/* Set current rounding direction.
+   Copyright (C) 1998-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fenv_private.h>
+
+int
+__fesetround (int round)
+{
+  unsigned int fpcr;
+
+  _FPU_GETCW (fpcr);
+
+  if (((fpcr >> __FPU_RND_SHIFT) & __FPU_RND_MASK) != round)
+    {
+      fpcr &= ~(__FPU_RND_MASK << __FPU_RND_SHIFT);
+      fpcr |= (round & __FPU_RND_MASK) << __FPU_RND_SHIFT;
+      _FPU_SETCW (fpcr);
+    }
+
+  return 0;
+}
+libm_hidden_def (__fesetround)
+weak_alias (__fesetround, fesetround)
+libm_hidden_weak (fesetround)
diff --git a/sysdeps/arc/fpu/feupdateenv.c b/sysdeps/arc/fpu/feupdateenv.c
new file mode 100644
index 000000000000..f2729e732499
--- /dev/null
+++ b/sysdeps/arc/fpu/feupdateenv.c
@@ -0,0 +1,51 @@
+/* Install given floating-point environment and raise exceptions,
+   without clearing currently raised exceptions.
+   Copyright (C) 2018-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+int
+__feupdateenv (const fenv_t *envp)
+{
+  unsigned int fpcr;
+  unsigned int fpsr;
+
+  _FPU_GETS (fpsr);
+
+  if (envp == FE_DFL_ENV)
+    {
+      fpcr = _FPU_DEFAULT;
+    }
+  else
+    {
+      fpcr = envp->__fpcr;
+
+      /* currently raised exceptions need to be preserved.  */
+      fpsr |= envp->__fpsr;
+    }
+
+  _FPU_SETCW (fpcr);
+  _FPU_SETS (fpsr);
+
+  /* Success.  */
+  return 0;
+}
+libm_hidden_def (__feupdateenv)
+weak_alias (__feupdateenv, feupdateenv)
+libm_hidden_weak (feupdateenv)
diff --git a/sysdeps/arc/fpu/fgetexcptflg.c b/sysdeps/arc/fpu/fgetexcptflg.c
new file mode 100644
index 000000000000..9d1423eaeecb
--- /dev/null
+++ b/sysdeps/arc/fpu/fgetexcptflg.c
@@ -0,0 +1,31 @@
+/* Store current representation for exceptions, ARC version.
+   Copyright (C) 1998-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fenv_private.h>
+
+int
+fegetexceptflag (fexcept_t *flagp, int excepts)
+{
+  unsigned int fpsr;
+
+  _FPU_GETS (fpsr);
+  *flagp = fpsr & excepts;
+
+  return 0;
+}
diff --git a/sysdeps/arc/fpu/fraiseexcpt.c b/sysdeps/arc/fpu/fraiseexcpt.c
new file mode 100644
index 000000000000..9b9d6a951f42
--- /dev/null
+++ b/sysdeps/arc/fpu/fraiseexcpt.c
@@ -0,0 +1,39 @@
+/* Raise given exceptions.
+   Copyright (C) 2018-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+#include <float.h>
+#include <math.h>
+
+int
+__feraiseexcept (int excepts)
+{
+  unsigned int fpsr;
+
+  /* currently raised exceptions are not cleared.  */
+  _FPU_GETS (fpsr);
+  fpsr |= excepts;
+
+  _FPU_SETS (fpsr);
+
+  return 0;
+}
+libm_hidden_def (__feraiseexcept)
+weak_alias (__feraiseexcept, feraiseexcept)
+libm_hidden_weak (feraiseexcept)
diff --git a/sysdeps/arc/fpu/fsetexcptflg.c b/sysdeps/arc/fpu/fsetexcptflg.c
new file mode 100644
index 000000000000..b8e495692145
--- /dev/null
+++ b/sysdeps/arc/fpu/fsetexcptflg.c
@@ -0,0 +1,38 @@
+/* Set floating-point environment exception handling, ARC version.
+   Copyright (C) 1998-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+int
+fesetexceptflag (const fexcept_t *flagp, int excepts)
+{
+  unsigned int fpsr;
+
+  _FPU_GETS (fpsr);
+
+  /* Clear the bits first.  */
+  fpsr &= ~excepts;
+
+  /* Now set those bits, copying them over from @flagp.  */
+  fpsr |= *flagp & excepts;
+
+  _FPU_SETS (fpsr);
+
+  return 0;
+}
diff --git a/sysdeps/arc/fpu/ftestexcept.c b/sysdeps/arc/fpu/ftestexcept.c
new file mode 100644
index 000000000000..84fd3cf0469c
--- /dev/null
+++ b/sysdeps/arc/fpu/ftestexcept.c
@@ -0,0 +1,33 @@
+/* Test exception in current environment.
+   Copyright (C) 2018-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+#include <fenv_private.h>
+#include <stdio.h>
+
+int
+fetestexcept (int excepts)
+{
+  unsigned int fpsr;
+
+  _FPU_GETS (fpsr);
+
+  return fpsr & excepts;
+}
+libm_hidden_def (fetestexcept)
diff --git a/sysdeps/arc/fpu/s_fma.c b/sysdeps/arc/fpu/s_fma.c
new file mode 100644
index 000000000000..48bb40482dc9
--- /dev/null
+++ b/sysdeps/arc/fpu/s_fma.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1996-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+#include <libm-alias-double.h>
+
+double
+__fma (double x, double y, double z)
+{
+  return __builtin_fma (x, y, z);
+}
+
+libm_alias_double (__fma, fma)
diff --git a/sysdeps/arc/fpu/s_fmaf.c b/sysdeps/arc/fpu/s_fmaf.c
new file mode 100644
index 000000000000..544f32e27aec
--- /dev/null
+++ b/sysdeps/arc/fpu/s_fmaf.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 2011-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+#include <libm-alias-float.h>
+
+float
+__fmaf (float x, float y, float z)
+{
+  return __builtin_fmaf (x, y, z);
+}
+
+libm_alias_float (__fma, fma)
diff --git a/sysdeps/arc/fpu_control.h b/sysdeps/arc/fpu_control.h
new file mode 100644
index 000000000000..a7cf99557b8f
--- /dev/null
+++ b/sysdeps/arc/fpu_control.h
@@ -0,0 +1,102 @@
+/* FPU control word bits.  ARC version.
+   Copyright (C) 2018-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _FPU_CONTROL_H
+#define _FPU_CONTROL_H
+
+/* ARC FPU control register bits.
+
+  [  0] -> IVE: Enable invalid operation exception.
+           if 0, soft exception: status register IV flag set.
+           if 1, hardware exception trap (not supported in Linux yet).
+  [  1] -> DZE: Enable division by zero exception.
+           if 0, soft exception: status register IV flag set.
+           if 1, hardware exception: (not supported in Linux yet).
+  [9:8] -> RM: Rounding Mode:
+           00 - Rounding toward zero.
+           01 - Rounding to nearest (default).
+           10 - Rounding (up) toward plus infinity.
+           11 - Rounding (down)toward minus infinity.
+
+   ARC FPU status register bits.
+
+   [ 0]  -> IV: flag invalid operation.
+   [ 1]  -> DZ: flag division by zero.
+   [ 2]  -> OV: flag Overflow operation.
+   [ 3]  -> UV: flag Underflow operation.
+   [ 4]  -> IX: flag Inexact operation.
+   [31]  -> FWE: Flag Write Enable.
+            If 1, above flags writable explicitly (clearing),
+            else IoW and only writable indirectly via bits [12:7].  */
+
+#include <features.h>
+
+#if !defined(__ARC_FPU_SP__) &&  !defined(__ARC_FPU_DP__)
+
+# define _FPU_RESERVED 0xffffffff
+# define _FPU_DEFAULT  0x00000000
+typedef unsigned int fpu_control_t;
+# define _FPU_GETCW(cw) (cw) = 0
+# define _FPU_SETCW(cw) (void) (cw)
+# define _FPU_GETS(cw) (cw) = 0
+# define _FPU_SETS(cw) (void) (cw)
+extern fpu_control_t __fpu_control;
+
+#else
+
+#define _FPU_RESERVED		0
+
+/* The fdlibm code requires strict IEEE double precision arithmetic,
+   and no interrupts for exceptions, rounding to nearest.
+   So only RM set to b'01.  */
+# define _FPU_DEFAULT		0x00000100
+
+/* Actually default needs to have FWE bit as 1 but that is already
+   ingrained into _FPU_SETS macro below.  */
+#define  _FPU_FPSR_DEFAULT	0x00000000
+
+#define __FPU_RND_SHIFT		8
+#define __FPU_RND_MASK		0x3
+
+/* Type of the control word.  */
+typedef unsigned int fpu_control_t;
+
+/* Macros for accessing the hardware control word.  */
+#  define _FPU_GETCW(cw) __asm__ volatile ("lr %0, [0x300]" : "=r" (cw))
+#  define _FPU_SETCW(cw) __asm__ volatile ("sr %0, [0x300]" : : "r" (cw))
+
+/*  Macros for accessing the hardware status word.
+    FWE bit is special as it controls if actual status bits could be wrritten
+    explicitly (other than FPU instructions). We handle it here to keep the
+    callers agnostic of it:
+      - clear it out when reporting status bits
+      - always set it when changing status bits.  */
+#  define _FPU_GETS(cw) __asm__ volatile ("lr   %0, [0x301]	\r\n" \
+                                          "bclr %0, %0, 31	\r\n" \
+                                          : "=r" (cw))
+
+#  define _FPU_SETS(cw) __asm__ volatile ("bset %0, %0, 31	\r\n" \
+					  "sr   %0, [0x301]	\r\n" \
+                                          : : "r" (cw))
+
+/* Default control word set at startup.  */
+extern fpu_control_t __fpu_control;
+
+#endif
+
+#endif /* fpu_control.h */
diff --git a/sysdeps/arc/get-rounding-mode.h b/sysdeps/arc/get-rounding-mode.h
new file mode 100644
index 000000000000..cfa5c34473ac
--- /dev/null
+++ b/sysdeps/arc/get-rounding-mode.h
@@ -0,0 +1,38 @@
+/* Determine floating-point rounding mode within libc.  ARC version.
+   Copyright (C) 1998-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _ARC_GET_ROUNDING_MODE_H
+#define _ARC_GET_ROUNDING_MODE_H	1
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+static inline int
+get_rounding_mode (void)
+{
+#if defined(__ARC_FPU_SP__) ||  defined(__ARC_FPU_DP__)
+  unsigned int fpcr;
+  _FPU_GETCW (fpcr);
+
+  return (fpcr >> __FPU_RND_SHIFT) & __FPU_RND_MASK;
+#else
+  return FE_TONEAREST;
+#endif
+}
+
+#endif /* get-rounding-mode.h */
diff --git a/sysdeps/arc/math-tests-trap.h b/sysdeps/arc/math-tests-trap.h
new file mode 100644
index 000000000000..1a3581396573
--- /dev/null
+++ b/sysdeps/arc/math-tests-trap.h
@@ -0,0 +1,27 @@
+/* Configuration for math tests: support for enabling exception traps.
+   ARC version.
+   Copyright (C) 2014-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef ARC_MATH_TESTS_TRAP_H
+#define ARC_MATH_TESTS_TRAP_H 1
+
+/* Trapping exceptions are optional on ARC
+   and not supported in Linux kernel just yet.  */
+#define EXCEPTION_ENABLE_SUPPORTED(EXCEPT)	((EXCEPT) == 0)
+
+#endif /* math-tests-trap.h.  */
diff --git a/sysdeps/arc/tininess.h b/sysdeps/arc/tininess.h
new file mode 100644
index 000000000000..1db37790f881
--- /dev/null
+++ b/sysdeps/arc/tininess.h
@@ -0,0 +1 @@
+#define TININESS_AFTER_ROUNDING	1
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v5 07/14] ARC: Linux Syscall Interface
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
                   ` (5 preceding siblings ...)
  2020-04-09  2:56 ` [PATCH v5 06/14] ARC: hardware floating point support Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-09  2:56 ` [PATCH v5 08/14] ARC: Linux ABI Vineet Gupta
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 sysdeps/unix/sysv/linux/arc/arch-syscall.h    | 317 ++++++++++++++++++
 sysdeps/unix/sysv/linux/arc/bits/timesize.h   |  21 ++
 sysdeps/unix/sysv/linux/arc/clone.S           |  98 ++++++
 sysdeps/unix/sysv/linux/arc/jmp_buf-macros.h  |   6 +
 sysdeps/unix/sysv/linux/arc/kernel-features.h |  28 ++
 sysdeps/unix/sysv/linux/arc/kernel_stat.h     |  26 ++
 sysdeps/unix/sysv/linux/arc/mmap_internal.h   |  27 ++
 sysdeps/unix/sysv/linux/arc/pt-vfork.S        |   1 +
 sysdeps/unix/sysv/linux/arc/sigaction.c       |  31 ++
 sysdeps/unix/sysv/linux/arc/sigrestorer.S     |  29 ++
 sysdeps/unix/sysv/linux/arc/syscall.S         |  33 ++
 sysdeps/unix/sysv/linux/arc/syscalls.list     |   3 +
 sysdeps/unix/sysv/linux/arc/sysctl.mk         |   1 +
 sysdeps/unix/sysv/linux/arc/sysdep.c          |  33 ++
 sysdeps/unix/sysv/linux/arc/sysdep.h          | 219 ++++++++++++
 sysdeps/unix/sysv/linux/arc/vfork.S           |  42 +++
 16 files changed, 915 insertions(+)
 create mode 100644 sysdeps/unix/sysv/linux/arc/arch-syscall.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/bits/timesize.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/clone.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/jmp_buf-macros.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/kernel-features.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/kernel_stat.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/mmap_internal.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/pt-vfork.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/sigaction.c
 create mode 100644 sysdeps/unix/sysv/linux/arc/sigrestorer.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/syscall.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/syscalls.list
 create mode 100644 sysdeps/unix/sysv/linux/arc/sysctl.mk
 create mode 100644 sysdeps/unix/sysv/linux/arc/sysdep.c
 create mode 100644 sysdeps/unix/sysv/linux/arc/sysdep.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/vfork.S

diff --git a/sysdeps/unix/sysv/linux/arc/arch-syscall.h b/sysdeps/unix/sysv/linux/arc/arch-syscall.h
new file mode 100644
index 000000000000..db25a17ad077
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/arch-syscall.h
@@ -0,0 +1,317 @@
+/* AUTOGENERATED by update-syscall-lists.py.  */
+#define __NR_accept 202
+#define __NR_accept4 242
+#define __NR_acct 89
+#define __NR_add_key 217
+#define __NR_adjtimex 171
+#define __NR_arc_gettls 246
+#define __NR_arc_settls 245
+#define __NR_arc_usr_cmpxchg 248
+#define __NR_bind 200
+#define __NR_bpf 280
+#define __NR_brk 214
+#define __NR_cacheflush 244
+#define __NR_capget 90
+#define __NR_capset 91
+#define __NR_chdir 49
+#define __NR_chroot 51
+#define __NR_clock_adjtime 266
+#define __NR_clock_adjtime64 405
+#define __NR_clock_getres 114
+#define __NR_clock_getres_time64 406
+#define __NR_clock_gettime 113
+#define __NR_clock_gettime64 403
+#define __NR_clock_nanosleep 115
+#define __NR_clock_nanosleep_time64 407
+#define __NR_clock_settime 112
+#define __NR_clock_settime64 404
+#define __NR_clone 220
+#define __NR_clone3 435
+#define __NR_close 57
+#define __NR_connect 203
+#define __NR_copy_file_range 285
+#define __NR_delete_module 106
+#define __NR_dup 23
+#define __NR_dup3 24
+#define __NR_epoll_create1 20
+#define __NR_epoll_ctl 21
+#define __NR_epoll_pwait 22
+#define __NR_eventfd2 19
+#define __NR_execve 221
+#define __NR_execveat 281
+#define __NR_exit 93
+#define __NR_exit_group 94
+#define __NR_faccessat 48
+#define __NR_fadvise64_64 223
+#define __NR_fallocate 47
+#define __NR_fanotify_init 262
+#define __NR_fanotify_mark 263
+#define __NR_fchdir 50
+#define __NR_fchmod 52
+#define __NR_fchmodat 53
+#define __NR_fchown 55
+#define __NR_fchownat 54
+#define __NR_fcntl64 25
+#define __NR_fdatasync 83
+#define __NR_fgetxattr 10
+#define __NR_finit_module 273
+#define __NR_flistxattr 13
+#define __NR_flock 32
+#define __NR_fremovexattr 16
+#define __NR_fsconfig 431
+#define __NR_fsetxattr 7
+#define __NR_fsmount 432
+#define __NR_fsopen 430
+#define __NR_fspick 433
+#define __NR_fstat64 80
+#define __NR_fstatat64 79
+#define __NR_fstatfs64 44
+#define __NR_fsync 82
+#define __NR_ftruncate64 46
+#define __NR_futex 98
+#define __NR_futex_time64 422
+#define __NR_get_mempolicy 236
+#define __NR_get_robust_list 100
+#define __NR_getcpu 168
+#define __NR_getcwd 17
+#define __NR_getdents64 61
+#define __NR_getegid 177
+#define __NR_geteuid 175
+#define __NR_getgid 176
+#define __NR_getgroups 158
+#define __NR_getitimer 102
+#define __NR_getpeername 205
+#define __NR_getpgid 155
+#define __NR_getpid 172
+#define __NR_getppid 173
+#define __NR_getpriority 141
+#define __NR_getrandom 278
+#define __NR_getresgid 150
+#define __NR_getresuid 148
+#define __NR_getrlimit 163
+#define __NR_getrusage 165
+#define __NR_getsid 156
+#define __NR_getsockname 204
+#define __NR_getsockopt 209
+#define __NR_gettid 178
+#define __NR_gettimeofday 169
+#define __NR_getuid 174
+#define __NR_getxattr 8
+#define __NR_init_module 105
+#define __NR_inotify_add_watch 27
+#define __NR_inotify_init1 26
+#define __NR_inotify_rm_watch 28
+#define __NR_io_cancel 3
+#define __NR_io_destroy 1
+#define __NR_io_getevents 4
+#define __NR_io_pgetevents 292
+#define __NR_io_pgetevents_time64 416
+#define __NR_io_setup 0
+#define __NR_io_submit 2
+#define __NR_io_uring_enter 426
+#define __NR_io_uring_register 427
+#define __NR_io_uring_setup 425
+#define __NR_ioctl 29
+#define __NR_ioprio_get 31
+#define __NR_ioprio_set 30
+#define __NR_kcmp 272
+#define __NR_kexec_file_load 294
+#define __NR_kexec_load 104
+#define __NR_keyctl 219
+#define __NR_kill 129
+#define __NR_lgetxattr 9
+#define __NR_linkat 37
+#define __NR_listen 201
+#define __NR_listxattr 11
+#define __NR_llistxattr 12
+#define __NR_llseek 62
+#define __NR_lookup_dcookie 18
+#define __NR_lremovexattr 15
+#define __NR_lsetxattr 6
+#define __NR_madvise 233
+#define __NR_mbind 235
+#define __NR_membarrier 283
+#define __NR_memfd_create 279
+#define __NR_migrate_pages 238
+#define __NR_mincore 232
+#define __NR_mkdirat 34
+#define __NR_mknodat 33
+#define __NR_mlock 228
+#define __NR_mlock2 284
+#define __NR_mlockall 230
+#define __NR_mmap2 222
+#define __NR_mount 40
+#define __NR_move_mount 429
+#define __NR_move_pages 239
+#define __NR_mprotect 226
+#define __NR_mq_getsetattr 185
+#define __NR_mq_notify 184
+#define __NR_mq_open 180
+#define __NR_mq_timedreceive 183
+#define __NR_mq_timedreceive_time64 419
+#define __NR_mq_timedsend 182
+#define __NR_mq_timedsend_time64 418
+#define __NR_mq_unlink 181
+#define __NR_mremap 216
+#define __NR_msgctl 187
+#define __NR_msgget 186
+#define __NR_msgrcv 188
+#define __NR_msgsnd 189
+#define __NR_msync 227
+#define __NR_munlock 229
+#define __NR_munlockall 231
+#define __NR_munmap 215
+#define __NR_name_to_handle_at 264
+#define __NR_nanosleep 101
+#define __NR_nfsservctl 42
+#define __NR_open_by_handle_at 265
+#define __NR_open_tree 428
+#define __NR_openat 56
+#define __NR_perf_event_open 241
+#define __NR_personality 92
+#define __NR_pidfd_open 434
+#define __NR_pidfd_send_signal 424
+#define __NR_pipe2 59
+#define __NR_pivot_root 41
+#define __NR_pkey_alloc 289
+#define __NR_pkey_free 290
+#define __NR_pkey_mprotect 288
+#define __NR_ppoll 73
+#define __NR_ppoll_time64 414
+#define __NR_prctl 167
+#define __NR_pread64 67
+#define __NR_preadv 69
+#define __NR_preadv2 286
+#define __NR_prlimit64 261
+#define __NR_process_vm_readv 270
+#define __NR_process_vm_writev 271
+#define __NR_pselect6 72
+#define __NR_pselect6_time64 413
+#define __NR_ptrace 117
+#define __NR_pwrite64 68
+#define __NR_pwritev 70
+#define __NR_pwritev2 287
+#define __NR_quotactl 60
+#define __NR_read 63
+#define __NR_readahead 213
+#define __NR_readlinkat 78
+#define __NR_readv 65
+#define __NR_reboot 142
+#define __NR_recvfrom 207
+#define __NR_recvmmsg 243
+#define __NR_recvmmsg_time64 417
+#define __NR_recvmsg 212
+#define __NR_remap_file_pages 234
+#define __NR_removexattr 14
+#define __NR_renameat 38
+#define __NR_renameat2 276
+#define __NR_request_key 218
+#define __NR_restart_syscall 128
+#define __NR_rseq 293
+#define __NR_rt_sigaction 134
+#define __NR_rt_sigpending 136
+#define __NR_rt_sigprocmask 135
+#define __NR_rt_sigqueueinfo 138
+#define __NR_rt_sigreturn 139
+#define __NR_rt_sigsuspend 133
+#define __NR_rt_sigtimedwait 137
+#define __NR_rt_sigtimedwait_time64 421
+#define __NR_rt_tgsigqueueinfo 240
+#define __NR_sched_get_priority_max 125
+#define __NR_sched_get_priority_min 126
+#define __NR_sched_getaffinity 123
+#define __NR_sched_getattr 275
+#define __NR_sched_getparam 121
+#define __NR_sched_getscheduler 120
+#define __NR_sched_rr_get_interval 127
+#define __NR_sched_rr_get_interval_time64 423
+#define __NR_sched_setaffinity 122
+#define __NR_sched_setattr 274
+#define __NR_sched_setparam 118
+#define __NR_sched_setscheduler 119
+#define __NR_sched_yield 124
+#define __NR_seccomp 277
+#define __NR_semctl 191
+#define __NR_semget 190
+#define __NR_semop 193
+#define __NR_semtimedop 192
+#define __NR_semtimedop_time64 420
+#define __NR_sendfile64 71
+#define __NR_sendmmsg 269
+#define __NR_sendmsg 211
+#define __NR_sendto 206
+#define __NR_set_mempolicy 237
+#define __NR_set_robust_list 99
+#define __NR_set_tid_address 96
+#define __NR_setdomainname 162
+#define __NR_setfsgid 152
+#define __NR_setfsuid 151
+#define __NR_setgid 144
+#define __NR_setgroups 159
+#define __NR_sethostname 161
+#define __NR_setitimer 103
+#define __NR_setns 268
+#define __NR_setpgid 154
+#define __NR_setpriority 140
+#define __NR_setregid 143
+#define __NR_setresgid 149
+#define __NR_setresuid 147
+#define __NR_setreuid 145
+#define __NR_setrlimit 164
+#define __NR_setsid 157
+#define __NR_setsockopt 208
+#define __NR_settimeofday 170
+#define __NR_setuid 146
+#define __NR_setxattr 5
+#define __NR_shmat 196
+#define __NR_shmctl 195
+#define __NR_shmdt 197
+#define __NR_shmget 194
+#define __NR_shutdown 210
+#define __NR_sigaltstack 132
+#define __NR_signalfd4 74
+#define __NR_socket 198
+#define __NR_socketpair 199
+#define __NR_splice 76
+#define __NR_statfs64 43
+#define __NR_statx 291
+#define __NR_swapoff 225
+#define __NR_swapon 224
+#define __NR_symlinkat 36
+#define __NR_sync 81
+#define __NR_sync_file_range 84
+#define __NR_syncfs 267
+#define __NR_sysfs 247
+#define __NR_sysinfo 179
+#define __NR_syslog 116
+#define __NR_tee 77
+#define __NR_tgkill 131
+#define __NR_timer_create 107
+#define __NR_timer_delete 111
+#define __NR_timer_getoverrun 109
+#define __NR_timer_gettime 108
+#define __NR_timer_gettime64 408
+#define __NR_timer_settime 110
+#define __NR_timer_settime64 409
+#define __NR_timerfd_create 85
+#define __NR_timerfd_gettime 87
+#define __NR_timerfd_gettime64 410
+#define __NR_timerfd_settime 86
+#define __NR_timerfd_settime64 411
+#define __NR_times 153
+#define __NR_tkill 130
+#define __NR_truncate64 45
+#define __NR_umask 166
+#define __NR_umount2 39
+#define __NR_uname 160
+#define __NR_unlinkat 35
+#define __NR_unshare 97
+#define __NR_userfaultfd 282
+#define __NR_utimensat 88
+#define __NR_utimensat_time64 412
+#define __NR_vhangup 58
+#define __NR_vmsplice 75
+#define __NR_wait4 260
+#define __NR_waitid 95
+#define __NR_write 64
+#define __NR_writev 66
diff --git a/sysdeps/unix/sysv/linux/arc/bits/timesize.h b/sysdeps/unix/sysv/linux/arc/bits/timesize.h
new file mode 100644
index 000000000000..1259077c6412
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/bits/timesize.h
@@ -0,0 +1,21 @@
+/* Bit size of the time_t type at glibc build time, general case.
+   Copyright (C) 2019-2020 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 <bits/wordsize.h>
+
+#define __TIMESIZE	64
diff --git a/sysdeps/unix/sysv/linux/arc/clone.S b/sysdeps/unix/sysv/linux/arc/clone.S
new file mode 100644
index 000000000000..c5ba38541163
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/clone.S
@@ -0,0 +1,98 @@
+/* clone() implementation for ARC.
+   Copyright (C) 2008-2020 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
+   <https://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/jmp_buf-macros.h b/sysdeps/unix/sysv/linux/arc/jmp_buf-macros.h
new file mode 100644
index 000000000000..296f3197ee31
--- /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 000000000000..4f23a34489eb
--- /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-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+/* The minimum supported kernel version for ARC is 5.1 (64-bit time, offsets),
+   although the asm-generic ABI is from 3.9 (when Linux port was merged).  */
+
+#include_next <kernel-features.h>
+
+#undef __ASSUME_CLONE_DEFAULT
+#define __ASSUME_CLONE_BACKWARDS 1
diff --git a/sysdeps/unix/sysv/linux/arc/kernel_stat.h b/sysdeps/unix/sysv/linux/arc/kernel_stat.h
new file mode 100644
index 000000000000..8fdd86b9e843
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/kernel_stat.h
@@ -0,0 +1,26 @@
+/* Copyright (C) 2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <bits/wordsize.h>
+
+/* Needed to elide the itemized copy code in common xstatconv.c.  */
+#define STAT_IS_KERNEL_STAT 1
+
+/* Nice side-effect of 64-bit time_t switch is these are same.  */
+#define XSTAT_IS_XSTAT64 1
+
+#define STATFS_IS_STATFS64 0
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 000000000000..19aa078dd45e
--- /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-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef MMAP_ARC_INTERNAL_H
+#define MMAP_ARC_INTERNAL_H
+
+/* 8K is default but determine the shift dynamically with getpagesize.  */
+#define MMAP2_PAGE_UNIT -1
+
+#include_next <mmap_internal.h>
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/arc/pt-vfork.S b/sysdeps/unix/sysv/linux/arc/pt-vfork.S
new file mode 100644
index 000000000000..1cc893170070
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/pt-vfork.S
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/unix/sysv/linux/arc/sigaction.c b/sysdeps/unix/sysv/linux/arc/sigaction.c
new file mode 100644
index 000000000000..2613eb883fb1
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sigaction.c
@@ -0,0 +1,31 @@
+/* ARC specific sigaction.
+   Copyright (C) 1997-2020 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
+   <https://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/sigrestorer.S b/sysdeps/unix/sysv/linux/arc/sigrestorer.S
new file mode 100644
index 000000000000..cc3c1a0d09ff
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sigrestorer.S
@@ -0,0 +1,29 @@
+/* Default sigreturn stub for ARC Linux.
+   Copyright (C) 2005-2020 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
+   <https://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/syscall.S b/sysdeps/unix/sysv/linux/arc/syscall.S
new file mode 100644
index 000000000000..ff17e71575b1
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/syscall.S
@@ -0,0 +1,33 @@
+/* syscall - indirect system call.
+   Copyright (C) 2017-2020 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
+   <https://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
+	mov_s	r4, r5
+	mov_s	r5, r6
+
+	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 000000000000..d0ef5977ee06
--- /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/sysctl.mk b/sysdeps/unix/sysv/linux/arc/sysctl.mk
new file mode 100644
index 000000000000..05a4e2f8c99b
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sysctl.mk
@@ -0,0 +1 @@
+# ARC doesn't support sysctl.
diff --git a/sysdeps/unix/sysv/linux/arc/sysdep.c b/sysdeps/unix/sysv/linux/arc/sysdep.c
new file mode 100644
index 000000000000..42c8575ba461
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sysdep.c
@@ -0,0 +1,33 @@
+/* ARC wrapper for setting errno.
+   Copyright (C) 1997-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#include <errno.h>
+
+/* All syscall handlers land 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 000000000000..565eca5e3e55
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sysdep.h
@@ -0,0 +1,219 @@
+/* Assembler macros for ARC.
+   Copyright (C) 2000-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _LINUX_ARC_SYSDEP_H
+#define _LINUX_ARC_SYSDEP_H 1
+
+#include <sysdeps/arc/sysdep.h>
+#include <sysdeps/unix/sysv/linux/generic/sysdep.h>
+
+/* ARC's version of asm-generic syscall ABI does provide fstat64 and fstatat64
+   but it not compatible with glibc 64-bit time_t based stat64. So undef them
+   to allow generic code to pick up statx syscall based wrappers which do the
+   explict interworking.
+   Similarly futex32 exists and works but we'd rather use futex64. But lll code
+   using futex expects __NR_futex hence the forced redefine
+   */
+#undef __NR_fstat64
+#undef __NR_fstatat64
+#undef __NR_futex
+#define __NR_futex __NR_futex_time64
+
+/* 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, -4096, .Lcall_syscall_err	ASM_LINE_SEP
+
+# define ret	j_s  [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	\
+    push_s   blink			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	\
+    pop_s  blink			ASM_LINE_SEP	\
+    cfi_adjust_cfa_offset (-4)		ASM_LINE_SEP	\
+    cfi_restore (blink)			ASM_LINE_SEP	\
+    j_s      [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
+
+# if IS_IN (libc)
+extern int __syscall_error (int);
+hidden_proto (__syscall_error)
+# endif
+
+# define ARC_TRAP_INSN	"trap_s 0	\n\t"
+
+# undef INTERNAL_SYSCALL_NCS
+# define INTERNAL_SYSCALL_NCS(number, 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 (number, args)				\
+								\
+    __asm__ volatile (						\
+                      ARC_TRAP_INSN				\
+                      : "+r" (__ret)				\
+                      : "r"(_sys_num) ASM_ARGS_##nr_args	\
+                      : "memory");				\
+                                                                \
+    __ret; })
+
+# undef INTERNAL_SYSCALL
+# define INTERNAL_SYSCALL(name, nr, args...) 	\
+  INTERNAL_SYSCALL_NCS(SYS_ify(name), nr, args)
+
+/* 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;
+
+/* 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/vfork.S b/sysdeps/unix/sysv/linux/arc/vfork.S
new file mode 100644
index 000000000000..ac1cce5258e0
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/vfork.S
@@ -0,0 +1,42 @@
+/* vfork for ARC Linux.
+   Copyright (C) 2005-2020 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
+   <https://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)
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v5 08/14] ARC: Linux ABI
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
                   ` (6 preceding siblings ...)
  2020-04-09  2:56 ` [PATCH v5 07/14] ARC: Linux Syscall Interface Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-17 23:02   ` Joseph Myers
  2020-04-09  2:56 ` [PATCH v5 09/14] ARC: Linux Startup and Dynamic Loading Vineet Gupta
                   ` (5 subsequent siblings)
  13 siblings, 1 reply; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 sysdeps/arc/nptl/pthreaddef.h                 | 32 +++++++
 sysdeps/unix/sysv/linux/arc/bits/procfs.h     | 35 +++++++
 .../sysv/linux/arc/bits/types/__sigset_t.h    | 12 +++
 sysdeps/unix/sysv/linux/arc/getcontext.S      | 63 +++++++++++++
 sysdeps/unix/sysv/linux/arc/makecontext.c     | 73 +++++++++++++++
 sysdeps/unix/sysv/linux/arc/setcontext.S      | 92 +++++++++++++++++++
 sysdeps/unix/sysv/linux/arc/sigcontextinfo.h  | 28 ++++++
 sysdeps/unix/sysv/linux/arc/swapcontext.S     | 92 +++++++++++++++++++
 sysdeps/unix/sysv/linux/arc/sys/cachectl.h    | 36 ++++++++
 sysdeps/unix/sysv/linux/arc/sys/ucontext.h    | 61 ++++++++++++
 sysdeps/unix/sysv/linux/arc/sys/user.h        | 31 +++++++
 sysdeps/unix/sysv/linux/arc/ucontext-macros.h | 29 ++++++
 sysdeps/unix/sysv/linux/arc/ucontext_i.sym    | 20 ++++
 13 files changed, 604 insertions(+)
 create mode 100644 sysdeps/arc/nptl/pthreaddef.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/bits/procfs.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/bits/types/__sigset_t.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/getcontext.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/makecontext.c
 create mode 100644 sysdeps/unix/sysv/linux/arc/setcontext.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/sigcontextinfo.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/swapcontext.S
 create mode 100644 sysdeps/unix/sysv/linux/arc/sys/cachectl.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/sys/ucontext.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/sys/user.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/ucontext-macros.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/ucontext_i.sym

diff --git a/sysdeps/arc/nptl/pthreaddef.h b/sysdeps/arc/nptl/pthreaddef.h
new file mode 100644
index 000000000000..b265bf1a052c
--- /dev/null
+++ b/sysdeps/arc/nptl/pthreaddef.h
@@ -0,0 +1,32 @@
+/* pthread machine parameter definitions, ARC version.
+   Copyright (C) 2002-2020 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
+   <https://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/unix/sysv/linux/arc/bits/procfs.h b/sysdeps/unix/sysv/linux/arc/bits/procfs.h
new file mode 100644
index 000000000000..465c40c71bbd
--- /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-2020 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
+   <https://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 000000000000..795638a30bd3
--- /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/getcontext.S b/sysdeps/unix/sysv/linux/arc/getcontext.S
new file mode 100644
index 000000000000..e00aeb1a6931
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/getcontext.S
@@ -0,0 +1,63 @@
+/* Save current context for ARC.
+   Copyright (C) 2009-2020 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
+   <https://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/makecontext.c b/sysdeps/unix/sysv/linux/arc/makecontext.c
new file mode 100644
index 000000000000..b3a352ce8414
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/makecontext.c
@@ -0,0 +1,73 @@
+/* Create new context for ARC.
+   Copyright (C) 2015-2020 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
+   <https://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/setcontext.S b/sysdeps/unix/sysv/linux/arc/setcontext.S
new file mode 100644
index 000000000000..0cc496be1060
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/setcontext.S
@@ -0,0 +1,92 @@
+/* Set current context for ARC.
+   Copyright (C) 2009-2020 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
+   <https://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/sigcontextinfo.h b/sysdeps/unix/sysv/linux/arc/sigcontextinfo.h
new file mode 100644
index 000000000000..551b4c9c1d2b
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sigcontextinfo.h
@@ -0,0 +1,28 @@
+/* ARC definitions for signal handling calling conventions.
+   Copyright (C) 2017-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _SIGCONTEXTINFO_H
+#define _SIGCONTEXTINFO_H
+
+static inline uintptr_t
+sigcontext_get_pc (const ucontext_t *ctx)
+{
+  return ctx->uc_mcontext.__scratch.__ret;
+}
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/arc/swapcontext.S b/sysdeps/unix/sysv/linux/arc/swapcontext.S
new file mode 100644
index 000000000000..80ae73975af9
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/swapcontext.S
@@ -0,0 +1,92 @@
+/* Save and set current context for ARC.
+   Copyright (C) 2009-2020 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
+   <https://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 000000000000..1acb4018ae69
--- /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-2020 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
+   <https://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 000000000000..efbb9b2d20a7
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sys/ucontext.h
@@ -0,0 +1,61 @@
+/* struct ucontext definition, ARC version.
+   Copyright (C) 2017-2020 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
+   <https://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;
+
+#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 000000000000..a556d2113d9c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sys/user.h
@@ -0,0 +1,31 @@
+/* ptrace register data format definitions.
+   Copyright (C) 1998-2020 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
+   <https://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/ucontext-macros.h b/sysdeps/unix/sysv/linux/arc/ucontext-macros.h
new file mode 100644
index 000000000000..4427be5dedd6
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/ucontext-macros.h
@@ -0,0 +1,29 @@
+/* Macros for ucontext routines, ARC version.
+   Copyright (C) 2017-2020 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
+   <https://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 000000000000..d84e92f9f543
--- /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)
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v5 09/14] ARC: Linux Startup and Dynamic Loading
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
                   ` (7 preceding siblings ...)
  2020-04-09  2:56 ` [PATCH v5 08/14] ARC: Linux ABI Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-09  2:56 ` [PATCH v5 10/14] ARC: ABI lists Vineet Gupta
                   ` (4 subsequent siblings)
  13 siblings, 0 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 sysdeps/unix/sysv/linux/arc/dl-static.c | 84 +++++++++++++++++++++++++
 sysdeps/unix/sysv/linux/arc/ldsodefs.h  | 32 ++++++++++
 2 files changed, 116 insertions(+)
 create mode 100644 sysdeps/unix/sysv/linux/arc/dl-static.c
 create mode 100644 sysdeps/unix/sysv/linux/arc/ldsodefs.h

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 000000000000..24c31b27fc11
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/dl-static.c
@@ -0,0 +1,84 @@
+/* Variable initialization.  ARC version.
+   Copyright (C) 2001-2020 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
+   <https://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/ldsodefs.h b/sysdeps/unix/sysv/linux/arc/ldsodefs.h
new file mode 100644
index 000000000000..9eef836168be
--- /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-2020 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
+   <https://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 */
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v5 10/14] ARC: ABI lists
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
                   ` (8 preceding siblings ...)
  2020-04-09  2:56 ` [PATCH v5 09/14] ARC: Linux Startup and Dynamic Loading Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-09  2:56 ` [PATCH v5 11/14] ARC: Update syscall-names.list for ARC specific syscalls Vineet Gupta
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 sysdeps/arc/fpu/libm-test-ulps                | 1140 +++++++++
 sysdeps/arc/fpu/libm-test-ulps-name           |    1 +
 sysdeps/arc/nofpu/libm-test-ulps              |  270 +++
 sysdeps/arc/nofpu/libm-test-ulps-name         |    1 +
 sysdeps/unix/sysv/linux/arc/c++-types.data    |   67 +
 sysdeps/unix/sysv/linux/arc/ld.abilist        |    5 +
 .../sysv/linux/arc/libBrokenLocale.abilist    |    1 +
 sysdeps/unix/sysv/linux/arc/libanl.abilist    |    4 +
 sysdeps/unix/sysv/linux/arc/libc.abilist      | 2081 +++++++++++++++++
 sysdeps/unix/sysv/linux/arc/libcrypt.abilist  |    2 +
 sysdeps/unix/sysv/linux/arc/libdl.abilist     |    9 +
 sysdeps/unix/sysv/linux/arc/libm.abilist      |  699 ++++++
 .../unix/sysv/linux/arc/libpthread.abilist    |  217 ++
 sysdeps/unix/sysv/linux/arc/libresolv.abilist |   79 +
 sysdeps/unix/sysv/linux/arc/librt.abilist     |   35 +
 .../unix/sysv/linux/arc/libthread_db.abilist  |   40 +
 sysdeps/unix/sysv/linux/arc/libutil.abilist   |    6 +
 sysdeps/unix/sysv/linux/arc/localplt.data     |   12 +
 18 files changed, 4669 insertions(+)
 create mode 100644 sysdeps/arc/fpu/libm-test-ulps
 create mode 100644 sysdeps/arc/fpu/libm-test-ulps-name
 create mode 100644 sysdeps/arc/nofpu/libm-test-ulps
 create mode 100644 sysdeps/arc/nofpu/libm-test-ulps-name
 create mode 100644 sysdeps/unix/sysv/linux/arc/c++-types.data
 create mode 100644 sysdeps/unix/sysv/linux/arc/ld.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libBrokenLocale.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libanl.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libc.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libcrypt.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libdl.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libm.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libpthread.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libresolv.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/librt.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libthread_db.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/libutil.abilist
 create mode 100644 sysdeps/unix/sysv/linux/arc/localplt.data

diff --git a/sysdeps/arc/fpu/libm-test-ulps b/sysdeps/arc/fpu/libm-test-ulps
new file mode 100644
index 000000000000..00262925b75b
--- /dev/null
+++ b/sysdeps/arc/fpu/libm-test-ulps
@@ -0,0 +1,1140 @@
+# Begin of automatic generation
+
+# Maximal error of functions:
+Function: "acos":
+double: 1
+float: 1
+
+Function: "acos_downward":
+double: 1
+float: 1
+
+Function: "acos_towardzero":
+double: 1
+float: 1
+
+Function: "acos_upward":
+double: 1
+float: 1
+
+Function: "acosh":
+double: 3
+float: 2
+
+Function: "acosh_downward":
+double: 2
+float: 2
+
+Function: "acosh_towardzero":
+double: 2
+float: 2
+
+Function: "acosh_upward":
+double: 3
+float: 3
+
+Function: "asin":
+double: 1
+float: 1
+
+Function: "asin_downward":
+double: 1
+float: 1
+
+Function: "asin_towardzero":
+double: 1
+float: 1
+
+Function: "asin_upward":
+double: 1
+float: 1
+
+Function: "asinh":
+double: 3
+float: 2
+
+Function: "asinh_downward":
+double: 3
+float: 3
+
+Function: "asinh_towardzero":
+double: 2
+float: 2
+
+Function: "asinh_upward":
+double: 3
+float: 3
+
+Function: "atan":
+double: 1
+float: 1
+
+Function: "atan2":
+double: 7
+float: 2
+
+Function: "atan2_downward":
+double: 5
+float: 2
+
+Function: "atan2_towardzero":
+double: 5
+float: 2
+
+Function: "atan2_upward":
+double: 8
+float: 2
+
+Function: "atan_downward":
+double: 1
+float: 2
+
+Function: "atan_towardzero":
+double: 1
+float: 1
+
+Function: "atan_upward":
+double: 2
+float: 2
+
+Function: "atanh":
+double: 2
+float: 2
+
+Function: "atanh_downward":
+double: 3
+float: 3
+
+Function: "atanh_towardzero":
+double: 2
+float: 2
+
+Function: "atanh_upward":
+double: 3
+float: 3
+
+Function: "cabs":
+double: 1
+float: 1
+
+Function: "cabs_downward":
+double: 1
+
+Function: "cabs_towardzero":
+double: 1
+
+Function: "cabs_upward":
+double: 2
+float: 1
+
+Function: Real part of "cacos":
+double: 2
+float: 2
+
+Function: Imaginary part of "cacos":
+double: 5
+float: 3
+
+Function: Real part of "cacos_downward":
+double: 3
+float: 2
+
+Function: Imaginary part of "cacos_downward":
+double: 5
+float: 3
+
+Function: Real part of "cacos_towardzero":
+double: 3
+float: 2
+
+Function: Imaginary part of "cacos_towardzero":
+double: 4
+float: 2
+
+Function: Real part of "cacos_upward":
+double: 2
+float: 3
+
+Function: Imaginary part of "cacos_upward":
+double: 5
+float: 5
+
+Function: Real part of "cacosh":
+double: 5
+float: 4
+
+Function: Imaginary part of "cacosh":
+double: 2
+float: 2
+
+Function: Real part of "cacosh_downward":
+double: 4
+float: 2
+
+Function: Imaginary part of "cacosh_downward":
+double: 3
+float: 3
+
+Function: Real part of "cacosh_towardzero":
+double: 4
+float: 2
+
+Function: Imaginary part of "cacosh_towardzero":
+double: 3
+float: 2
+
+Function: Real part of "cacosh_upward":
+double: 5
+float: 3
+
+Function: Imaginary part of "cacosh_upward":
+double: 3
+float: 3
+
+Function: "carg":
+double: 7
+float: 2
+
+Function: "carg_downward":
+double: 5
+float: 2
+
+Function: "carg_towardzero":
+double: 5
+float: 2
+
+Function: "carg_upward":
+double: 8
+float: 2
+
+Function: Real part of "casin":
+double: 3
+float: 1
+
+Function: Imaginary part of "casin":
+double: 5
+float: 4
+
+Function: Real part of "casin_downward":
+double: 3
+float: 2
+
+Function: Imaginary part of "casin_downward":
+double: 5
+float: 3
+
+Function: Real part of "casin_towardzero":
+double: 3
+float: 1
+
+Function: Imaginary part of "casin_towardzero":
+double: 4
+float: 2
+
+Function: Real part of "casin_upward":
+double: 3
+float: 2
+
+Function: Imaginary part of "casin_upward":
+double: 5
+float: 5
+
+Function: Real part of "casinh":
+double: 5
+float: 4
+
+Function: Imaginary part of "casinh":
+double: 3
+float: 2
+
+Function: Real part of "casinh_downward":
+double: 5
+float: 3
+
+Function: Imaginary part of "casinh_downward":
+double: 3
+float: 2
+
+Function: Real part of "casinh_towardzero":
+double: 4
+float: 2
+
+Function: Imaginary part of "casinh_towardzero":
+double: 3
+float: 1
+
+Function: Real part of "casinh_upward":
+double: 5
+float: 5
+
+Function: Imaginary part of "casinh_upward":
+double: 3
+float: 2
+
+Function: Real part of "catan":
+double: 1
+float: 1
+
+Function: Imaginary part of "catan":
+double: 3
+float: 3
+
+Function: Real part of "catan_downward":
+double: 1
+float: 2
+
+Function: Imaginary part of "catan_downward":
+double: 2
+float: 2
+
+Function: Real part of "catan_towardzero":
+double: 1
+float: 2
+
+Function: Imaginary part of "catan_towardzero":
+double: 3
+float: 3
+
+Function: Real part of "catan_upward":
+double: 2
+float: 2
+
+Function: Imaginary part of "catan_upward":
+double: 3
+float: 3
+
+Function: Real part of "catanh":
+double: 4
+float: 4
+
+Function: Imaginary part of "catanh":
+double: 1
+float: 2
+
+Function: Real part of "catanh_downward":
+double: 2
+float: 2
+
+Function: Imaginary part of "catanh_downward":
+double: 1
+float: 2
+
+Function: Real part of "catanh_towardzero":
+double: 3
+float: 3
+
+Function: Imaginary part of "catanh_towardzero":
+double: 1
+float: 2
+
+Function: Real part of "catanh_upward":
+double: 4
+float: 4
+
+Function: Imaginary part of "catanh_upward":
+double: 2
+float: 2
+
+Function: "cbrt":
+double: 4
+float: 1
+
+Function: "cbrt_downward":
+double: 4
+float: 1
+
+Function: "cbrt_towardzero":
+double: 3
+float: 1
+
+Function: "cbrt_upward":
+double: 5
+float: 1
+
+Function: Real part of "ccos":
+double: 3
+float: 3
+
+Function: Imaginary part of "ccos":
+double: 3
+float: 3
+
+Function: Real part of "ccos_downward":
+double: 3
+float: 1
+
+Function: Imaginary part of "ccos_downward":
+double: 3
+float: 3
+
+Function: Real part of "ccos_towardzero":
+double: 3
+float: 2
+
+Function: Imaginary part of "ccos_towardzero":
+double: 3
+float: 3
+
+Function: Real part of "ccos_upward":
+double: 4
+float: 2
+
+Function: Imaginary part of "ccos_upward":
+double: 4
+float: 4
+
+Function: Real part of "ccosh":
+double: 3
+float: 3
+
+Function: Imaginary part of "ccosh":
+double: 3
+float: 3
+
+Function: Real part of "ccosh_downward":
+double: 3
+float: 2
+
+Function: Imaginary part of "ccosh_downward":
+double: 3
+float: 3
+
+Function: Real part of "ccosh_towardzero":
+double: 3
+float: 3
+
+Function: Imaginary part of "ccosh_towardzero":
+double: 3
+float: 3
+
+Function: Real part of "ccosh_upward":
+double: 4
+float: 3
+
+Function: Imaginary part of "ccosh_upward":
+double: 4
+float: 4
+
+Function: Real part of "cexp":
+double: 4
+float: 3
+
+Function: Imaginary part of "cexp":
+double: 4
+float: 3
+
+Function: Real part of "cexp_downward":
+double: 4
+float: 2
+
+Function: Imaginary part of "cexp_downward":
+double: 3
+float: 3
+
+Function: Real part of "cexp_towardzero":
+double: 4
+float: 2
+
+Function: Imaginary part of "cexp_towardzero":
+double: 3
+float: 3
+
+Function: Real part of "cexp_upward":
+double: 5
+float: 3
+
+Function: Imaginary part of "cexp_upward":
+double: 4
+float: 4
+
+Function: Real part of "clog":
+double: 5
+float: 4
+
+Function: Imaginary part of "clog":
+double: 7
+float: 2
+
+Function: Real part of "clog10":
+double: 6
+float: 5
+
+Function: Imaginary part of "clog10":
+double: 8
+float: 4
+
+Function: Real part of "clog10_downward":
+double: 5
+float: 5
+
+Function: Imaginary part of "clog10_downward":
+double: 8
+float: 4
+
+Function: Real part of "clog10_towardzero":
+double: 6
+float: 6
+
+Function: Imaginary part of "clog10_towardzero":
+double: 9
+float: 4
+
+Function: Real part of "clog10_upward":
+double: 6
+float: 6
+
+Function: Imaginary part of "clog10_upward":
+double: 9
+float: 5
+
+Function: Real part of "clog_downward":
+double: 4
+float: 3
+
+Function: Imaginary part of "clog_downward":
+double: 5
+float: 2
+
+Function: Real part of "clog_towardzero":
+double: 5
+float: 4
+
+Function: Imaginary part of "clog_towardzero":
+double: 5
+float: 3
+
+Function: Real part of "clog_upward":
+double: 5
+float: 4
+
+Function: Imaginary part of "clog_upward":
+double: 8
+float: 2
+
+Function: "cos":
+double: 4
+float: 1
+
+Function: "cos_downward":
+double: 1
+float: 1
+
+Function: "cos_towardzero":
+double: 4
+float: 2
+
+Function: "cos_upward":
+double: 4
+float: 2
+
+Function: "cosh":
+double: 3
+float: 3
+
+Function: "cosh_downward":
+double: 2
+float: 1
+
+Function: "cosh_towardzero":
+double: 2
+float: 1
+
+Function: "cosh_upward":
+double: 3
+float: 2
+
+Function: Real part of "cpow":
+double: 9
+float: 8
+
+Function: Imaginary part of "cpow":
+double: 3
+float: 6
+
+Function: Real part of "cpow_downward":
+double: 5
+float: 8
+
+Function: Imaginary part of "cpow_downward":
+double: 2
+float: 2
+
+Function: Real part of "cpow_towardzero":
+double: 5
+float: 8
+
+Function: Imaginary part of "cpow_towardzero":
+double: 2
+float: 2
+
+Function: Real part of "cpow_upward":
+double: 5
+float: 8
+
+Function: Imaginary part of "cpow_upward":
+double: 2
+float: 2
+
+Function: Real part of "csin":
+double: 3
+float: 3
+
+Function: Imaginary part of "csin":
+double: 3
+float: 3
+
+Function: Real part of "csin_downward":
+double: 3
+float: 3
+
+Function: Imaginary part of "csin_downward":
+double: 3
+float: 1
+
+Function: Real part of "csin_towardzero":
+double: 3
+float: 3
+
+Function: Imaginary part of "csin_towardzero":
+double: 3
+float: 1
+
+Function: Real part of "csin_upward":
+double: 4
+float: 4
+
+Function: Imaginary part of "csin_upward":
+double: 4
+float: 2
+
+Function: Real part of "csinh":
+double: 3
+float: 3
+
+Function: Imaginary part of "csinh":
+double: 3
+float: 3
+
+Function: Real part of "csinh_downward":
+double: 3
+float: 1
+
+Function: Imaginary part of "csinh_downward":
+double: 3
+float: 3
+
+Function: Real part of "csinh_towardzero":
+double: 3
+float: 2
+
+Function: Imaginary part of "csinh_towardzero":
+double: 3
+float: 3
+
+Function: Real part of "csinh_upward":
+double: 4
+float: 2
+
+Function: Imaginary part of "csinh_upward":
+double: 4
+float: 4
+
+Function: Real part of "csqrt":
+double: 4
+float: 3
+
+Function: Imaginary part of "csqrt":
+double: 4
+float: 3
+
+Function: Real part of "csqrt_downward":
+double: 5
+float: 4
+
+Function: Imaginary part of "csqrt_downward":
+double: 4
+float: 3
+
+Function: Real part of "csqrt_towardzero":
+double: 5
+float: 4
+
+Function: Imaginary part of "csqrt_towardzero":
+double: 4
+float: 4
+
+Function: Real part of "csqrt_upward":
+double: 5
+float: 4
+
+Function: Imaginary part of "csqrt_upward":
+double: 4
+float: 4
+
+Function: Real part of "ctan":
+double: 4
+float: 6
+
+Function: Imaginary part of "ctan":
+double: 3
+float: 2
+
+Function: Real part of "ctan_downward":
+double: 6
+float: 5
+
+Function: Imaginary part of "ctan_downward":
+double: 3
+float: 2
+
+Function: Real part of "ctan_towardzero":
+double: 5
+float: 6
+
+Function: Imaginary part of "ctan_towardzero":
+double: 3
+float: 2
+
+Function: Real part of "ctan_upward":
+double: 5
+float: 6
+
+Function: Imaginary part of "ctan_upward":
+double: 2
+float: 2
+
+Function: Real part of "ctanh":
+double: 3
+float: 2
+
+Function: Imaginary part of "ctanh":
+double: 4
+float: 6
+
+Function: Real part of "ctanh_downward":
+double: 3
+float: 2
+
+Function: Imaginary part of "ctanh_downward":
+double: 6
+float: 5
+
+Function: Real part of "ctanh_towardzero":
+double: 3
+float: 2
+
+Function: Imaginary part of "ctanh_towardzero":
+double: 5
+float: 6
+
+Function: Real part of "ctanh_upward":
+double: 3
+float: 2
+
+Function: Imaginary part of "ctanh_upward":
+double: 5
+float: 6
+
+Function: "erf":
+double: 1
+float: 1
+
+Function: "erf_downward":
+double: 1
+float: 1
+
+Function: "erf_towardzero":
+double: 1
+float: 2
+
+Function: "erf_upward":
+double: 2
+float: 2
+
+Function: "erfc":
+double: 5
+float: 5
+
+Function: "erfc_downward":
+double: 4
+float: 4
+
+Function: "erfc_towardzero":
+double: 4
+float: 4
+
+Function: "erfc_upward":
+double: 5
+float: 5
+
+Function: "exp":
+double: 1
+float: 1
+
+Function: "exp10":
+double: 4
+float: 1
+
+Function: "exp10_downward":
+double: 3
+
+Function: "exp10_towardzero":
+double: 3
+
+Function: "exp10_upward":
+double: 4
+float: 1
+
+Function: "exp2":
+double: 1
+float: 1
+
+Function: "exp2_downward":
+double: 1
+
+Function: "exp2_towardzero":
+double: 1
+
+Function: "exp2_upward":
+double: 2
+float: 1
+
+Function: "exp_downward":
+double: 1
+float: 1
+
+Function: "exp_towardzero":
+double: 1
+float: 1
+
+Function: "exp_upward":
+double: 2
+float: 2
+
+Function: "expm1":
+double: 2
+float: 2
+
+Function: "expm1_downward":
+double: 1
+float: 1
+
+Function: "expm1_towardzero":
+double: 1
+float: 2
+
+Function: "expm1_upward":
+double: 2
+float: 2
+
+Function: "gamma":
+double: 7
+float: 6
+
+Function: "gamma_downward":
+double: 6
+float: 5
+
+Function: "gamma_towardzero":
+double: 7
+float: 6
+
+Function: "gamma_upward":
+double: 7
+float: 6
+
+Function: "hypot":
+double: 2
+float: 1
+
+Function: "hypot_downward":
+double: 1
+
+Function: "hypot_towardzero":
+double: 1
+
+Function: "hypot_upward":
+double: 2
+float: 1
+
+Function: "j0":
+double: 4
+float: 6
+
+Function: "j0_downward":
+double: 2
+float: 4
+
+Function: "j0_towardzero":
+double: 4
+float: 5
+
+Function: "j0_upward":
+double: 3
+float: 5
+
+Function: "j1":
+double: 5
+float: 9
+
+Function: "j1_downward":
+double: 4
+float: 6
+
+Function: "j1_towardzero":
+double: 4
+float: 3
+
+Function: "j1_upward":
+double: 5
+float: 5
+
+Function: "jn":
+double: 9
+float: 8
+
+Function: "jn_downward":
+double: 7
+float: 9
+
+Function: "jn_towardzero":
+double: 7
+float: 9
+
+Function: "jn_upward":
+double: 9
+float: 9
+
+Function: "lgamma":
+double: 7
+float: 6
+
+Function: "lgamma_downward":
+double: 6
+float: 5
+
+Function: "lgamma_towardzero":
+double: 7
+float: 6
+
+Function: "lgamma_upward":
+double: 7
+float: 6
+
+Function: "log":
+double: 1
+float: 1
+
+Function: "log10":
+double: 2
+float: 3
+
+Function: "log10_downward":
+double: 2
+float: 3
+
+Function: "log10_towardzero":
+double: 2
+float: 4
+
+Function: "log10_upward":
+double: 3
+float: 4
+
+Function: "log1p":
+double: 1
+float: 1
+
+Function: "log1p_downward":
+double: 1
+float: 2
+
+Function: "log1p_towardzero":
+double: 2
+float: 2
+
+Function: "log1p_upward":
+double: 2
+float: 2
+
+Function: "log2":
+double: 2
+float: 1
+
+Function: "log2_towardzero":
+double: 1
+float: 1
+
+Function: "log2_upward":
+double: 1
+float: 1
+
+Function: "log_towardzero":
+double: 1
+float: 1
+
+Function: "log_upward":
+double: 1
+float: 1
+
+Function: "pow":
+double: 1
+float: 1
+
+Function: "pow_downward":
+double: 1
+float: 1
+
+Function: "pow_towardzero":
+double: 1
+float: 1
+
+Function: "pow_upward":
+double: 2
+float: 2
+
+Function: "sin":
+double: 7
+float: 1
+
+Function: "sin_downward":
+double: 4
+float: 1
+
+Function: "sin_towardzero":
+double: 3
+float: 1
+
+Function: "sin_upward":
+double: 7
+float: 1
+
+Function: "sincos":
+double: 1
+float: 1
+
+Function: "sincos_downward":
+double: 1
+float: 1
+
+Function: "sincos_towardzero":
+double: 4
+float: 1
+
+Function: "sincos_upward":
+double: 2
+float: 1
+
+Function: "sinh":
+double: 3
+float: 3
+
+Function: "sinh_downward":
+double: 3
+float: 3
+
+Function: "sinh_towardzero":
+double: 2
+float: 2
+
+Function: "sinh_upward":
+double: 3
+float: 3
+
+Function: "tan":
+double: 1
+float: 1
+
+Function: "tan_downward":
+double: 1
+float: 2
+
+Function: "tan_towardzero":
+double: 1
+float: 2
+
+Function: "tan_upward":
+double: 1
+float: 2
+
+Function: "tanh":
+double: 3
+float: 2
+
+Function: "tanh_downward":
+double: 3
+float: 3
+
+Function: "tanh_towardzero":
+double: 3
+float: 3
+
+Function: "tanh_upward":
+double: 3
+float: 3
+
+Function: "tgamma":
+double: 9
+float: 9
+
+Function: "tgamma_downward":
+double: 9
+float: 9
+
+Function: "tgamma_towardzero":
+double: 9
+float: 8
+
+Function: "tgamma_upward":
+double: 9
+float: 9
+
+Function: "y0":
+double: 3
+float: 6
+
+Function: "y0_downward":
+double: 3
+float: 4
+
+Function: "y0_towardzero":
+double: 3
+float: 4
+
+Function: "y0_upward":
+double: 4
+float: 5
+
+Function: "y1":
+double: 7
+float: 6
+
+Function: "y1_downward":
+double: 6
+float: 6
+
+Function: "y1_towardzero":
+double: 7
+float: 7
+
+Function: "y1_upward":
+double: 7
+float: 7
+
+Function: "yn":
+double: 9
+float: 9
+
+Function: "yn_downward":
+double: 8
+float: 8
+
+Function: "yn_towardzero":
+double: 9
+float: 9
+
+Function: "yn_upward":
+double: 9
+float: 9
+
+# end of automatic generation
diff --git a/sysdeps/arc/fpu/libm-test-ulps-name b/sysdeps/arc/fpu/libm-test-ulps-name
new file mode 100644
index 000000000000..8c4fba4f9ae0
--- /dev/null
+++ b/sysdeps/arc/fpu/libm-test-ulps-name
@@ -0,0 +1 @@
+ARC
diff --git a/sysdeps/arc/nofpu/libm-test-ulps b/sysdeps/arc/nofpu/libm-test-ulps
new file mode 100644
index 000000000000..260eacf1c337
--- /dev/null
+++ b/sysdeps/arc/nofpu/libm-test-ulps
@@ -0,0 +1,270 @@
+# Begin of automatic generation
+
+# Maximal error of functions:
+Function: "acos":
+float: 1
+
+Function: "acosh":
+double: 2
+float: 2
+
+Function: "asin":
+float: 1
+
+Function: "asinh":
+double: 1
+float: 2
+
+Function: "atan":
+float: 1
+
+Function: "atan2":
+float: 1
+
+Function: "atanh":
+double: 2
+float: 2
+
+Function: "cabs":
+double: 1
+
+Function: Real part of "cacos":
+double: 1
+float: 2
+
+Function: Imaginary part of "cacos":
+double: 2
+float: 2
+
+Function: Real part of "cacosh":
+double: 2
+float: 2
+
+Function: Imaginary part of "cacosh":
+double: 1
+float: 2
+
+Function: "carg":
+float: 1
+
+Function: Real part of "casin":
+double: 1
+float: 1
+
+Function: Imaginary part of "casin":
+double: 2
+float: 2
+
+Function: Real part of "casinh":
+double: 2
+float: 2
+
+Function: Imaginary part of "casinh":
+double: 1
+float: 1
+
+Function: Real part of "catan":
+double: 1
+float: 1
+
+Function: Imaginary part of "catan":
+double: 1
+float: 1
+
+Function: Real part of "catanh":
+double: 1
+float: 1
+
+Function: Imaginary part of "catanh":
+double: 1
+float: 1
+
+Function: "cbrt":
+double: 3
+float: 1
+
+Function: Real part of "ccos":
+double: 1
+float: 1
+
+Function: Imaginary part of "ccos":
+double: 1
+float: 1
+
+Function: Real part of "ccosh":
+double: 1
+float: 1
+
+Function: Imaginary part of "ccosh":
+double: 1
+float: 1
+
+Function: Real part of "cexp":
+double: 2
+float: 1
+
+Function: Imaginary part of "cexp":
+double: 1
+float: 2
+
+Function: Real part of "clog":
+double: 3
+float: 3
+
+Function: Imaginary part of "clog":
+float: 1
+
+Function: Real part of "clog10":
+double: 3
+float: 4
+
+Function: Imaginary part of "clog10":
+double: 2
+float: 2
+
+Function: "cos":
+double: 1
+float: 1
+
+Function: "cosh":
+double: 1
+float: 2
+
+Function: Real part of "cpow":
+double: 2
+float: 5
+
+Function: Imaginary part of "cpow":
+float: 2
+
+Function: Real part of "csin":
+double: 1
+float: 1
+
+Function: Real part of "csinh":
+float: 1
+
+Function: Imaginary part of "csinh":
+double: 1
+float: 1
+
+Function: Real part of "csqrt":
+double: 2
+float: 2
+
+Function: Imaginary part of "csqrt":
+double: 2
+float: 2
+
+Function: Real part of "ctan":
+double: 1
+float: 1
+
+Function: Imaginary part of "ctan":
+double: 2
+float: 2
+
+Function: Real part of "ctanh":
+double: 2
+float: 2
+
+Function: Imaginary part of "ctanh":
+double: 2
+float: 2
+
+Function: "erf":
+double: 1
+float: 1
+
+Function: "erfc":
+double: 3
+float: 3
+
+Function: "exp":
+float: 1
+
+Function: "exp10":
+double: 2
+float: 1
+
+Function: "exp2":
+double: 1
+
+Function: "expm1":
+double: 1
+float: 1
+
+Function: "gamma":
+double: 4
+float: 7
+
+Function: "hypot":
+double: 1
+
+Function: "j0":
+double: 2
+float: 8
+
+Function: "j1":
+double: 2
+float: 9
+
+Function: "jn":
+double: 4
+float: 4
+
+Function: "lgamma":
+double: 4
+float: 7
+
+Function: "log10":
+double: 2
+float: 2
+
+Function: "log1p":
+double: 1
+float: 1
+
+Function: "log2":
+double: 2
+float: 1
+
+Function: "pow":
+double: 1
+
+Function: "sin":
+double: 1
+float: 1
+
+Function: "sincos":
+double: 1
+float: 1
+
+Function: "sinh":
+double: 2
+float: 2
+
+Function: "tan":
+float: 1
+
+Function: "tanh":
+double: 2
+float: 2
+
+Function: "tgamma":
+double: 5
+float: 8
+
+Function: "y0":
+double: 3
+float: 8
+
+Function: "y1":
+double: 3
+float: 2
+
+Function: "yn":
+double: 3
+float: 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 000000000000..8a9879ebd635
--- /dev/null
+++ b/sysdeps/arc/nofpu/libm-test-ulps-name
@@ -0,0 +1 @@
+ARC soft-float
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 000000000000..0fb0143ae746
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/c++-types.data
@@ -0,0 +1,67 @@
+blkcnt64_t:x
+blkcnt_t:x
+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:y
+fsfilcnt64_t:y
+fsfilcnt_t:y
+fsid_t:8__fsid_t
+gid_t:j
+id_t:j
+ino64_t:y
+ino_t:y
+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:x
+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:y
+sigset_t:10__sigset_t
+size_t:j
+socklen_t:j
+ssize_t:i
+suseconds_t:x
+time_t:x
+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/ld.abilist b/sysdeps/unix/sysv/linux/arc/ld.abilist
new file mode 100644
index 000000000000..048f17c8486f
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/ld.abilist
@@ -0,0 +1,5 @@
+GLIBC_2.32 __libc_stack_end D 0x4
+GLIBC_2.32 __stack_chk_guard D 0x4
+GLIBC_2.32 __tls_get_addr F
+GLIBC_2.32 _dl_mcount F
+GLIBC_2.32 _r_debug D 0x14
diff --git a/sysdeps/unix/sysv/linux/arc/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/arc/libBrokenLocale.abilist
new file mode 100644
index 000000000000..b0869cec1fb8
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libBrokenLocale.abilist
@@ -0,0 +1 @@
+GLIBC_2.32 __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 000000000000..ba513bd0289d
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libanl.abilist
@@ -0,0 +1,4 @@
+GLIBC_2.32 gai_cancel F
+GLIBC_2.32 gai_error F
+GLIBC_2.32 gai_suspend F
+GLIBC_2.32 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 000000000000..a324d181ec9d
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -0,0 +1,2081 @@
+GLIBC_2.32 _Exit F
+GLIBC_2.32 _IO_2_1_stderr_ D 0x9c
+GLIBC_2.32 _IO_2_1_stdin_ D 0x9c
+GLIBC_2.32 _IO_2_1_stdout_ D 0x9c
+GLIBC_2.32 _IO_adjust_column F
+GLIBC_2.32 _IO_adjust_wcolumn F
+GLIBC_2.32 _IO_default_doallocate F
+GLIBC_2.32 _IO_default_finish F
+GLIBC_2.32 _IO_default_pbackfail F
+GLIBC_2.32 _IO_default_uflow F
+GLIBC_2.32 _IO_default_xsgetn F
+GLIBC_2.32 _IO_default_xsputn F
+GLIBC_2.32 _IO_do_write F
+GLIBC_2.32 _IO_doallocbuf F
+GLIBC_2.32 _IO_fclose F
+GLIBC_2.32 _IO_fdopen F
+GLIBC_2.32 _IO_feof F
+GLIBC_2.32 _IO_ferror F
+GLIBC_2.32 _IO_fflush F
+GLIBC_2.32 _IO_fgetpos F
+GLIBC_2.32 _IO_fgetpos64 F
+GLIBC_2.32 _IO_fgets F
+GLIBC_2.32 _IO_file_attach F
+GLIBC_2.32 _IO_file_close F
+GLIBC_2.32 _IO_file_close_it F
+GLIBC_2.32 _IO_file_doallocate F
+GLIBC_2.32 _IO_file_finish F
+GLIBC_2.32 _IO_file_fopen F
+GLIBC_2.32 _IO_file_init F
+GLIBC_2.32 _IO_file_jumps D 0x54
+GLIBC_2.32 _IO_file_open F
+GLIBC_2.32 _IO_file_overflow F
+GLIBC_2.32 _IO_file_read F
+GLIBC_2.32 _IO_file_seek F
+GLIBC_2.32 _IO_file_seekoff F
+GLIBC_2.32 _IO_file_setbuf F
+GLIBC_2.32 _IO_file_stat F
+GLIBC_2.32 _IO_file_sync F
+GLIBC_2.32 _IO_file_underflow F
+GLIBC_2.32 _IO_file_write F
+GLIBC_2.32 _IO_file_xsputn F
+GLIBC_2.32 _IO_flockfile F
+GLIBC_2.32 _IO_flush_all F
+GLIBC_2.32 _IO_flush_all_linebuffered F
+GLIBC_2.32 _IO_fopen F
+GLIBC_2.32 _IO_fprintf F
+GLIBC_2.32 _IO_fputs F
+GLIBC_2.32 _IO_fread F
+GLIBC_2.32 _IO_free_backup_area F
+GLIBC_2.32 _IO_free_wbackup_area F
+GLIBC_2.32 _IO_fsetpos F
+GLIBC_2.32 _IO_fsetpos64 F
+GLIBC_2.32 _IO_ftell F
+GLIBC_2.32 _IO_ftrylockfile F
+GLIBC_2.32 _IO_funlockfile F
+GLIBC_2.32 _IO_fwrite F
+GLIBC_2.32 _IO_getc F
+GLIBC_2.32 _IO_getline F
+GLIBC_2.32 _IO_getline_info F
+GLIBC_2.32 _IO_gets F
+GLIBC_2.32 _IO_init F
+GLIBC_2.32 _IO_init_marker F
+GLIBC_2.32 _IO_init_wmarker F
+GLIBC_2.32 _IO_iter_begin F
+GLIBC_2.32 _IO_iter_end F
+GLIBC_2.32 _IO_iter_file F
+GLIBC_2.32 _IO_iter_next F
+GLIBC_2.32 _IO_least_wmarker F
+GLIBC_2.32 _IO_link_in F
+GLIBC_2.32 _IO_list_all D 0x4
+GLIBC_2.32 _IO_list_lock F
+GLIBC_2.32 _IO_list_resetlock F
+GLIBC_2.32 _IO_list_unlock F
+GLIBC_2.32 _IO_marker_delta F
+GLIBC_2.32 _IO_marker_difference F
+GLIBC_2.32 _IO_padn F
+GLIBC_2.32 _IO_peekc_locked F
+GLIBC_2.32 _IO_popen F
+GLIBC_2.32 _IO_printf F
+GLIBC_2.32 _IO_proc_close F
+GLIBC_2.32 _IO_proc_open F
+GLIBC_2.32 _IO_putc F
+GLIBC_2.32 _IO_puts F
+GLIBC_2.32 _IO_remove_marker F
+GLIBC_2.32 _IO_seekmark F
+GLIBC_2.32 _IO_seekoff F
+GLIBC_2.32 _IO_seekpos F
+GLIBC_2.32 _IO_seekwmark F
+GLIBC_2.32 _IO_setb F
+GLIBC_2.32 _IO_setbuffer F
+GLIBC_2.32 _IO_setvbuf F
+GLIBC_2.32 _IO_sgetn F
+GLIBC_2.32 _IO_sprintf F
+GLIBC_2.32 _IO_sputbackc F
+GLIBC_2.32 _IO_sputbackwc F
+GLIBC_2.32 _IO_sscanf F
+GLIBC_2.32 _IO_str_init_readonly F
+GLIBC_2.32 _IO_str_init_static F
+GLIBC_2.32 _IO_str_overflow F
+GLIBC_2.32 _IO_str_pbackfail F
+GLIBC_2.32 _IO_str_seekoff F
+GLIBC_2.32 _IO_str_underflow F
+GLIBC_2.32 _IO_sungetc F
+GLIBC_2.32 _IO_sungetwc F
+GLIBC_2.32 _IO_switch_to_get_mode F
+GLIBC_2.32 _IO_switch_to_main_wget_area F
+GLIBC_2.32 _IO_switch_to_wbackup_area F
+GLIBC_2.32 _IO_switch_to_wget_mode F
+GLIBC_2.32 _IO_un_link F
+GLIBC_2.32 _IO_ungetc F
+GLIBC_2.32 _IO_unsave_markers F
+GLIBC_2.32 _IO_unsave_wmarkers F
+GLIBC_2.32 _IO_vfprintf F
+GLIBC_2.32 _IO_vsprintf F
+GLIBC_2.32 _IO_wdefault_doallocate F
+GLIBC_2.32 _IO_wdefault_finish F
+GLIBC_2.32 _IO_wdefault_pbackfail F
+GLIBC_2.32 _IO_wdefault_uflow F
+GLIBC_2.32 _IO_wdefault_xsgetn F
+GLIBC_2.32 _IO_wdefault_xsputn F
+GLIBC_2.32 _IO_wdo_write F
+GLIBC_2.32 _IO_wdoallocbuf F
+GLIBC_2.32 _IO_wfile_jumps D 0x54
+GLIBC_2.32 _IO_wfile_overflow F
+GLIBC_2.32 _IO_wfile_seekoff F
+GLIBC_2.32 _IO_wfile_sync F
+GLIBC_2.32 _IO_wfile_underflow F
+GLIBC_2.32 _IO_wfile_xsputn F
+GLIBC_2.32 _IO_wmarker_delta F
+GLIBC_2.32 _IO_wsetb F
+GLIBC_2.32 ___brk_addr D 0x4
+GLIBC_2.32 __adjtimex F
+GLIBC_2.32 __after_morecore_hook D 0x4
+GLIBC_2.32 __argz_count F
+GLIBC_2.32 __argz_next F
+GLIBC_2.32 __argz_stringify F
+GLIBC_2.32 __asprintf F
+GLIBC_2.32 __asprintf_chk F
+GLIBC_2.32 __assert F
+GLIBC_2.32 __assert_fail F
+GLIBC_2.32 __assert_perror_fail F
+GLIBC_2.32 __backtrace F
+GLIBC_2.32 __backtrace_symbols F
+GLIBC_2.32 __backtrace_symbols_fd F
+GLIBC_2.32 __bsd_getpgrp F
+GLIBC_2.32 __bzero F
+GLIBC_2.32 __check_rhosts_file D 0x4
+GLIBC_2.32 __chk_fail F
+GLIBC_2.32 __clone F
+GLIBC_2.32 __close F
+GLIBC_2.32 __cmsg_nxthdr F
+GLIBC_2.32 __confstr_chk F
+GLIBC_2.32 __connect F
+GLIBC_2.32 __ctype_b_loc F
+GLIBC_2.32 __ctype_get_mb_cur_max F
+GLIBC_2.32 __ctype_tolower_loc F
+GLIBC_2.32 __ctype_toupper_loc F
+GLIBC_2.32 __curbrk D 0x4
+GLIBC_2.32 __cxa_at_quick_exit F
+GLIBC_2.32 __cxa_atexit F
+GLIBC_2.32 __cxa_finalize F
+GLIBC_2.32 __cxa_thread_atexit_impl F
+GLIBC_2.32 __cyg_profile_func_enter F
+GLIBC_2.32 __cyg_profile_func_exit F
+GLIBC_2.32 __daylight D 0x4
+GLIBC_2.32 __dcgettext F
+GLIBC_2.32 __default_morecore F
+GLIBC_2.32 __dgettext F
+GLIBC_2.32 __dprintf_chk F
+GLIBC_2.32 __dup2 F
+GLIBC_2.32 __duplocale F
+GLIBC_2.32 __endmntent F
+GLIBC_2.32 __environ D 0x4
+GLIBC_2.32 __errno_location F
+GLIBC_2.32 __explicit_bzero_chk F
+GLIBC_2.32 __fbufsize F
+GLIBC_2.32 __fcntl F
+GLIBC_2.32 __fdelt_chk F
+GLIBC_2.32 __fdelt_warn F
+GLIBC_2.32 __ffs F
+GLIBC_2.32 __fgets_chk F
+GLIBC_2.32 __fgets_unlocked_chk F
+GLIBC_2.32 __fgetws_chk F
+GLIBC_2.32 __fgetws_unlocked_chk F
+GLIBC_2.32 __finite F
+GLIBC_2.32 __finitef F
+GLIBC_2.32 __flbf F
+GLIBC_2.32 __fork F
+GLIBC_2.32 __fpending F
+GLIBC_2.32 __fprintf_chk F
+GLIBC_2.32 __fpu_control D 0x4
+GLIBC_2.32 __fpurge F
+GLIBC_2.32 __fread_chk F
+GLIBC_2.32 __fread_unlocked_chk F
+GLIBC_2.32 __freadable F
+GLIBC_2.32 __freading F
+GLIBC_2.32 __free_hook D 0x4
+GLIBC_2.32 __freelocale F
+GLIBC_2.32 __fsetlocking F
+GLIBC_2.32 __fwprintf_chk F
+GLIBC_2.32 __fwritable F
+GLIBC_2.32 __fwriting F
+GLIBC_2.32 __fxstat F
+GLIBC_2.32 __fxstat64 F
+GLIBC_2.32 __fxstatat F
+GLIBC_2.32 __fxstatat64 F
+GLIBC_2.32 __getauxval F
+GLIBC_2.32 __getcwd_chk F
+GLIBC_2.32 __getdelim F
+GLIBC_2.32 __getdomainname_chk F
+GLIBC_2.32 __getgroups_chk F
+GLIBC_2.32 __gethostname_chk F
+GLIBC_2.32 __getlogin_r_chk F
+GLIBC_2.32 __getmntent_r F
+GLIBC_2.32 __getpagesize F
+GLIBC_2.32 __getpgid F
+GLIBC_2.32 __getpid F
+GLIBC_2.32 __gets_chk F
+GLIBC_2.32 __gettimeofday F
+GLIBC_2.32 __getwd_chk F
+GLIBC_2.32 __gmtime_r F
+GLIBC_2.32 __h_errno_location F
+GLIBC_2.32 __isalnum_l F
+GLIBC_2.32 __isalpha_l F
+GLIBC_2.32 __isascii_l F
+GLIBC_2.32 __isblank_l F
+GLIBC_2.32 __iscntrl_l F
+GLIBC_2.32 __isctype F
+GLIBC_2.32 __isdigit_l F
+GLIBC_2.32 __isgraph_l F
+GLIBC_2.32 __isinf F
+GLIBC_2.32 __isinff F
+GLIBC_2.32 __islower_l F
+GLIBC_2.32 __isnan F
+GLIBC_2.32 __isnanf F
+GLIBC_2.32 __isoc99_fscanf F
+GLIBC_2.32 __isoc99_fwscanf F
+GLIBC_2.32 __isoc99_scanf F
+GLIBC_2.32 __isoc99_sscanf F
+GLIBC_2.32 __isoc99_swscanf F
+GLIBC_2.32 __isoc99_vfscanf F
+GLIBC_2.32 __isoc99_vfwscanf F
+GLIBC_2.32 __isoc99_vscanf F
+GLIBC_2.32 __isoc99_vsscanf F
+GLIBC_2.32 __isoc99_vswscanf F
+GLIBC_2.32 __isoc99_vwscanf F
+GLIBC_2.32 __isoc99_wscanf F
+GLIBC_2.32 __isprint_l F
+GLIBC_2.32 __ispunct_l F
+GLIBC_2.32 __isspace_l F
+GLIBC_2.32 __isupper_l F
+GLIBC_2.32 __iswalnum_l F
+GLIBC_2.32 __iswalpha_l F
+GLIBC_2.32 __iswblank_l F
+GLIBC_2.32 __iswcntrl_l F
+GLIBC_2.32 __iswctype F
+GLIBC_2.32 __iswctype_l F
+GLIBC_2.32 __iswdigit_l F
+GLIBC_2.32 __iswgraph_l F
+GLIBC_2.32 __iswlower_l F
+GLIBC_2.32 __iswprint_l F
+GLIBC_2.32 __iswpunct_l F
+GLIBC_2.32 __iswspace_l F
+GLIBC_2.32 __iswupper_l F
+GLIBC_2.32 __iswxdigit_l F
+GLIBC_2.32 __isxdigit_l F
+GLIBC_2.32 __ivaliduser F
+GLIBC_2.32 __key_decryptsession_pk_LOCAL D 0x4
+GLIBC_2.32 __key_encryptsession_pk_LOCAL D 0x4
+GLIBC_2.32 __key_gendes_LOCAL D 0x4
+GLIBC_2.32 __libc_allocate_rtsig F
+GLIBC_2.32 __libc_calloc F
+GLIBC_2.32 __libc_current_sigrtmax F
+GLIBC_2.32 __libc_current_sigrtmin F
+GLIBC_2.32 __libc_free F
+GLIBC_2.32 __libc_freeres F
+GLIBC_2.32 __libc_init_first F
+GLIBC_2.32 __libc_mallinfo F
+GLIBC_2.32 __libc_malloc F
+GLIBC_2.32 __libc_mallopt F
+GLIBC_2.32 __libc_memalign F
+GLIBC_2.32 __libc_pvalloc F
+GLIBC_2.32 __libc_realloc F
+GLIBC_2.32 __libc_sa_len F
+GLIBC_2.32 __libc_start_main F
+GLIBC_2.32 __libc_valloc F
+GLIBC_2.32 __longjmp_chk F
+GLIBC_2.32 __lseek F
+GLIBC_2.32 __lxstat F
+GLIBC_2.32 __lxstat64 F
+GLIBC_2.32 __malloc_hook D 0x4
+GLIBC_2.32 __mbrlen F
+GLIBC_2.32 __mbrtowc F
+GLIBC_2.32 __mbsnrtowcs_chk F
+GLIBC_2.32 __mbsrtowcs_chk F
+GLIBC_2.32 __mbstowcs_chk F
+GLIBC_2.32 __memalign_hook D 0x4
+GLIBC_2.32 __memcpy_chk F
+GLIBC_2.32 __memmove_chk F
+GLIBC_2.32 __mempcpy F
+GLIBC_2.32 __mempcpy_chk F
+GLIBC_2.32 __memset_chk F
+GLIBC_2.32 __monstartup F
+GLIBC_2.32 __morecore D 0x4
+GLIBC_2.32 __nanosleep F
+GLIBC_2.32 __newlocale F
+GLIBC_2.32 __nl_langinfo_l F
+GLIBC_2.32 __nss_configure_lookup F
+GLIBC_2.32 __nss_hostname_digits_dots F
+GLIBC_2.32 __obstack_printf_chk F
+GLIBC_2.32 __obstack_vprintf_chk F
+GLIBC_2.32 __open F
+GLIBC_2.32 __open64 F
+GLIBC_2.32 __open64_2 F
+GLIBC_2.32 __open_2 F
+GLIBC_2.32 __openat64_2 F
+GLIBC_2.32 __openat_2 F
+GLIBC_2.32 __overflow F
+GLIBC_2.32 __pipe F
+GLIBC_2.32 __poll F
+GLIBC_2.32 __poll_chk F
+GLIBC_2.32 __posix_getopt F
+GLIBC_2.32 __ppoll_chk F
+GLIBC_2.32 __pread64 F
+GLIBC_2.32 __pread64_chk F
+GLIBC_2.32 __pread_chk F
+GLIBC_2.32 __printf_chk F
+GLIBC_2.32 __printf_fp F
+GLIBC_2.32 __profile_frequency F
+GLIBC_2.32 __progname D 0x4
+GLIBC_2.32 __progname_full D 0x4
+GLIBC_2.32 __ptsname_r_chk F
+GLIBC_2.32 __pwrite64 F
+GLIBC_2.32 __rawmemchr F
+GLIBC_2.32 __rcmd_errstr D 0x4
+GLIBC_2.32 __read F
+GLIBC_2.32 __read_chk F
+GLIBC_2.32 __readlink_chk F
+GLIBC_2.32 __readlinkat_chk F
+GLIBC_2.32 __realloc_hook D 0x4
+GLIBC_2.32 __realpath_chk F
+GLIBC_2.32 __recv_chk F
+GLIBC_2.32 __recvfrom_chk F
+GLIBC_2.32 __register_atfork F
+GLIBC_2.32 __res_init F
+GLIBC_2.32 __res_nclose F
+GLIBC_2.32 __res_ninit F
+GLIBC_2.32 __res_randomid F
+GLIBC_2.32 __res_state F
+GLIBC_2.32 __rpc_thread_createerr F
+GLIBC_2.32 __rpc_thread_svc_fdset F
+GLIBC_2.32 __rpc_thread_svc_max_pollfd F
+GLIBC_2.32 __rpc_thread_svc_pollfd F
+GLIBC_2.32 __sbrk F
+GLIBC_2.32 __sched_cpualloc F
+GLIBC_2.32 __sched_cpucount F
+GLIBC_2.32 __sched_cpufree F
+GLIBC_2.32 __sched_get_priority_max F
+GLIBC_2.32 __sched_get_priority_min F
+GLIBC_2.32 __sched_getparam F
+GLIBC_2.32 __sched_getscheduler F
+GLIBC_2.32 __sched_setscheduler F
+GLIBC_2.32 __sched_yield F
+GLIBC_2.32 __select F
+GLIBC_2.32 __send F
+GLIBC_2.32 __setmntent F
+GLIBC_2.32 __setpgid F
+GLIBC_2.32 __sigaction F
+GLIBC_2.32 __signbit F
+GLIBC_2.32 __signbitf F
+GLIBC_2.32 __sigpause F
+GLIBC_2.32 __sigsetjmp F
+GLIBC_2.32 __sigsuspend F
+GLIBC_2.32 __snprintf_chk F
+GLIBC_2.32 __sprintf_chk F
+GLIBC_2.32 __stack_chk_fail F
+GLIBC_2.32 __statfs F
+GLIBC_2.32 __stpcpy F
+GLIBC_2.32 __stpcpy_chk F
+GLIBC_2.32 __stpncpy F
+GLIBC_2.32 __stpncpy_chk F
+GLIBC_2.32 __strcasecmp F
+GLIBC_2.32 __strcasecmp_l F
+GLIBC_2.32 __strcasestr F
+GLIBC_2.32 __strcat_chk F
+GLIBC_2.32 __strcoll_l F
+GLIBC_2.32 __strcpy_chk F
+GLIBC_2.32 __strdup F
+GLIBC_2.32 __strerror_r F
+GLIBC_2.32 __strfmon_l F
+GLIBC_2.32 __strftime_l F
+GLIBC_2.32 __strncasecmp_l F
+GLIBC_2.32 __strncat_chk F
+GLIBC_2.32 __strncpy_chk F
+GLIBC_2.32 __strndup F
+GLIBC_2.32 __strsep_g F
+GLIBC_2.32 __strtod_internal F
+GLIBC_2.32 __strtod_l F
+GLIBC_2.32 __strtof_internal F
+GLIBC_2.32 __strtof_l F
+GLIBC_2.32 __strtok_r F
+GLIBC_2.32 __strtol_internal F
+GLIBC_2.32 __strtol_l F
+GLIBC_2.32 __strtold_internal F
+GLIBC_2.32 __strtold_l F
+GLIBC_2.32 __strtoll_internal F
+GLIBC_2.32 __strtoll_l F
+GLIBC_2.32 __strtoul_internal F
+GLIBC_2.32 __strtoul_l F
+GLIBC_2.32 __strtoull_internal F
+GLIBC_2.32 __strtoull_l F
+GLIBC_2.32 __strverscmp F
+GLIBC_2.32 __strxfrm_l F
+GLIBC_2.32 __swprintf_chk F
+GLIBC_2.32 __sysconf F
+GLIBC_2.32 __syslog_chk F
+GLIBC_2.32 __sysv_signal F
+GLIBC_2.32 __timezone D 0x4
+GLIBC_2.32 __toascii_l F
+GLIBC_2.32 __tolower_l F
+GLIBC_2.32 __toupper_l F
+GLIBC_2.32 __towctrans F
+GLIBC_2.32 __towctrans_l F
+GLIBC_2.32 __towlower_l F
+GLIBC_2.32 __towupper_l F
+GLIBC_2.32 __ttyname_r_chk F
+GLIBC_2.32 __tzname D 0x8
+GLIBC_2.32 __uflow F
+GLIBC_2.32 __underflow F
+GLIBC_2.32 __uselocale F
+GLIBC_2.32 __vasprintf_chk F
+GLIBC_2.32 __vdprintf_chk F
+GLIBC_2.32 __vfork F
+GLIBC_2.32 __vfprintf_chk F
+GLIBC_2.32 __vfscanf F
+GLIBC_2.32 __vfwprintf_chk F
+GLIBC_2.32 __vprintf_chk F
+GLIBC_2.32 __vsnprintf F
+GLIBC_2.32 __vsnprintf_chk F
+GLIBC_2.32 __vsprintf_chk F
+GLIBC_2.32 __vsscanf F
+GLIBC_2.32 __vswprintf_chk F
+GLIBC_2.32 __vsyslog_chk F
+GLIBC_2.32 __vwprintf_chk F
+GLIBC_2.32 __wait F
+GLIBC_2.32 __waitpid F
+GLIBC_2.32 __wcpcpy_chk F
+GLIBC_2.32 __wcpncpy_chk F
+GLIBC_2.32 __wcrtomb_chk F
+GLIBC_2.32 __wcscasecmp_l F
+GLIBC_2.32 __wcscat_chk F
+GLIBC_2.32 __wcscoll_l F
+GLIBC_2.32 __wcscpy_chk F
+GLIBC_2.32 __wcsftime_l F
+GLIBC_2.32 __wcsncasecmp_l F
+GLIBC_2.32 __wcsncat_chk F
+GLIBC_2.32 __wcsncpy_chk F
+GLIBC_2.32 __wcsnrtombs_chk F
+GLIBC_2.32 __wcsrtombs_chk F
+GLIBC_2.32 __wcstod_internal F
+GLIBC_2.32 __wcstod_l F
+GLIBC_2.32 __wcstof_internal F
+GLIBC_2.32 __wcstof_l F
+GLIBC_2.32 __wcstol_internal F
+GLIBC_2.32 __wcstol_l F
+GLIBC_2.32 __wcstold_internal F
+GLIBC_2.32 __wcstold_l F
+GLIBC_2.32 __wcstoll_internal F
+GLIBC_2.32 __wcstoll_l F
+GLIBC_2.32 __wcstombs_chk F
+GLIBC_2.32 __wcstoul_internal F
+GLIBC_2.32 __wcstoul_l F
+GLIBC_2.32 __wcstoull_internal F
+GLIBC_2.32 __wcstoull_l F
+GLIBC_2.32 __wcsxfrm_l F
+GLIBC_2.32 __wctomb_chk F
+GLIBC_2.32 __wctrans_l F
+GLIBC_2.32 __wctype_l F
+GLIBC_2.32 __wmemcpy_chk F
+GLIBC_2.32 __wmemmove_chk F
+GLIBC_2.32 __wmempcpy_chk F
+GLIBC_2.32 __wmemset_chk F
+GLIBC_2.32 __woverflow F
+GLIBC_2.32 __wprintf_chk F
+GLIBC_2.32 __write F
+GLIBC_2.32 __wuflow F
+GLIBC_2.32 __wunderflow F
+GLIBC_2.32 __xmknod F
+GLIBC_2.32 __xmknodat F
+GLIBC_2.32 __xpg_basename F
+GLIBC_2.32 __xpg_sigpause F
+GLIBC_2.32 __xpg_strerror_r F
+GLIBC_2.32 __xstat F
+GLIBC_2.32 __xstat64 F
+GLIBC_2.32 _authenticate F
+GLIBC_2.32 _dl_mcount_wrapper F
+GLIBC_2.32 _dl_mcount_wrapper_check F
+GLIBC_2.32 _environ D 0x4
+GLIBC_2.32 _exit F
+GLIBC_2.32 _flush_cache F
+GLIBC_2.32 _flushlbf F
+GLIBC_2.32 _libc_intl_domainname D 0x5
+GLIBC_2.32 _longjmp F
+GLIBC_2.32 _mcleanup F
+GLIBC_2.32 _mcount F
+GLIBC_2.32 _nl_default_dirname D 0x12
+GLIBC_2.32 _nl_domain_bindings D 0x4
+GLIBC_2.32 _nl_msg_cat_cntr D 0x4
+GLIBC_2.32 _null_auth D 0xc
+GLIBC_2.32 _obstack_allocated_p F
+GLIBC_2.32 _obstack_begin F
+GLIBC_2.32 _obstack_begin_1 F
+GLIBC_2.32 _obstack_free F
+GLIBC_2.32 _obstack_memory_used F
+GLIBC_2.32 _obstack_newchunk F
+GLIBC_2.32 _res D 0x200
+GLIBC_2.32 _res_hconf D 0x30
+GLIBC_2.32 _rpc_dtablesize F
+GLIBC_2.32 _seterr_reply F
+GLIBC_2.32 _setjmp F
+GLIBC_2.32 _sys_errlist D 0x21c
+GLIBC_2.32 _sys_nerr D 0x4
+GLIBC_2.32 _sys_siglist D 0x104
+GLIBC_2.32 _tolower F
+GLIBC_2.32 _toupper F
+GLIBC_2.32 a64l F
+GLIBC_2.32 abort F
+GLIBC_2.32 abs F
+GLIBC_2.32 accept F
+GLIBC_2.32 accept4 F
+GLIBC_2.32 access F
+GLIBC_2.32 acct F
+GLIBC_2.32 addmntent F
+GLIBC_2.32 addseverity F
+GLIBC_2.32 adjtime F
+GLIBC_2.32 adjtimex F
+GLIBC_2.32 alarm F
+GLIBC_2.32 aligned_alloc F
+GLIBC_2.32 alphasort F
+GLIBC_2.32 alphasort64 F
+GLIBC_2.32 argp_err_exit_status D 0x4
+GLIBC_2.32 argp_error F
+GLIBC_2.32 argp_failure F
+GLIBC_2.32 argp_help F
+GLIBC_2.32 argp_parse F
+GLIBC_2.32 argp_program_bug_address D 0x4
+GLIBC_2.32 argp_program_version D 0x4
+GLIBC_2.32 argp_program_version_hook D 0x4
+GLIBC_2.32 argp_state_help F
+GLIBC_2.32 argp_usage F
+GLIBC_2.32 argz_add F
+GLIBC_2.32 argz_add_sep F
+GLIBC_2.32 argz_append F
+GLIBC_2.32 argz_count F
+GLIBC_2.32 argz_create F
+GLIBC_2.32 argz_create_sep F
+GLIBC_2.32 argz_delete F
+GLIBC_2.32 argz_extract F
+GLIBC_2.32 argz_insert F
+GLIBC_2.32 argz_next F
+GLIBC_2.32 argz_replace F
+GLIBC_2.32 argz_stringify F
+GLIBC_2.32 asctime F
+GLIBC_2.32 asctime_r F
+GLIBC_2.32 asprintf F
+GLIBC_2.32 atof F
+GLIBC_2.32 atoi F
+GLIBC_2.32 atol F
+GLIBC_2.32 atoll F
+GLIBC_2.32 authdes_create F
+GLIBC_2.32 authdes_getucred F
+GLIBC_2.32 authdes_pk_create F
+GLIBC_2.32 authnone_create F
+GLIBC_2.32 authunix_create F
+GLIBC_2.32 authunix_create_default F
+GLIBC_2.32 backtrace F
+GLIBC_2.32 backtrace_symbols F
+GLIBC_2.32 backtrace_symbols_fd F
+GLIBC_2.32 basename F
+GLIBC_2.32 bcmp F
+GLIBC_2.32 bcopy F
+GLIBC_2.32 bind F
+GLIBC_2.32 bind_textdomain_codeset F
+GLIBC_2.32 bindresvport F
+GLIBC_2.32 bindtextdomain F
+GLIBC_2.32 brk F
+GLIBC_2.32 bsd_signal F
+GLIBC_2.32 bsearch F
+GLIBC_2.32 btowc F
+GLIBC_2.32 bzero F
+GLIBC_2.32 c16rtomb F
+GLIBC_2.32 c32rtomb F
+GLIBC_2.32 cacheflush F
+GLIBC_2.32 calloc F
+GLIBC_2.32 callrpc F
+GLIBC_2.32 canonicalize_file_name F
+GLIBC_2.32 capget F
+GLIBC_2.32 capset F
+GLIBC_2.32 catclose F
+GLIBC_2.32 catgets F
+GLIBC_2.32 catopen F
+GLIBC_2.32 cbc_crypt F
+GLIBC_2.32 cfgetispeed F
+GLIBC_2.32 cfgetospeed F
+GLIBC_2.32 cfmakeraw F
+GLIBC_2.32 cfsetispeed F
+GLIBC_2.32 cfsetospeed F
+GLIBC_2.32 cfsetspeed F
+GLIBC_2.32 chdir F
+GLIBC_2.32 chflags F
+GLIBC_2.32 chmod F
+GLIBC_2.32 chown F
+GLIBC_2.32 chroot F
+GLIBC_2.32 clearenv F
+GLIBC_2.32 clearerr F
+GLIBC_2.32 clearerr_unlocked F
+GLIBC_2.32 clnt_broadcast F
+GLIBC_2.32 clnt_create F
+GLIBC_2.32 clnt_pcreateerror F
+GLIBC_2.32 clnt_perrno F
+GLIBC_2.32 clnt_perror F
+GLIBC_2.32 clnt_spcreateerror F
+GLIBC_2.32 clnt_sperrno F
+GLIBC_2.32 clnt_sperror F
+GLIBC_2.32 clntraw_create F
+GLIBC_2.32 clnttcp_create F
+GLIBC_2.32 clntudp_bufcreate F
+GLIBC_2.32 clntudp_create F
+GLIBC_2.32 clntunix_create F
+GLIBC_2.32 clock F
+GLIBC_2.32 clock_adjtime F
+GLIBC_2.32 clock_getcpuclockid F
+GLIBC_2.32 clock_getres F
+GLIBC_2.32 clock_gettime F
+GLIBC_2.32 clock_nanosleep F
+GLIBC_2.32 clock_settime F
+GLIBC_2.32 clone F
+GLIBC_2.32 close F
+GLIBC_2.32 closedir F
+GLIBC_2.32 closelog F
+GLIBC_2.32 confstr F
+GLIBC_2.32 connect F
+GLIBC_2.32 copy_file_range F
+GLIBC_2.32 copysign F
+GLIBC_2.32 copysignf F
+GLIBC_2.32 copysignl F
+GLIBC_2.32 creat F
+GLIBC_2.32 creat64 F
+GLIBC_2.32 ctermid F
+GLIBC_2.32 ctime F
+GLIBC_2.32 ctime_r F
+GLIBC_2.32 cuserid F
+GLIBC_2.32 daemon F
+GLIBC_2.32 daylight D 0x4
+GLIBC_2.32 dcgettext F
+GLIBC_2.32 dcngettext F
+GLIBC_2.32 delete_module F
+GLIBC_2.32 des_setparity F
+GLIBC_2.32 dgettext F
+GLIBC_2.32 difftime F
+GLIBC_2.32 dirfd F
+GLIBC_2.32 dirname F
+GLIBC_2.32 div F
+GLIBC_2.32 dl_iterate_phdr F
+GLIBC_2.32 dngettext F
+GLIBC_2.32 dprintf F
+GLIBC_2.32 drand48 F
+GLIBC_2.32 drand48_r F
+GLIBC_2.32 dup F
+GLIBC_2.32 dup2 F
+GLIBC_2.32 dup3 F
+GLIBC_2.32 duplocale F
+GLIBC_2.32 dysize F
+GLIBC_2.32 eaccess F
+GLIBC_2.32 ecb_crypt F
+GLIBC_2.32 ecvt F
+GLIBC_2.32 ecvt_r F
+GLIBC_2.32 endaliasent F
+GLIBC_2.32 endfsent F
+GLIBC_2.32 endgrent F
+GLIBC_2.32 endhostent F
+GLIBC_2.32 endmntent F
+GLIBC_2.32 endnetent F
+GLIBC_2.32 endnetgrent F
+GLIBC_2.32 endprotoent F
+GLIBC_2.32 endpwent F
+GLIBC_2.32 endrpcent F
+GLIBC_2.32 endservent F
+GLIBC_2.32 endsgent F
+GLIBC_2.32 endspent F
+GLIBC_2.32 endttyent F
+GLIBC_2.32 endusershell F
+GLIBC_2.32 endutent F
+GLIBC_2.32 endutxent F
+GLIBC_2.32 environ D 0x4
+GLIBC_2.32 envz_add F
+GLIBC_2.32 envz_entry F
+GLIBC_2.32 envz_get F
+GLIBC_2.32 envz_merge F
+GLIBC_2.32 envz_remove F
+GLIBC_2.32 envz_strip F
+GLIBC_2.32 epoll_create F
+GLIBC_2.32 epoll_create1 F
+GLIBC_2.32 epoll_ctl F
+GLIBC_2.32 epoll_pwait F
+GLIBC_2.32 epoll_wait F
+GLIBC_2.32 erand48 F
+GLIBC_2.32 erand48_r F
+GLIBC_2.32 err F
+GLIBC_2.32 error F
+GLIBC_2.32 error_at_line F
+GLIBC_2.32 error_message_count D 0x4
+GLIBC_2.32 error_one_per_line D 0x4
+GLIBC_2.32 error_print_progname D 0x4
+GLIBC_2.32 errx F
+GLIBC_2.32 ether_aton F
+GLIBC_2.32 ether_aton_r F
+GLIBC_2.32 ether_hostton F
+GLIBC_2.32 ether_line F
+GLIBC_2.32 ether_ntoa F
+GLIBC_2.32 ether_ntoa_r F
+GLIBC_2.32 ether_ntohost F
+GLIBC_2.32 euidaccess F
+GLIBC_2.32 eventfd F
+GLIBC_2.32 eventfd_read F
+GLIBC_2.32 eventfd_write F
+GLIBC_2.32 execl F
+GLIBC_2.32 execle F
+GLIBC_2.32 execlp F
+GLIBC_2.32 execv F
+GLIBC_2.32 execve F
+GLIBC_2.32 execvp F
+GLIBC_2.32 execvpe F
+GLIBC_2.32 exit F
+GLIBC_2.32 explicit_bzero F
+GLIBC_2.32 faccessat F
+GLIBC_2.32 fallocate F
+GLIBC_2.32 fallocate64 F
+GLIBC_2.32 fanotify_init F
+GLIBC_2.32 fanotify_mark F
+GLIBC_2.32 fchdir F
+GLIBC_2.32 fchflags F
+GLIBC_2.32 fchmod F
+GLIBC_2.32 fchmodat F
+GLIBC_2.32 fchown F
+GLIBC_2.32 fchownat F
+GLIBC_2.32 fclose F
+GLIBC_2.32 fcloseall F
+GLIBC_2.32 fcntl F
+GLIBC_2.32 fcntl64 F
+GLIBC_2.32 fcvt F
+GLIBC_2.32 fcvt_r F
+GLIBC_2.32 fdatasync F
+GLIBC_2.32 fdopen F
+GLIBC_2.32 fdopendir F
+GLIBC_2.32 feof F
+GLIBC_2.32 feof_unlocked F
+GLIBC_2.32 ferror F
+GLIBC_2.32 ferror_unlocked F
+GLIBC_2.32 fexecve F
+GLIBC_2.32 fflush F
+GLIBC_2.32 fflush_unlocked F
+GLIBC_2.32 ffs F
+GLIBC_2.32 ffsl F
+GLIBC_2.32 ffsll F
+GLIBC_2.32 fgetc F
+GLIBC_2.32 fgetc_unlocked F
+GLIBC_2.32 fgetgrent F
+GLIBC_2.32 fgetgrent_r F
+GLIBC_2.32 fgetpos F
+GLIBC_2.32 fgetpos64 F
+GLIBC_2.32 fgetpwent F
+GLIBC_2.32 fgetpwent_r F
+GLIBC_2.32 fgets F
+GLIBC_2.32 fgets_unlocked F
+GLIBC_2.32 fgetsgent F
+GLIBC_2.32 fgetsgent_r F
+GLIBC_2.32 fgetspent F
+GLIBC_2.32 fgetspent_r F
+GLIBC_2.32 fgetwc F
+GLIBC_2.32 fgetwc_unlocked F
+GLIBC_2.32 fgetws F
+GLIBC_2.32 fgetws_unlocked F
+GLIBC_2.32 fgetxattr F
+GLIBC_2.32 fileno F
+GLIBC_2.32 fileno_unlocked F
+GLIBC_2.32 finite F
+GLIBC_2.32 finitef F
+GLIBC_2.32 finitel F
+GLIBC_2.32 flistxattr F
+GLIBC_2.32 flock F
+GLIBC_2.32 flockfile F
+GLIBC_2.32 fmemopen F
+GLIBC_2.32 fmtmsg F
+GLIBC_2.32 fnmatch F
+GLIBC_2.32 fopen F
+GLIBC_2.32 fopen64 F
+GLIBC_2.32 fopencookie F
+GLIBC_2.32 fork F
+GLIBC_2.32 fpathconf F
+GLIBC_2.32 fprintf F
+GLIBC_2.32 fputc F
+GLIBC_2.32 fputc_unlocked F
+GLIBC_2.32 fputs F
+GLIBC_2.32 fputs_unlocked F
+GLIBC_2.32 fputwc F
+GLIBC_2.32 fputwc_unlocked F
+GLIBC_2.32 fputws F
+GLIBC_2.32 fputws_unlocked F
+GLIBC_2.32 fread F
+GLIBC_2.32 fread_unlocked F
+GLIBC_2.32 free F
+GLIBC_2.32 freeaddrinfo F
+GLIBC_2.32 freeifaddrs F
+GLIBC_2.32 freelocale F
+GLIBC_2.32 fremovexattr F
+GLIBC_2.32 freopen F
+GLIBC_2.32 freopen64 F
+GLIBC_2.32 frexp F
+GLIBC_2.32 frexpf F
+GLIBC_2.32 frexpl F
+GLIBC_2.32 fscanf F
+GLIBC_2.32 fseek F
+GLIBC_2.32 fseeko F
+GLIBC_2.32 fseeko64 F
+GLIBC_2.32 fsetpos F
+GLIBC_2.32 fsetpos64 F
+GLIBC_2.32 fsetxattr F
+GLIBC_2.32 fstatfs F
+GLIBC_2.32 fstatfs64 F
+GLIBC_2.32 fstatvfs F
+GLIBC_2.32 fstatvfs64 F
+GLIBC_2.32 fsync F
+GLIBC_2.32 ftell F
+GLIBC_2.32 ftello F
+GLIBC_2.32 ftello64 F
+GLIBC_2.32 ftime F
+GLIBC_2.32 ftok F
+GLIBC_2.32 ftruncate F
+GLIBC_2.32 ftruncate64 F
+GLIBC_2.32 ftrylockfile F
+GLIBC_2.32 fts64_children F
+GLIBC_2.32 fts64_close F
+GLIBC_2.32 fts64_open F
+GLIBC_2.32 fts64_read F
+GLIBC_2.32 fts64_set F
+GLIBC_2.32 fts_children F
+GLIBC_2.32 fts_close F
+GLIBC_2.32 fts_open F
+GLIBC_2.32 fts_read F
+GLIBC_2.32 fts_set F
+GLIBC_2.32 ftw F
+GLIBC_2.32 ftw64 F
+GLIBC_2.32 funlockfile F
+GLIBC_2.32 futimens F
+GLIBC_2.32 futimes F
+GLIBC_2.32 futimesat F
+GLIBC_2.32 fwide F
+GLIBC_2.32 fwprintf F
+GLIBC_2.32 fwrite F
+GLIBC_2.32 fwrite_unlocked F
+GLIBC_2.32 fwscanf F
+GLIBC_2.32 gai_strerror F
+GLIBC_2.32 gcvt F
+GLIBC_2.32 get_avphys_pages F
+GLIBC_2.32 get_current_dir_name F
+GLIBC_2.32 get_myaddress F
+GLIBC_2.32 get_nprocs F
+GLIBC_2.32 get_nprocs_conf F
+GLIBC_2.32 get_phys_pages F
+GLIBC_2.32 getaddrinfo F
+GLIBC_2.32 getaliasbyname F
+GLIBC_2.32 getaliasbyname_r F
+GLIBC_2.32 getaliasent F
+GLIBC_2.32 getaliasent_r F
+GLIBC_2.32 getauxval F
+GLIBC_2.32 getc F
+GLIBC_2.32 getc_unlocked F
+GLIBC_2.32 getchar F
+GLIBC_2.32 getchar_unlocked F
+GLIBC_2.32 getcontext F
+GLIBC_2.32 getcpu F
+GLIBC_2.32 getcwd F
+GLIBC_2.32 getdate F
+GLIBC_2.32 getdate_err D 0x4
+GLIBC_2.32 getdate_r F
+GLIBC_2.32 getdelim F
+GLIBC_2.32 getdents64 F
+GLIBC_2.32 getdirentries F
+GLIBC_2.32 getdirentries64 F
+GLIBC_2.32 getdomainname F
+GLIBC_2.32 getdtablesize F
+GLIBC_2.32 getegid F
+GLIBC_2.32 getentropy F
+GLIBC_2.32 getenv F
+GLIBC_2.32 geteuid F
+GLIBC_2.32 getfsent F
+GLIBC_2.32 getfsfile F
+GLIBC_2.32 getfsspec F
+GLIBC_2.32 getgid F
+GLIBC_2.32 getgrent F
+GLIBC_2.32 getgrent_r F
+GLIBC_2.32 getgrgid F
+GLIBC_2.32 getgrgid_r F
+GLIBC_2.32 getgrnam F
+GLIBC_2.32 getgrnam_r F
+GLIBC_2.32 getgrouplist F
+GLIBC_2.32 getgroups F
+GLIBC_2.32 gethostbyaddr F
+GLIBC_2.32 gethostbyaddr_r F
+GLIBC_2.32 gethostbyname F
+GLIBC_2.32 gethostbyname2 F
+GLIBC_2.32 gethostbyname2_r F
+GLIBC_2.32 gethostbyname_r F
+GLIBC_2.32 gethostent F
+GLIBC_2.32 gethostent_r F
+GLIBC_2.32 gethostid F
+GLIBC_2.32 gethostname F
+GLIBC_2.32 getifaddrs F
+GLIBC_2.32 getipv4sourcefilter F
+GLIBC_2.32 getitimer F
+GLIBC_2.32 getline F
+GLIBC_2.32 getloadavg F
+GLIBC_2.32 getlogin F
+GLIBC_2.32 getlogin_r F
+GLIBC_2.32 getmntent F
+GLIBC_2.32 getmntent_r F
+GLIBC_2.32 getnameinfo F
+GLIBC_2.32 getnetbyaddr F
+GLIBC_2.32 getnetbyaddr_r F
+GLIBC_2.32 getnetbyname F
+GLIBC_2.32 getnetbyname_r F
+GLIBC_2.32 getnetent F
+GLIBC_2.32 getnetent_r F
+GLIBC_2.32 getnetgrent F
+GLIBC_2.32 getnetgrent_r F
+GLIBC_2.32 getnetname F
+GLIBC_2.32 getopt F
+GLIBC_2.32 getopt_long F
+GLIBC_2.32 getopt_long_only F
+GLIBC_2.32 getpagesize F
+GLIBC_2.32 getpass F
+GLIBC_2.32 getpeername F
+GLIBC_2.32 getpgid F
+GLIBC_2.32 getpgrp F
+GLIBC_2.32 getpid F
+GLIBC_2.32 getppid F
+GLIBC_2.32 getpriority F
+GLIBC_2.32 getprotobyname F
+GLIBC_2.32 getprotobyname_r F
+GLIBC_2.32 getprotobynumber F
+GLIBC_2.32 getprotobynumber_r F
+GLIBC_2.32 getprotoent F
+GLIBC_2.32 getprotoent_r F
+GLIBC_2.32 getpt F
+GLIBC_2.32 getpublickey F
+GLIBC_2.32 getpw F
+GLIBC_2.32 getpwent F
+GLIBC_2.32 getpwent_r F
+GLIBC_2.32 getpwnam F
+GLIBC_2.32 getpwnam_r F
+GLIBC_2.32 getpwuid F
+GLIBC_2.32 getpwuid_r F
+GLIBC_2.32 getrandom F
+GLIBC_2.32 getresgid F
+GLIBC_2.32 getresuid F
+GLIBC_2.32 getrlimit F
+GLIBC_2.32 getrlimit64 F
+GLIBC_2.32 getrpcbyname F
+GLIBC_2.32 getrpcbyname_r F
+GLIBC_2.32 getrpcbynumber F
+GLIBC_2.32 getrpcbynumber_r F
+GLIBC_2.32 getrpcent F
+GLIBC_2.32 getrpcent_r F
+GLIBC_2.32 getrpcport F
+GLIBC_2.32 getrusage F
+GLIBC_2.32 gets F
+GLIBC_2.32 getsecretkey F
+GLIBC_2.32 getservbyname F
+GLIBC_2.32 getservbyname_r F
+GLIBC_2.32 getservbyport F
+GLIBC_2.32 getservbyport_r F
+GLIBC_2.32 getservent F
+GLIBC_2.32 getservent_r F
+GLIBC_2.32 getsgent F
+GLIBC_2.32 getsgent_r F
+GLIBC_2.32 getsgnam F
+GLIBC_2.32 getsgnam_r F
+GLIBC_2.32 getsid F
+GLIBC_2.32 getsockname F
+GLIBC_2.32 getsockopt F
+GLIBC_2.32 getsourcefilter F
+GLIBC_2.32 getspent F
+GLIBC_2.32 getspent_r F
+GLIBC_2.32 getspnam F
+GLIBC_2.32 getspnam_r F
+GLIBC_2.32 getsubopt F
+GLIBC_2.32 gettext F
+GLIBC_2.32 gettid F
+GLIBC_2.32 gettimeofday F
+GLIBC_2.32 getttyent F
+GLIBC_2.32 getttynam F
+GLIBC_2.32 getuid F
+GLIBC_2.32 getusershell F
+GLIBC_2.32 getutent F
+GLIBC_2.32 getutent_r F
+GLIBC_2.32 getutid F
+GLIBC_2.32 getutid_r F
+GLIBC_2.32 getutline F
+GLIBC_2.32 getutline_r F
+GLIBC_2.32 getutmp F
+GLIBC_2.32 getutmpx F
+GLIBC_2.32 getutxent F
+GLIBC_2.32 getutxid F
+GLIBC_2.32 getutxline F
+GLIBC_2.32 getw F
+GLIBC_2.32 getwc F
+GLIBC_2.32 getwc_unlocked F
+GLIBC_2.32 getwchar F
+GLIBC_2.32 getwchar_unlocked F
+GLIBC_2.32 getwd F
+GLIBC_2.32 getxattr F
+GLIBC_2.32 glob F
+GLIBC_2.32 glob64 F
+GLIBC_2.32 glob_pattern_p F
+GLIBC_2.32 globfree F
+GLIBC_2.32 globfree64 F
+GLIBC_2.32 gmtime F
+GLIBC_2.32 gmtime_r F
+GLIBC_2.32 gnu_dev_major F
+GLIBC_2.32 gnu_dev_makedev F
+GLIBC_2.32 gnu_dev_minor F
+GLIBC_2.32 gnu_get_libc_release F
+GLIBC_2.32 gnu_get_libc_version F
+GLIBC_2.32 grantpt F
+GLIBC_2.32 group_member F
+GLIBC_2.32 gsignal F
+GLIBC_2.32 gtty F
+GLIBC_2.32 h_errlist D 0x14
+GLIBC_2.32 h_nerr D 0x4
+GLIBC_2.32 hasmntopt F
+GLIBC_2.32 hcreate F
+GLIBC_2.32 hcreate_r F
+GLIBC_2.32 hdestroy F
+GLIBC_2.32 hdestroy_r F
+GLIBC_2.32 herror F
+GLIBC_2.32 host2netname F
+GLIBC_2.32 hsearch F
+GLIBC_2.32 hsearch_r F
+GLIBC_2.32 hstrerror F
+GLIBC_2.32 htonl F
+GLIBC_2.32 htons F
+GLIBC_2.32 iconv F
+GLIBC_2.32 iconv_close F
+GLIBC_2.32 iconv_open F
+GLIBC_2.32 if_freenameindex F
+GLIBC_2.32 if_indextoname F
+GLIBC_2.32 if_nameindex F
+GLIBC_2.32 if_nametoindex F
+GLIBC_2.32 imaxabs F
+GLIBC_2.32 imaxdiv F
+GLIBC_2.32 in6addr_any D 0x10
+GLIBC_2.32 in6addr_loopback D 0x10
+GLIBC_2.32 index F
+GLIBC_2.32 inet6_opt_append F
+GLIBC_2.32 inet6_opt_find F
+GLIBC_2.32 inet6_opt_finish F
+GLIBC_2.32 inet6_opt_get_val F
+GLIBC_2.32 inet6_opt_init F
+GLIBC_2.32 inet6_opt_next F
+GLIBC_2.32 inet6_opt_set_val F
+GLIBC_2.32 inet6_option_alloc F
+GLIBC_2.32 inet6_option_append F
+GLIBC_2.32 inet6_option_find F
+GLIBC_2.32 inet6_option_init F
+GLIBC_2.32 inet6_option_next F
+GLIBC_2.32 inet6_option_space F
+GLIBC_2.32 inet6_rth_add F
+GLIBC_2.32 inet6_rth_getaddr F
+GLIBC_2.32 inet6_rth_init F
+GLIBC_2.32 inet6_rth_reverse F
+GLIBC_2.32 inet6_rth_segments F
+GLIBC_2.32 inet6_rth_space F
+GLIBC_2.32 inet_addr F
+GLIBC_2.32 inet_aton F
+GLIBC_2.32 inet_lnaof F
+GLIBC_2.32 inet_makeaddr F
+GLIBC_2.32 inet_netof F
+GLIBC_2.32 inet_network F
+GLIBC_2.32 inet_nsap_addr F
+GLIBC_2.32 inet_nsap_ntoa F
+GLIBC_2.32 inet_ntoa F
+GLIBC_2.32 inet_ntop F
+GLIBC_2.32 inet_pton F
+GLIBC_2.32 init_module F
+GLIBC_2.32 initgroups F
+GLIBC_2.32 initstate F
+GLIBC_2.32 initstate_r F
+GLIBC_2.32 innetgr F
+GLIBC_2.32 inotify_add_watch F
+GLIBC_2.32 inotify_init F
+GLIBC_2.32 inotify_init1 F
+GLIBC_2.32 inotify_rm_watch F
+GLIBC_2.32 insque F
+GLIBC_2.32 ioctl F
+GLIBC_2.32 iruserok F
+GLIBC_2.32 iruserok_af F
+GLIBC_2.32 isalnum F
+GLIBC_2.32 isalnum_l F
+GLIBC_2.32 isalpha F
+GLIBC_2.32 isalpha_l F
+GLIBC_2.32 isascii F
+GLIBC_2.32 isatty F
+GLIBC_2.32 isblank F
+GLIBC_2.32 isblank_l F
+GLIBC_2.32 iscntrl F
+GLIBC_2.32 iscntrl_l F
+GLIBC_2.32 isctype F
+GLIBC_2.32 isdigit F
+GLIBC_2.32 isdigit_l F
+GLIBC_2.32 isfdtype F
+GLIBC_2.32 isgraph F
+GLIBC_2.32 isgraph_l F
+GLIBC_2.32 isinf F
+GLIBC_2.32 isinff F
+GLIBC_2.32 isinfl F
+GLIBC_2.32 islower F
+GLIBC_2.32 islower_l F
+GLIBC_2.32 isnan F
+GLIBC_2.32 isnanf F
+GLIBC_2.32 isnanl F
+GLIBC_2.32 isprint F
+GLIBC_2.32 isprint_l F
+GLIBC_2.32 ispunct F
+GLIBC_2.32 ispunct_l F
+GLIBC_2.32 isspace F
+GLIBC_2.32 isspace_l F
+GLIBC_2.32 isupper F
+GLIBC_2.32 isupper_l F
+GLIBC_2.32 iswalnum F
+GLIBC_2.32 iswalnum_l F
+GLIBC_2.32 iswalpha F
+GLIBC_2.32 iswalpha_l F
+GLIBC_2.32 iswblank F
+GLIBC_2.32 iswblank_l F
+GLIBC_2.32 iswcntrl F
+GLIBC_2.32 iswcntrl_l F
+GLIBC_2.32 iswctype F
+GLIBC_2.32 iswctype_l F
+GLIBC_2.32 iswdigit F
+GLIBC_2.32 iswdigit_l F
+GLIBC_2.32 iswgraph F
+GLIBC_2.32 iswgraph_l F
+GLIBC_2.32 iswlower F
+GLIBC_2.32 iswlower_l F
+GLIBC_2.32 iswprint F
+GLIBC_2.32 iswprint_l F
+GLIBC_2.32 iswpunct F
+GLIBC_2.32 iswpunct_l F
+GLIBC_2.32 iswspace F
+GLIBC_2.32 iswspace_l F
+GLIBC_2.32 iswupper F
+GLIBC_2.32 iswupper_l F
+GLIBC_2.32 iswxdigit F
+GLIBC_2.32 iswxdigit_l F
+GLIBC_2.32 isxdigit F
+GLIBC_2.32 isxdigit_l F
+GLIBC_2.32 jrand48 F
+GLIBC_2.32 jrand48_r F
+GLIBC_2.32 key_decryptsession F
+GLIBC_2.32 key_decryptsession_pk F
+GLIBC_2.32 key_encryptsession F
+GLIBC_2.32 key_encryptsession_pk F
+GLIBC_2.32 key_gendes F
+GLIBC_2.32 key_get_conv F
+GLIBC_2.32 key_secretkey_is_set F
+GLIBC_2.32 key_setnet F
+GLIBC_2.32 key_setsecret F
+GLIBC_2.32 kill F
+GLIBC_2.32 killpg F
+GLIBC_2.32 klogctl F
+GLIBC_2.32 l64a F
+GLIBC_2.32 labs F
+GLIBC_2.32 lchmod F
+GLIBC_2.32 lchown F
+GLIBC_2.32 lckpwdf F
+GLIBC_2.32 lcong48 F
+GLIBC_2.32 lcong48_r F
+GLIBC_2.32 ldexp F
+GLIBC_2.32 ldexpf F
+GLIBC_2.32 ldexpl F
+GLIBC_2.32 ldiv F
+GLIBC_2.32 lfind F
+GLIBC_2.32 lgetxattr F
+GLIBC_2.32 link F
+GLIBC_2.32 linkat F
+GLIBC_2.32 listen F
+GLIBC_2.32 listxattr F
+GLIBC_2.32 llabs F
+GLIBC_2.32 lldiv F
+GLIBC_2.32 llistxattr F
+GLIBC_2.32 localeconv F
+GLIBC_2.32 localtime F
+GLIBC_2.32 localtime_r F
+GLIBC_2.32 lockf F
+GLIBC_2.32 lockf64 F
+GLIBC_2.32 longjmp F
+GLIBC_2.32 lrand48 F
+GLIBC_2.32 lrand48_r F
+GLIBC_2.32 lremovexattr F
+GLIBC_2.32 lsearch F
+GLIBC_2.32 lseek F
+GLIBC_2.32 lseek64 F
+GLIBC_2.32 lsetxattr F
+GLIBC_2.32 lutimes F
+GLIBC_2.32 madvise F
+GLIBC_2.32 makecontext F
+GLIBC_2.32 mallinfo F
+GLIBC_2.32 malloc F
+GLIBC_2.32 malloc_info F
+GLIBC_2.32 malloc_stats F
+GLIBC_2.32 malloc_trim F
+GLIBC_2.32 malloc_usable_size F
+GLIBC_2.32 mallopt F
+GLIBC_2.32 mallwatch D 0x4
+GLIBC_2.32 mblen F
+GLIBC_2.32 mbrlen F
+GLIBC_2.32 mbrtoc16 F
+GLIBC_2.32 mbrtoc32 F
+GLIBC_2.32 mbrtowc F
+GLIBC_2.32 mbsinit F
+GLIBC_2.32 mbsnrtowcs F
+GLIBC_2.32 mbsrtowcs F
+GLIBC_2.32 mbstowcs F
+GLIBC_2.32 mbtowc F
+GLIBC_2.32 mcheck F
+GLIBC_2.32 mcheck_check_all F
+GLIBC_2.32 mcheck_pedantic F
+GLIBC_2.32 memalign F
+GLIBC_2.32 memccpy F
+GLIBC_2.32 memchr F
+GLIBC_2.32 memcmp F
+GLIBC_2.32 memcpy F
+GLIBC_2.32 memfd_create F
+GLIBC_2.32 memfrob F
+GLIBC_2.32 memmem F
+GLIBC_2.32 memmove F
+GLIBC_2.32 mempcpy F
+GLIBC_2.32 memrchr F
+GLIBC_2.32 memset F
+GLIBC_2.32 mincore F
+GLIBC_2.32 mkdir F
+GLIBC_2.32 mkdirat F
+GLIBC_2.32 mkdtemp F
+GLIBC_2.32 mkfifo F
+GLIBC_2.32 mkfifoat F
+GLIBC_2.32 mkostemp F
+GLIBC_2.32 mkostemp64 F
+GLIBC_2.32 mkostemps F
+GLIBC_2.32 mkostemps64 F
+GLIBC_2.32 mkstemp F
+GLIBC_2.32 mkstemp64 F
+GLIBC_2.32 mkstemps F
+GLIBC_2.32 mkstemps64 F
+GLIBC_2.32 mktemp F
+GLIBC_2.32 mktime F
+GLIBC_2.32 mlock F
+GLIBC_2.32 mlock2 F
+GLIBC_2.32 mlockall F
+GLIBC_2.32 mmap F
+GLIBC_2.32 mmap64 F
+GLIBC_2.32 modf F
+GLIBC_2.32 modff F
+GLIBC_2.32 modfl F
+GLIBC_2.32 moncontrol F
+GLIBC_2.32 monstartup F
+GLIBC_2.32 mount F
+GLIBC_2.32 mprobe F
+GLIBC_2.32 mprotect F
+GLIBC_2.32 mrand48 F
+GLIBC_2.32 mrand48_r F
+GLIBC_2.32 mremap F
+GLIBC_2.32 msgctl F
+GLIBC_2.32 msgget F
+GLIBC_2.32 msgrcv F
+GLIBC_2.32 msgsnd F
+GLIBC_2.32 msync F
+GLIBC_2.32 mtrace F
+GLIBC_2.32 munlock F
+GLIBC_2.32 munlockall F
+GLIBC_2.32 munmap F
+GLIBC_2.32 muntrace F
+GLIBC_2.32 name_to_handle_at F
+GLIBC_2.32 nanosleep F
+GLIBC_2.32 netname2host F
+GLIBC_2.32 netname2user F
+GLIBC_2.32 newlocale F
+GLIBC_2.32 nftw F
+GLIBC_2.32 nftw64 F
+GLIBC_2.32 ngettext F
+GLIBC_2.32 nice F
+GLIBC_2.32 nl_langinfo F
+GLIBC_2.32 nl_langinfo_l F
+GLIBC_2.32 nrand48 F
+GLIBC_2.32 nrand48_r F
+GLIBC_2.32 ntohl F
+GLIBC_2.32 ntohs F
+GLIBC_2.32 ntp_adjtime F
+GLIBC_2.32 ntp_gettime F
+GLIBC_2.32 ntp_gettimex F
+GLIBC_2.32 obstack_alloc_failed_handler D 0x4
+GLIBC_2.32 obstack_exit_failure D 0x4
+GLIBC_2.32 obstack_free F
+GLIBC_2.32 obstack_printf F
+GLIBC_2.32 obstack_vprintf F
+GLIBC_2.32 on_exit F
+GLIBC_2.32 open F
+GLIBC_2.32 open64 F
+GLIBC_2.32 open_by_handle_at F
+GLIBC_2.32 open_memstream F
+GLIBC_2.32 open_wmemstream F
+GLIBC_2.32 openat F
+GLIBC_2.32 openat64 F
+GLIBC_2.32 opendir F
+GLIBC_2.32 openlog F
+GLIBC_2.32 optarg D 0x4
+GLIBC_2.32 opterr D 0x4
+GLIBC_2.32 optind D 0x4
+GLIBC_2.32 optopt D 0x4
+GLIBC_2.32 parse_printf_format F
+GLIBC_2.32 passwd2des F
+GLIBC_2.32 pathconf F
+GLIBC_2.32 pause F
+GLIBC_2.32 pclose F
+GLIBC_2.32 perror F
+GLIBC_2.32 personality F
+GLIBC_2.32 pipe F
+GLIBC_2.32 pipe2 F
+GLIBC_2.32 pivot_root F
+GLIBC_2.32 pkey_alloc F
+GLIBC_2.32 pkey_free F
+GLIBC_2.32 pkey_get F
+GLIBC_2.32 pkey_mprotect F
+GLIBC_2.32 pkey_set F
+GLIBC_2.32 pmap_getmaps F
+GLIBC_2.32 pmap_getport F
+GLIBC_2.32 pmap_rmtcall F
+GLIBC_2.32 pmap_set F
+GLIBC_2.32 pmap_unset F
+GLIBC_2.32 poll F
+GLIBC_2.32 popen F
+GLIBC_2.32 posix_fadvise F
+GLIBC_2.32 posix_fadvise64 F
+GLIBC_2.32 posix_fallocate F
+GLIBC_2.32 posix_fallocate64 F
+GLIBC_2.32 posix_madvise F
+GLIBC_2.32 posix_memalign F
+GLIBC_2.32 posix_openpt F
+GLIBC_2.32 posix_spawn F
+GLIBC_2.32 posix_spawn_file_actions_addchdir_np F
+GLIBC_2.32 posix_spawn_file_actions_addclose F
+GLIBC_2.32 posix_spawn_file_actions_adddup2 F
+GLIBC_2.32 posix_spawn_file_actions_addfchdir_np F
+GLIBC_2.32 posix_spawn_file_actions_addopen F
+GLIBC_2.32 posix_spawn_file_actions_destroy F
+GLIBC_2.32 posix_spawn_file_actions_init F
+GLIBC_2.32 posix_spawnattr_destroy F
+GLIBC_2.32 posix_spawnattr_getflags F
+GLIBC_2.32 posix_spawnattr_getpgroup F
+GLIBC_2.32 posix_spawnattr_getschedparam F
+GLIBC_2.32 posix_spawnattr_getschedpolicy F
+GLIBC_2.32 posix_spawnattr_getsigdefault F
+GLIBC_2.32 posix_spawnattr_getsigmask F
+GLIBC_2.32 posix_spawnattr_init F
+GLIBC_2.32 posix_spawnattr_setflags F
+GLIBC_2.32 posix_spawnattr_setpgroup F
+GLIBC_2.32 posix_spawnattr_setschedparam F
+GLIBC_2.32 posix_spawnattr_setschedpolicy F
+GLIBC_2.32 posix_spawnattr_setsigdefault F
+GLIBC_2.32 posix_spawnattr_setsigmask F
+GLIBC_2.32 posix_spawnp F
+GLIBC_2.32 ppoll F
+GLIBC_2.32 prctl F
+GLIBC_2.32 pread F
+GLIBC_2.32 pread64 F
+GLIBC_2.32 preadv F
+GLIBC_2.32 preadv2 F
+GLIBC_2.32 preadv64 F
+GLIBC_2.32 preadv64v2 F
+GLIBC_2.32 printf F
+GLIBC_2.32 printf_size F
+GLIBC_2.32 printf_size_info F
+GLIBC_2.32 prlimit F
+GLIBC_2.32 prlimit64 F
+GLIBC_2.32 process_vm_readv F
+GLIBC_2.32 process_vm_writev F
+GLIBC_2.32 profil F
+GLIBC_2.32 program_invocation_name D 0x4
+GLIBC_2.32 program_invocation_short_name D 0x4
+GLIBC_2.32 pselect F
+GLIBC_2.32 psiginfo F
+GLIBC_2.32 psignal F
+GLIBC_2.32 pthread_attr_destroy F
+GLIBC_2.32 pthread_attr_getdetachstate F
+GLIBC_2.32 pthread_attr_getinheritsched F
+GLIBC_2.32 pthread_attr_getschedparam F
+GLIBC_2.32 pthread_attr_getschedpolicy F
+GLIBC_2.32 pthread_attr_getscope F
+GLIBC_2.32 pthread_attr_init F
+GLIBC_2.32 pthread_attr_setdetachstate F
+GLIBC_2.32 pthread_attr_setinheritsched F
+GLIBC_2.32 pthread_attr_setschedparam F
+GLIBC_2.32 pthread_attr_setschedpolicy F
+GLIBC_2.32 pthread_attr_setscope F
+GLIBC_2.32 pthread_cond_broadcast F
+GLIBC_2.32 pthread_cond_destroy F
+GLIBC_2.32 pthread_cond_init F
+GLIBC_2.32 pthread_cond_signal F
+GLIBC_2.32 pthread_cond_timedwait F
+GLIBC_2.32 pthread_cond_wait F
+GLIBC_2.32 pthread_condattr_destroy F
+GLIBC_2.32 pthread_condattr_init F
+GLIBC_2.32 pthread_equal F
+GLIBC_2.32 pthread_exit F
+GLIBC_2.32 pthread_getschedparam F
+GLIBC_2.32 pthread_mutex_destroy F
+GLIBC_2.32 pthread_mutex_init F
+GLIBC_2.32 pthread_mutex_lock F
+GLIBC_2.32 pthread_mutex_unlock F
+GLIBC_2.32 pthread_self F
+GLIBC_2.32 pthread_setcancelstate F
+GLIBC_2.32 pthread_setcanceltype F
+GLIBC_2.32 pthread_setschedparam F
+GLIBC_2.32 ptrace F
+GLIBC_2.32 ptsname F
+GLIBC_2.32 ptsname_r F
+GLIBC_2.32 putc F
+GLIBC_2.32 putc_unlocked F
+GLIBC_2.32 putchar F
+GLIBC_2.32 putchar_unlocked F
+GLIBC_2.32 putenv F
+GLIBC_2.32 putgrent F
+GLIBC_2.32 putpwent F
+GLIBC_2.32 puts F
+GLIBC_2.32 putsgent F
+GLIBC_2.32 putspent F
+GLIBC_2.32 pututline F
+GLIBC_2.32 pututxline F
+GLIBC_2.32 putw F
+GLIBC_2.32 putwc F
+GLIBC_2.32 putwc_unlocked F
+GLIBC_2.32 putwchar F
+GLIBC_2.32 putwchar_unlocked F
+GLIBC_2.32 pvalloc F
+GLIBC_2.32 pwrite F
+GLIBC_2.32 pwrite64 F
+GLIBC_2.32 pwritev F
+GLIBC_2.32 pwritev2 F
+GLIBC_2.32 pwritev64 F
+GLIBC_2.32 pwritev64v2 F
+GLIBC_2.32 qecvt F
+GLIBC_2.32 qecvt_r F
+GLIBC_2.32 qfcvt F
+GLIBC_2.32 qfcvt_r F
+GLIBC_2.32 qgcvt F
+GLIBC_2.32 qsort F
+GLIBC_2.32 qsort_r F
+GLIBC_2.32 quick_exit F
+GLIBC_2.32 quotactl F
+GLIBC_2.32 raise F
+GLIBC_2.32 rand F
+GLIBC_2.32 rand_r F
+GLIBC_2.32 random F
+GLIBC_2.32 random_r F
+GLIBC_2.32 rawmemchr F
+GLIBC_2.32 rcmd F
+GLIBC_2.32 rcmd_af F
+GLIBC_2.32 re_comp F
+GLIBC_2.32 re_compile_fastmap F
+GLIBC_2.32 re_compile_pattern F
+GLIBC_2.32 re_exec F
+GLIBC_2.32 re_match F
+GLIBC_2.32 re_match_2 F
+GLIBC_2.32 re_search F
+GLIBC_2.32 re_search_2 F
+GLIBC_2.32 re_set_registers F
+GLIBC_2.32 re_set_syntax F
+GLIBC_2.32 re_syntax_options D 0x4
+GLIBC_2.32 read F
+GLIBC_2.32 readahead F
+GLIBC_2.32 readdir F
+GLIBC_2.32 readdir64 F
+GLIBC_2.32 readdir64_r F
+GLIBC_2.32 readdir_r F
+GLIBC_2.32 readlink F
+GLIBC_2.32 readlinkat F
+GLIBC_2.32 readv F
+GLIBC_2.32 realloc F
+GLIBC_2.32 reallocarray F
+GLIBC_2.32 realpath F
+GLIBC_2.32 reboot F
+GLIBC_2.32 recv F
+GLIBC_2.32 recvfrom F
+GLIBC_2.32 recvmmsg F
+GLIBC_2.32 recvmsg F
+GLIBC_2.32 regcomp F
+GLIBC_2.32 regerror F
+GLIBC_2.32 regexec F
+GLIBC_2.32 regfree F
+GLIBC_2.32 register_printf_function F
+GLIBC_2.32 register_printf_modifier F
+GLIBC_2.32 register_printf_specifier F
+GLIBC_2.32 register_printf_type F
+GLIBC_2.32 registerrpc F
+GLIBC_2.32 remap_file_pages F
+GLIBC_2.32 remove F
+GLIBC_2.32 removexattr F
+GLIBC_2.32 remque F
+GLIBC_2.32 rename F
+GLIBC_2.32 renameat F
+GLIBC_2.32 renameat2 F
+GLIBC_2.32 revoke F
+GLIBC_2.32 rewind F
+GLIBC_2.32 rewinddir F
+GLIBC_2.32 rexec F
+GLIBC_2.32 rexec_af F
+GLIBC_2.32 rexecoptions D 0x4
+GLIBC_2.32 rindex F
+GLIBC_2.32 rmdir F
+GLIBC_2.32 rpc_createerr D 0x10
+GLIBC_2.32 rpmatch F
+GLIBC_2.32 rresvport F
+GLIBC_2.32 rresvport_af F
+GLIBC_2.32 rtime F
+GLIBC_2.32 ruserok F
+GLIBC_2.32 ruserok_af F
+GLIBC_2.32 ruserpass F
+GLIBC_2.32 sbrk F
+GLIBC_2.32 scalbn F
+GLIBC_2.32 scalbnf F
+GLIBC_2.32 scalbnl F
+GLIBC_2.32 scandir F
+GLIBC_2.32 scandir64 F
+GLIBC_2.32 scandirat F
+GLIBC_2.32 scandirat64 F
+GLIBC_2.32 scanf F
+GLIBC_2.32 sched_get_priority_max F
+GLIBC_2.32 sched_get_priority_min F
+GLIBC_2.32 sched_getaffinity F
+GLIBC_2.32 sched_getcpu F
+GLIBC_2.32 sched_getparam F
+GLIBC_2.32 sched_getscheduler F
+GLIBC_2.32 sched_rr_get_interval F
+GLIBC_2.32 sched_setaffinity F
+GLIBC_2.32 sched_setparam F
+GLIBC_2.32 sched_setscheduler F
+GLIBC_2.32 sched_yield F
+GLIBC_2.32 secure_getenv F
+GLIBC_2.32 seed48 F
+GLIBC_2.32 seed48_r F
+GLIBC_2.32 seekdir F
+GLIBC_2.32 select F
+GLIBC_2.32 semctl F
+GLIBC_2.32 semget F
+GLIBC_2.32 semop F
+GLIBC_2.32 semtimedop F
+GLIBC_2.32 send F
+GLIBC_2.32 sendfile F
+GLIBC_2.32 sendfile64 F
+GLIBC_2.32 sendmmsg F
+GLIBC_2.32 sendmsg F
+GLIBC_2.32 sendto F
+GLIBC_2.32 setaliasent F
+GLIBC_2.32 setbuf F
+GLIBC_2.32 setbuffer F
+GLIBC_2.32 setcontext F
+GLIBC_2.32 setdomainname F
+GLIBC_2.32 setegid F
+GLIBC_2.32 setenv F
+GLIBC_2.32 seteuid F
+GLIBC_2.32 setfsent F
+GLIBC_2.32 setfsgid F
+GLIBC_2.32 setfsuid F
+GLIBC_2.32 setgid F
+GLIBC_2.32 setgrent F
+GLIBC_2.32 setgroups F
+GLIBC_2.32 sethostent F
+GLIBC_2.32 sethostid F
+GLIBC_2.32 sethostname F
+GLIBC_2.32 setipv4sourcefilter F
+GLIBC_2.32 setitimer F
+GLIBC_2.32 setjmp F
+GLIBC_2.32 setlinebuf F
+GLIBC_2.32 setlocale F
+GLIBC_2.32 setlogin F
+GLIBC_2.32 setlogmask F
+GLIBC_2.32 setmntent F
+GLIBC_2.32 setnetent F
+GLIBC_2.32 setnetgrent F
+GLIBC_2.32 setns F
+GLIBC_2.32 setpgid F
+GLIBC_2.32 setpgrp F
+GLIBC_2.32 setpriority F
+GLIBC_2.32 setprotoent F
+GLIBC_2.32 setpwent F
+GLIBC_2.32 setregid F
+GLIBC_2.32 setresgid F
+GLIBC_2.32 setresuid F
+GLIBC_2.32 setreuid F
+GLIBC_2.32 setrlimit F
+GLIBC_2.32 setrlimit64 F
+GLIBC_2.32 setrpcent F
+GLIBC_2.32 setservent F
+GLIBC_2.32 setsgent F
+GLIBC_2.32 setsid F
+GLIBC_2.32 setsockopt F
+GLIBC_2.32 setsourcefilter F
+GLIBC_2.32 setspent F
+GLIBC_2.32 setstate F
+GLIBC_2.32 setstate_r F
+GLIBC_2.32 settimeofday F
+GLIBC_2.32 setttyent F
+GLIBC_2.32 setuid F
+GLIBC_2.32 setusershell F
+GLIBC_2.32 setutent F
+GLIBC_2.32 setutxent F
+GLIBC_2.32 setvbuf F
+GLIBC_2.32 setxattr F
+GLIBC_2.32 sgetsgent F
+GLIBC_2.32 sgetsgent_r F
+GLIBC_2.32 sgetspent F
+GLIBC_2.32 sgetspent_r F
+GLIBC_2.32 shmat F
+GLIBC_2.32 shmctl F
+GLIBC_2.32 shmdt F
+GLIBC_2.32 shmget F
+GLIBC_2.32 shutdown F
+GLIBC_2.32 sigaction F
+GLIBC_2.32 sigaddset F
+GLIBC_2.32 sigaltstack F
+GLIBC_2.32 sigandset F
+GLIBC_2.32 sigblock F
+GLIBC_2.32 sigdelset F
+GLIBC_2.32 sigemptyset F
+GLIBC_2.32 sigfillset F
+GLIBC_2.32 siggetmask F
+GLIBC_2.32 sighold F
+GLIBC_2.32 sigignore F
+GLIBC_2.32 siginterrupt F
+GLIBC_2.32 sigisemptyset F
+GLIBC_2.32 sigismember F
+GLIBC_2.32 siglongjmp F
+GLIBC_2.32 signal F
+GLIBC_2.32 signalfd F
+GLIBC_2.32 sigorset F
+GLIBC_2.32 sigpause F
+GLIBC_2.32 sigpending F
+GLIBC_2.32 sigprocmask F
+GLIBC_2.32 sigqueue F
+GLIBC_2.32 sigrelse F
+GLIBC_2.32 sigreturn F
+GLIBC_2.32 sigset F
+GLIBC_2.32 sigsetmask F
+GLIBC_2.32 sigstack F
+GLIBC_2.32 sigsuspend F
+GLIBC_2.32 sigtimedwait F
+GLIBC_2.32 sigwait F
+GLIBC_2.32 sigwaitinfo F
+GLIBC_2.32 sleep F
+GLIBC_2.32 snprintf F
+GLIBC_2.32 sockatmark F
+GLIBC_2.32 socket F
+GLIBC_2.32 socketpair F
+GLIBC_2.32 splice F
+GLIBC_2.32 sprintf F
+GLIBC_2.32 sprofil F
+GLIBC_2.32 srand F
+GLIBC_2.32 srand48 F
+GLIBC_2.32 srand48_r F
+GLIBC_2.32 srandom F
+GLIBC_2.32 srandom_r F
+GLIBC_2.32 sscanf F
+GLIBC_2.32 ssignal F
+GLIBC_2.32 sstk F
+GLIBC_2.32 statfs F
+GLIBC_2.32 statfs64 F
+GLIBC_2.32 statvfs F
+GLIBC_2.32 statvfs64 F
+GLIBC_2.32 statx F
+GLIBC_2.32 stderr D 0x4
+GLIBC_2.32 stdin D 0x4
+GLIBC_2.32 stdout D 0x4
+GLIBC_2.32 stpcpy F
+GLIBC_2.32 stpncpy F
+GLIBC_2.32 strcasecmp F
+GLIBC_2.32 strcasecmp_l F
+GLIBC_2.32 strcasestr F
+GLIBC_2.32 strcat F
+GLIBC_2.32 strchr F
+GLIBC_2.32 strchrnul F
+GLIBC_2.32 strcmp F
+GLIBC_2.32 strcoll F
+GLIBC_2.32 strcoll_l F
+GLIBC_2.32 strcpy F
+GLIBC_2.32 strcspn F
+GLIBC_2.32 strdup F
+GLIBC_2.32 strerror F
+GLIBC_2.32 strerror_l F
+GLIBC_2.32 strerror_r F
+GLIBC_2.32 strfmon F
+GLIBC_2.32 strfmon_l F
+GLIBC_2.32 strfromd F
+GLIBC_2.32 strfromf F
+GLIBC_2.32 strfromf32 F
+GLIBC_2.32 strfromf32x F
+GLIBC_2.32 strfromf64 F
+GLIBC_2.32 strfroml F
+GLIBC_2.32 strfry F
+GLIBC_2.32 strftime F
+GLIBC_2.32 strftime_l F
+GLIBC_2.32 strlen F
+GLIBC_2.32 strncasecmp F
+GLIBC_2.32 strncasecmp_l F
+GLIBC_2.32 strncat F
+GLIBC_2.32 strncmp F
+GLIBC_2.32 strncpy F
+GLIBC_2.32 strndup F
+GLIBC_2.32 strnlen F
+GLIBC_2.32 strpbrk F
+GLIBC_2.32 strptime F
+GLIBC_2.32 strptime_l F
+GLIBC_2.32 strrchr F
+GLIBC_2.32 strsep F
+GLIBC_2.32 strsignal F
+GLIBC_2.32 strspn F
+GLIBC_2.32 strstr F
+GLIBC_2.32 strtod F
+GLIBC_2.32 strtod_l F
+GLIBC_2.32 strtof F
+GLIBC_2.32 strtof32 F
+GLIBC_2.32 strtof32_l F
+GLIBC_2.32 strtof32x F
+GLIBC_2.32 strtof32x_l F
+GLIBC_2.32 strtof64 F
+GLIBC_2.32 strtof64_l F
+GLIBC_2.32 strtof_l F
+GLIBC_2.32 strtoimax F
+GLIBC_2.32 strtok F
+GLIBC_2.32 strtok_r F
+GLIBC_2.32 strtol F
+GLIBC_2.32 strtol_l F
+GLIBC_2.32 strtold F
+GLIBC_2.32 strtold_l F
+GLIBC_2.32 strtoll F
+GLIBC_2.32 strtoll_l F
+GLIBC_2.32 strtoq F
+GLIBC_2.32 strtoul F
+GLIBC_2.32 strtoul_l F
+GLIBC_2.32 strtoull F
+GLIBC_2.32 strtoull_l F
+GLIBC_2.32 strtoumax F
+GLIBC_2.32 strtouq F
+GLIBC_2.32 strverscmp F
+GLIBC_2.32 strxfrm F
+GLIBC_2.32 strxfrm_l F
+GLIBC_2.32 stty F
+GLIBC_2.32 svc_exit F
+GLIBC_2.32 svc_fdset D 0x80
+GLIBC_2.32 svc_getreq F
+GLIBC_2.32 svc_getreq_common F
+GLIBC_2.32 svc_getreq_poll F
+GLIBC_2.32 svc_getreqset F
+GLIBC_2.32 svc_max_pollfd D 0x4
+GLIBC_2.32 svc_pollfd D 0x4
+GLIBC_2.32 svc_register F
+GLIBC_2.32 svc_run F
+GLIBC_2.32 svc_sendreply F
+GLIBC_2.32 svc_unregister F
+GLIBC_2.32 svcauthdes_stats D 0xc
+GLIBC_2.32 svcerr_auth F
+GLIBC_2.32 svcerr_decode F
+GLIBC_2.32 svcerr_noproc F
+GLIBC_2.32 svcerr_noprog F
+GLIBC_2.32 svcerr_progvers F
+GLIBC_2.32 svcerr_systemerr F
+GLIBC_2.32 svcerr_weakauth F
+GLIBC_2.32 svcfd_create F
+GLIBC_2.32 svcraw_create F
+GLIBC_2.32 svctcp_create F
+GLIBC_2.32 svcudp_bufcreate F
+GLIBC_2.32 svcudp_create F
+GLIBC_2.32 svcudp_enablecache F
+GLIBC_2.32 svcunix_create F
+GLIBC_2.32 svcunixfd_create F
+GLIBC_2.32 swab F
+GLIBC_2.32 swapcontext F
+GLIBC_2.32 swapoff F
+GLIBC_2.32 swapon F
+GLIBC_2.32 swprintf F
+GLIBC_2.32 swscanf F
+GLIBC_2.32 symlink F
+GLIBC_2.32 symlinkat F
+GLIBC_2.32 sync F
+GLIBC_2.32 sync_file_range F
+GLIBC_2.32 syncfs F
+GLIBC_2.32 sys_errlist D 0x21c
+GLIBC_2.32 sys_nerr D 0x4
+GLIBC_2.32 sys_sigabbrev D 0x104
+GLIBC_2.32 sys_siglist D 0x104
+GLIBC_2.32 syscall F
+GLIBC_2.32 sysconf F
+GLIBC_2.32 sysinfo F
+GLIBC_2.32 syslog F
+GLIBC_2.32 system F
+GLIBC_2.32 sysv_signal F
+GLIBC_2.32 tcdrain F
+GLIBC_2.32 tcflow F
+GLIBC_2.32 tcflush F
+GLIBC_2.32 tcgetattr F
+GLIBC_2.32 tcgetpgrp F
+GLIBC_2.32 tcgetsid F
+GLIBC_2.32 tcsendbreak F
+GLIBC_2.32 tcsetattr F
+GLIBC_2.32 tcsetpgrp F
+GLIBC_2.32 tdelete F
+GLIBC_2.32 tdestroy F
+GLIBC_2.32 tee F
+GLIBC_2.32 telldir F
+GLIBC_2.32 tempnam F
+GLIBC_2.32 textdomain F
+GLIBC_2.32 tfind F
+GLIBC_2.32 tgkill F
+GLIBC_2.32 thrd_current F
+GLIBC_2.32 thrd_equal F
+GLIBC_2.32 thrd_sleep F
+GLIBC_2.32 thrd_yield F
+GLIBC_2.32 time F
+GLIBC_2.32 timegm F
+GLIBC_2.32 timelocal F
+GLIBC_2.32 timerfd_create F
+GLIBC_2.32 timerfd_gettime F
+GLIBC_2.32 timerfd_settime F
+GLIBC_2.32 times F
+GLIBC_2.32 timespec_get F
+GLIBC_2.32 timezone D 0x4
+GLIBC_2.32 tmpfile F
+GLIBC_2.32 tmpfile64 F
+GLIBC_2.32 tmpnam F
+GLIBC_2.32 tmpnam_r F
+GLIBC_2.32 toascii F
+GLIBC_2.32 tolower F
+GLIBC_2.32 tolower_l F
+GLIBC_2.32 toupper F
+GLIBC_2.32 toupper_l F
+GLIBC_2.32 towctrans F
+GLIBC_2.32 towctrans_l F
+GLIBC_2.32 towlower F
+GLIBC_2.32 towlower_l F
+GLIBC_2.32 towupper F
+GLIBC_2.32 towupper_l F
+GLIBC_2.32 tr_break F
+GLIBC_2.32 truncate F
+GLIBC_2.32 truncate64 F
+GLIBC_2.32 tsearch F
+GLIBC_2.32 ttyname F
+GLIBC_2.32 ttyname_r F
+GLIBC_2.32 ttyslot F
+GLIBC_2.32 twalk F
+GLIBC_2.32 twalk_r F
+GLIBC_2.32 tzname D 0x8
+GLIBC_2.32 tzset F
+GLIBC_2.32 ualarm F
+GLIBC_2.32 ulckpwdf F
+GLIBC_2.32 ulimit F
+GLIBC_2.32 umask F
+GLIBC_2.32 umount F
+GLIBC_2.32 umount2 F
+GLIBC_2.32 uname F
+GLIBC_2.32 ungetc F
+GLIBC_2.32 ungetwc F
+GLIBC_2.32 unlink F
+GLIBC_2.32 unlinkat F
+GLIBC_2.32 unlockpt F
+GLIBC_2.32 unsetenv F
+GLIBC_2.32 unshare F
+GLIBC_2.32 updwtmp F
+GLIBC_2.32 updwtmpx F
+GLIBC_2.32 uselocale F
+GLIBC_2.32 user2netname F
+GLIBC_2.32 usleep F
+GLIBC_2.32 utime F
+GLIBC_2.32 utimensat F
+GLIBC_2.32 utimes F
+GLIBC_2.32 utmpname F
+GLIBC_2.32 utmpxname F
+GLIBC_2.32 valloc F
+GLIBC_2.32 vasprintf F
+GLIBC_2.32 vdprintf F
+GLIBC_2.32 verr F
+GLIBC_2.32 verrx F
+GLIBC_2.32 versionsort F
+GLIBC_2.32 versionsort64 F
+GLIBC_2.32 vfork F
+GLIBC_2.32 vfprintf F
+GLIBC_2.32 vfscanf F
+GLIBC_2.32 vfwprintf F
+GLIBC_2.32 vfwscanf F
+GLIBC_2.32 vhangup F
+GLIBC_2.32 vlimit F
+GLIBC_2.32 vmsplice F
+GLIBC_2.32 vprintf F
+GLIBC_2.32 vscanf F
+GLIBC_2.32 vsnprintf F
+GLIBC_2.32 vsprintf F
+GLIBC_2.32 vsscanf F
+GLIBC_2.32 vswprintf F
+GLIBC_2.32 vswscanf F
+GLIBC_2.32 vsyslog F
+GLIBC_2.32 vtimes F
+GLIBC_2.32 vwarn F
+GLIBC_2.32 vwarnx F
+GLIBC_2.32 vwprintf F
+GLIBC_2.32 vwscanf F
+GLIBC_2.32 wait F
+GLIBC_2.32 wait3 F
+GLIBC_2.32 wait4 F
+GLIBC_2.32 waitid F
+GLIBC_2.32 waitpid F
+GLIBC_2.32 warn F
+GLIBC_2.32 warnx F
+GLIBC_2.32 wcpcpy F
+GLIBC_2.32 wcpncpy F
+GLIBC_2.32 wcrtomb F
+GLIBC_2.32 wcscasecmp F
+GLIBC_2.32 wcscasecmp_l F
+GLIBC_2.32 wcscat F
+GLIBC_2.32 wcschr F
+GLIBC_2.32 wcschrnul F
+GLIBC_2.32 wcscmp F
+GLIBC_2.32 wcscoll F
+GLIBC_2.32 wcscoll_l F
+GLIBC_2.32 wcscpy F
+GLIBC_2.32 wcscspn F
+GLIBC_2.32 wcsdup F
+GLIBC_2.32 wcsftime F
+GLIBC_2.32 wcsftime_l F
+GLIBC_2.32 wcslen F
+GLIBC_2.32 wcsncasecmp F
+GLIBC_2.32 wcsncasecmp_l F
+GLIBC_2.32 wcsncat F
+GLIBC_2.32 wcsncmp F
+GLIBC_2.32 wcsncpy F
+GLIBC_2.32 wcsnlen F
+GLIBC_2.32 wcsnrtombs F
+GLIBC_2.32 wcspbrk F
+GLIBC_2.32 wcsrchr F
+GLIBC_2.32 wcsrtombs F
+GLIBC_2.32 wcsspn F
+GLIBC_2.32 wcsstr F
+GLIBC_2.32 wcstod F
+GLIBC_2.32 wcstod_l F
+GLIBC_2.32 wcstof F
+GLIBC_2.32 wcstof32 F
+GLIBC_2.32 wcstof32_l F
+GLIBC_2.32 wcstof32x F
+GLIBC_2.32 wcstof32x_l F
+GLIBC_2.32 wcstof64 F
+GLIBC_2.32 wcstof64_l F
+GLIBC_2.32 wcstof_l F
+GLIBC_2.32 wcstoimax F
+GLIBC_2.32 wcstok F
+GLIBC_2.32 wcstol F
+GLIBC_2.32 wcstol_l F
+GLIBC_2.32 wcstold F
+GLIBC_2.32 wcstold_l F
+GLIBC_2.32 wcstoll F
+GLIBC_2.32 wcstoll_l F
+GLIBC_2.32 wcstombs F
+GLIBC_2.32 wcstoq F
+GLIBC_2.32 wcstoul F
+GLIBC_2.32 wcstoul_l F
+GLIBC_2.32 wcstoull F
+GLIBC_2.32 wcstoull_l F
+GLIBC_2.32 wcstoumax F
+GLIBC_2.32 wcstouq F
+GLIBC_2.32 wcswcs F
+GLIBC_2.32 wcswidth F
+GLIBC_2.32 wcsxfrm F
+GLIBC_2.32 wcsxfrm_l F
+GLIBC_2.32 wctob F
+GLIBC_2.32 wctomb F
+GLIBC_2.32 wctrans F
+GLIBC_2.32 wctrans_l F
+GLIBC_2.32 wctype F
+GLIBC_2.32 wctype_l F
+GLIBC_2.32 wcwidth F
+GLIBC_2.32 wmemchr F
+GLIBC_2.32 wmemcmp F
+GLIBC_2.32 wmemcpy F
+GLIBC_2.32 wmemmove F
+GLIBC_2.32 wmempcpy F
+GLIBC_2.32 wmemset F
+GLIBC_2.32 wordexp F
+GLIBC_2.32 wordfree F
+GLIBC_2.32 wprintf F
+GLIBC_2.32 write F
+GLIBC_2.32 writev F
+GLIBC_2.32 wscanf F
+GLIBC_2.32 xdecrypt F
+GLIBC_2.32 xdr_accepted_reply F
+GLIBC_2.32 xdr_array F
+GLIBC_2.32 xdr_authdes_cred F
+GLIBC_2.32 xdr_authdes_verf F
+GLIBC_2.32 xdr_authunix_parms F
+GLIBC_2.32 xdr_bool F
+GLIBC_2.32 xdr_bytes F
+GLIBC_2.32 xdr_callhdr F
+GLIBC_2.32 xdr_callmsg F
+GLIBC_2.32 xdr_char F
+GLIBC_2.32 xdr_cryptkeyarg F
+GLIBC_2.32 xdr_cryptkeyarg2 F
+GLIBC_2.32 xdr_cryptkeyres F
+GLIBC_2.32 xdr_des_block F
+GLIBC_2.32 xdr_double F
+GLIBC_2.32 xdr_enum F
+GLIBC_2.32 xdr_float F
+GLIBC_2.32 xdr_free F
+GLIBC_2.32 xdr_getcredres F
+GLIBC_2.32 xdr_hyper F
+GLIBC_2.32 xdr_int F
+GLIBC_2.32 xdr_int16_t F
+GLIBC_2.32 xdr_int32_t F
+GLIBC_2.32 xdr_int64_t F
+GLIBC_2.32 xdr_int8_t F
+GLIBC_2.32 xdr_key_netstarg F
+GLIBC_2.32 xdr_key_netstres F
+GLIBC_2.32 xdr_keybuf F
+GLIBC_2.32 xdr_keystatus F
+GLIBC_2.32 xdr_long F
+GLIBC_2.32 xdr_longlong_t F
+GLIBC_2.32 xdr_netnamestr F
+GLIBC_2.32 xdr_netobj F
+GLIBC_2.32 xdr_opaque F
+GLIBC_2.32 xdr_opaque_auth F
+GLIBC_2.32 xdr_pmap F
+GLIBC_2.32 xdr_pmaplist F
+GLIBC_2.32 xdr_pointer F
+GLIBC_2.32 xdr_quad_t F
+GLIBC_2.32 xdr_reference F
+GLIBC_2.32 xdr_rejected_reply F
+GLIBC_2.32 xdr_replymsg F
+GLIBC_2.32 xdr_rmtcall_args F
+GLIBC_2.32 xdr_rmtcallres F
+GLIBC_2.32 xdr_short F
+GLIBC_2.32 xdr_sizeof F
+GLIBC_2.32 xdr_string F
+GLIBC_2.32 xdr_u_char F
+GLIBC_2.32 xdr_u_hyper F
+GLIBC_2.32 xdr_u_int F
+GLIBC_2.32 xdr_u_long F
+GLIBC_2.32 xdr_u_longlong_t F
+GLIBC_2.32 xdr_u_quad_t F
+GLIBC_2.32 xdr_u_short F
+GLIBC_2.32 xdr_uint16_t F
+GLIBC_2.32 xdr_uint32_t F
+GLIBC_2.32 xdr_uint64_t F
+GLIBC_2.32 xdr_uint8_t F
+GLIBC_2.32 xdr_union F
+GLIBC_2.32 xdr_unixcred F
+GLIBC_2.32 xdr_vector F
+GLIBC_2.32 xdr_void F
+GLIBC_2.32 xdr_wrapstring F
+GLIBC_2.32 xdrmem_create F
+GLIBC_2.32 xdrrec_create F
+GLIBC_2.32 xdrrec_endofrecord F
+GLIBC_2.32 xdrrec_eof F
+GLIBC_2.32 xdrrec_skiprecord F
+GLIBC_2.32 xdrstdio_create F
+GLIBC_2.32 xencrypt F
+GLIBC_2.32 xprt_register F
+GLIBC_2.32 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 000000000000..6bd253453e99
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libcrypt.abilist
@@ -0,0 +1,2 @@
+GLIBC_2.32 crypt F
+GLIBC_2.32 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 000000000000..bf20b0c4044f
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libdl.abilist
@@ -0,0 +1,9 @@
+GLIBC_2.32 dladdr F
+GLIBC_2.32 dladdr1 F
+GLIBC_2.32 dlclose F
+GLIBC_2.32 dlerror F
+GLIBC_2.32 dlinfo F
+GLIBC_2.32 dlmopen F
+GLIBC_2.32 dlopen F
+GLIBC_2.32 dlsym F
+GLIBC_2.32 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 000000000000..4338563657b8
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libm.abilist
@@ -0,0 +1,699 @@
+GLIBC_2.32 __clog10 F
+GLIBC_2.32 __clog10f F
+GLIBC_2.32 __clog10l F
+GLIBC_2.32 __finite F
+GLIBC_2.32 __finitef F
+GLIBC_2.32 __fpclassify F
+GLIBC_2.32 __fpclassifyf F
+GLIBC_2.32 __iseqsig F
+GLIBC_2.32 __iseqsigf F
+GLIBC_2.32 __issignaling F
+GLIBC_2.32 __issignalingf F
+GLIBC_2.32 __signbit F
+GLIBC_2.32 __signbitf F
+GLIBC_2.32 __signgam D 0x4
+GLIBC_2.32 acos F
+GLIBC_2.32 acosf F
+GLIBC_2.32 acosf32 F
+GLIBC_2.32 acosf32x F
+GLIBC_2.32 acosf64 F
+GLIBC_2.32 acosh F
+GLIBC_2.32 acoshf F
+GLIBC_2.32 acoshf32 F
+GLIBC_2.32 acoshf32x F
+GLIBC_2.32 acoshf64 F
+GLIBC_2.32 acoshl F
+GLIBC_2.32 acosl F
+GLIBC_2.32 asin F
+GLIBC_2.32 asinf F
+GLIBC_2.32 asinf32 F
+GLIBC_2.32 asinf32x F
+GLIBC_2.32 asinf64 F
+GLIBC_2.32 asinh F
+GLIBC_2.32 asinhf F
+GLIBC_2.32 asinhf32 F
+GLIBC_2.32 asinhf32x F
+GLIBC_2.32 asinhf64 F
+GLIBC_2.32 asinhl F
+GLIBC_2.32 asinl F
+GLIBC_2.32 atan F
+GLIBC_2.32 atan2 F
+GLIBC_2.32 atan2f F
+GLIBC_2.32 atan2f32 F
+GLIBC_2.32 atan2f32x F
+GLIBC_2.32 atan2f64 F
+GLIBC_2.32 atan2l F
+GLIBC_2.32 atanf F
+GLIBC_2.32 atanf32 F
+GLIBC_2.32 atanf32x F
+GLIBC_2.32 atanf64 F
+GLIBC_2.32 atanh F
+GLIBC_2.32 atanhf F
+GLIBC_2.32 atanhf32 F
+GLIBC_2.32 atanhf32x F
+GLIBC_2.32 atanhf64 F
+GLIBC_2.32 atanhl F
+GLIBC_2.32 atanl F
+GLIBC_2.32 cabs F
+GLIBC_2.32 cabsf F
+GLIBC_2.32 cabsf32 F
+GLIBC_2.32 cabsf32x F
+GLIBC_2.32 cabsf64 F
+GLIBC_2.32 cabsl F
+GLIBC_2.32 cacos F
+GLIBC_2.32 cacosf F
+GLIBC_2.32 cacosf32 F
+GLIBC_2.32 cacosf32x F
+GLIBC_2.32 cacosf64 F
+GLIBC_2.32 cacosh F
+GLIBC_2.32 cacoshf F
+GLIBC_2.32 cacoshf32 F
+GLIBC_2.32 cacoshf32x F
+GLIBC_2.32 cacoshf64 F
+GLIBC_2.32 cacoshl F
+GLIBC_2.32 cacosl F
+GLIBC_2.32 canonicalize F
+GLIBC_2.32 canonicalizef F
+GLIBC_2.32 canonicalizef32 F
+GLIBC_2.32 canonicalizef32x F
+GLIBC_2.32 canonicalizef64 F
+GLIBC_2.32 canonicalizel F
+GLIBC_2.32 carg F
+GLIBC_2.32 cargf F
+GLIBC_2.32 cargf32 F
+GLIBC_2.32 cargf32x F
+GLIBC_2.32 cargf64 F
+GLIBC_2.32 cargl F
+GLIBC_2.32 casin F
+GLIBC_2.32 casinf F
+GLIBC_2.32 casinf32 F
+GLIBC_2.32 casinf32x F
+GLIBC_2.32 casinf64 F
+GLIBC_2.32 casinh F
+GLIBC_2.32 casinhf F
+GLIBC_2.32 casinhf32 F
+GLIBC_2.32 casinhf32x F
+GLIBC_2.32 casinhf64 F
+GLIBC_2.32 casinhl F
+GLIBC_2.32 casinl F
+GLIBC_2.32 catan F
+GLIBC_2.32 catanf F
+GLIBC_2.32 catanf32 F
+GLIBC_2.32 catanf32x F
+GLIBC_2.32 catanf64 F
+GLIBC_2.32 catanh F
+GLIBC_2.32 catanhf F
+GLIBC_2.32 catanhf32 F
+GLIBC_2.32 catanhf32x F
+GLIBC_2.32 catanhf64 F
+GLIBC_2.32 catanhl F
+GLIBC_2.32 catanl F
+GLIBC_2.32 cbrt F
+GLIBC_2.32 cbrtf F
+GLIBC_2.32 cbrtf32 F
+GLIBC_2.32 cbrtf32x F
+GLIBC_2.32 cbrtf64 F
+GLIBC_2.32 cbrtl F
+GLIBC_2.32 ccos F
+GLIBC_2.32 ccosf F
+GLIBC_2.32 ccosf32 F
+GLIBC_2.32 ccosf32x F
+GLIBC_2.32 ccosf64 F
+GLIBC_2.32 ccosh F
+GLIBC_2.32 ccoshf F
+GLIBC_2.32 ccoshf32 F
+GLIBC_2.32 ccoshf32x F
+GLIBC_2.32 ccoshf64 F
+GLIBC_2.32 ccoshl F
+GLIBC_2.32 ccosl F
+GLIBC_2.32 ceil F
+GLIBC_2.32 ceilf F
+GLIBC_2.32 ceilf32 F
+GLIBC_2.32 ceilf32x F
+GLIBC_2.32 ceilf64 F
+GLIBC_2.32 ceill F
+GLIBC_2.32 cexp F
+GLIBC_2.32 cexpf F
+GLIBC_2.32 cexpf32 F
+GLIBC_2.32 cexpf32x F
+GLIBC_2.32 cexpf64 F
+GLIBC_2.32 cexpl F
+GLIBC_2.32 cimag F
+GLIBC_2.32 cimagf F
+GLIBC_2.32 cimagf32 F
+GLIBC_2.32 cimagf32x F
+GLIBC_2.32 cimagf64 F
+GLIBC_2.32 cimagl F
+GLIBC_2.32 clog F
+GLIBC_2.32 clog10 F
+GLIBC_2.32 clog10f F
+GLIBC_2.32 clog10f32 F
+GLIBC_2.32 clog10f32x F
+GLIBC_2.32 clog10f64 F
+GLIBC_2.32 clog10l F
+GLIBC_2.32 clogf F
+GLIBC_2.32 clogf32 F
+GLIBC_2.32 clogf32x F
+GLIBC_2.32 clogf64 F
+GLIBC_2.32 clogl F
+GLIBC_2.32 conj F
+GLIBC_2.32 conjf F
+GLIBC_2.32 conjf32 F
+GLIBC_2.32 conjf32x F
+GLIBC_2.32 conjf64 F
+GLIBC_2.32 conjl F
+GLIBC_2.32 copysign F
+GLIBC_2.32 copysignf F
+GLIBC_2.32 copysignf32 F
+GLIBC_2.32 copysignf32x F
+GLIBC_2.32 copysignf64 F
+GLIBC_2.32 copysignl F
+GLIBC_2.32 cos F
+GLIBC_2.32 cosf F
+GLIBC_2.32 cosf32 F
+GLIBC_2.32 cosf32x F
+GLIBC_2.32 cosf64 F
+GLIBC_2.32 cosh F
+GLIBC_2.32 coshf F
+GLIBC_2.32 coshf32 F
+GLIBC_2.32 coshf32x F
+GLIBC_2.32 coshf64 F
+GLIBC_2.32 coshl F
+GLIBC_2.32 cosl F
+GLIBC_2.32 cpow F
+GLIBC_2.32 cpowf F
+GLIBC_2.32 cpowf32 F
+GLIBC_2.32 cpowf32x F
+GLIBC_2.32 cpowf64 F
+GLIBC_2.32 cpowl F
+GLIBC_2.32 cproj F
+GLIBC_2.32 cprojf F
+GLIBC_2.32 cprojf32 F
+GLIBC_2.32 cprojf32x F
+GLIBC_2.32 cprojf64 F
+GLIBC_2.32 cprojl F
+GLIBC_2.32 creal F
+GLIBC_2.32 crealf F
+GLIBC_2.32 crealf32 F
+GLIBC_2.32 crealf32x F
+GLIBC_2.32 crealf64 F
+GLIBC_2.32 creall F
+GLIBC_2.32 csin F
+GLIBC_2.32 csinf F
+GLIBC_2.32 csinf32 F
+GLIBC_2.32 csinf32x F
+GLIBC_2.32 csinf64 F
+GLIBC_2.32 csinh F
+GLIBC_2.32 csinhf F
+GLIBC_2.32 csinhf32 F
+GLIBC_2.32 csinhf32x F
+GLIBC_2.32 csinhf64 F
+GLIBC_2.32 csinhl F
+GLIBC_2.32 csinl F
+GLIBC_2.32 csqrt F
+GLIBC_2.32 csqrtf F
+GLIBC_2.32 csqrtf32 F
+GLIBC_2.32 csqrtf32x F
+GLIBC_2.32 csqrtf64 F
+GLIBC_2.32 csqrtl F
+GLIBC_2.32 ctan F
+GLIBC_2.32 ctanf F
+GLIBC_2.32 ctanf32 F
+GLIBC_2.32 ctanf32x F
+GLIBC_2.32 ctanf64 F
+GLIBC_2.32 ctanh F
+GLIBC_2.32 ctanhf F
+GLIBC_2.32 ctanhf32 F
+GLIBC_2.32 ctanhf32x F
+GLIBC_2.32 ctanhf64 F
+GLIBC_2.32 ctanhl F
+GLIBC_2.32 ctanl F
+GLIBC_2.32 daddl F
+GLIBC_2.32 ddivl F
+GLIBC_2.32 dmull F
+GLIBC_2.32 drem F
+GLIBC_2.32 dremf F
+GLIBC_2.32 dreml F
+GLIBC_2.32 dsubl F
+GLIBC_2.32 erf F
+GLIBC_2.32 erfc F
+GLIBC_2.32 erfcf F
+GLIBC_2.32 erfcf32 F
+GLIBC_2.32 erfcf32x F
+GLIBC_2.32 erfcf64 F
+GLIBC_2.32 erfcl F
+GLIBC_2.32 erff F
+GLIBC_2.32 erff32 F
+GLIBC_2.32 erff32x F
+GLIBC_2.32 erff64 F
+GLIBC_2.32 erfl F
+GLIBC_2.32 exp F
+GLIBC_2.32 exp10 F
+GLIBC_2.32 exp10f F
+GLIBC_2.32 exp10f32 F
+GLIBC_2.32 exp10f32x F
+GLIBC_2.32 exp10f64 F
+GLIBC_2.32 exp10l F
+GLIBC_2.32 exp2 F
+GLIBC_2.32 exp2f F
+GLIBC_2.32 exp2f32 F
+GLIBC_2.32 exp2f32x F
+GLIBC_2.32 exp2f64 F
+GLIBC_2.32 exp2l F
+GLIBC_2.32 expf F
+GLIBC_2.32 expf32 F
+GLIBC_2.32 expf32x F
+GLIBC_2.32 expf64 F
+GLIBC_2.32 expl F
+GLIBC_2.32 expm1 F
+GLIBC_2.32 expm1f F
+GLIBC_2.32 expm1f32 F
+GLIBC_2.32 expm1f32x F
+GLIBC_2.32 expm1f64 F
+GLIBC_2.32 expm1l F
+GLIBC_2.32 f32addf32x F
+GLIBC_2.32 f32addf64 F
+GLIBC_2.32 f32divf32x F
+GLIBC_2.32 f32divf64 F
+GLIBC_2.32 f32mulf32x F
+GLIBC_2.32 f32mulf64 F
+GLIBC_2.32 f32subf32x F
+GLIBC_2.32 f32subf64 F
+GLIBC_2.32 f32xaddf64 F
+GLIBC_2.32 f32xdivf64 F
+GLIBC_2.32 f32xmulf64 F
+GLIBC_2.32 f32xsubf64 F
+GLIBC_2.32 fabs F
+GLIBC_2.32 fabsf F
+GLIBC_2.32 fabsf32 F
+GLIBC_2.32 fabsf32x F
+GLIBC_2.32 fabsf64 F
+GLIBC_2.32 fabsl F
+GLIBC_2.32 fadd F
+GLIBC_2.32 faddl F
+GLIBC_2.32 fdim F
+GLIBC_2.32 fdimf F
+GLIBC_2.32 fdimf32 F
+GLIBC_2.32 fdimf32x F
+GLIBC_2.32 fdimf64 F
+GLIBC_2.32 fdiml F
+GLIBC_2.32 fdiv F
+GLIBC_2.32 fdivl F
+GLIBC_2.32 feclearexcept F
+GLIBC_2.32 fedisableexcept F
+GLIBC_2.32 feenableexcept F
+GLIBC_2.32 fegetenv F
+GLIBC_2.32 fegetexcept F
+GLIBC_2.32 fegetexceptflag F
+GLIBC_2.32 fegetmode F
+GLIBC_2.32 fegetround F
+GLIBC_2.32 feholdexcept F
+GLIBC_2.32 feraiseexcept F
+GLIBC_2.32 fesetenv F
+GLIBC_2.32 fesetexcept F
+GLIBC_2.32 fesetexceptflag F
+GLIBC_2.32 fesetmode F
+GLIBC_2.32 fesetround F
+GLIBC_2.32 fetestexcept F
+GLIBC_2.32 fetestexceptflag F
+GLIBC_2.32 feupdateenv F
+GLIBC_2.32 finite F
+GLIBC_2.32 finitef F
+GLIBC_2.32 finitel F
+GLIBC_2.32 floor F
+GLIBC_2.32 floorf F
+GLIBC_2.32 floorf32 F
+GLIBC_2.32 floorf32x F
+GLIBC_2.32 floorf64 F
+GLIBC_2.32 floorl F
+GLIBC_2.32 fma F
+GLIBC_2.32 fmaf F
+GLIBC_2.32 fmaf32 F
+GLIBC_2.32 fmaf32x F
+GLIBC_2.32 fmaf64 F
+GLIBC_2.32 fmal F
+GLIBC_2.32 fmax F
+GLIBC_2.32 fmaxf F
+GLIBC_2.32 fmaxf32 F
+GLIBC_2.32 fmaxf32x F
+GLIBC_2.32 fmaxf64 F
+GLIBC_2.32 fmaxl F
+GLIBC_2.32 fmaxmag F
+GLIBC_2.32 fmaxmagf F
+GLIBC_2.32 fmaxmagf32 F
+GLIBC_2.32 fmaxmagf32x F
+GLIBC_2.32 fmaxmagf64 F
+GLIBC_2.32 fmaxmagl F
+GLIBC_2.32 fmin F
+GLIBC_2.32 fminf F
+GLIBC_2.32 fminf32 F
+GLIBC_2.32 fminf32x F
+GLIBC_2.32 fminf64 F
+GLIBC_2.32 fminl F
+GLIBC_2.32 fminmag F
+GLIBC_2.32 fminmagf F
+GLIBC_2.32 fminmagf32 F
+GLIBC_2.32 fminmagf32x F
+GLIBC_2.32 fminmagf64 F
+GLIBC_2.32 fminmagl F
+GLIBC_2.32 fmod F
+GLIBC_2.32 fmodf F
+GLIBC_2.32 fmodf32 F
+GLIBC_2.32 fmodf32x F
+GLIBC_2.32 fmodf64 F
+GLIBC_2.32 fmodl F
+GLIBC_2.32 fmul F
+GLIBC_2.32 fmull F
+GLIBC_2.32 frexp F
+GLIBC_2.32 frexpf F
+GLIBC_2.32 frexpf32 F
+GLIBC_2.32 frexpf32x F
+GLIBC_2.32 frexpf64 F
+GLIBC_2.32 frexpl F
+GLIBC_2.32 fromfp F
+GLIBC_2.32 fromfpf F
+GLIBC_2.32 fromfpf32 F
+GLIBC_2.32 fromfpf32x F
+GLIBC_2.32 fromfpf64 F
+GLIBC_2.32 fromfpl F
+GLIBC_2.32 fromfpx F
+GLIBC_2.32 fromfpxf F
+GLIBC_2.32 fromfpxf32 F
+GLIBC_2.32 fromfpxf32x F
+GLIBC_2.32 fromfpxf64 F
+GLIBC_2.32 fromfpxl F
+GLIBC_2.32 fsub F
+GLIBC_2.32 fsubl F
+GLIBC_2.32 gamma F
+GLIBC_2.32 gammaf F
+GLIBC_2.32 gammal F
+GLIBC_2.32 getpayload F
+GLIBC_2.32 getpayloadf F
+GLIBC_2.32 getpayloadf32 F
+GLIBC_2.32 getpayloadf32x F
+GLIBC_2.32 getpayloadf64 F
+GLIBC_2.32 getpayloadl F
+GLIBC_2.32 hypot F
+GLIBC_2.32 hypotf F
+GLIBC_2.32 hypotf32 F
+GLIBC_2.32 hypotf32x F
+GLIBC_2.32 hypotf64 F
+GLIBC_2.32 hypotl F
+GLIBC_2.32 ilogb F
+GLIBC_2.32 ilogbf F
+GLIBC_2.32 ilogbf32 F
+GLIBC_2.32 ilogbf32x F
+GLIBC_2.32 ilogbf64 F
+GLIBC_2.32 ilogbl F
+GLIBC_2.32 j0 F
+GLIBC_2.32 j0f F
+GLIBC_2.32 j0f32 F
+GLIBC_2.32 j0f32x F
+GLIBC_2.32 j0f64 F
+GLIBC_2.32 j0l F
+GLIBC_2.32 j1 F
+GLIBC_2.32 j1f F
+GLIBC_2.32 j1f32 F
+GLIBC_2.32 j1f32x F
+GLIBC_2.32 j1f64 F
+GLIBC_2.32 j1l F
+GLIBC_2.32 jn F
+GLIBC_2.32 jnf F
+GLIBC_2.32 jnf32 F
+GLIBC_2.32 jnf32x F
+GLIBC_2.32 jnf64 F
+GLIBC_2.32 jnl F
+GLIBC_2.32 ldexp F
+GLIBC_2.32 ldexpf F
+GLIBC_2.32 ldexpf32 F
+GLIBC_2.32 ldexpf32x F
+GLIBC_2.32 ldexpf64 F
+GLIBC_2.32 ldexpl F
+GLIBC_2.32 lgamma F
+GLIBC_2.32 lgamma_r F
+GLIBC_2.32 lgammaf F
+GLIBC_2.32 lgammaf32 F
+GLIBC_2.32 lgammaf32_r F
+GLIBC_2.32 lgammaf32x F
+GLIBC_2.32 lgammaf32x_r F
+GLIBC_2.32 lgammaf64 F
+GLIBC_2.32 lgammaf64_r F
+GLIBC_2.32 lgammaf_r F
+GLIBC_2.32 lgammal F
+GLIBC_2.32 lgammal_r F
+GLIBC_2.32 llogb F
+GLIBC_2.32 llogbf F
+GLIBC_2.32 llogbf32 F
+GLIBC_2.32 llogbf32x F
+GLIBC_2.32 llogbf64 F
+GLIBC_2.32 llogbl F
+GLIBC_2.32 llrint F
+GLIBC_2.32 llrintf F
+GLIBC_2.32 llrintf32 F
+GLIBC_2.32 llrintf32x F
+GLIBC_2.32 llrintf64 F
+GLIBC_2.32 llrintl F
+GLIBC_2.32 llround F
+GLIBC_2.32 llroundf F
+GLIBC_2.32 llroundf32 F
+GLIBC_2.32 llroundf32x F
+GLIBC_2.32 llroundf64 F
+GLIBC_2.32 llroundl F
+GLIBC_2.32 log F
+GLIBC_2.32 log10 F
+GLIBC_2.32 log10f F
+GLIBC_2.32 log10f32 F
+GLIBC_2.32 log10f32x F
+GLIBC_2.32 log10f64 F
+GLIBC_2.32 log10l F
+GLIBC_2.32 log1p F
+GLIBC_2.32 log1pf F
+GLIBC_2.32 log1pf32 F
+GLIBC_2.32 log1pf32x F
+GLIBC_2.32 log1pf64 F
+GLIBC_2.32 log1pl F
+GLIBC_2.32 log2 F
+GLIBC_2.32 log2f F
+GLIBC_2.32 log2f32 F
+GLIBC_2.32 log2f32x F
+GLIBC_2.32 log2f64 F
+GLIBC_2.32 log2l F
+GLIBC_2.32 logb F
+GLIBC_2.32 logbf F
+GLIBC_2.32 logbf32 F
+GLIBC_2.32 logbf32x F
+GLIBC_2.32 logbf64 F
+GLIBC_2.32 logbl F
+GLIBC_2.32 logf F
+GLIBC_2.32 logf32 F
+GLIBC_2.32 logf32x F
+GLIBC_2.32 logf64 F
+GLIBC_2.32 logl F
+GLIBC_2.32 lrint F
+GLIBC_2.32 lrintf F
+GLIBC_2.32 lrintf32 F
+GLIBC_2.32 lrintf32x F
+GLIBC_2.32 lrintf64 F
+GLIBC_2.32 lrintl F
+GLIBC_2.32 lround F
+GLIBC_2.32 lroundf F
+GLIBC_2.32 lroundf32 F
+GLIBC_2.32 lroundf32x F
+GLIBC_2.32 lroundf64 F
+GLIBC_2.32 lroundl F
+GLIBC_2.32 modf F
+GLIBC_2.32 modff F
+GLIBC_2.32 modff32 F
+GLIBC_2.32 modff32x F
+GLIBC_2.32 modff64 F
+GLIBC_2.32 modfl F
+GLIBC_2.32 nan F
+GLIBC_2.32 nanf F
+GLIBC_2.32 nanf32 F
+GLIBC_2.32 nanf32x F
+GLIBC_2.32 nanf64 F
+GLIBC_2.32 nanl F
+GLIBC_2.32 nearbyint F
+GLIBC_2.32 nearbyintf F
+GLIBC_2.32 nearbyintf32 F
+GLIBC_2.32 nearbyintf32x F
+GLIBC_2.32 nearbyintf64 F
+GLIBC_2.32 nearbyintl F
+GLIBC_2.32 nextafter F
+GLIBC_2.32 nextafterf F
+GLIBC_2.32 nextafterf32 F
+GLIBC_2.32 nextafterf32x F
+GLIBC_2.32 nextafterf64 F
+GLIBC_2.32 nextafterl F
+GLIBC_2.32 nextdown F
+GLIBC_2.32 nextdownf F
+GLIBC_2.32 nextdownf32 F
+GLIBC_2.32 nextdownf32x F
+GLIBC_2.32 nextdownf64 F
+GLIBC_2.32 nextdownl F
+GLIBC_2.32 nexttoward F
+GLIBC_2.32 nexttowardf F
+GLIBC_2.32 nexttowardl F
+GLIBC_2.32 nextup F
+GLIBC_2.32 nextupf F
+GLIBC_2.32 nextupf32 F
+GLIBC_2.32 nextupf32x F
+GLIBC_2.32 nextupf64 F
+GLIBC_2.32 nextupl F
+GLIBC_2.32 pow F
+GLIBC_2.32 powf F
+GLIBC_2.32 powf32 F
+GLIBC_2.32 powf32x F
+GLIBC_2.32 powf64 F
+GLIBC_2.32 powl F
+GLIBC_2.32 remainder F
+GLIBC_2.32 remainderf F
+GLIBC_2.32 remainderf32 F
+GLIBC_2.32 remainderf32x F
+GLIBC_2.32 remainderf64 F
+GLIBC_2.32 remainderl F
+GLIBC_2.32 remquo F
+GLIBC_2.32 remquof F
+GLIBC_2.32 remquof32 F
+GLIBC_2.32 remquof32x F
+GLIBC_2.32 remquof64 F
+GLIBC_2.32 remquol F
+GLIBC_2.32 rint F
+GLIBC_2.32 rintf F
+GLIBC_2.32 rintf32 F
+GLIBC_2.32 rintf32x F
+GLIBC_2.32 rintf64 F
+GLIBC_2.32 rintl F
+GLIBC_2.32 round F
+GLIBC_2.32 roundeven F
+GLIBC_2.32 roundevenf F
+GLIBC_2.32 roundevenf32 F
+GLIBC_2.32 roundevenf32x F
+GLIBC_2.32 roundevenf64 F
+GLIBC_2.32 roundevenl F
+GLIBC_2.32 roundf F
+GLIBC_2.32 roundf32 F
+GLIBC_2.32 roundf32x F
+GLIBC_2.32 roundf64 F
+GLIBC_2.32 roundl F
+GLIBC_2.32 scalb F
+GLIBC_2.32 scalbf F
+GLIBC_2.32 scalbl F
+GLIBC_2.32 scalbln F
+GLIBC_2.32 scalblnf F
+GLIBC_2.32 scalblnf32 F
+GLIBC_2.32 scalblnf32x F
+GLIBC_2.32 scalblnf64 F
+GLIBC_2.32 scalblnl F
+GLIBC_2.32 scalbn F
+GLIBC_2.32 scalbnf F
+GLIBC_2.32 scalbnf32 F
+GLIBC_2.32 scalbnf32x F
+GLIBC_2.32 scalbnf64 F
+GLIBC_2.32 scalbnl F
+GLIBC_2.32 setpayload F
+GLIBC_2.32 setpayloadf F
+GLIBC_2.32 setpayloadf32 F
+GLIBC_2.32 setpayloadf32x F
+GLIBC_2.32 setpayloadf64 F
+GLIBC_2.32 setpayloadl F
+GLIBC_2.32 setpayloadsig F
+GLIBC_2.32 setpayloadsigf F
+GLIBC_2.32 setpayloadsigf32 F
+GLIBC_2.32 setpayloadsigf32x F
+GLIBC_2.32 setpayloadsigf64 F
+GLIBC_2.32 setpayloadsigl F
+GLIBC_2.32 signgam D 0x4
+GLIBC_2.32 significand F
+GLIBC_2.32 significandf F
+GLIBC_2.32 significandl F
+GLIBC_2.32 sin F
+GLIBC_2.32 sincos F
+GLIBC_2.32 sincosf F
+GLIBC_2.32 sincosf32 F
+GLIBC_2.32 sincosf32x F
+GLIBC_2.32 sincosf64 F
+GLIBC_2.32 sincosl F
+GLIBC_2.32 sinf F
+GLIBC_2.32 sinf32 F
+GLIBC_2.32 sinf32x F
+GLIBC_2.32 sinf64 F
+GLIBC_2.32 sinh F
+GLIBC_2.32 sinhf F
+GLIBC_2.32 sinhf32 F
+GLIBC_2.32 sinhf32x F
+GLIBC_2.32 sinhf64 F
+GLIBC_2.32 sinhl F
+GLIBC_2.32 sinl F
+GLIBC_2.32 sqrt F
+GLIBC_2.32 sqrtf F
+GLIBC_2.32 sqrtf32 F
+GLIBC_2.32 sqrtf32x F
+GLIBC_2.32 sqrtf64 F
+GLIBC_2.32 sqrtl F
+GLIBC_2.32 tan F
+GLIBC_2.32 tanf F
+GLIBC_2.32 tanf32 F
+GLIBC_2.32 tanf32x F
+GLIBC_2.32 tanf64 F
+GLIBC_2.32 tanh F
+GLIBC_2.32 tanhf F
+GLIBC_2.32 tanhf32 F
+GLIBC_2.32 tanhf32x F
+GLIBC_2.32 tanhf64 F
+GLIBC_2.32 tanhl F
+GLIBC_2.32 tanl F
+GLIBC_2.32 tgamma F
+GLIBC_2.32 tgammaf F
+GLIBC_2.32 tgammaf32 F
+GLIBC_2.32 tgammaf32x F
+GLIBC_2.32 tgammaf64 F
+GLIBC_2.32 tgammal F
+GLIBC_2.32 totalorder F
+GLIBC_2.32 totalorderf F
+GLIBC_2.32 totalorderf32 F
+GLIBC_2.32 totalorderf32x F
+GLIBC_2.32 totalorderf64 F
+GLIBC_2.32 totalorderl F
+GLIBC_2.32 totalordermag F
+GLIBC_2.32 totalordermagf F
+GLIBC_2.32 totalordermagf32 F
+GLIBC_2.32 totalordermagf32x F
+GLIBC_2.32 totalordermagf64 F
+GLIBC_2.32 totalordermagl F
+GLIBC_2.32 trunc F
+GLIBC_2.32 truncf F
+GLIBC_2.32 truncf32 F
+GLIBC_2.32 truncf32x F
+GLIBC_2.32 truncf64 F
+GLIBC_2.32 truncl F
+GLIBC_2.32 ufromfp F
+GLIBC_2.32 ufromfpf F
+GLIBC_2.32 ufromfpf32 F
+GLIBC_2.32 ufromfpf32x F
+GLIBC_2.32 ufromfpf64 F
+GLIBC_2.32 ufromfpl F
+GLIBC_2.32 ufromfpx F
+GLIBC_2.32 ufromfpxf F
+GLIBC_2.32 ufromfpxf32 F
+GLIBC_2.32 ufromfpxf32x F
+GLIBC_2.32 ufromfpxf64 F
+GLIBC_2.32 ufromfpxl F
+GLIBC_2.32 y0 F
+GLIBC_2.32 y0f F
+GLIBC_2.32 y0f32 F
+GLIBC_2.32 y0f32x F
+GLIBC_2.32 y0f64 F
+GLIBC_2.32 y0l F
+GLIBC_2.32 y1 F
+GLIBC_2.32 y1f F
+GLIBC_2.32 y1f32 F
+GLIBC_2.32 y1f32x F
+GLIBC_2.32 y1f64 F
+GLIBC_2.32 y1l F
+GLIBC_2.32 yn F
+GLIBC_2.32 ynf F
+GLIBC_2.32 ynf32 F
+GLIBC_2.32 ynf32x F
+GLIBC_2.32 ynf64 F
+GLIBC_2.32 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 000000000000..4bf24e062c83
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -0,0 +1,217 @@
+GLIBC_2.32 _IO_flockfile F
+GLIBC_2.32 _IO_ftrylockfile F
+GLIBC_2.32 _IO_funlockfile F
+GLIBC_2.32 __close F
+GLIBC_2.32 __connect F
+GLIBC_2.32 __errno_location F
+GLIBC_2.32 __h_errno_location F
+GLIBC_2.32 __libc_allocate_rtsig F
+GLIBC_2.32 __libc_current_sigrtmax F
+GLIBC_2.32 __libc_current_sigrtmin F
+GLIBC_2.32 __lseek F
+GLIBC_2.32 __open F
+GLIBC_2.32 __open64 F
+GLIBC_2.32 __pread64 F
+GLIBC_2.32 __pthread_cleanup_routine F
+GLIBC_2.32 __pthread_getspecific F
+GLIBC_2.32 __pthread_key_create F
+GLIBC_2.32 __pthread_mutex_destroy F
+GLIBC_2.32 __pthread_mutex_init F
+GLIBC_2.32 __pthread_mutex_lock F
+GLIBC_2.32 __pthread_mutex_trylock F
+GLIBC_2.32 __pthread_mutex_unlock F
+GLIBC_2.32 __pthread_mutexattr_destroy F
+GLIBC_2.32 __pthread_mutexattr_init F
+GLIBC_2.32 __pthread_mutexattr_settype F
+GLIBC_2.32 __pthread_once F
+GLIBC_2.32 __pthread_register_cancel F
+GLIBC_2.32 __pthread_register_cancel_defer F
+GLIBC_2.32 __pthread_rwlock_destroy F
+GLIBC_2.32 __pthread_rwlock_init F
+GLIBC_2.32 __pthread_rwlock_rdlock F
+GLIBC_2.32 __pthread_rwlock_tryrdlock F
+GLIBC_2.32 __pthread_rwlock_trywrlock F
+GLIBC_2.32 __pthread_rwlock_unlock F
+GLIBC_2.32 __pthread_rwlock_wrlock F
+GLIBC_2.32 __pthread_setspecific F
+GLIBC_2.32 __pthread_unregister_cancel F
+GLIBC_2.32 __pthread_unregister_cancel_restore F
+GLIBC_2.32 __pthread_unwind_next F
+GLIBC_2.32 __pwrite64 F
+GLIBC_2.32 __read F
+GLIBC_2.32 __res_state F
+GLIBC_2.32 __send F
+GLIBC_2.32 __sigaction F
+GLIBC_2.32 __write F
+GLIBC_2.32 _pthread_cleanup_pop F
+GLIBC_2.32 _pthread_cleanup_pop_restore F
+GLIBC_2.32 _pthread_cleanup_push F
+GLIBC_2.32 _pthread_cleanup_push_defer F
+GLIBC_2.32 accept F
+GLIBC_2.32 call_once F
+GLIBC_2.32 close F
+GLIBC_2.32 cnd_broadcast F
+GLIBC_2.32 cnd_destroy F
+GLIBC_2.32 cnd_init F
+GLIBC_2.32 cnd_signal F
+GLIBC_2.32 cnd_timedwait F
+GLIBC_2.32 cnd_wait F
+GLIBC_2.32 connect F
+GLIBC_2.32 flockfile F
+GLIBC_2.32 fsync F
+GLIBC_2.32 ftrylockfile F
+GLIBC_2.32 funlockfile F
+GLIBC_2.32 lseek F
+GLIBC_2.32 lseek64 F
+GLIBC_2.32 msync F
+GLIBC_2.32 mtx_destroy F
+GLIBC_2.32 mtx_init F
+GLIBC_2.32 mtx_lock F
+GLIBC_2.32 mtx_timedlock F
+GLIBC_2.32 mtx_trylock F
+GLIBC_2.32 mtx_unlock F
+GLIBC_2.32 open F
+GLIBC_2.32 open64 F
+GLIBC_2.32 pause F
+GLIBC_2.32 pread F
+GLIBC_2.32 pread64 F
+GLIBC_2.32 pthread_attr_getaffinity_np F
+GLIBC_2.32 pthread_attr_getguardsize F
+GLIBC_2.32 pthread_attr_getstack F
+GLIBC_2.32 pthread_attr_getstackaddr F
+GLIBC_2.32 pthread_attr_getstacksize F
+GLIBC_2.32 pthread_attr_setaffinity_np F
+GLIBC_2.32 pthread_attr_setguardsize F
+GLIBC_2.32 pthread_attr_setstack F
+GLIBC_2.32 pthread_attr_setstackaddr F
+GLIBC_2.32 pthread_attr_setstacksize F
+GLIBC_2.32 pthread_barrier_destroy F
+GLIBC_2.32 pthread_barrier_init F
+GLIBC_2.32 pthread_barrier_wait F
+GLIBC_2.32 pthread_barrierattr_destroy F
+GLIBC_2.32 pthread_barrierattr_getpshared F
+GLIBC_2.32 pthread_barrierattr_init F
+GLIBC_2.32 pthread_barrierattr_setpshared F
+GLIBC_2.32 pthread_cancel F
+GLIBC_2.32 pthread_clockjoin_np F
+GLIBC_2.32 pthread_cond_broadcast F
+GLIBC_2.32 pthread_cond_clockwait F
+GLIBC_2.32 pthread_cond_signal F
+GLIBC_2.32 pthread_cond_timedwait F
+GLIBC_2.32 pthread_cond_wait F
+GLIBC_2.32 pthread_condattr_getclock F
+GLIBC_2.32 pthread_condattr_getpshared F
+GLIBC_2.32 pthread_condattr_setclock F
+GLIBC_2.32 pthread_condattr_setpshared F
+GLIBC_2.32 pthread_create F
+GLIBC_2.32 pthread_detach F
+GLIBC_2.32 pthread_exit F
+GLIBC_2.32 pthread_getaffinity_np F
+GLIBC_2.32 pthread_getattr_default_np F
+GLIBC_2.32 pthread_getattr_np F
+GLIBC_2.32 pthread_getconcurrency F
+GLIBC_2.32 pthread_getcpuclockid F
+GLIBC_2.32 pthread_getname_np F
+GLIBC_2.32 pthread_getspecific F
+GLIBC_2.32 pthread_join F
+GLIBC_2.32 pthread_key_create F
+GLIBC_2.32 pthread_key_delete F
+GLIBC_2.32 pthread_kill F
+GLIBC_2.32 pthread_kill_other_threads_np F
+GLIBC_2.32 pthread_mutex_clocklock F
+GLIBC_2.32 pthread_mutex_consistent F
+GLIBC_2.32 pthread_mutex_consistent_np F
+GLIBC_2.32 pthread_mutex_destroy F
+GLIBC_2.32 pthread_mutex_getprioceiling F
+GLIBC_2.32 pthread_mutex_init F
+GLIBC_2.32 pthread_mutex_lock F
+GLIBC_2.32 pthread_mutex_setprioceiling F
+GLIBC_2.32 pthread_mutex_timedlock F
+GLIBC_2.32 pthread_mutex_trylock F
+GLIBC_2.32 pthread_mutex_unlock F
+GLIBC_2.32 pthread_mutexattr_destroy F
+GLIBC_2.32 pthread_mutexattr_getkind_np F
+GLIBC_2.32 pthread_mutexattr_getprioceiling F
+GLIBC_2.32 pthread_mutexattr_getprotocol F
+GLIBC_2.32 pthread_mutexattr_getpshared F
+GLIBC_2.32 pthread_mutexattr_getrobust F
+GLIBC_2.32 pthread_mutexattr_getrobust_np F
+GLIBC_2.32 pthread_mutexattr_gettype F
+GLIBC_2.32 pthread_mutexattr_init F
+GLIBC_2.32 pthread_mutexattr_setkind_np F
+GLIBC_2.32 pthread_mutexattr_setprioceiling F
+GLIBC_2.32 pthread_mutexattr_setprotocol F
+GLIBC_2.32 pthread_mutexattr_setpshared F
+GLIBC_2.32 pthread_mutexattr_setrobust F
+GLIBC_2.32 pthread_mutexattr_setrobust_np F
+GLIBC_2.32 pthread_mutexattr_settype F
+GLIBC_2.32 pthread_once F
+GLIBC_2.32 pthread_rwlock_clockrdlock F
+GLIBC_2.32 pthread_rwlock_clockwrlock F
+GLIBC_2.32 pthread_rwlock_destroy F
+GLIBC_2.32 pthread_rwlock_init F
+GLIBC_2.32 pthread_rwlock_rdlock F
+GLIBC_2.32 pthread_rwlock_timedrdlock F
+GLIBC_2.32 pthread_rwlock_timedwrlock F
+GLIBC_2.32 pthread_rwlock_tryrdlock F
+GLIBC_2.32 pthread_rwlock_trywrlock F
+GLIBC_2.32 pthread_rwlock_unlock F
+GLIBC_2.32 pthread_rwlock_wrlock F
+GLIBC_2.32 pthread_rwlockattr_destroy F
+GLIBC_2.32 pthread_rwlockattr_getkind_np F
+GLIBC_2.32 pthread_rwlockattr_getpshared F
+GLIBC_2.32 pthread_rwlockattr_init F
+GLIBC_2.32 pthread_rwlockattr_setkind_np F
+GLIBC_2.32 pthread_rwlockattr_setpshared F
+GLIBC_2.32 pthread_setaffinity_np F
+GLIBC_2.32 pthread_setattr_default_np F
+GLIBC_2.32 pthread_setcancelstate F
+GLIBC_2.32 pthread_setcanceltype F
+GLIBC_2.32 pthread_setconcurrency F
+GLIBC_2.32 pthread_setname_np F
+GLIBC_2.32 pthread_setschedprio F
+GLIBC_2.32 pthread_setspecific F
+GLIBC_2.32 pthread_sigmask F
+GLIBC_2.32 pthread_sigqueue F
+GLIBC_2.32 pthread_spin_destroy F
+GLIBC_2.32 pthread_spin_init F
+GLIBC_2.32 pthread_spin_lock F
+GLIBC_2.32 pthread_spin_trylock F
+GLIBC_2.32 pthread_spin_unlock F
+GLIBC_2.32 pthread_testcancel F
+GLIBC_2.32 pthread_timedjoin_np F
+GLIBC_2.32 pthread_tryjoin_np F
+GLIBC_2.32 pthread_yield F
+GLIBC_2.32 pwrite F
+GLIBC_2.32 pwrite64 F
+GLIBC_2.32 raise F
+GLIBC_2.32 read F
+GLIBC_2.32 recv F
+GLIBC_2.32 recvfrom F
+GLIBC_2.32 recvmsg F
+GLIBC_2.32 sem_clockwait F
+GLIBC_2.32 sem_close F
+GLIBC_2.32 sem_destroy F
+GLIBC_2.32 sem_getvalue F
+GLIBC_2.32 sem_init F
+GLIBC_2.32 sem_open F
+GLIBC_2.32 sem_post F
+GLIBC_2.32 sem_timedwait F
+GLIBC_2.32 sem_trywait F
+GLIBC_2.32 sem_unlink F
+GLIBC_2.32 sem_wait F
+GLIBC_2.32 send F
+GLIBC_2.32 sendmsg F
+GLIBC_2.32 sendto F
+GLIBC_2.32 sigaction F
+GLIBC_2.32 sigwait F
+GLIBC_2.32 tcdrain F
+GLIBC_2.32 thrd_create F
+GLIBC_2.32 thrd_detach F
+GLIBC_2.32 thrd_exit F
+GLIBC_2.32 thrd_join F
+GLIBC_2.32 tss_create F
+GLIBC_2.32 tss_delete F
+GLIBC_2.32 tss_get F
+GLIBC_2.32 tss_set F
+GLIBC_2.32 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 000000000000..c5edf99ea942
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libresolv.abilist
@@ -0,0 +1,79 @@
+GLIBC_2.32 __b64_ntop F
+GLIBC_2.32 __b64_pton F
+GLIBC_2.32 __dn_comp F
+GLIBC_2.32 __dn_count_labels F
+GLIBC_2.32 __dn_expand F
+GLIBC_2.32 __dn_skipname F
+GLIBC_2.32 __fp_nquery F
+GLIBC_2.32 __fp_query F
+GLIBC_2.32 __fp_resstat F
+GLIBC_2.32 __hostalias F
+GLIBC_2.32 __loc_aton F
+GLIBC_2.32 __loc_ntoa F
+GLIBC_2.32 __p_cdname F
+GLIBC_2.32 __p_cdnname F
+GLIBC_2.32 __p_class F
+GLIBC_2.32 __p_class_syms D 0x54
+GLIBC_2.32 __p_fqname F
+GLIBC_2.32 __p_fqnname F
+GLIBC_2.32 __p_option F
+GLIBC_2.32 __p_query F
+GLIBC_2.32 __p_rcode F
+GLIBC_2.32 __p_time F
+GLIBC_2.32 __p_type F
+GLIBC_2.32 __p_type_syms D 0x228
+GLIBC_2.32 __putlong F
+GLIBC_2.32 __putshort F
+GLIBC_2.32 __res_close F
+GLIBC_2.32 __res_dnok F
+GLIBC_2.32 __res_hnok F
+GLIBC_2.32 __res_hostalias F
+GLIBC_2.32 __res_isourserver F
+GLIBC_2.32 __res_mailok F
+GLIBC_2.32 __res_mkquery F
+GLIBC_2.32 __res_nameinquery F
+GLIBC_2.32 __res_nmkquery F
+GLIBC_2.32 __res_nquery F
+GLIBC_2.32 __res_nquerydomain F
+GLIBC_2.32 __res_nsearch F
+GLIBC_2.32 __res_nsend F
+GLIBC_2.32 __res_ownok F
+GLIBC_2.32 __res_queriesmatch F
+GLIBC_2.32 __res_query F
+GLIBC_2.32 __res_querydomain F
+GLIBC_2.32 __res_search F
+GLIBC_2.32 __res_send F
+GLIBC_2.32 __sym_ntop F
+GLIBC_2.32 __sym_ntos F
+GLIBC_2.32 __sym_ston F
+GLIBC_2.32 _getlong F
+GLIBC_2.32 _getshort F
+GLIBC_2.32 inet_net_ntop F
+GLIBC_2.32 inet_net_pton F
+GLIBC_2.32 inet_neta F
+GLIBC_2.32 ns_datetosecs F
+GLIBC_2.32 ns_format_ttl F
+GLIBC_2.32 ns_get16 F
+GLIBC_2.32 ns_get32 F
+GLIBC_2.32 ns_initparse F
+GLIBC_2.32 ns_makecanon F
+GLIBC_2.32 ns_msg_getflag F
+GLIBC_2.32 ns_name_compress F
+GLIBC_2.32 ns_name_ntol F
+GLIBC_2.32 ns_name_ntop F
+GLIBC_2.32 ns_name_pack F
+GLIBC_2.32 ns_name_pton F
+GLIBC_2.32 ns_name_rollback F
+GLIBC_2.32 ns_name_skip F
+GLIBC_2.32 ns_name_uncompress F
+GLIBC_2.32 ns_name_unpack F
+GLIBC_2.32 ns_parse_ttl F
+GLIBC_2.32 ns_parserr F
+GLIBC_2.32 ns_put16 F
+GLIBC_2.32 ns_put32 F
+GLIBC_2.32 ns_samedomain F
+GLIBC_2.32 ns_samename F
+GLIBC_2.32 ns_skiprr F
+GLIBC_2.32 ns_sprintrr F
+GLIBC_2.32 ns_sprintrrf F
+GLIBC_2.32 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 000000000000..fda2b20c019a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/librt.abilist
@@ -0,0 +1,35 @@
+GLIBC_2.32 __mq_open_2 F
+GLIBC_2.32 aio_cancel F
+GLIBC_2.32 aio_cancel64 F
+GLIBC_2.32 aio_error F
+GLIBC_2.32 aio_error64 F
+GLIBC_2.32 aio_fsync F
+GLIBC_2.32 aio_fsync64 F
+GLIBC_2.32 aio_init F
+GLIBC_2.32 aio_read F
+GLIBC_2.32 aio_read64 F
+GLIBC_2.32 aio_return F
+GLIBC_2.32 aio_return64 F
+GLIBC_2.32 aio_suspend F
+GLIBC_2.32 aio_suspend64 F
+GLIBC_2.32 aio_write F
+GLIBC_2.32 aio_write64 F
+GLIBC_2.32 lio_listio F
+GLIBC_2.32 lio_listio64 F
+GLIBC_2.32 mq_close F
+GLIBC_2.32 mq_getattr F
+GLIBC_2.32 mq_notify F
+GLIBC_2.32 mq_open F
+GLIBC_2.32 mq_receive F
+GLIBC_2.32 mq_send F
+GLIBC_2.32 mq_setattr F
+GLIBC_2.32 mq_timedreceive F
+GLIBC_2.32 mq_timedsend F
+GLIBC_2.32 mq_unlink F
+GLIBC_2.32 shm_open F
+GLIBC_2.32 shm_unlink F
+GLIBC_2.32 timer_create F
+GLIBC_2.32 timer_delete F
+GLIBC_2.32 timer_getoverrun F
+GLIBC_2.32 timer_gettime F
+GLIBC_2.32 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 000000000000..dcbc4a8fbef5
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libthread_db.abilist
@@ -0,0 +1,40 @@
+GLIBC_2.32 td_init F
+GLIBC_2.32 td_log F
+GLIBC_2.32 td_symbol_list F
+GLIBC_2.32 td_ta_clear_event F
+GLIBC_2.32 td_ta_delete F
+GLIBC_2.32 td_ta_enable_stats F
+GLIBC_2.32 td_ta_event_addr F
+GLIBC_2.32 td_ta_event_getmsg F
+GLIBC_2.32 td_ta_get_nthreads F
+GLIBC_2.32 td_ta_get_ph F
+GLIBC_2.32 td_ta_get_stats F
+GLIBC_2.32 td_ta_map_id2thr F
+GLIBC_2.32 td_ta_map_lwp2thr F
+GLIBC_2.32 td_ta_new F
+GLIBC_2.32 td_ta_reset_stats F
+GLIBC_2.32 td_ta_set_event F
+GLIBC_2.32 td_ta_setconcurrency F
+GLIBC_2.32 td_ta_thr_iter F
+GLIBC_2.32 td_ta_tsd_iter F
+GLIBC_2.32 td_thr_clear_event F
+GLIBC_2.32 td_thr_dbresume F
+GLIBC_2.32 td_thr_dbsuspend F
+GLIBC_2.32 td_thr_event_enable F
+GLIBC_2.32 td_thr_event_getmsg F
+GLIBC_2.32 td_thr_get_info F
+GLIBC_2.32 td_thr_getfpregs F
+GLIBC_2.32 td_thr_getgregs F
+GLIBC_2.32 td_thr_getxregs F
+GLIBC_2.32 td_thr_getxregsize F
+GLIBC_2.32 td_thr_set_event F
+GLIBC_2.32 td_thr_setfpregs F
+GLIBC_2.32 td_thr_setgregs F
+GLIBC_2.32 td_thr_setprio F
+GLIBC_2.32 td_thr_setsigpending F
+GLIBC_2.32 td_thr_setxregs F
+GLIBC_2.32 td_thr_sigsetmask F
+GLIBC_2.32 td_thr_tls_get_addr F
+GLIBC_2.32 td_thr_tlsbase F
+GLIBC_2.32 td_thr_tsd F
+GLIBC_2.32 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 000000000000..61f73bc34ef8
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/libutil.abilist
@@ -0,0 +1,6 @@
+GLIBC_2.32 forkpty F
+GLIBC_2.32 login F
+GLIBC_2.32 login_tty F
+GLIBC_2.32 logout F
+GLIBC_2.32 logwtmp F
+GLIBC_2.32 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 000000000000..4479e8ee8a26
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/localplt.data
@@ -0,0 +1,12 @@
+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 ?
+# 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
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v5 11/14] ARC: Update syscall-names.list for ARC specific syscalls
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
                   ` (9 preceding siblings ...)
  2020-04-09  2:56 ` [PATCH v5 10/14] ARC: ABI lists Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-17 23:05   ` Joseph Myers
  2020-04-09  2:56 ` [PATCH v5 12/14] ARC: Build Infrastructure Vineet Gupta
                   ` (2 subsequent siblings)
  13 siblings, 1 reply; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 sysdeps/unix/sysv/linux/syscall-names.list | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
index 3d89814003a2..758b50164103 100644
--- a/sysdeps/unix/sysv/linux/syscall-names.list
+++ b/sysdeps/unix/sysv/linux/syscall-names.list
@@ -41,6 +41,9 @@ adjtimex
 afs_syscall
 alarm
 alloc_hugepages
+arc_gettls
+arc_settls
+arc_usr_cmpxchg
 arch_prctl
 arm_fadvise64_64
 arm_sync_file_range
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v5 12/14] ARC: Build Infrastructure
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
                   ` (10 preceding siblings ...)
  2020-04-09  2:56 ` [PATCH v5 11/14] ARC: Update syscall-names.list for ARC specific syscalls Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-17 23:10   ` Joseph Myers
  2020-04-09  2:56 ` [PATCH v5 13/14] build-many-glibcs.py: Enable ARC builds Vineet Gupta
  2020-04-09  2:56 ` [PATCH v5 14/14] Documentation for ARC port Vineet Gupta
  13 siblings, 1 reply; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 config.h.in                                |   3 +
 scripts/build-many-glibcs.py               |   9 +
 sysdeps/arc/Implies                        |   3 +
 sysdeps/arc/Makefile                       |  21 +++
 sysdeps/arc/Versions                       |   8 +
 sysdeps/arc/configure                      | 182 +++++++++++++++++++++
 sysdeps/arc/configure.ac                   |  26 +++
 sysdeps/arc/nptl/Makefile                  |  22 +++
 sysdeps/arc/preconfigure                   |  14 ++
 sysdeps/unix/sysv/linux/arc/Implies        |   3 +
 sysdeps/unix/sysv/linux/arc/Makefile       |  29 ++++
 sysdeps/unix/sysv/linux/arc/Versions       |  16 ++
 sysdeps/unix/sysv/linux/arc/configure      |   4 +
 sysdeps/unix/sysv/linux/arc/configure.ac   |   4 +
 sysdeps/unix/sysv/linux/arc/ldconfig.h     |  27 +++
 sysdeps/unix/sysv/linux/arc/shlib-versions |   7 +
 16 files changed, 378 insertions(+)
 create mode 100644 sysdeps/arc/Implies
 create mode 100644 sysdeps/arc/Makefile
 create mode 100644 sysdeps/arc/Versions
 create mode 100644 sysdeps/arc/configure
 create mode 100644 sysdeps/arc/configure.ac
 create mode 100644 sysdeps/arc/nptl/Makefile
 create mode 100644 sysdeps/arc/preconfigure
 create mode 100644 sysdeps/unix/sysv/linux/arc/Implies
 create mode 100644 sysdeps/unix/sysv/linux/arc/Makefile
 create mode 100644 sysdeps/unix/sysv/linux/arc/Versions
 create mode 100644 sysdeps/unix/sysv/linux/arc/configure
 create mode 100644 sysdeps/unix/sysv/linux/arc/configure.ac
 create mode 100644 sysdeps/unix/sysv/linux/arc/ldconfig.h
 create mode 100644 sysdeps/unix/sysv/linux/arc/shlib-versions

diff --git a/config.h.in b/config.h.in
index dea43df438f6..08962dfed075 100644
--- a/config.h.in
+++ b/config.h.in
@@ -109,6 +109,9 @@
 /* AArch64 big endian ABI */
 #undef HAVE_AARCH64_BE
 
+/* ARC big endian ABI */
+#undef HAVE_ARC_BE
+
 /* C-SKY ABI version.  */
 #undef CSKYABI
 
diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py
index 942a2227806a..64a836c52ea9 100755
--- a/scripts/build-many-glibcs.py
+++ b/scripts/build-many-glibcs.py
@@ -162,6 +162,15 @@ 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=hs38'])
+        self.add_config(arch='arc',
+                        os_name='linux-gnuhf',
+                        gcc_cfg=['--disable-multilib', '--with-cpu=hs38_linux'])
+        self.add_config(arch='arceb',
+                        os_name='linux-gnu',
+                        gcc_cfg=['--disable-multilib', '--with-cpu=hs38'])
         self.add_config(arch='alpha',
                         os_name='linux-gnu')
         self.add_config(arch='arm',
diff --git a/sysdeps/arc/Implies b/sysdeps/arc/Implies
new file mode 100644
index 000000000000..780c4e246769
--- /dev/null
+++ b/sysdeps/arc/Implies
@@ -0,0 +1,3 @@
+wordsize-32
+ieee754/flt-32
+ieee754/dbl-64
diff --git a/sysdeps/arc/Makefile b/sysdeps/arc/Makefile
new file mode 100644
index 000000000000..56ac503bfe43
--- /dev/null
+++ b/sysdeps/arc/Makefile
@@ -0,0 +1,21 @@
+# ARC Makefile
+# Copyright (C) 1993-2020 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
+# <https://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
diff --git a/sysdeps/arc/Versions b/sysdeps/arc/Versions
new file mode 100644
index 000000000000..6ac7b8e49505
--- /dev/null
+++ b/sysdeps/arc/Versions
@@ -0,0 +1,8 @@
+libc {
+  GLIBC_2.32 {
+    __mcount;
+  }
+  GLIBC_PRIVATE {
+    __syscall_error;
+  }
+}
diff --git a/sysdeps/arc/configure b/sysdeps/arc/configure
new file mode 100644
index 000000000000..5820017d6505
--- /dev/null
+++ b/sysdeps/arc/configure
@@ -0,0 +1,182 @@
+# 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
+
+
+# For big endian ABI, generate a symbol for selecting right dynamic linker
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for big endian" >&5
+$as_echo_n "checking for big endian... " >&6; }
+if ${libc_cv_arc_be+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __BIG_ENDIAN__
+                      yes
+                     #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  libc_cv_arc_be=yes
+else
+  libc_cv_arc_be=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_arc_be" >&5
+$as_echo "$libc_cv_arc_be" >&6; }
+if test $libc_cv_arc_be = yes; then
+  # For shlib-versions.
+  $as_echo "#define HAVE_ARC_BE 1" >>confdefs.h
+
+  config_vars="$config_vars
+default-abi = ilp32_be"
+else
+  config_vars="$config_vars
+default-abi = ilp32"
+fi
diff --git a/sysdeps/arc/configure.ac b/sysdeps/arc/configure.ac
new file mode 100644
index 000000000000..d5bcd2a58cdc
--- /dev/null
+++ b/sysdeps/arc/configure.ac
@@ -0,0 +1,26 @@
+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)
+
+# For big endian ABI, generate a symbol for selecting right dynamic linker
+AC_CACHE_CHECK([for big endian],
+  [libc_cv_arc_be],
+  [AC_EGREP_CPP(yes,[#ifdef __BIG_ENDIAN__
+                      yes
+                     #endif
+  ], libc_cv_arc_be=yes, libc_cv_arc_be=no)])
+if test $libc_cv_arc_be = yes; then
+  # For shlib-versions.
+  AC_DEFINE(HAVE_ARC_BE)
+  LIBC_CONFIG_VAR([default-abi], [ilp32_be])
+else
+  LIBC_CONFIG_VAR([default-abi], [ilp32])
+fi
diff --git a/sysdeps/arc/nptl/Makefile b/sysdeps/arc/nptl/Makefile
new file mode 100644
index 000000000000..6f387c53905d
--- /dev/null
+++ b/sysdeps/arc/nptl/Makefile
@@ -0,0 +1,22 @@
+# NPTL makefile fragment for ARC.
+# Copyright (C) 2005-2020 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
+# <https://www.gnu.org/licenses/>.
+
+ifeq ($(subdir),csu)
+gen-as-const-headers += tcb-offsets.sym
+endif
diff --git a/sysdeps/arc/preconfigure b/sysdeps/arc/preconfigure
new file mode 100644
index 000000000000..a79db0239ae6
--- /dev/null
+++ b/sysdeps/arc/preconfigure
@@ -0,0 +1,14 @@
+case "$machine" in
+arc*)
+  base_machine=arc
+  machine=arc
+
+  gccfloat=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | grep __ARC_FPU_| wc -l`
+  if test "$gccfloat" != "0"; then
+    with_fp_cond=1
+  else
+    with_fp_cond=0
+  fi
+  ;;
+
+esac
diff --git a/sysdeps/unix/sysv/linux/arc/Implies b/sysdeps/unix/sysv/linux/arc/Implies
new file mode 100644
index 000000000000..7f739a0340b6
--- /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 000000000000..7958625f6d5c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/Makefile
@@ -0,0 +1,29 @@
+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
+
+abi-variants := ilp32 ilp32_be
+
+ifeq (,$(filter $(default-abi),$(abi-variants)))
+$(error Unknown ABI $(default-abi), must be one of $(abi-variants))
+endif
+
+abi-ilp32-condition	:= !defined __BIG_ENDIAN__
+abi-ilp32_be-condition	:= defined __BIG_ENDIAN__
diff --git a/sysdeps/unix/sysv/linux/arc/Versions b/sysdeps/unix/sysv/linux/arc/Versions
new file mode 100644
index 000000000000..292f1974b02a
--- /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.32 {
+    _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/configure b/sysdeps/unix/sysv/linux/arc/configure
new file mode 100644
index 000000000000..56ec14357507
--- /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=5.1.0
diff --git a/sysdeps/unix/sysv/linux/arc/configure.ac b/sysdeps/unix/sysv/linux/arc/configure.ac
new file mode 100644
index 000000000000..8af5a12cc248
--- /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=5.1.0
diff --git a/sysdeps/unix/sysv/linux/arc/ldconfig.h b/sysdeps/unix/sysv/linux/arc/ldconfig.h
new file mode 100644
index 000000000000..4896ec005c8e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/ldconfig.h
@@ -0,0 +1,27 @@
+/* ldconfig default paths and libraries.  Linux/RISC-V version.
+   Copyright (C) 2001-2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <sysdeps/generic/ldconfig.h>
+
+#define SYSDEP_KNOWN_INTERPRETER_NAMES 		\
+  { "/lib/ld-linux-arc.so.2", FLAG_ELF_LIBC6 },	\
+  { "/lib/ld-linux-arceb.so.2", FLAG_ELF_LIBC6 },
+
+#define SYSDEP_KNOWN_LIBRARY_NAMES 	\
+  { "libc.so.6", FLAG_ELF_LIBC6 },	\
+  { "libm.so.6", FLAG_ELF_LIBC6 },
diff --git a/sysdeps/unix/sysv/linux/arc/shlib-versions b/sysdeps/unix/sysv/linux/arc/shlib-versions
new file mode 100644
index 000000000000..343c0a04500e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/shlib-versions
@@ -0,0 +1,7 @@
+DEFAULT                 GLIBC_2.32
+
+%ifdef HAVE_ARC_BE
+ld=ld-linux-arceb.so.2
+%else
+ld=ld-linux-arc.so.2
+%endif
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v5 13/14] build-many-glibcs.py: Enable ARC builds
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
                   ` (11 preceding siblings ...)
  2020-04-09  2:56 ` [PATCH v5 12/14] ARC: Build Infrastructure Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-17 23:12   ` Joseph Myers
  2020-04-09  2:56 ` [PATCH v5 14/14] Documentation for ARC port Vineet Gupta
  13 siblings, 1 reply; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 scripts/build-many-glibcs.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py
index 64a836c52ea9..77b686d34cea 100755
--- a/scripts/build-many-glibcs.py
+++ b/scripts/build-many-glibcs.py
@@ -1248,6 +1248,7 @@ def install_linux_headers(policy, cmdlist):
     """Install Linux kernel headers."""
     arch_map = {'aarch64': 'arm64',
                 'alpha': 'alpha',
+                'arc': 'arc',
                 'arm': 'arm',
                 'csky': 'csky',
                 'hppa': 'parisc',
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* [PATCH v5 14/14] Documentation for ARC port
  2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
                   ` (12 preceding siblings ...)
  2020-04-09  2:56 ` [PATCH v5 13/14] build-many-glibcs.py: Enable ARC builds Vineet Gupta
@ 2020-04-09  2:56 ` Vineet Gupta
  2020-04-17 23:13   ` Joseph Myers
  13 siblings, 1 reply; 37+ messages in thread
From: Vineet Gupta @ 2020-04-09  2:56 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 NEWS                | 9 +++++++++
 README              | 1 +
 manual/install.texi | 5 +++++
 3 files changed, 15 insertions(+)

diff --git a/NEWS b/NEWS
index 14fd59a16a2d..6d17b6a0a087 100644
--- a/NEWS
+++ b/NEWS
@@ -17,6 +17,15 @@ Major new features:
     - rv32imafdc ilp32
     - rv32imafdc ilp32d
 
+* Support for Synpsys ARC HS cores (ARCv2 ISA) running Linux.
+
+  Port requires atleast
+    - binutils-2.32 (binutils-2_31-branch: commit 6ce881c15fc4, 2018-10-04)
+    - gcc 8.3 (gcc-8-stable: commit 0d5ba57508c5, 2019-01-29)
+    - Linux kernel 5.1+ (64-bit time and offsets)
+
+  Both Little and Big-Endian supported
+
 Deprecated and removed features, and other changes affecting compatibility:
 
   [Add deprecations, removals and changes affecting compatibility here]
diff --git a/README b/README
index cee86ab178cf..d0f0edb3930a 100644
--- a/README
+++ b/README
@@ -24,6 +24,7 @@ The GNU C Library supports these configurations for using Linux kernels:
 
 	aarch64*-*-linux-gnu
 	alpha*-*-linux-gnu
+	arc*-*-linux-gnu
 	arm-*-linux-gnueabi
 	csky-*-linux-gnuabiv2
 	hppa-*-linux-gnu
diff --git a/manual/install.texi b/manual/install.texi
index 71bf47cac659..c4b11e4e7973 100644
--- a/manual/install.texi
+++ b/manual/install.texi
@@ -507,6 +507,9 @@ the newest version of the compiler that is known to work for building
 release time, GCC 9.2.1 is the newest compiler verified to work to build
 @theglibc{}.
 
+For ARC architecture builds, GCC 8.3 is needed which has the necessary
+fixes to support @theglibc{}.
+
 For multi-arch support it is recommended to use a GCC which has been built with
 support for GNU indirect functions.  This ensures that correct debugging
 information is generated for functions selected by IFUNC resolvers.  This
@@ -528,6 +531,8 @@ No other assembler or linker has the necessary functionality at the
 moment. As of release time, GNU @code{binutils} 2.32 is the newest
 verified to work to build @theglibc{}.
 
+ARC architecture needs @code{binutils} 2.32 for TLS related fixes.
+
 @item
 GNU @code{texinfo} 4.7 or later
 
-- 
2.20.1


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply related	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 01/14] ARC: ABI Implementation
  2020-04-09  2:56 ` [PATCH v5 01/14] ARC: ABI Implementation Vineet Gupta
@ 2020-04-17 22:37   ` Joseph Myers
  2020-04-17 23:30     ` Vineet Gupta
  0 siblings, 1 reply; 37+ messages in thread
From: Joseph Myers @ 2020-04-17 22:37 UTC (permalink / raw)
  To: Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:

> +#define reloc_index						\
> +({								\
> +  unsigned long int plt0 = D_PTR (l, l_info[DT_PLTGOT]);	\
> +  unsigned long int pltn = reloc_arg;				\
> +  /* Exclude PLT0 and PLT1.  */					\
> +  unsigned long int idx = ((pltn - plt0) / 16 ) - 2;		\

There's a stray space between '16' and ')' here.

> +/* Helper for generic ____longjmp_chk().  */
> +#define JB_FRAME_ADDRESS(buf) ((void *) (unsigned long int) (buf[JB_SP]))

This comment should not use '()' (see the GNU Coding Standards, '()' 
should not be appended to a function name to indicate that it's a 
function, only to indicate a function call with no arguments).

> +  __mcount_internal ((unsigned long int) frompc,			\
> +		     (unsigned long int) __builtin_return_address(0));	\

Missing space before '(' in call to __builtin_return_address.

> +#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; })

Missing spaces before '(' in calls to __builtin_thread_pointer.

-- 
Joseph S. Myers
joseph@codesourcery.com

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 02/14] ARC: startup and dynamic linking code
  2020-04-09  2:56 ` [PATCH v5 02/14] ARC: startup and dynamic linking code Vineet Gupta
@ 2020-04-17 22:42   ` Joseph Myers
  2020-04-17 23:40     ` Vineet Gupta
  0 siblings, 1 reply; 37+ messages in thread
From: Joseph Myers @ 2020-04-17 22:42 UTC (permalink / raw)
  To: Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:

> +/* What this code does:
> +    -ldso starts execution here when kernel returns from execve()
> +    -calls into generic ldso entry point _dl_start( )

Avoid use of parentheses to indicate that a name is a function.

> +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;

This comment seems unhelpful.  If you want to comment on the addend not 
being added, write a comment that says *why* it's not being added, not 
just a commented-out addition.

-- 
Joseph S. Myers
joseph@codesourcery.com

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 03/14] ARC: Thread Local Storage support
  2020-04-09  2:56 ` [PATCH v5 03/14] ARC: Thread Local Storage support Vineet Gupta
@ 2020-04-17 22:44   ` Joseph Myers
  2020-04-17 23:43     ` Vineet Gupta
  0 siblings, 1 reply; 37+ messages in thread
From: Joseph Myers @ 2020-04-17 22:44 UTC (permalink / raw)
  To: Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:

> +/* Code to initially initialize the thread pointer.  */
> +# define TLS_INIT_TP(tcbp)					\
> +  ({                                            		\
> +	long result_var;					\
> +	__builtin_set_thread_pointer(tcbp);     		\

Missing space before '(' in call to __builtin_set_thread_pointer.

-- 
Joseph S. Myers
joseph@codesourcery.com

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 06/14] ARC: hardware floating point support
  2020-04-09  2:56 ` [PATCH v5 06/14] ARC: hardware floating point support Vineet Gupta
@ 2020-04-17 22:59   ` Joseph Myers
  2020-04-17 23:49     ` Vineet Gupta
  0 siblings, 1 reply; 37+ messages in thread
From: Joseph Myers @ 2020-04-17 22:59 UTC (permalink / raw)
  To: Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:

> +#  define _FPU_SETS(cw) __asm__ volatile ("bset %0, %0, 31	\r\n" \
> +					  "sr   %0, [0x301]	\r\n" \
> +                                          : : "r" (cw))

This asm doesn't look safe; it's modifying an input operand.  I think the 
compiler will assume the register it puts %0 in is unmodified by the asm, 
because it's listed as an input.

As an architecture-specific interface, it's not very clear if the 
interface for _FPU_SETS should be that it modifies the variable passed as 
an argument, but I'd guess not.  My suggestion would be to define the 
macro (using do { ... } while (0)) to copy the argument to a temporary 
variable, and do the bit-set operation in C code on that temporary 
variable rather than as part of the asm.

-- 
Joseph S. Myers
joseph@codesourcery.com

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 08/14] ARC: Linux ABI
  2020-04-09  2:56 ` [PATCH v5 08/14] ARC: Linux ABI Vineet Gupta
@ 2020-04-17 23:02   ` Joseph Myers
  2020-04-17 23:52     ` Vineet Gupta
  0 siblings, 1 reply; 37+ messages in thread
From: Joseph Myers @ 2020-04-17 23:02 UTC (permalink / raw)
  To: Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:

> +      for (i = 0; i < stack_args; i++)
> +        *r++ = va_arg(vl, unsigned long int);

Missing space before '(' in call to va_arg.

-- 
Joseph S. Myers
joseph@codesourcery.com

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 11/14] ARC: Update syscall-names.list for ARC specific syscalls
  2020-04-09  2:56 ` [PATCH v5 11/14] ARC: Update syscall-names.list for ARC specific syscalls Vineet Gupta
@ 2020-04-17 23:05   ` Joseph Myers
  2020-04-17 23:53     ` Vineet Gupta
  0 siblings, 1 reply; 37+ messages in thread
From: Joseph Myers @ 2020-04-17 23:05 UTC (permalink / raw)
  To: Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

This patch is OK.

-- 
Joseph S. Myers
joseph@codesourcery.com

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 12/14] ARC: Build Infrastructure
  2020-04-09  2:56 ` [PATCH v5 12/14] ARC: Build Infrastructure Vineet Gupta
@ 2020-04-17 23:10   ` Joseph Myers
  2020-04-18  0:12     ` Vineet Gupta
  0 siblings, 1 reply; 37+ messages in thread
From: Joseph Myers @ 2020-04-17 23:10 UTC (permalink / raw)
  To: Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:

> +  GLIBC_PRIVATE {
> +    # A copy of sigaction lives in libpthread, and needs these.
> +    __default_rt_sa_restorer;
> +  }

Not a requirement for this port, given that this is GLIBC_PRIVATE so can 
always be changed later, but does sigaction actually need to live in 
libpthread?  Or given the work that's been done on moving functions from 
libpthread to libc (and the corresponding dynamic linker work that mean 
it's now possible to move versioned symbols like that), could the copy of 
sigaction in libpthread be removed?

-- 
Joseph S. Myers
joseph@codesourcery.com

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 13/14] build-many-glibcs.py: Enable ARC builds
  2020-04-09  2:56 ` [PATCH v5 13/14] build-many-glibcs.py: Enable ARC builds Vineet Gupta
@ 2020-04-17 23:12   ` Joseph Myers
  2020-04-17 23:57     ` Vineet Gupta
  0 siblings, 1 reply; 37+ messages in thread
From: Joseph Myers @ 2020-04-17 23:12 UTC (permalink / raw)
  To: Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:

> diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py
> index 64a836c52ea9..77b686d34cea 100755
> --- a/scripts/build-many-glibcs.py
> +++ b/scripts/build-many-glibcs.py
> @@ -1248,6 +1248,7 @@ def install_linux_headers(policy, cmdlist):
>      """Install Linux kernel headers."""
>      arch_map = {'aarch64': 'arm64',
>                  'alpha': 'alpha',
> +                'arc': 'arc',
>                  'arm': 'arm',
>                  'csky': 'csky',
>                  'hppa': 'parisc',

The description of this patch seems a bit confused (the actual enabling of 
the ARC builds is in a previous patch, this one is just adding some 
configuration required to do so).  Anyway, this patch is OK with a better 
description.

-- 
Joseph S. Myers
joseph@codesourcery.com

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 14/14] Documentation for ARC port
  2020-04-09  2:56 ` [PATCH v5 14/14] Documentation for ARC port Vineet Gupta
@ 2020-04-17 23:13   ` Joseph Myers
  2020-04-17 23:58     ` Vineet Gupta
  0 siblings, 1 reply; 37+ messages in thread
From: Joseph Myers @ 2020-04-17 23:13 UTC (permalink / raw)
  To: Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:

> +* Support for Synpsys ARC HS cores (ARCv2 ISA) running Linux.

I think there's a missing 'o' there in Synopsys.

> +  Port requires atleast

And a missing space in 'at least'.

-- 
Joseph S. Myers
joseph@codesourcery.com

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 01/14] ARC: ABI Implementation
  2020-04-17 22:37   ` Joseph Myers
@ 2020-04-17 23:30     ` Vineet Gupta
  0 siblings, 0 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-17 23:30 UTC (permalink / raw)
  To: Joseph Myers; +Cc: linux-snps-arc, libc-alpha

On 4/17/20 3:37 PM, Joseph Myers wrote:
> On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:
> 
>> +#define reloc_index						\
>> +({								\
>> +  unsigned long int plt0 = D_PTR (l, l_info[DT_PLTGOT]);	\
>> +  unsigned long int pltn = reloc_arg;				\
>> +  /* Exclude PLT0 and PLT1.  */					\
>> +  unsigned long int idx = ((pltn - plt0) / 16 ) - 2;		\
> 
> There's a stray space between '16' and ')' here.

Fixed.


>> +/* Helper for generic ____longjmp_chk().  */
>> +#define JB_FRAME_ADDRESS(buf) ((void *) (unsigned long int) (buf[JB_SP]))
> 
> This comment should not use '()' (see the GNU Coding Standards, '()' 
> should not be appended to a function name to indicate that it's a 
> function, only to indicate a function call with no arguments).

Fixed.


>> +  __mcount_internal ((unsigned long int) frompc,			\
>> +		     (unsigned long int) __builtin_return_address(0));	\
> 
> Missing space before '(' in call to __builtin_return_address.

Fixed.


>> +#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; })
> 
> Missing spaces before '(' in calls to __builtin_thread_pointer.

Fixed.
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 02/14] ARC: startup and dynamic linking code
  2020-04-17 22:42   ` Joseph Myers
@ 2020-04-17 23:40     ` Vineet Gupta
  0 siblings, 0 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-17 23:40 UTC (permalink / raw)
  To: Joseph Myers, Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

On 4/17/20 3:42 PM, Joseph Myers wrote:
> On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:
> 
>> +/* What this code does:
>> +    -ldso starts execution here when kernel returns from execve()
>> +    -calls into generic ldso entry point _dl_start( )
> 
> Avoid use of parentheses to indicate that a name is a function.

Fixed.

> 
>> +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;
> 
> This comment seems unhelpful.  If you want to comment on the addend not 
> being added, write a comment that says *why* it's not being added, not 
> just a commented-out addition.

That's just leftover code from initial bringup, removed now.


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 03/14] ARC: Thread Local Storage support
  2020-04-17 22:44   ` Joseph Myers
@ 2020-04-17 23:43     ` Vineet Gupta
  0 siblings, 0 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-17 23:43 UTC (permalink / raw)
  To: Joseph Myers, Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

On 4/17/20 3:44 PM, Joseph Myers wrote:
> On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:
> 
>> +/* Code to initially initialize the thread pointer.  */
>> +# define TLS_INIT_TP(tcbp)					\
>> +  ({                                            		\
>> +	long result_var;					\
>> +	__builtin_set_thread_pointer(tcbp);     		\
> 
> Missing space before '(' in call to __builtin_set_thread_pointer.

Fixed.


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 06/14] ARC: hardware floating point support
  2020-04-17 22:59   ` Joseph Myers
@ 2020-04-17 23:49     ` Vineet Gupta
  2020-04-20 18:21       ` Joseph Myers
  0 siblings, 1 reply; 37+ messages in thread
From: Vineet Gupta @ 2020-04-17 23:49 UTC (permalink / raw)
  To: Joseph Myers, Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

On 4/17/20 3:59 PM, Joseph Myers wrote:
> On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:
> 
>> +#  define _FPU_SETS(cw) __asm__ volatile ("bset %0, %0, 31	\r\n" \
>> +					  "sr   %0, [0x301]	\r\n" \
>> +                                          : : "r" (cw))
> 
> This asm doesn't look safe; it's modifying an input operand.  I think the 
> compiler will assume the register it puts %0 in is unmodified by the asm, 
> because it's listed as an input.

Indeed this is a bug, as wiggling bit 31 was not present in inotial code.
I changed it to "+r"

> As an architecture-specific interface, it's not very clear if the 
> interface for _FPU_SETS should be that it modifies the variable passed as 
> an argument, but I'd guess not.

But does it not depend on whether the value is used after the fact. And with +r we
enable the compiler to DTRT.

>  My suggestion would be to define the 
> macro (using do { ... } while (0)) to copy the argument to a temporary 
> variable, and do the bit-set operation in C code on that temporary 
> variable rather than as part of the asm.

I can certainly do that if you think so.


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 08/14] ARC: Linux ABI
  2020-04-17 23:02   ` Joseph Myers
@ 2020-04-17 23:52     ` Vineet Gupta
  0 siblings, 0 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-17 23:52 UTC (permalink / raw)
  To: Joseph Myers; +Cc: linux-snps-arc, libc-alpha

On 4/17/20 4:02 PM, Joseph Myers wrote:
> On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:
> 
>> +      for (i = 0; i < stack_args; i++)
>> +        *r++ = va_arg(vl, unsigned long int);
> 
> Missing space before '(' in call to va_arg.
> 

Fixed.

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 11/14] ARC: Update syscall-names.list for ARC specific syscalls
  2020-04-17 23:05   ` Joseph Myers
@ 2020-04-17 23:53     ` Vineet Gupta
  2020-04-18 10:31       ` Florian Weimer
  2020-04-20 18:24       ` Joseph Myers
  0 siblings, 2 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-17 23:53 UTC (permalink / raw)
  To: Joseph Myers; +Cc: linux-snps-arc, libc-alpha

On 4/17/20 4:05 PM, Joseph Myers wrote:
> This patch is OK.

So when the rest of port is ready, this will be part of main commit ?


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 13/14] build-many-glibcs.py: Enable ARC builds
  2020-04-17 23:12   ` Joseph Myers
@ 2020-04-17 23:57     ` Vineet Gupta
  0 siblings, 0 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-17 23:57 UTC (permalink / raw)
  To: Joseph Myers; +Cc: linux-snps-arc, libc-alpha

On 4/17/20 4:12 PM, Joseph Myers wrote:
> On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:
> 
>> diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py
>> index 64a836c52ea9..77b686d34cea 100755
>> --- a/scripts/build-many-glibcs.py
>> +++ b/scripts/build-many-glibcs.py
>> @@ -1248,6 +1248,7 @@ def install_linux_headers(policy, cmdlist):
>>      """Install Linux kernel headers."""
>>      arch_map = {'aarch64': 'arm64',
>>                  'alpha': 'alpha',
>> +                'arc': 'arc',
>>                  'arm': 'arm',
>>                  'csky': 'csky',
>>                  'hppa': 'parisc',
> 
> The description of this patch seems a bit confused (the actual enabling of 
> the ARC builds is in a previous patch, this one is just adding some 
> configuration required to do so).  Anyway, this patch is OK with a better 
> description.

Sorry that was a snafu in moving code around, so some bits from this moved into
build patch. Fixed now.


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 14/14] Documentation for ARC port
  2020-04-17 23:13   ` Joseph Myers
@ 2020-04-17 23:58     ` Vineet Gupta
  0 siblings, 0 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-17 23:58 UTC (permalink / raw)
  To: Joseph Myers; +Cc: linux-snps-arc, libc-alpha

On 4/17/20 4:13 PM, Joseph Myers wrote:
> On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:
> 
>> +* Support for Synpsys ARC HS cores (ARCv2 ISA) running Linux.
> 
> I think there's a missing 'o' there in Synopsys.

oops, fixed now.

> 
>> +  Port requires atleast
> 
> And a missing space in 'at least'.

Fixed.


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 12/14] ARC: Build Infrastructure
  2020-04-17 23:10   ` Joseph Myers
@ 2020-04-18  0:12     ` Vineet Gupta
  2020-04-18  5:46       ` Vineet Gupta
  0 siblings, 1 reply; 37+ messages in thread
From: Vineet Gupta @ 2020-04-18  0:12 UTC (permalink / raw)
  To: Joseph Myers; +Cc: linux-snps-arc, libc-alpha

On 4/17/20 4:10 PM, Joseph Myers wrote:
> On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:
> 
>> +  GLIBC_PRIVATE {
>> +    # A copy of sigaction lives in libpthread, and needs these.
>> +    __default_rt_sa_restorer;
>> +  }
> 
> Not a requirement for this port, given that this is GLIBC_PRIVATE so can 
> always be changed later, but does sigaction actually need to live in 
> libpthread?

From my old branches, I added this back in 2018 when working on some cancellation
failures.

>  Or given the work that's been done on moving functions from 
> libpthread to libc (and the corresponding dynamic linker work that mean 
> it's now possible to move versioned symbols like that), could the copy of 
> sigaction in libpthread be removed?

I don't think there's any ARC specific code which requires a restorer copy in
libpthread. I can remove this and give the build a spin to see if anything breaks.
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 12/14] ARC: Build Infrastructure
  2020-04-18  0:12     ` Vineet Gupta
@ 2020-04-18  5:46       ` Vineet Gupta
  0 siblings, 0 replies; 37+ messages in thread
From: Vineet Gupta @ 2020-04-18  5:46 UTC (permalink / raw)
  To: Joseph Myers; +Cc: linux-snps-arc, libc-alpha

On 4/17/20 5:12 PM, Vineet Gupta via Libc-alpha wrote:
> On 4/17/20 4:10 PM, Joseph Myers wrote:
>> On Wed, 8 Apr 2020, Vineet Gupta via Libc-alpha wrote:
>>
>>> +  GLIBC_PRIVATE {
>>> +    # A copy of sigaction lives in libpthread, and needs these.
>>> +    __default_rt_sa_restorer;
>>> +  }
>>
>> Not a requirement for this port, given that this is GLIBC_PRIVATE so can 
>> always be changed later, but does sigaction actually need to live in 
>> libpthread?
> 
> From my old branches, I added this back in 2018 when working on some cancellation
> failures.
> 
>>  Or given the work that's been done on moving functions from 
>> libpthread to libc (and the corresponding dynamic linker work that mean 
>> it's now possible to move versioned symbols like that), could the copy of 
>> sigaction in libpthread be removed?
> 
> I don't think there's any ARC specific code which requires a restorer copy in
> libpthread. I can remove this and give the build a spin to see if anything breaks.

As of today, libpthread_pic.a includes sigaction.os hence the need for export as
well: removing it from Version file causes build errors.

But when sigaction.os dependency is removed, this won't be needed.


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 11/14] ARC: Update syscall-names.list for ARC specific syscalls
  2020-04-17 23:53     ` Vineet Gupta
@ 2020-04-18 10:31       ` Florian Weimer
  2020-04-20 18:24       ` Joseph Myers
  1 sibling, 0 replies; 37+ messages in thread
From: Florian Weimer @ 2020-04-18 10:31 UTC (permalink / raw)
  To: Vineet Gupta via Libc-alpha; +Cc: Vineet Gupta, linux-snps-arc, Joseph Myers

* Vineet Gupta via Libc-alpha:

> On 4/17/20 4:05 PM, Joseph Myers wrote:
>> This patch is OK.
>
> So when the rest of port is ready, this will be part of main commit ?

I think this can go in today.

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 06/14] ARC: hardware floating point support
  2020-04-17 23:49     ` Vineet Gupta
@ 2020-04-20 18:21       ` Joseph Myers
  0 siblings, 0 replies; 37+ messages in thread
From: Joseph Myers @ 2020-04-20 18:21 UTC (permalink / raw)
  To: Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

On Fri, 17 Apr 2020, Vineet Gupta via Libc-alpha wrote:

> >  My suggestion would be to define the 
> > macro (using do { ... } while (0)) to copy the argument to a temporary 
> > variable, and do the bit-set operation in C code on that temporary 
> > variable rather than as part of the asm.
> 
> I can certainly do that if you think so.

As a general principle, if an operation is something that can readily be 
expressed in ordinary C code (and setting a bit certainly is), it's best 
to express it in ordinary C code, and make the inline asm something as 
short as possible only doing what ordinary C code cannot, so giving the 
compiler freedom in how it generates the code (unless the compiler e.g. 
generates bad code for something performance-critical, but that shouldn't 
be an issue here).

-- 
Joseph S. Myers
joseph@codesourcery.com

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

* Re: [PATCH v5 11/14] ARC: Update syscall-names.list for ARC specific syscalls
  2020-04-17 23:53     ` Vineet Gupta
  2020-04-18 10:31       ` Florian Weimer
@ 2020-04-20 18:24       ` Joseph Myers
  1 sibling, 0 replies; 37+ messages in thread
From: Joseph Myers @ 2020-04-20 18:24 UTC (permalink / raw)
  To: Vineet Gupta; +Cc: linux-snps-arc, libc-alpha

On Fri, 17 Apr 2020, Vineet Gupta via Libc-alpha wrote:

> On 4/17/20 4:05 PM, Joseph Myers wrote:
> > This patch is OK.
> 
> So when the rest of port is ready, this will be part of main commit ?

I think it's reasonable to commit this patch before then, much like the 
relocations in elf.h, so making the main commit and future submissions of 
the port smaller.

-- 
Joseph S. Myers
joseph@codesourcery.com

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

^ permalink raw reply	[flat|nested] 37+ messages in thread

end of thread, other threads:[~2020-04-20 18:24 UTC | newest]

Thread overview: 37+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-09  2:56 [PATCH v5 00/14] glibc port to ARC processors Vineet Gupta
2020-04-09  2:56 ` [PATCH v5 01/14] ARC: ABI Implementation Vineet Gupta
2020-04-17 22:37   ` Joseph Myers
2020-04-17 23:30     ` Vineet Gupta
2020-04-09  2:56 ` [PATCH v5 02/14] ARC: startup and dynamic linking code Vineet Gupta
2020-04-17 22:42   ` Joseph Myers
2020-04-17 23:40     ` Vineet Gupta
2020-04-09  2:56 ` [PATCH v5 03/14] ARC: Thread Local Storage support Vineet Gupta
2020-04-17 22:44   ` Joseph Myers
2020-04-17 23:43     ` Vineet Gupta
2020-04-09  2:56 ` [PATCH v5 04/14] ARC: Atomics and Locking primitives Vineet Gupta
2020-04-09  2:56 ` [PATCH v5 05/14] ARC: math soft float support Vineet Gupta
2020-04-09  2:56 ` [PATCH v5 06/14] ARC: hardware floating point support Vineet Gupta
2020-04-17 22:59   ` Joseph Myers
2020-04-17 23:49     ` Vineet Gupta
2020-04-20 18:21       ` Joseph Myers
2020-04-09  2:56 ` [PATCH v5 07/14] ARC: Linux Syscall Interface Vineet Gupta
2020-04-09  2:56 ` [PATCH v5 08/14] ARC: Linux ABI Vineet Gupta
2020-04-17 23:02   ` Joseph Myers
2020-04-17 23:52     ` Vineet Gupta
2020-04-09  2:56 ` [PATCH v5 09/14] ARC: Linux Startup and Dynamic Loading Vineet Gupta
2020-04-09  2:56 ` [PATCH v5 10/14] ARC: ABI lists Vineet Gupta
2020-04-09  2:56 ` [PATCH v5 11/14] ARC: Update syscall-names.list for ARC specific syscalls Vineet Gupta
2020-04-17 23:05   ` Joseph Myers
2020-04-17 23:53     ` Vineet Gupta
2020-04-18 10:31       ` Florian Weimer
2020-04-20 18:24       ` Joseph Myers
2020-04-09  2:56 ` [PATCH v5 12/14] ARC: Build Infrastructure Vineet Gupta
2020-04-17 23:10   ` Joseph Myers
2020-04-18  0:12     ` Vineet Gupta
2020-04-18  5:46       ` Vineet Gupta
2020-04-09  2:56 ` [PATCH v5 13/14] build-many-glibcs.py: Enable ARC builds Vineet Gupta
2020-04-17 23:12   ` Joseph Myers
2020-04-17 23:57     ` Vineet Gupta
2020-04-09  2:56 ` [PATCH v5 14/14] Documentation for ARC port Vineet Gupta
2020-04-17 23:13   ` Joseph Myers
2020-04-17 23:58     ` Vineet Gupta

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).