aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/arm
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/arm')
-rw-r--r--sysdeps/arm/Implies3
-rw-r--r--sysdeps/arm/Makefile79
-rw-r--r--sysdeps/arm/Versions24
-rw-r--r--sysdeps/arm/__longjmp.S121
-rw-r--r--sysdeps/arm/abi-note.S8
-rw-r--r--sysdeps/arm/add_n.S90
-rw-r--r--sysdeps/arm/addmul_1.S67
-rw-r--r--sysdeps/arm/aeabi_assert.c26
-rw-r--r--sysdeps/arm/aeabi_atexit.c27
-rw-r--r--sysdeps/arm/aeabi_errno_addr.c24
-rw-r--r--sysdeps/arm/aeabi_lcsts.c98
-rw-r--r--sysdeps/arm/aeabi_localeconv.c24
-rw-r--r--sysdeps/arm/aeabi_math.c41
-rw-r--r--sysdeps/arm/aeabi_mb_cur_max.c27
-rw-r--r--sysdeps/arm/aeabi_memclr.c30
-rw-r--r--sysdeps/arm/aeabi_memcpy.c31
-rw-r--r--sysdeps/arm/aeabi_memmove.c31
-rw-r--r--sysdeps/arm/aeabi_memset.c30
-rw-r--r--sysdeps/arm/aeabi_sighandlers.S53
-rw-r--r--sysdeps/arm/aeabi_unwind_cpp_pr1.c51
-rw-r--r--sysdeps/arm/arm-features.h59
-rw-r--r--sysdeps/arm/arm-mcount.S128
-rw-r--r--sysdeps/arm/arm-unwind-resume.S46
-rw-r--r--sysdeps/arm/armv6/rawmemchr.S105
-rw-r--r--sysdeps/arm/armv6/stpcpy.S1
-rw-r--r--sysdeps/arm/armv6/strchr.S143
-rw-r--r--sysdeps/arm/armv6/strcpy.S218
-rw-r--r--sysdeps/arm/armv6/strlen.S99
-rw-r--r--sysdeps/arm/armv6/strrchr.S129
-rw-r--r--sysdeps/arm/armv6t2/Implies2
-rw-r--r--sysdeps/arm/armv6t2/ffs.S36
-rw-r--r--sysdeps/arm/armv6t2/ffsll.S50
-rw-r--r--sysdeps/arm/armv6t2/memchr.S184
-rw-r--r--sysdeps/arm/armv6t2/strlen.S164
-rw-r--r--sysdeps/arm/armv7/Implies2
-rw-r--r--sysdeps/arm/armv7/multiarch/Makefile3
-rw-r--r--sysdeps/arm/armv7/multiarch/aeabi_memcpy.c2
-rw-r--r--sysdeps/arm/armv7/multiarch/ifunc-impl-list.c56
-rw-r--r--sysdeps/arm/armv7/multiarch/memcpy.S76
-rw-r--r--sysdeps/arm/armv7/multiarch/memcpy_impl.S728
-rw-r--r--sysdeps/arm/armv7/multiarch/memcpy_neon.S9
-rw-r--r--sysdeps/arm/armv7/multiarch/memcpy_vfp.S7
-rw-r--r--sysdeps/arm/armv7/strcmp.S519
-rw-r--r--sysdeps/arm/atomic-machine.h155
-rw-r--r--sysdeps/arm/backtrace.c126
-rw-r--r--sysdeps/arm/bits/endian.h10
-rw-r--r--sysdeps/arm/bits/fenv.h90
-rw-r--r--sysdeps/arm/bits/link.h65
-rw-r--r--sysdeps/arm/bits/setjmp.h36
-rw-r--r--sysdeps/arm/bsd-_setjmp.S29
-rw-r--r--sysdeps/arm/bsd-setjmp.S28
-rw-r--r--sysdeps/arm/configure279
-rw-r--r--sysdeps/arm/configure.ac112
-rw-r--r--sysdeps/arm/crti.S95
-rw-r--r--sysdeps/arm/crtn.S57
-rw-r--r--sysdeps/arm/dl-irel.h52
-rw-r--r--sysdeps/arm/dl-lookupcfg.h27
-rw-r--r--sysdeps/arm/dl-machine.h698
-rw-r--r--sysdeps/arm/dl-sysdep.h25
-rw-r--r--sysdeps/arm/dl-tls.h28
-rw-r--r--sysdeps/arm/dl-tlsdesc.S218
-rw-r--r--sysdeps/arm/dl-tlsdesc.h62
-rw-r--r--sysdeps/arm/dl-trampoline.S212
-rw-r--r--sysdeps/arm/e_sqrt.c45
-rw-r--r--sysdeps/arm/e_sqrtf.c45
-rw-r--r--sysdeps/arm/fclrexcpt.c43
-rw-r--r--sysdeps/arm/fedisblxcpt.c43
-rw-r--r--sysdeps/arm/feenablxcpt.c51
-rw-r--r--sysdeps/arm/fegetenv.c39
-rw-r--r--sysdeps/arm/fegetexcept.c37
-rw-r--r--sysdeps/arm/fegetmode.c29
-rw-r--r--sysdeps/arm/fegetround.c29
-rw-r--r--sysdeps/arm/feholdexcpt.c35
-rw-r--r--sysdeps/arm/fenv_private.h249
-rw-r--r--sysdeps/arm/fesetenv.c66
-rw-r--r--sysdeps/arm/fesetexcept.c38
-rw-r--r--sysdeps/arm/fesetmode.c45
-rw-r--r--sysdeps/arm/fesetround.c39
-rw-r--r--sysdeps/arm/feupdateenv.c78
-rw-r--r--sysdeps/arm/fgetexcptflg.c33
-rw-r--r--sysdeps/arm/find_exidx.c79
-rw-r--r--sysdeps/arm/fix-fp-int-convert-overflow.h34
-rw-r--r--sysdeps/arm/fpu_control.h75
-rw-r--r--sysdeps/arm/fraiseexcpt.c107
-rw-r--r--sysdeps/arm/frame.h27
-rw-r--r--sysdeps/arm/framestate.c1
-rw-r--r--sysdeps/arm/fsetexcptflg.c45
-rw-r--r--sysdeps/arm/ftestexcept.c32
-rw-r--r--sysdeps/arm/gcc-compat.h35
-rw-r--r--sysdeps/arm/gccframe.h21
-rw-r--r--sysdeps/arm/get-rounding-mode.h42
-rw-r--r--sysdeps/arm/gmp-mparam.h36
-rw-r--r--sysdeps/arm/include/bits/setjmp.h36
-rw-r--r--sysdeps/arm/jmpbuf-unwind.h45
-rw-r--r--sysdeps/arm/ldsodefs.h40
-rw-r--r--sysdeps/arm/libc-aeabi_read_tp.S1
-rw-r--r--sysdeps/arm/libc-tls.c32
-rw-r--r--sysdeps/arm/libm-test-ulps1690
-rw-r--r--sysdeps/arm/libm-test-ulps-name1
-rw-r--r--sysdeps/arm/linkmap.h5
-rw-r--r--sysdeps/arm/machine-gmon.h33
-rw-r--r--sysdeps/arm/math-tests.h35
-rw-r--r--sysdeps/arm/math_private.h11
-rw-r--r--sysdeps/arm/memcpy.S320
-rw-r--r--sysdeps/arm/memmove.S336
-rw-r--r--sysdeps/arm/memset.S69
-rw-r--r--sysdeps/arm/memusage.h20
-rw-r--r--sysdeps/arm/nptl-aeabi_unwind_cpp_pr1.c1
-rw-r--r--sysdeps/arm/nptl/Makefile33
-rw-r--r--sysdeps/arm/nptl/bits/pthreadtypes-arch.h69
-rw-r--r--sysdeps/arm/nptl/bits/semaphore.h34
-rw-r--r--sysdeps/arm/nptl/pthreaddef.h41
-rw-r--r--sysdeps/arm/nptl/tcb-offsets.sym10
-rw-r--r--sysdeps/arm/nptl/tls.h127
-rw-r--r--sysdeps/arm/preconfigure55
-rw-r--r--sysdeps/arm/preconfigure.ac50
-rw-r--r--sysdeps/arm/pt-arm-unwind-resume.S2
-rw-r--r--sysdeps/arm/rt-aeabi_unwind_cpp_pr1.c1
-rw-r--r--sysdeps/arm/rt-arm-unwind-resume.S1
-rw-r--r--sysdeps/arm/rtld-global-offsets.sym7
-rw-r--r--sysdeps/arm/s_fma.c5
-rw-r--r--sysdeps/arm/s_fmaf.c5
-rw-r--r--sysdeps/arm/setfpucw.c43
-rw-r--r--sysdeps/arm/setjmp.S101
-rw-r--r--sysdeps/arm/sfp-machine.h51
-rw-r--r--sysdeps/arm/sotruss-lib.c49
-rw-r--r--sysdeps/arm/stackinfo.h33
-rw-r--r--sysdeps/arm/start.S148
-rw-r--r--sysdeps/arm/static-stubs.c7
-rw-r--r--sysdeps/arm/strlen.S77
-rw-r--r--sysdeps/arm/sub_n.S2
-rw-r--r--sysdeps/arm/submul_1.S68
-rw-r--r--sysdeps/arm/sys/ucontext.h111
-rw-r--r--sysdeps/arm/sysdep.h339
-rw-r--r--sysdeps/arm/test-fpucw.c5
-rw-r--r--sysdeps/arm/tls-macros.h72
-rw-r--r--sysdeps/arm/tlsdesc.c160
-rw-r--r--sysdeps/arm/tlsdesc.sym15
-rw-r--r--sysdeps/arm/tst-armtlsdescextlazy.c1
-rw-r--r--sysdeps/arm/tst-armtlsdescextlazymod.c1
-rw-r--r--sysdeps/arm/tst-armtlsdescextnow.c1
-rw-r--r--sysdeps/arm/tst-armtlsdescextnowmod.c1
-rw-r--r--sysdeps/arm/tst-armtlsdescloc.c28
-rw-r--r--sysdeps/arm/tst-armtlsdesclocmod.c44
-rw-r--r--sysdeps/arm/tst-audit.h25
-rw-r--r--sysdeps/arm/unwind-dw2-fde-glibc.c79
-rw-r--r--sysdeps/arm/unwind-pe.c1
-rw-r--r--sysdeps/arm/unwind-resume.h33
-rw-r--r--sysdeps/arm/unwind.h278
149 files changed, 0 insertions, 12421 deletions
diff --git a/sysdeps/arm/Implies b/sysdeps/arm/Implies
deleted file mode 100644
index 780c4e2467..0000000000
--- a/sysdeps/arm/Implies
+++ /dev/null
@@ -1,3 +0,0 @@
-wordsize-32
-ieee754/flt-32
-ieee754/dbl-64
diff --git a/sysdeps/arm/Makefile b/sysdeps/arm/Makefile
deleted file mode 100644
index 2849aeda42..0000000000
--- a/sysdeps/arm/Makefile
+++ /dev/null
@@ -1,79 +0,0 @@
-gnulib-arch = $(elf-objpfx)libgcc-stubs.a
-static-gnulib-arch = $(elf-objpfx)libgcc-stubs.a
-
-# All supported build tools support TLS descriptors, but the OS may not.
-ifndef have-arm-tls-desc
-have-arm-tls-desc = yes
-endif
-
-ifeq ($(subdir),elf)
-sysdep-dl-routines += tlsdesc dl-tlsdesc
-sysdep_routines += aeabi_unwind_cpp_pr1 find_exidx
-sysdep-rtld-routines += aeabi_unwind_cpp_pr1
-shared-only-routines += aeabi_unwind_cpp_pr1
-
-$(objpfx)libgcc-stubs.a: $(objpfx)aeabi_unwind_cpp_pr1.os
- $(build-extra-lib)
-
-lib-noranlib: $(objpfx)libgcc-stubs.a
-
-ifeq ($(build-shared),yes)
-ifeq ($(have-arm-tls-desc),yes)
-tests += tst-armtlsdescloc tst-armtlsdescextnow tst-armtlsdescextlazy
-modules-names += tst-armtlsdesclocmod
-modules-names += tst-armtlsdescextlazymod tst-armtlsdescextnowmod
-CPPFLAGS-tst-armtlsdescextnowmod.c += -Dstatic=
-CPPFLAGS-tst-armtlsdescextlazymod.c += -Dstatic=
-CFLAGS-tst-armtlsdesclocmod.c += -mtls-dialect=gnu2
-CFLAGS-tst-armtlsdescextnowmod.c += -mtls-dialect=gnu2
-CFLAGS-tst-armtlsdescextlazymod.c += -mtls-dialect=gnu2
-LDFLAGS-tst-armtlsdescextnowmod.so += -Wl,-z,now
-tst-armtlsdescloc-ENV = LD_BIND_NOW=1
-tst-armtlsdescextnow-ENV = LD_BIND_NOW=1
-tst-armtlsdescextlazy-ENV = LD_BIND_NOW=1
-$(objpfx)tst-armtlsdescloc: $(objpfx)tst-armtlsdesclocmod.so
-$(objpfx)tst-armtlsdescextnow: $(objpfx)tst-armtlsdescextnowmod.so
-$(objpfx)tst-armtlsdescextlazy: $(objpfx)tst-armtlsdescextlazymod.so
-endif
-endif
-endif
-
-ifeq ($(subdir),csu)
-# get offset to rtld_global._dl_hwcap
-gen-as-const-headers += rtld-global-offsets.sym tlsdesc.sym
-aeabi_constants = aeabi_lcsts aeabi_sighandlers aeabi_math
-aeabi_routines = aeabi_assert aeabi_localeconv aeabi_errno_addr \
- aeabi_mb_cur_max aeabi_atexit aeabi_memclr aeabi_memcpy \
- aeabi_memmove aeabi_memset \
- aeabi_read_tp libc-aeabi_read_tp
-
-sysdep_routines += $(aeabi_constants) $(aeabi_routines)
-static-only-routines += $(aeabi_constants) aeabi_read_tp
-shared-only-routines += libc-aeabi_read_tp
-
-# In order for unwinding to fail when it falls out of main, we need a
-# cantunwind marker. There's one in start.S. To make sure we reach it, add
-# unwind tables for __libc_start_main.
-CFLAGS-libc-start.c += -fexceptions
-
-sysdep_routines += arm-unwind-resume
-shared-only-routines += arm-unwind-resume
-endif
-
-ifeq ($(subdir),gmon)
-sysdep_routines += arm-mcount
-endif
-
-ifeq ($(subdir),debug)
-CFLAGS-backtrace.c += -funwind-tables
-endif
-
-ifeq ($(subdir),rt)
-librt-sysdep_routines += rt-aeabi_unwind_cpp_pr1 rt-arm-unwind-resume
-librt-shared-only-routines += rt-aeabi_unwind_cpp_pr1 rt-arm-unwind-resume
-endif
-
-ifeq ($(subdir),nptl)
-libpthread-sysdep_routines += pt-arm-unwind-resume
-libpthread-shared-only-routines += pt-arm-unwind-resume
-endif
diff --git a/sysdeps/arm/Versions b/sysdeps/arm/Versions
deleted file mode 100644
index f26a1a7606..0000000000
--- a/sysdeps/arm/Versions
+++ /dev/null
@@ -1,24 +0,0 @@
-libc {
- GLIBC_2.4 {
- # ARM EABI compatibility routines
- __aeabi_assert;
- __aeabi_atexit;
- __aeabi_errno_addr;
- __aeabi_localeconv;
- __aeabi_MB_CUR_MAX;
- __aeabi_memclr; __aeabi_memclr4; __aeabi_memclr8;
- __aeabi_memcpy; __aeabi_memcpy4; __aeabi_memcpy8;
- __aeabi_memmove; __aeabi_memmove4; __aeabi_memmove8;
- __aeabi_memset; __aeabi_memset4; __aeabi_memset8;
-
- # Helper routines
- __gnu_Unwind_Find_exidx;
- }
- GLIBC_2.8 {
- __gnu_mcount_nc;
- }
- GLIBC_2.19 {
- # This set has to exist in some Versions file so we can use 2.19 in
- # SHLIB_COMPAT. Since it didn't exist anywhere else, we add it here.
- }
-}
diff --git a/sysdeps/arm/__longjmp.S b/sysdeps/arm/__longjmp.S
deleted file mode 100644
index 5202c728bc..0000000000
--- a/sysdeps/arm/__longjmp.S
+++ /dev/null
@@ -1,121 +0,0 @@
-/* longjmp for ARM.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-#include <stap-probe.h>
-#include <bits/setjmp.h>
-#include <rtld-global-offsets.h>
-#include <arm-features.h>
-
-/* __longjmp(jmpbuf, val) */
-
-ENTRY (__longjmp)
- mov ip, r0
-
-#ifdef CHECK_SP
- ldr r4, [ip] /* jmpbuf's sp */
- cfi_undefined (r4)
-#ifdef PTR_DEMANGLE
- PTR_DEMANGLE (r4, r4, a3, a4)
-#endif
- CHECK_SP (r4)
-#endif
-
-#ifdef PTR_DEMANGLE
- ldr a4, [ip], #4
- PTR_DEMANGLE (a4, a4, a3, r4)
- cfi_undefined (r4)
- ldr r4, [ip], #4
- PTR_DEMANGLE2 (r4, r4, a3)
-#else
- ldr a4, [ip], #4
- ldr r4, [ip], #4
- cfi_undefined (r4)
-#endif
- /* longjmp probe expects longjmp first argument (4@r0), second
- argument (-4@r1), and target address (4@r4), respectively. */
- LIBC_PROBE (longjmp, 3, 4@r0, -4@r1, 4@r4)
- mov sp, a4
- mov lr, r4
- ldmia ip!, JMP_BUF_REGLIST
- cfi_restore (v1)
- cfi_restore (v2)
- cfi_restore (v3)
- cfi_restore (v4)
- cfi_restore (v5)
- cfi_restore (v6)
- cfi_restore (sl)
- cfi_restore (fp)
- cfi_restore (sp)
- cfi_restore (lr)
-
-#if !defined ARM_ASSUME_NO_IWMMXT || defined __SOFTFP__
-# define NEED_HWCAP 1
-#endif
-
-#ifdef NEED_HWCAP
-# if IS_IN (rtld)
- LDST_PCREL (ldr, a4, a3, \
- C_SYMBOL_NAME(_rtld_local_ro) \
- + RTLD_GLOBAL_RO_DL_HWCAP_OFFSET)
-# else
-# ifdef SHARED
- LDR_GLOBAL (a4, a3, C_SYMBOL_NAME(_rtld_global_ro), \
- RTLD_GLOBAL_RO_DL_HWCAP_OFFSET)
-# else
- LDR_GLOBAL (a4, a3, C_SYMBOL_NAME(_dl_hwcap), 0)
-# endif
-# endif
-#endif
-
-#ifdef __SOFTFP__
- tst a4, #HWCAP_ARM_VFP
- beq .Lno_vfp
-#endif
-
- /* Restore the VFP registers. */
- /* Following instruction is vldmia ip!, {d8-d15}. */
- ldc p11, cr8, [r12], #64
-.Lno_vfp:
-
-#ifndef ARM_ASSUME_NO_IWMMXT
- tst a4, #HWCAP_ARM_IWMMXT
- beq .Lno_iwmmxt
-
- /* Restore the call-preserved iWMMXt registers. */
- /* Following instructions are wldrd wr10, [ip], #8 (etc.) */
- ldcl p1, cr10, [r12], #8
- ldcl p1, cr11, [r12], #8
- ldcl p1, cr12, [r12], #8
- ldcl p1, cr13, [r12], #8
- ldcl p1, cr14, [r12], #8
- ldcl p1, cr15, [r12], #8
-.Lno_iwmmxt:
-#endif
-
- /* longjmp_target probe expects longjmp first argument (4@r0), second
- argument (-4@r1), and target address (4@r14), respectively. */
- LIBC_PROBE (longjmp_target, 3, 4@r0, -4@r1, 4@r14)
-
- movs r0, r1 /* get the return value in place */
- it eq
- moveq r0, #1 /* can't let setjmp() return zero! */
-
- DO_RET(lr)
-
-END (__longjmp)
diff --git a/sysdeps/arm/abi-note.S b/sysdeps/arm/abi-note.S
deleted file mode 100644
index 07bd4c4619..0000000000
--- a/sysdeps/arm/abi-note.S
+++ /dev/null
@@ -1,8 +0,0 @@
-/* Tag_ABI_align8_preserved: This code preserves 8-byte
- alignment in any callee. */
- .eabi_attribute 25, 1
-/* Tag_ABI_align8_needed: This code may require 8-byte alignment from
- the caller. */
- .eabi_attribute 24, 1
-
-#include <csu/abi-note.S>
diff --git a/sysdeps/arm/add_n.S b/sysdeps/arm/add_n.S
deleted file mode 100644
index 811a769959..0000000000
--- a/sysdeps/arm/add_n.S
+++ /dev/null
@@ -1,90 +0,0 @@
-/* mpn_add_n -- add (or subtract) bignums.
- Copyright (C) 2013-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-#include <arm-features.h>
-
- .syntax unified
- .text
-
-#ifdef USE_AS_SUB_N
-# define INITC cmp r0, r0
-# define OPC sbcs
-# define RETC sbc r0, r0, r0; neg r0, r0
-# define FUNC __mpn_sub_n
-#else
-# define INITC cmn r0, #0
-# define OPC adcs
-# define RETC mov r0, #0; adc r0, r0, r0
-# define FUNC __mpn_add_n
-#endif
-
-/* mp_limb_t mpn_add_n(res_ptr, src1_ptr, src2_ptr, size) */
-
-ENTRY (FUNC)
- push { r4, r5, r6, r7, r8, r10, lr }
- cfi_adjust_cfa_offset (28)
- cfi_rel_offset (r4, 0)
- cfi_rel_offset (r5, 4)
- cfi_rel_offset (r6, 8)
- cfi_rel_offset (r7, 12)
- cfi_rel_offset (r8, 16)
- cfi_rel_offset (r10, 20)
- cfi_rel_offset (lr, 24)
-
- INITC /* initialize carry flag */
- tst r3, #1 /* count & 1 == 1? */
- add lr, r1, r3, lsl #2 /* compute end src1 */
- beq 1f
-
- ldr r4, [r1], #4 /* do one to make count even */
- ldr r5, [r2], #4
- OPC r4, r4, r5
- teq r1, lr /* end of count? (preserve carry) */
- str r4, [r0], #4
- beq 9f
-1:
- tst r3, #2 /* count & 2 == 2? */
- beq 2f
- ldm r1!, { r4, r5 } /* do two to make count 0 mod 4 */
- ldm r2!, { r6, r7 }
- OPC r4, r4, r6
- OPC r5, r5, r7
- teq r1, lr /* end of count? */
- stm r0!, { r4, r5 }
- beq 9f
-2:
- ldm r1!, { r3, r5, r7, r10 } /* do four each loop */
- ldm r2!, { r4, r6, r8, ip }
- OPC r3, r3, r4
- OPC r5, r5, r6
- OPC r7, r7, r8
- OPC r10, r10, ip
- teq r1, lr
- stm r0!, { r3, r5, r7, r10 }
- bne 2b
-
-9:
- RETC /* copy carry out */
-#ifndef ARM_ALWAYS_BX
- pop { r4, r5, r6, r7, r8, r10, pc }
-#else
- pop { r4, r5, r6, r7, r8, r10, lr }
- bx lr
-#endif
-END (FUNC)
diff --git a/sysdeps/arm/addmul_1.S b/sysdeps/arm/addmul_1.S
deleted file mode 100644
index c4e54f8723..0000000000
--- a/sysdeps/arm/addmul_1.S
+++ /dev/null
@@ -1,67 +0,0 @@
-/* mpn_addmul_1 -- multiply and accumulate bignums.
- Copyright (C) 2013-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .syntax unified
- .text
-
-@ cycles/limb
-@ StrongArm ?
-@ Cortex-A8 ?
-@ Cortex-A9 ?
-@ Cortex-A15 4
-
-/* mp_limb_t mpn_addmul_1(res_ptr, src1_ptr, size, s2_limb) */
-
-ENTRY (__mpn_addmul_1)
- push { r4, r5, r6, r7 }
- cfi_adjust_cfa_offset (16)
- cfi_rel_offset (r4, 0)
- cfi_rel_offset (r5, 4)
- cfi_rel_offset (r6, 8)
- cfi_rel_offset (r7, 12)
-
- ldr r6, [r1], #4
- ldr r5, [r0]
- mov r4, #0 /* init carry in */
- b 1f
-0:
- ldr r6, [r1], #4 /* load next ul */
- adds r7, r4, r5 /* (out, c) = cl + lpl */
- ldr r5, [r0, #4] /* load next rl */
- adc r4, ip, #0 /* cl = hpl + c */
- str r7, [r0], #4
-1:
- mov ip, #0 /* zero-extend rl */
- umlal r5, ip, r6, r3 /* (hpl, lpl) = ul * vl + rl */
- subs r2, r2, #1
- bne 0b
-
- adds r4, r4, r5 /* (out, c) = cl + llpl */
- str r4, [r0]
- adc r0, ip, #0 /* return hpl + c */
-
- pop { r4, r5, r6, r7 }
- cfi_adjust_cfa_offset (-16)
- cfi_restore (r4)
- cfi_restore (r5)
- cfi_restore (r6)
- cfi_restore (r7)
- DO_RET (lr)
-END (__mpn_addmul_1)
diff --git a/sysdeps/arm/aeabi_assert.c b/sysdeps/arm/aeabi_assert.c
deleted file mode 100644
index 1cb710da8f..0000000000
--- a/sysdeps/arm/aeabi_assert.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright (C) 2004-2017 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 <assert.h>
-#include <stdlib.h>
-
-void
-__aeabi_assert (const char *assertion, const char *file,
- unsigned int line)
-{
- __assert_fail (assertion, file, line, NULL);
-}
diff --git a/sysdeps/arm/aeabi_atexit.c b/sysdeps/arm/aeabi_atexit.c
deleted file mode 100644
index 28fcee2d66..0000000000
--- a/sysdeps/arm/aeabi_atexit.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright (C) 2005-2017 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 <stdlib.h>
-
-/* Register a function to be called by exit or when a shared library
- is unloaded. This routine is like __cxa_atexit, but uses the
- calling sequence required by the ARM EABI. */
-int
-__aeabi_atexit (void *arg, void (*func) (void *), void *d)
-{
- return __cxa_atexit (func, arg, d);
-}
diff --git a/sysdeps/arm/aeabi_errno_addr.c b/sysdeps/arm/aeabi_errno_addr.c
deleted file mode 100644
index 6d3a1cd233..0000000000
--- a/sysdeps/arm/aeabi_errno_addr.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright (C) 2004-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-
-volatile int *
-__aeabi_errno_addr (void)
-{
- return &errno;
-}
diff --git a/sysdeps/arm/aeabi_lcsts.c b/sysdeps/arm/aeabi_lcsts.c
deleted file mode 100644
index 971ed26cdc..0000000000
--- a/sysdeps/arm/aeabi_lcsts.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Link-time constants for ARM EABI.
- Copyright (C) 2005-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- In addition to the permissions in the GNU Lesser General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file with other
- programs, and to distribute those programs without any restriction
- coming from the use of this file. (The GNU Lesser General Public
- License restrictions do apply in other respects; for example, they
- cover modification of the file, and distribution when not linked
- into another program.)
-
- Note that people who make modified versions of this file are not
- obligated to grant this special exception for their modified
- versions; it is their choice whether to do so. The GNU Lesser
- General Public License gives permission to release a modified
- version without this exception; this exception also makes it
- possible to release a modified version which carries forward this
- exception.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* The ARM EABI requires that we provide ISO compile-time constants as
- link-time constants. Some portable applications may reference these. */
-
-#include <errno.h>
-#include <limits.h>
-#include <locale.h>
-#include <setjmp.h>
-#include <signal.h>
-#include <stdio.h>
-#include <time.h>
-
-#define eabi_constant2(X,Y) const int __aeabi_##X attribute_hidden = Y
-#define eabi_constant(X) const int __aeabi_##X attribute_hidden = X
-
-eabi_constant (EDOM);
-eabi_constant (ERANGE);
-eabi_constant (EILSEQ);
-
-eabi_constant (MB_LEN_MAX);
-
-eabi_constant (LC_COLLATE);
-eabi_constant (LC_CTYPE);
-eabi_constant (LC_MONETARY);
-eabi_constant (LC_NUMERIC);
-eabi_constant (LC_TIME);
-eabi_constant (LC_ALL);
-
-/* The value of __aeabi_JMP_BUF_SIZE is the number of doublewords in a
- jmp_buf. */
-eabi_constant2 (JMP_BUF_SIZE, sizeof (jmp_buf) / 8);
-
-eabi_constant (SIGABRT);
-eabi_constant (SIGFPE);
-eabi_constant (SIGILL);
-eabi_constant (SIGINT);
-eabi_constant (SIGSEGV);
-eabi_constant (SIGTERM);
-
-eabi_constant2 (IOFBF, _IOFBF);
-eabi_constant2 (IOLBF, _IOLBF);
-eabi_constant2 (IONBF, _IONBF);
-eabi_constant (BUFSIZ);
-eabi_constant (FOPEN_MAX);
-eabi_constant (TMP_MAX);
-eabi_constant (FILENAME_MAX);
-eabi_constant (L_tmpnam);
-
-FILE *__aeabi_stdin attribute_hidden;
-FILE *__aeabi_stdout attribute_hidden;
-FILE *__aeabi_stderr attribute_hidden;
-
-static void __attribute__ ((used))
-setup_aeabi_stdio (void)
-{
- __aeabi_stdin = stdin;
- __aeabi_stdout = stdout;
- __aeabi_stderr = stderr;
-}
-
-static void (*fp) (void) __attribute__ ((used, section (".preinit_array")))
- = setup_aeabi_stdio;
-
-eabi_constant (CLOCKS_PER_SEC);
diff --git a/sysdeps/arm/aeabi_localeconv.c b/sysdeps/arm/aeabi_localeconv.c
deleted file mode 100644
index 4c410ab35c..0000000000
--- a/sysdeps/arm/aeabi_localeconv.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright (C) 2004-2017 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 <locale.h>
-
-struct lconv *
-__aeabi_localeconv (void)
-{
- return __localeconv ();
-}
diff --git a/sysdeps/arm/aeabi_math.c b/sysdeps/arm/aeabi_math.c
deleted file mode 100644
index f516672057..0000000000
--- a/sysdeps/arm/aeabi_math.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (C) 2004-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- In addition to the permissions in the GNU Lesser General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file with other
- programs, and to distribute those programs without any restriction
- coming from the use of this file. (The GNU Lesser General Public
- License restrictions do apply in other respects; for example, they
- cover modification of the file, and distribution when not linked
- into another program.)
-
- Note that people who make modified versions of this file are not
- obligated to grant this special exception for their modified
- versions; it is their choice whether to do so. The GNU Lesser
- General Public License gives permission to release a modified
- version without this exception; this exception also makes it
- possible to release a modified version which carries forward this
- exception.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <math.h>
-
-const double __aeabi_HUGE_VAL attribute_hidden = HUGE_VAL;
-const long double __aeabi_HUGE_VALL attribute_hidden = HUGE_VALL;
-const float __aeabi_HUGE_VALF attribute_hidden = HUGE_VALF;
-const float __aeabi_INFINITY attribute_hidden = INFINITY;
-const float __aeabi_NAN attribute_hidden = NAN;
diff --git a/sysdeps/arm/aeabi_mb_cur_max.c b/sysdeps/arm/aeabi_mb_cur_max.c
deleted file mode 100644
index dab1d6d974..0000000000
--- a/sysdeps/arm/aeabi_mb_cur_max.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright (C) 2004-2017 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 <langinfo.h>
-#include <locale.h>
-#include <stdlib.h>
-#include <locale/localeinfo.h>
-
-int
-__aeabi_MB_CUR_MAX (void)
-{
- return MB_CUR_MAX;
-}
diff --git a/sysdeps/arm/aeabi_memclr.c b/sysdeps/arm/aeabi_memclr.c
deleted file mode 100644
index 6687e49c9e..0000000000
--- a/sysdeps/arm/aeabi_memclr.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright (C) 2005-2017 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 <string.h>
-
-/* Clear memory. Can't alias to bzero because it's not defined in the
- same translation unit. */
-void
-__aeabi_memclr (void *dest, size_t n)
-{
- __bzero (dest, n);
-}
-
-/* Versions of the above which may assume memory alignment. */
-strong_alias (__aeabi_memclr, __aeabi_memclr4)
-strong_alias (__aeabi_memclr, __aeabi_memclr8)
diff --git a/sysdeps/arm/aeabi_memcpy.c b/sysdeps/arm/aeabi_memcpy.c
deleted file mode 100644
index 0820084f00..0000000000
--- a/sysdeps/arm/aeabi_memcpy.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 2005-2017 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 <string.h>
-
-/* Copy memory like memcpy, but no return value required. Can't alias
- to memcpy because it's not defined in the same translation
- unit. */
-void
-__aeabi_memcpy (void *dest, const void *src, size_t n)
-{
- memcpy (dest, src, n);
-}
-
-/* Versions of the above which may assume memory alignment. */
-strong_alias (__aeabi_memcpy, __aeabi_memcpy4)
-strong_alias (__aeabi_memcpy, __aeabi_memcpy8)
diff --git a/sysdeps/arm/aeabi_memmove.c b/sysdeps/arm/aeabi_memmove.c
deleted file mode 100644
index 4166f84612..0000000000
--- a/sysdeps/arm/aeabi_memmove.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 2005-2017 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 <string.h>
-
-/* Copy memory like memmove, but no return value required. Can't
- alias to memmove because it's not defined in the same translation
- unit. */
-void
-__aeabi_memmove (void *dest, const void *src, size_t n)
-{
- memmove (dest, src, n);
-}
-
-/* Versions of the above which may assume memory alignment. */
-strong_alias (__aeabi_memmove, __aeabi_memmove4)
-strong_alias (__aeabi_memmove, __aeabi_memmove8)
diff --git a/sysdeps/arm/aeabi_memset.c b/sysdeps/arm/aeabi_memset.c
deleted file mode 100644
index 84977c2da0..0000000000
--- a/sysdeps/arm/aeabi_memset.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright (C) 2005-2017 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 <string.h>
-
-/* Set memory like memset, but different argument order and no return
- value required. */
-void
-__aeabi_memset (void *dest, size_t n, int c)
-{
- memset (dest, c, n);
-}
-
-/* Versions of the above which may assume memory alignment. */
-strong_alias (__aeabi_memset, __aeabi_memset4)
-strong_alias (__aeabi_memset, __aeabi_memset8)
diff --git a/sysdeps/arm/aeabi_sighandlers.S b/sysdeps/arm/aeabi_sighandlers.S
deleted file mode 100644
index 895edbd5a1..0000000000
--- a/sysdeps/arm/aeabi_sighandlers.S
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Link-time constants for ARM EABI - signal handlers.
- Copyright (C) 2005-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- In addition to the permissions in the GNU Lesser General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file with other
- programs, and to distribute those programs without any restriction
- coming from the use of this file. (The GNU Lesser General Public
- License restrictions do apply in other respects; for example, they
- cover modification of the file, and distribution when not linked
- into another program.)
-
- Note that people who make modified versions of this file are not
- obligated to grant this special exception for their modified
- versions; it is their choice whether to do so. The GNU Lesser
- General Public License gives permission to release a modified
- version without this exception; this exception also makes it
- possible to release a modified version which carries forward this
- exception.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* The ARM EABI defines these as "functions". */
-
-#include <sysdep.h>
-
- .global __aeabi_SIG_DFL
- .hidden __aeabi_SIG_DFL
- .type __aeabi_SIG_DFL, %function
- .set __aeabi_SIG_DFL, 0
-
- .global __aeabi_SIG_IGN
- .hidden __aeabi_SIG_IGN
- .type __aeabi_SIG_IGN, %function
- .set __aeabi_SIG_IGN, 1
-
- .global __aeabi_SIG_ERR
- .hidden __aeabi_SIG_ERR
- .type __aeabi_SIG_ERR, %function
- .set __aeabi_SIG_ERR, -1
diff --git a/sysdeps/arm/aeabi_unwind_cpp_pr1.c b/sysdeps/arm/aeabi_unwind_cpp_pr1.c
deleted file mode 100644
index dcef8aa480..0000000000
--- a/sysdeps/arm/aeabi_unwind_cpp_pr1.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (C) 2005-2017 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/>. */
-
-/* Because some objects in ld.so and libc.so are built with
- -fexceptions, we end up with references to this personality
- routine. However, these libraries are not linked against
- libgcc_eh.a, so we need a dummy definition. This routine will
- never actually be called. */
-
-#include <stdlib.h>
-
-attribute_hidden
-void
-__aeabi_unwind_cpp_pr0 (void)
-{
-#if !IS_IN (rtld)
- abort ();
-#endif
-}
-
-attribute_hidden
-void
-__aeabi_unwind_cpp_pr1 (void)
-{
-#if !IS_IN (rtld)
- abort ();
-#endif
-}
-
-attribute_hidden
-void
-__aeabi_unwind_cpp_pr2 (void)
-{
-#if !IS_IN (rtld)
- abort ();
-#endif
-}
diff --git a/sysdeps/arm/arm-features.h b/sysdeps/arm/arm-features.h
deleted file mode 100644
index 400af0f75a..0000000000
--- a/sysdeps/arm/arm-features.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Macros to test for CPU features on ARM. Generic ARM version.
- Copyright (C) 2012-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _ARM_ARM_FEATURES_H
-#define _ARM_ARM_FEATURES_H 1
-
-/* An OS-specific arm-features.h file should define ARM_HAVE_VFP to
- an appropriate expression for testing at runtime whether the VFP
- hardware is present. We'll then redefine it to a constant if we
- know at compile time that we can assume VFP. */
-
-#ifndef __SOFTFP__
-/* The compiler is generating VFP instructions, so we're already
- assuming the hardware exists. */
-# undef ARM_HAVE_VFP
-# define ARM_HAVE_VFP 1
-#endif
-
-/* An OS-specific arm-features.h file may define ARM_ASSUME_NO_IWMMXT
- to indicate at compile time that iWMMXt hardware is never present
- at runtime (or that we never care about its state) and so need not
- be checked for. */
-
-/* A more-specific arm-features.h file may define ARM_ALWAYS_BX to indicate
- that instructions using pc as a destination register must never be used,
- so a "bx" (or "blx") instruction is always required. */
-
-/* The log2 of the minimum alignment required for an address that
- is the target of a computed branch (i.e. a "bx" instruction).
- A more-specific arm-features.h file may define this to set a more
- stringent requirement.
-
- Using this only makes sense for code in ARM mode (where instructions
- always have a fixed size of four bytes), or for Thumb-mode code that is
- specifically aligning all the related branch targets to match (since
- Thumb instructions might be either two or four bytes). */
-#ifndef ARM_BX_ALIGN_LOG2
-# define ARM_BX_ALIGN_LOG2 2
-#endif
-
-/* An OS-specific arm-features.h file may define ARM_NO_INDEX_REGISTER to
- indicate that the two-register addressing modes must never be used. */
-
-#endif /* arm-features.h */
diff --git a/sysdeps/arm/arm-mcount.S b/sysdeps/arm/arm-mcount.S
deleted file mode 100644
index df2601b4a6..0000000000
--- a/sysdeps/arm/arm-mcount.S
+++ /dev/null
@@ -1,128 +0,0 @@
-/* Implementation of profiling support. ARM EABI version.
- Copyright (C) 2008-2017 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/>. */
-
-/* Don't call mcount when calling mcount... */
-#undef PROF
-
-#include <sysdep.h>
-
-#undef mcount
-
-#ifdef __thumb2__
- .thumb
-#endif
- .syntax unified
-
-
-/* Use an assembly stub with a special ABI. The calling lr has been
- pushed to the stack (which will be misaligned). We should preserve
- all registers except ip and pop a word off the stack.
-
- NOTE: This assumes mcount_internal does not clobber any non-core
- (coprocessor) registers. Currently this is true, but may require
- additional attention in the future.
-
- The calling sequence looks something like:
-func:
- push {lr}
- bl __gnu_mcount_nc
- <function body>
-*/
-
-ENTRY(__gnu_mcount_nc)
- push {r0, r1, r2, r3, lr}
- cfi_adjust_cfa_offset (20)
- cfi_rel_offset (r0, 0)
- cfi_rel_offset (r1, 4)
- cfi_rel_offset (r2, 8)
- cfi_rel_offset (r3, 12)
- cfi_rel_offset (lr, 16)
- bic r1, lr, #1
- ldr r0, [sp, #20]
- bl __mcount_internal
- pop {r0, r1, r2, r3, ip, lr}
- cfi_adjust_cfa_offset (-24)
- cfi_restore (r0)
- cfi_restore (r1)
- cfi_restore (r2)
- cfi_restore (r3)
- cfi_register (lr, ip)
- bx ip
-END(__gnu_mcount_nc)
-
-
-#include <gcc-compat.h>
-#include <shlib-compat.h>
-
-/* The new __gnu_mcount_nc entry point was introduced in 4.4, so the
- static library needs the old one only to support older compilers.
- Even in a configuration that only cares about newer compilers, the
- shared library might need it only for strict ABI compatibility. */
-
-#if GCC_COMPAT (4, 3) || SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
-
-/* Provide old mcount for backwards compatibility. This requires
- code be compiled with APCS frame pointers. */
-
-ENTRY(__mcount_arm_compat)
- push {r0, r1, r2, r3, fp, lr}
- cfi_adjust_cfa_offset (24)
- cfi_rel_offset (r0, 0)
- cfi_rel_offset (r1, 4)
- cfi_rel_offset (r2, 8)
- cfi_rel_offset (r3, 12)
- cfi_rel_offset (fp, 16)
- cfi_rel_offset (lr, 20)
- movs r0, fp
- ittt ne
- ldrne r0, [r0, #-4]
- movsne r1, lr
- blne __mcount_internal
-# if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)
- pop {r0, r1, r2, r3, fp, lr}
- cfi_adjust_cfa_offset (-24)
- cfi_restore (r0)
- cfi_restore (r1)
- cfi_restore (r2)
- cfi_restore (r3)
- cfi_restore (fp)
- cfi_restore (lr)
- bx lr
-# else
- pop {r0, r1, r2, r3, fp, pc}
-# endif
-END(__mcount_arm_compat)
-
-#endif
-
-#if GCC_COMPAT (4, 3)
-
-strong_alias (__mcount_arm_compat, _mcount)
-
-/* The canonical name for the function is `_mcount' in both C and asm,
- but some old asm code might assume it's `mcount'. */
-weak_alias (_mcount, mcount)
-
-#elif SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
-
-compat_symbol (libc, __mcount_arm_compat, _mcount, GLIBC_2_0)
-
-strong_alias (__mcount_arm_compat, __mcount_arm_compat_1)
-compat_symbol (libc, __mcount_arm_compat_1, mcount, GLIBC_2_0)
-
-#endif
diff --git a/sysdeps/arm/arm-unwind-resume.S b/sysdeps/arm/arm-unwind-resume.S
deleted file mode 100644
index 990ff960e3..0000000000
--- a/sysdeps/arm/arm-unwind-resume.S
+++ /dev/null
@@ -1,46 +0,0 @@
-/* _Unwind_Resume wrapper for ARM EABI.
- Copyright (C) 2015-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
-/* This is just implementing exactly what the C version does.
- We do it in assembly just to ensure that we get an unmolested tail
- call to the libgcc function, which is necessary for the ARM unwinder. */
-
-ENTRY (_Unwind_Resume)
- LDR_HIDDEN (ip, ip, __libgcc_s_resume, 0)
- cmp ip, #0
- beq 1f
-0: PTR_DEMANGLE (ip, ip, r2, r3)
- bx ip
-
- /* We need to save and restore LR (for our own return address)
- and R0 (for the argument to _Unwind_Resume) around the call. */
-1: push {r0, lr}
- cfi_adjust_cfa_offset (8)
- cfi_rel_offset (r0, 0)
- cfi_rel_offset (lr, 4)
- bl __libgcc_s_init
- pop {r0, lr}
- cfi_adjust_cfa_offset (-8)
- cfi_restore (r0)
- cfi_restore (lr)
-
- LDR_HIDDEN (ip, ip, __libgcc_s_resume, 0)
- b 0b
-END (_Unwind_Resume)
diff --git a/sysdeps/arm/armv6/rawmemchr.S b/sysdeps/arm/armv6/rawmemchr.S
deleted file mode 100644
index 2511f105bd..0000000000
--- a/sysdeps/arm/armv6/rawmemchr.S
+++ /dev/null
@@ -1,105 +0,0 @@
-/* rawmemchr -- find a byte within an unsized memory block.
- Copyright (C) 2013-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .syntax unified
- .text
-
-ENTRY (__rawmemchr)
- @ r0 = start of string
- @ r1 = character to match
- @ returns a pointer to the match, which must be present.
- ldrb r2, [r0] @ load first byte asap
-
- @ To cater to long strings, we want to search through a few
- @ characters until we reach an aligned pointer. To cater to
- @ small strings, we don't want to start doing word operations
- @ immediately. The compromise is a maximum of 16 bytes less
- @ whatever is required to end with an aligned pointer.
- @ r3 = number of characters to search in alignment loop
- and r3, r0, #7
- uxtb r1, r1
- rsb r3, r3, #15 @ 16 - 1 peeled loop iteration
- cmp r2, r1
- it eq
- bxeq lr
-
- @ Loop until we find ...
-1: ldrb r2, [r0, #1]!
- subs r3, r3, #1 @ ... the alignment point
- it ne
- cmpne r2, r1 @ ... or C
- bne 1b
-
- @ Disambiguate the exit possibilites above
- cmp r2, r1 @ Found C
- it eq
- bxeq lr
- add r0, r0, #1
-
- @ So now we're aligned.
- ldrd r2, r3, [r0], #8
- orr r1, r1, r1, lsl #8 @ Replicate C to all bytes
-#ifdef ARCH_HAS_T2
- movw ip, #0x0101
- pld [r0, #64]
- movt ip, #0x0101
-#else
- ldr ip, =0x01010101
- pld [r0, #64]
-#endif
- orr r1, r1, r1, lsl #16
-
- @ Loop searching for C, 8 bytes at a time.
- @ Subtracting (unsigned saturating) from 1 means result of 1 for
- @ any byte that was originally zero and 0 otherwise. Therefore
- @ we consider the lsb of each byte the "found" bit.
-2: eor r2, r2, r1 @ Convert C bytes to 0
- eor r3, r3, r1
- uqsub8 r2, ip, r2 @ Find C
- uqsub8 r3, ip, r3
- pld [r0, #128]
- orrs r3, r3, r2 @ Test both words for found
- it eq
- ldrdeq r2, r3, [r0], #8
- beq 2b
-
- @ Found something. Disambiguate between first and second words.
- @ Adjust r0 to point to the word containing the match.
- @ Adjust r2 to the found bits for the word containing the match.
- cmp r2, #0
- sub r0, r0, #4
- ite eq
- moveq r2, r3
- subne r0, r0, #4
-
- @ Find the bit-offset of the match within the word. Note that the
- @ bit result from clz will be 7 higher than "true", but we'll
- @ immediately discard those bits converting to a byte offset.
-#ifdef __ARMEL__
- rev r2, r2 @ For LE, count from the little end
-#endif
- clz r2, r2
- add r0, r0, r2, lsr #3 @ Adjust the pointer to the found byte
- bx lr
-
-END (__rawmemchr)
-
-weak_alias (__rawmemchr, rawmemchr)
-libc_hidden_def (__rawmemchr)
diff --git a/sysdeps/arm/armv6/stpcpy.S b/sysdeps/arm/armv6/stpcpy.S
deleted file mode 100644
index 21a4f385be..0000000000
--- a/sysdeps/arm/armv6/stpcpy.S
+++ /dev/null
@@ -1 +0,0 @@
-/* Defined in strcpy.S. */
diff --git a/sysdeps/arm/armv6/strchr.S b/sysdeps/arm/armv6/strchr.S
deleted file mode 100644
index bfd0a6b237..0000000000
--- a/sysdeps/arm/armv6/strchr.S
+++ /dev/null
@@ -1,143 +0,0 @@
-/* strchr -- find the first instance of C in a nul-terminated string.
- Copyright (C) 2013-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .syntax unified
- .text
-
-ENTRY (strchr)
- @ r0 = start of string
- @ r1 = character to match
- @ returns NULL for no match, or a pointer to the match
- ldrb r2, [r0] @ load the first byte asap
- uxtb r1, r1
-
- @ To cater to long strings, we want to search through a few
- @ characters until we reach an aligned pointer. To cater to
- @ small strings, we don't want to start doing word operations
- @ immediately. The compromise is a maximum of 16 bytes less
- @ whatever is required to end with an aligned pointer.
- @ r3 = number of characters to search in alignment loop
- and r3, r0, #7
- rsb r3, r3, #15 @ 16 - 1 peeled loop iteration
- cmp r2, r1 @ Found C?
- it ne
- cmpne r2, #0 @ Found EOS?
- beq 99f
-
- @ Loop until we find ...
-1: ldrb r2, [r0, #1]!
- subs r3, r3, #1 @ ... the aligment point
- it ne
- cmpne r2, r1 @ ... or the character
- it ne
- cmpne r2, #0 @ ... or EOS
- bne 1b
-
- @ Disambiguate the exit possibilites above
- cmp r2, r1 @ Found the character
- it ne
- cmpne r2, #0 @ Found EOS
- beq 99f
- add r0, r0, #1
-
- @ So now we're aligned. Now we actually need a stack frame.
- push { r4, r5, r6, r7 }
- cfi_adjust_cfa_offset (16)
- cfi_rel_offset (r4, 0)
- cfi_rel_offset (r5, 4)
- cfi_rel_offset (r6, 8)
- cfi_rel_offset (r7, 12)
-
- ldrd r2, r3, [r0], #8
- orr r1, r1, r1, lsl #8 @ Replicate C to all bytes
-#ifdef ARCH_HAS_T2
- movw ip, #0x0101
- pld [r0, #64]
- movt ip, #0x0101
-#else
- ldr ip, =0x01010101
- pld [r0, #64]
-#endif
- orr r1, r1, r1, lsl #16
-
- @ Loop searching for EOS or C, 8 bytes at a time.
-2:
- @ Subtracting (unsigned saturating) from 1 means result of 1 for
- @ any byte that was originally zero and 0 otherwise. Therefore
- @ we consider the lsb of each byte the "found" bit.
- uqsub8 r4, ip, r2 @ Find EOS
- eor r6, r2, r1 @ Convert C bytes to 0
- uqsub8 r5, ip, r3
- eor r7, r3, r1
- uqsub8 r6, ip, r6 @ Find C
- pld [r0, #128] @ Prefetch 2 lines ahead
- uqsub8 r7, ip, r7
- orr r4, r4, r6 @ Combine found for EOS and C
- orr r5, r5, r7
- orrs r6, r4, r5 @ Combine the two words
- it eq
- ldrdeq r2, r3, [r0], #8
- beq 2b
-
- @ Found something. Disambiguate between first and second words.
- @ Adjust r0 to point to the word containing the match.
- @ Adjust r2 to the contents of the word containing the match.
- @ Adjust r4 to the found bits for the word containing the match.
- cmp r4, #0
- sub r0, r0, #4
- itte eq
- moveq r4, r5
- moveq r2, r3
- subne r0, r0, #4
-
- @ Find the bit-offset of the match within the word.
-#if defined(__ARMEL__)
- @ For LE, swap the found word so clz searches from the little end.
- rev r4, r4
-#else
- @ For BE, byte swap the word to make it easier to extract the byte.
- rev r2, r2
-#endif
- @ We're counting 0x01 (not 0x80), so the bit offset is 7 too high.
- clz r3, r4
- sub r3, r3, #7
- lsr r2, r2, r3 @ Shift down found byte
- uxtb r1, r1 @ Undo replication of C
- uxtb r2, r2 @ Extract found byte
- add r0, r0, r3, lsr #3 @ Adjust the pointer to the found byte
-
- pop { r4, r5, r6, r7 }
- cfi_adjust_cfa_offset (-16)
- cfi_restore (r4)
- cfi_restore (r5)
- cfi_restore (r6)
- cfi_restore (r7)
-
- @ Disambiguate between EOS and C.
-99:
- cmp r2, r1
- it ne
- movne r0, #0 @ Found EOS, return NULL
- bx lr
-
-END (strchr)
-
-weak_alias (strchr, index)
-libc_hidden_builtin_def (strchr)
diff --git a/sysdeps/arm/armv6/strcpy.S b/sysdeps/arm/armv6/strcpy.S
deleted file mode 100644
index 1b98dbce30..0000000000
--- a/sysdeps/arm/armv6/strcpy.S
+++ /dev/null
@@ -1,218 +0,0 @@
-/* strcpy -- copy a nul-terminated string.
- Copyright (C) 2013-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
-/* Endian independent macros for shifting bytes within registers. */
-#ifdef __ARMEB__
-#define lsh_gt lsr
-#define lsh_ls lsl
-#else
-#define lsh_gt lsl
-#define lsh_ls lsr
-#endif
-
- .syntax unified
- .text
-
-ENTRY (__stpcpy)
- @ Signal stpcpy with NULL in IP.
- mov ip, #0
- b 0f
-END (__stpcpy)
-
-weak_alias (__stpcpy, stpcpy)
-libc_hidden_def (__stpcpy)
-libc_hidden_builtin_def (stpcpy)
-
-ENTRY (strcpy)
- @ Signal strcpy with DEST in IP.
- mov ip, r0
-0:
- pld [r0, #0]
- pld [r1, #0]
-
- @ To cater to long strings, we want 8 byte alignment in the source.
- @ To cater to small strings, we don't want to start that right away.
- @ Loop up to 16 times, less whatever it takes to reach alignment.
- and r3, r1, #7
- rsb r3, r3, #16
-
- @ Loop until we find ...
-1: ldrb r2, [r1], #1
- subs r3, r3, #1 @ ... the alignment point
- strb r2, [r0], #1
- it ne
- cmpne r2, #0 @ ... or EOS
- bne 1b
-
- @ Disambiguate the exit possibilites above
- cmp r2, #0 @ Found EOS
- beq .Lreturn
-
- @ Load the next two words asap
- ldrd r2, r3, [r1], #8
- pld [r0, #64]
- pld [r1, #64]
-
- @ For longer strings, we actaully need a stack frame.
- push { r4, r5, r6, r7 }
- cfi_adjust_cfa_offset (16)
- cfi_rel_offset (r4, 0)
- cfi_rel_offset (r5, 4)
- cfi_rel_offset (r6, 8)
- cfi_rel_offset (r7, 12)
-
- @ Subtracting (unsigned saturating) from 1 for any byte means result
- @ of 1 for any byte that was originally zero and 0 otherwise.
- @ Therefore we consider the lsb of each byte the "found" bit.
-#ifdef ARCH_HAS_T2
- movw r7, #0x0101
- tst r0, #3 @ Test alignment of DEST
- movt r7, #0x0101
-#else
- ldr r7, =0x01010101
- tst r0, #3
-#endif
- bne .Lunaligned
-
- @ So now source (r1) is aligned to 8, and dest (r0) is aligned to 4.
- @ Loop, reading 8 bytes at a time, searching for EOS.
- .balign 16
-2: uqsub8 r4, r7, r2 @ Find EOS
- uqsub8 r5, r7, r3
- pld [r1, #128]
- cmp r4, #0 @ EOS in first word?
- pld [r0, #128]
- bne 3f
- str r2, [r0], #4
- cmp r5, #0 @ EOS in second word?
- bne 4f
- str r3, [r0], #4
- ldrd r2, r3, [r1], #8
- b 2b
-
-3: sub r1, r1, #4 @ backup to first word
-4: sub r1, r1, #4 @ backup to second word
-
- @ ... then finish up any tail a byte at a time.
- @ Note that we generally back up and re-read source bytes,
- @ but we'll not re-write dest bytes.
-.Lbyte_loop:
- ldrb r2, [r1], #1
- cmp r2, #0
- strb r2, [r0], #1
- bne .Lbyte_loop
-
- pop { r4, r5, r6, r7 }
- cfi_remember_state
- cfi_adjust_cfa_offset (-16)
- cfi_restore (r4)
- cfi_restore (r5)
- cfi_restore (r6)
- cfi_restore (r7)
-
-.Lreturn:
- cmp ip, #0 @ Was this strcpy or stpcpy?
- ite eq
- subeq r0, r0, #1 @ stpcpy: undo post-inc from store
- movne r0, ip @ strcpy: return original dest
- bx lr
-
-.Lunaligned:
- cfi_restore_state
- @ Here, source is aligned to 8, but the destination is not word
- @ aligned. Therefore we have to shift the data in order to be
- @ able to perform aligned word stores.
-
- @ Find out which misalignment we're dealing with.
- tst r0, #1
- beq .Lunaligned2
- tst r0, #2
- bne .Lunaligned3
- @ Fallthru to .Lunaligned1.
-
-.macro unaligned_copy unalign
- @ Prologue to unaligned loop. Seed shifted non-zero bytes.
- uqsub8 r4, r7, r2 @ Find EOS
- uqsub8 r5, r7, r3
- cmp r4, #0 @ EOS in first word?
- it ne
- subne r1, r1, #8
- bne .Lbyte_loop
-#ifdef __ARMEB__
- rev r2, r2 @ Byte stores below need LE data
-#endif
- @ Store a few bytes from the first word.
- @ At the same time we align r0 and shift out bytes from r2.
-.rept 4-\unalign
- strb r2, [r0], #1
- lsr r2, r2, #8
-.endr
-#ifdef __ARMEB__
- rev r2, r2 @ Undo previous rev
-#endif
- @ Rotated unaligned copy loop. The tail of the prologue is
- @ shared with the loop itself.
- .balign 8
-1: cmp r5, #0 @ EOS in second word?
- bne 4f
- @ Combine first and second words
- orr r2, r2, r3, lsh_gt #(\unalign*8)
- @ Save leftover bytes from the two words
- lsh_ls r6, r3, #((4-\unalign)*8)
- str r2, [r0], #4
- @ The "real" start of the unaligned copy loop.
- ldrd r2, r3, [r1], #8 @ Load 8 more bytes
- uqsub8 r4, r7, r2 @ Find EOS
- pld [r1, #128]
- uqsub8 r5, r7, r3
- pld [r0, #128]
- cmp r4, #0 @ EOS in first word?
- bne 3f
- @ Combine the leftover and the first word
- orr r6, r6, r2, lsh_gt #(\unalign*8)
- @ Discard used bytes from the first word.
- lsh_ls r2, r2, #((4-\unalign)*8)
- str r6, [r0], #4
- b 1b
- @ Found EOS in one of the words; adjust backward
-3: sub r1, r1, #4
- mov r2, r6
-4: sub r1, r1, #4
- @ And store the remaining bytes from the leftover
-#ifdef __ARMEB__
- rev r2, r2
-#endif
-.rept \unalign
- strb r2, [r0], #1
- lsr r2, r2, #8
-.endr
- b .Lbyte_loop
-.endm
-
-.Lunaligned1:
- unaligned_copy 1
-.Lunaligned2:
- unaligned_copy 2
-.Lunaligned3:
- unaligned_copy 3
-
-END (strcpy)
-
-libc_hidden_builtin_def (strcpy)
diff --git a/sysdeps/arm/armv6/strlen.S b/sysdeps/arm/armv6/strlen.S
deleted file mode 100644
index 64a971f2de..0000000000
--- a/sysdeps/arm/armv6/strlen.S
+++ /dev/null
@@ -1,99 +0,0 @@
-/* strlen -- find the length of a nul-terminated string.
- Copyright (C) 2013-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .syntax unified
- .text
-
-ENTRY (strlen)
- @ r0 = start of string
- ldrb r2, [r0] @ load the first byte asap
-
- @ To cater to long strings, we want to search through a few
- @ characters until we reach an aligned pointer. To cater to
- @ small strings, we don't want to start doing word operations
- @ immediately. The compromise is a maximum of 16 bytes less
- @ whatever is required to end with an aligned pointer.
- @ r3 = number of characters to search in alignment loop
- and r3, r0, #7
- mov r1, r0 @ Save the input pointer
- rsb r3, r3, #15 @ 16 - 1 peeled loop iteration
- cmp r2, #0
- beq 99f
-
- @ Loop until we find ...
-1: ldrb r2, [r0, #1]!
- subs r3, r3, #1 @ ... the aligment point
- it ne
- cmpne r2, #0 @ ... or EOS
- bne 1b
-
- @ Disambiguate the exit possibilites above
- cmp r2, #0 @ Found EOS
- beq 99f
- add r0, r0, #1
-
- @ So now we're aligned.
- ldrd r2, r3, [r0], #8
-#ifdef ARCH_HAS_T2
- movw ip, #0x0101
- pld [r0, #64]
- movt ip, #0x0101
-#else
- ldr ip, =0x01010101
- pld [r0, #64]
-#endif
-
- @ Loop searching for EOS, 8 bytes at a time.
- @ Subtracting (unsigned saturating) from 1 for any byte means that
- @ we get 1 for any byte that was originally zero and 0 otherwise.
- @ Therefore we consider the lsb of each byte the "found" bit.
- .balign 16
-2: uqsub8 r2, ip, r2 @ Find EOS
- uqsub8 r3, ip, r3
- pld [r0, #128] @ Prefetch 2 lines ahead
- orrs r3, r3, r2 @ Combine the two words
- it eq
- ldrdeq r2, r3, [r0], #8
- beq 2b
-
- @ Found something. Disambiguate between first and second words.
- @ Adjust r0 to point to the word containing the match.
- @ Adjust r2 to the found bits for the word containing the match.
- cmp r2, #0
- sub r0, r0, #4
- ite eq
- moveq r2, r3
- subne r0, r0, #4
-
- @ Find the bit-offset of the match within the word. Note that the
- @ bit result from clz will be 7 higher than "true", but we'll
- @ immediately discard those bits converting to a byte offset.
-#ifdef __ARMEL__
- rev r2, r2 @ For LE, count from the little end
-#endif
- clz r2, r2
- add r0, r0, r2, lsr #3 @ Adjust the pointer to the found byte
-99:
- sub r0, r0, r1 @ Subtract input to compute length
- bx lr
-
-END (strlen)
-
-libc_hidden_builtin_def (strlen)
diff --git a/sysdeps/arm/armv6/strrchr.S b/sysdeps/arm/armv6/strrchr.S
deleted file mode 100644
index e6eea01816..0000000000
--- a/sysdeps/arm/armv6/strrchr.S
+++ /dev/null
@@ -1,129 +0,0 @@
-/* strrchr -- find the last occurence of C in a nul-terminated string
- Copyright (C) 2013-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .syntax unified
- .text
-
-ENTRY (strrchr)
- @ r0 = start of string
- @ r1 = character to match
- @ returns NULL for no match, or a pointer to the match
-
- mov r3, r0
- mov r0, #0
- uxtb r1, r1
-
- @ Loop a few times until we're aligned.
- tst r3, #7
- beq 2f
-1: ldrb r2, [r3], #1
- cmp r2, r1 @ Find the character
- it eq
- subeq r0, r3, #1
- cmp r2, #0 @ Find EOS
- it eq
- bxeq lr
- tst r3, #7 @ Find the aligment point
- bne 1b
-
- @ So now we're aligned. Now we actually need a stack frame.
-2: push { r4, r5, r6, r7 }
- cfi_adjust_cfa_offset (16)
- cfi_rel_offset (r4, 0)
- cfi_rel_offset (r5, 4)
- cfi_rel_offset (r6, 8)
- cfi_rel_offset (r7, 12)
-
- orr r1, r1, r1, lsl #8 @ Replicate C to all bytes
-#ifdef ARCH_HAS_T2
- movw ip, #0x0101
- movt ip, #0x0101
-#else
- ldr ip, =0x01010101
-#endif
- orr r1, r1, r1, lsl #16
- mov r2, #0 @ No found bits yet
-
- @ Loop searching for EOS and C, 8 bytes at a time.
- @ Any time we find a match in a word, we copy the address of
- @ the word to r0, and the found bits to r2.
-3: ldrd r4, r5, [r3], #8
- @ Subtracting (unsigned saturating) from 1 means result of 1 for
- @ any byte that was originally zero and 0 otherwise. Therefore
- @ we consider the lsb of each byte the "found" bit.
- uqsub8 r6, ip, r4 @ Find EOS
- uqsub8 r7, ip, r5
- eor r4, r4, r1 @ Convert C bytes to 0
- eor r5, r5, r1
- uqsub8 r4, ip, r4 @ Find C
- uqsub8 r5, ip, r5
- cmp r6, #0 @ Found EOS, first word
- bne 4f
- cmp r4, #0 @ Handle C, first word
- itt ne
- subne r0, r3, #8
- movne r2, r4
- cmp r7, #0 @ Found EOS, second word
- bne 5f
- cmp r5, #0 @ Handle C, second word
- itt ne
- subne r0, r3, #4
- movne r2, r5
- b 3b
-
- @ Found EOS in second word; fold to first word.
-5: add r3, r3, #4 @ Dec pointer to 2nd word, with below
- mov r4, r5 @ Overwrite first word C found
- mov r6, r7 @ Overwrite first word EOS found
-
- @ Found EOS. Zap found C after EOS.
-4: sub r3, r3, #8 @ Decrement pointer to first word
-#ifdef __ARMEB__
- @ Byte swap to be congruent with LE, which is easier from here on.
- rev r6, r6 @ Byte swap found EOS,
- rev r4, r4 @ ... this found C
- rev r2, r2 @ ... prev found C
-#endif
- sub r7, r6, #1 @ Toggle EOS lsb and below
- eor r6, r6, r7 @ All bits below and including lsb
- ands r4, r4, r6 @ Zap C above EOS
- itt ne
- movne r2, r4 @ Copy to result, if still non-zero
- movne r0, r3
-
- pop { r4, r5, r6, r7 }
- cfi_adjust_cfa_offset (-16)
- cfi_restore (r4)
- cfi_restore (r5)
- cfi_restore (r6)
- cfi_restore (r7)
-
- @ Adjust the result pointer if we found a word containing C.
- cmp r2, #0
- clz r2, r2 @ Find the bit offset of the last C
- itt ne
- rsbne r2, r2, #32 @ Convert to a count from the right
- addne r0, r0, r2, lsr #3 @ Convert to byte offset and add.
- bx lr
-
-END (strrchr)
-
-weak_alias (strrchr, rindex)
-libc_hidden_builtin_def (strrchr)
diff --git a/sysdeps/arm/armv6t2/Implies b/sysdeps/arm/armv6t2/Implies
deleted file mode 100644
index 20a87fc8a5..0000000000
--- a/sysdeps/arm/armv6t2/Implies
+++ /dev/null
@@ -1,2 +0,0 @@
-# We can do everything that 6 can
-arm/armv6
diff --git a/sysdeps/arm/armv6t2/ffs.S b/sysdeps/arm/armv6t2/ffs.S
deleted file mode 100644
index ed13cd97ba..0000000000
--- a/sysdeps/arm/armv6t2/ffs.S
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ffs -- find first set bit in an int, from least significant end.
- Copyright (C) 2013-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .syntax unified
- .text
-
-ENTRY (__ffs)
- cmp r0, #0
- rbit r0, r0
- itt ne
- clzne r0, r0
- addne r0, r0, #1
- bx lr
-END (__ffs)
-
-weak_alias (__ffs, ffs)
-weak_alias (__ffs, ffsl)
-libc_hidden_def (__ffs)
-libc_hidden_builtin_def (ffs)
diff --git a/sysdeps/arm/armv6t2/ffsll.S b/sysdeps/arm/armv6t2/ffsll.S
deleted file mode 100644
index 2754cc70aa..0000000000
--- a/sysdeps/arm/armv6t2/ffsll.S
+++ /dev/null
@@ -1,50 +0,0 @@
-/* ffsll -- find first set bit in a long long, from least significant end.
- Copyright (C) 2013-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .syntax unified
- .text
-
-ENTRY (ffsll)
- @ If low part is 0, operate on the high part. Ensure that the
- @ word on which we operate is in r0. Set r2 to the bit offset
- @ of the word being considered. Set the flags for the word
- @ being operated on.
-#ifdef __ARMEL__
- cmp r0, #0
- itee ne
- movne r2, #0
- moveq r2, #32
- movseq r0, r1
-#else
- cmp r1, #0
- ittee ne
- movne r2, #0
- movne r0, r1
- moveq r2, #32
- cmpeq r0, #0
-#endif
- @ Perform the ffs on r0.
- rbit r0, r0
- ittt ne
- clzne r0, r0
- addne r2, r2, #1
- addne r0, r0, r2
- bx lr
-END (ffsll)
diff --git a/sysdeps/arm/armv6t2/memchr.S b/sysdeps/arm/armv6t2/memchr.S
deleted file mode 100644
index fb4dc8efa3..0000000000
--- a/sysdeps/arm/armv6t2/memchr.S
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Code contributed by Dave Gilbert <david.gilbert@linaro.org>
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
-@ This memchr routine is optimised on a Cortex-A9 and should work on all ARMv7
-@ and ARMv6T2 processors. It has a fast path for short sizes, and has an
-@ optimised path for large data sets; the worst case is finding the match early
-@ in a large data set.
-@ Note: The use of cbz/cbnz means it's Thumb only
-
-@ 2011-07-15 david.gilbert@linaro.org
-@ Copy from Cortex strings release 21 and change license
-@ http://bazaar.launchpad.net/~linaro-toolchain-dev/cortex-strings/trunk/view/head:/src/linaro-a9/memchr.S
-@ Change function declarations/entry/exit
-@ 2011-12-01 david.gilbert@linaro.org
-@ Add some fixes from comments received (including use of ldrd instead ldm)
-@ 2011-12-07 david.gilbert@linaro.org
-@ Removed cbz from align loop - can't be taken
-
-@ this lets us check a flag in a 00/ff byte easily in either endianness
-#ifdef __ARMEB__
-#define CHARTSTMASK(c) 1<<(31-(c*8))
-#else
-#define CHARTSTMASK(c) 1<<(c*8)
-#endif
- .syntax unified
-
- .text
-#ifdef NO_THUMB
- .arm
-#else
- .thumb
- .thumb_func
-#endif
- .global memchr
- .type memchr,%function
-ENTRY(memchr)
- @ r0 = start of memory to scan
- @ r1 = character to look for
- @ r2 = length
- @ returns r0 = pointer to character or NULL if not found
- and r1,r1,#0xff @ Don't think we can trust the caller to actually pass a char
-
- cmp r2,#16 @ If it's short don't bother with anything clever
- blt 20f
-
- tst r0, #7 @ If it's already aligned skip the next bit
- beq 10f
-
- @ Work up to an aligned point
-5:
- ldrb r3, [r0],#1
- subs r2, r2, #1
- cmp r3, r1
- beq 50f @ If it matches exit found
- tst r0, #7
- bne 5b @ If not aligned yet then do next byte
-
-10:
- @ At this point, we are aligned, we know we have at least 8 bytes to work with
- push {r4,r5,r6,r7}
- cfi_adjust_cfa_offset (16)
- cfi_rel_offset (r4, 0)
- cfi_rel_offset (r5, 4)
- cfi_rel_offset (r6, 8)
- cfi_rel_offset (r7, 12)
-
- cfi_remember_state
-
- orr r1, r1, r1, lsl #8 @ expand the match word across to all bytes
- orr r1, r1, r1, lsl #16
- bic r6, r2, #7 @ Number of double words to work with * 8
- mvns r7, #0 @ all F's
- movs r3, #0
-
-15:
- ldrd r4,r5, [r0],#8
-#ifndef NO_THUMB
- subs r6, r6, #8
-#endif
- eor r4,r4, r1 @ Get it so that r4,r5 have 00's where the bytes match the target
- eor r5,r5, r1
- uadd8 r4, r4, r7 @ Parallel add 0xff - sets the GE bits for anything that wasn't 0
- sel r4, r3, r7 @ bytes are 00 for none-00 bytes, or ff for 00 bytes - NOTE INVERSION
- uadd8 r5, r5, r7 @ Parallel add 0xff - sets the GE bits for anything that wasn't 0
- sel r5, r4, r7 @ chained....bytes are 00 for none-00 bytes, or ff for 00 bytes - NOTE INVERSION
-#ifndef NO_THUMB
- cbnz r5, 60f
-#else
- cmp r5, #0
- bne 60f
- subs r6, r6, #8
-#endif
- bne 15b @ (Flags from the subs above) If not run out of bytes then go around again
-
- pop {r4,r5,r6,r7}
- cfi_adjust_cfa_offset (-16)
- cfi_restore (r4)
- cfi_restore (r5)
- cfi_restore (r6)
- cfi_restore (r7)
-
- and r1,r1,#0xff @ Get r1 back to a single character from the expansion above
- and r2,r2,#7 @ Leave the count remaining as the number after the double words have been done
-
-20:
-#ifndef NO_THUMB
- cbz r2, 40f @ 0 length or hit the end already then not found
-#else
- cmp r2, #0
- beq 40f
-#endif
-
-21: @ Post aligned section, or just a short call
- ldrb r3,[r0],#1
-#ifndef NO_THUMB
- subs r2,r2,#1
- eor r3,r3,r1 @ r3 = 0 if match - doesn't break flags from sub
- cbz r3, 50f
-#else
- eors r3, r3, r1
- beq 50f
- subs r2, r2, #1
-#endif
- bne 21b @ on r2 flags
-
-40:
- movs r0,#0 @ not found
- DO_RET(lr)
-
-50:
- subs r0,r0,#1 @ found
- DO_RET(lr)
-
-60: @ We're here because the fast path found a hit - now we have to track down exactly which word it was
- @ r0 points to the start of the double word after the one that was tested
- @ r4 has the 00/ff pattern for the first word, r5 has the chained value
- cfi_restore_state
- cmp r4, #0
- itte eq
- moveq r4, r5 @ the end is in the 2nd word
- subeq r0,r0,#3 @ Points to 2nd byte of 2nd word
- subne r0,r0,#7 @ or 2nd byte of 1st word
-
- @ r0 currently points to the 2nd byte of the word containing the hit
- tst r4, # CHARTSTMASK(0) @ 1st character
- bne 61f
- adds r0,r0,#1
- tst r4, # CHARTSTMASK(1) @ 2nd character
- ittt eq
- addeq r0,r0,#1
- tsteq r4, # (3<<15) @ 2nd & 3rd character
- @ If not the 3rd must be the last one
- addeq r0,r0,#1
-
-61:
- pop {r4,r5,r6,r7}
- cfi_adjust_cfa_offset (-16)
- cfi_restore (r4)
- cfi_restore (r5)
- cfi_restore (r6)
- cfi_restore (r7)
-
- subs r0,r0,#1
- DO_RET(lr)
-
-END(memchr)
-libc_hidden_builtin_def (memchr)
diff --git a/sysdeps/arm/armv6t2/strlen.S b/sysdeps/arm/armv6t2/strlen.S
deleted file mode 100644
index c72a1e73be..0000000000
--- a/sysdeps/arm/armv6t2/strlen.S
+++ /dev/null
@@ -1,164 +0,0 @@
-/* Copyright (C) 2010-2017 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/>. */
-
-/*
- Assumes:
- ARMv6T2, AArch32
-
- */
-
-#include <arm-features.h> /* This might #define NO_THUMB. */
-#include <sysdep.h>
-
-#ifdef __ARMEB__
-#define S2LO lsl
-#define S2HI lsr
-#else
-#define S2LO lsr
-#define S2HI lsl
-#endif
-
-#ifndef NO_THUMB
-/* This code is best on Thumb. */
- .thumb
-#else
-/* Using bne.w explicitly is desirable in Thumb mode because it helps
- align the following label without a nop. In ARM mode there is no
- such difference. */
-.macro bne.w label
- bne \label
-.endm
-
-/* This clobbers the condition codes, which the real Thumb cbnz instruction
- does not do. But it doesn't matter for any of the uses here. */
-.macro cbnz reg, label
- cmp \reg, #0
- bne \label
-.endm
-#endif
-
-/* Parameters and result. */
-#define srcin r0
-#define result r0
-
-/* Internal variables. */
-#define src r1
-#define data1a r2
-#define data1b r3
-#define const_m1 r12
-#define const_0 r4
-#define tmp1 r4 /* Overlaps const_0 */
-#define tmp2 r5
-
- .text
- .p2align 6
-ENTRY(strlen)
- pld [srcin, #0]
- strd r4, r5, [sp, #-8]!
- cfi_adjust_cfa_offset (8)
- cfi_rel_offset (r4, 0)
- cfi_rel_offset (r5, 4)
- cfi_remember_state
- bic src, srcin, #7
- mvn const_m1, #0
- ands tmp1, srcin, #7 /* (8 - bytes) to alignment. */
- pld [src, #32]
- bne.w .Lmisaligned8
- mov const_0, #0
- mov result, #-8
-.Lloop_aligned:
- /* Bytes 0-7. */
- ldrd data1a, data1b, [src]
- pld [src, #64]
- add result, result, #8
-.Lstart_realigned:
- uadd8 data1a, data1a, const_m1 /* Saturating GE<0:3> set. */
- sel data1a, const_0, const_m1 /* Select based on GE<0:3>. */
- uadd8 data1b, data1b, const_m1
- sel data1b, data1a, const_m1 /* Only used if d1a == 0. */
- cbnz data1b, .Lnull_found
-
- /* Bytes 8-15. */
- ldrd data1a, data1b, [src, #8]
- uadd8 data1a, data1a, const_m1 /* Saturating GE<0:3> set. */
- add result, result, #8
- sel data1a, const_0, const_m1 /* Select based on GE<0:3>. */
- uadd8 data1b, data1b, const_m1
- sel data1b, data1a, const_m1 /* Only used if d1a == 0. */
- cbnz data1b, .Lnull_found
-
- /* Bytes 16-23. */
- ldrd data1a, data1b, [src, #16]
- uadd8 data1a, data1a, const_m1 /* Saturating GE<0:3> set. */
- add result, result, #8
- sel data1a, const_0, const_m1 /* Select based on GE<0:3>. */
- uadd8 data1b, data1b, const_m1
- sel data1b, data1a, const_m1 /* Only used if d1a == 0. */
- cbnz data1b, .Lnull_found
-
- /* Bytes 24-31. */
- ldrd data1a, data1b, [src, #24]
- add src, src, #32
- uadd8 data1a, data1a, const_m1 /* Saturating GE<0:3> set. */
- add result, result, #8
- sel data1a, const_0, const_m1 /* Select based on GE<0:3>. */
- uadd8 data1b, data1b, const_m1
- sel data1b, data1a, const_m1 /* Only used if d1a == 0. */
- cmp data1b, #0
- beq .Lloop_aligned
-
-.Lnull_found:
- cmp data1a, #0
- itt eq
- addeq result, result, #4
- moveq data1a, data1b
-#ifndef __ARMEB__
- rev data1a, data1a
-#endif
- clz data1a, data1a
- ldrd r4, r5, [sp], #8
- cfi_adjust_cfa_offset (-8)
- cfi_restore (r4)
- cfi_restore (r5)
- add result, result, data1a, lsr #3 /* Bits -> Bytes. */
- DO_RET(lr)
-
-.Lmisaligned8:
- cfi_restore_state
- ldrd data1a, data1b, [src]
- and tmp2, tmp1, #3
- rsb result, tmp1, #0
- lsl tmp2, tmp2, #3 /* Bytes -> bits. */
- tst tmp1, #4
- pld [src, #64]
- S2HI tmp2, const_m1, tmp2
-#ifdef NO_THUMB
- mvn tmp1, tmp2
- orr data1a, data1a, tmp1
- itt ne
- orrne data1b, data1b, tmp1
-#else
- orn data1a, data1a, tmp2
- itt ne
- ornne data1b, data1b, tmp2
-#endif
- movne data1a, const_m1
- mov const_0, #0
- b .Lstart_realigned
-
-END(strlen)
-libc_hidden_builtin_def (strlen)
diff --git a/sysdeps/arm/armv7/Implies b/sysdeps/arm/armv7/Implies
deleted file mode 100644
index c6cd0eb877..0000000000
--- a/sysdeps/arm/armv7/Implies
+++ /dev/null
@@ -1,2 +0,0 @@
-# We can do everything that 6T2 can
-arm/armv6t2
diff --git a/sysdeps/arm/armv7/multiarch/Makefile b/sysdeps/arm/armv7/multiarch/Makefile
deleted file mode 100644
index e834cc937f..0000000000
--- a/sysdeps/arm/armv7/multiarch/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-ifeq ($(subdir),string)
-sysdep_routines += memcpy_neon memcpy_vfp
-endif
diff --git a/sysdeps/arm/armv7/multiarch/aeabi_memcpy.c b/sysdeps/arm/armv7/multiarch/aeabi_memcpy.c
deleted file mode 100644
index c6a2a98a55..0000000000
--- a/sysdeps/arm/armv7/multiarch/aeabi_memcpy.c
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Empty file to override sysdeps/arm version. See memcpy.S for definitions
- of these functions. */
diff --git a/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c b/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c
deleted file mode 100644
index b8094fd393..0000000000
--- a/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Enumerate available IFUNC implementations of a function. ARM version.
- Copyright (C) 2013-2017 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 <stdbool.h>
-#include <string.h>
-#include <ldsodefs.h>
-#include <sysdep.h>
-#include <ifunc-impl-list.h>
-
-/* Fill ARRAY of MAX elements with IFUNC implementations for function
- NAME and return the number of valid entries. */
-
-size_t
-__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
- size_t max)
-{
- size_t i = 0;
-
- bool use_neon = true;
-#ifdef __ARM_NEON__
-# define __memcpy_neon memcpy
-#else
- use_neon = (GLRO(dl_hwcap) & HWCAP_ARM_NEON) != 0;
-#endif
-
-#ifndef __ARM_NEON__
- bool use_vfp = true;
-# ifdef __SOFTFP__
- use_vfp = (GLRO(dl_hwcap) & HWCAP_ARM_VFP) != 0;
-# endif
-#endif
-
- IFUNC_IMPL (i, name, memcpy,
- IFUNC_IMPL_ADD (array, i, memcpy, use_neon, __memcpy_neon)
-#ifndef __ARM_NEON__
- IFUNC_IMPL_ADD (array, i, memcpy, use_vfp, __memcpy_vfp)
-#endif
- IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_arm));
-
- return i;
-}
diff --git a/sysdeps/arm/armv7/multiarch/memcpy.S b/sysdeps/arm/armv7/multiarch/memcpy.S
deleted file mode 100644
index 8a53bdaf91..0000000000
--- a/sysdeps/arm/armv7/multiarch/memcpy.S
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Multiple versions of memcpy
- All versions must be listed in ifunc-impl-list.c.
- Copyright (C) 2013-2017 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/>. */
-
-/* Thumb requires excess IT instructions here. */
-#define NO_THUMB
-#include <sysdep.h>
-#include <rtld-global-offsets.h>
-
-#if IS_IN (libc)
-/* Under __ARM_NEON__, memcpy_neon.S defines the name memcpy. */
-# ifndef __ARM_NEON__
- .text
-ENTRY(memcpy)
- .type memcpy, %gnu_indirect_function
-# ifdef __SOFTFP__
- ldr r1, .Lmemcpy_arm
- tst r0, #HWCAP_ARM_VFP
- ldrne r1, .Lmemcpy_vfp
-# else
- ldr r1, .Lmemcpy_vfp
-# endif
- tst r0, #HWCAP_ARM_NEON
- ldrne r1, .Lmemcpy_neon
-1:
- add r0, r1, pc
- DO_RET(lr)
-
-# ifdef __SOFTFP__
-.Lmemcpy_arm:
- .long C_SYMBOL_NAME(__memcpy_arm) - 1b - PC_OFS
-# endif
-.Lmemcpy_neon:
- .long C_SYMBOL_NAME(__memcpy_neon) - 1b - PC_OFS
-.Lmemcpy_vfp:
- .long C_SYMBOL_NAME(__memcpy_vfp) - 1b - PC_OFS
-
-END(memcpy)
-
-libc_hidden_builtin_def (memcpy)
-#endif /* Not __ARM_NEON__. */
-
-/* These versions of memcpy are defined not to clobber any VFP or NEON
- registers so they must always call the ARM variant of the memcpy code. */
-strong_alias (__memcpy_arm, __aeabi_memcpy)
-strong_alias (__memcpy_arm, __aeabi_memcpy4)
-strong_alias (__memcpy_arm, __aeabi_memcpy8)
-libc_hidden_def (__memcpy_arm)
-
-#undef libc_hidden_builtin_def
-#define libc_hidden_builtin_def(name)
-#undef weak_alias
-#define weak_alias(x, y)
-#undef libc_hidden_def
-#define libc_hidden_def(name)
-
-#define memcpy __memcpy_arm
-
-#endif
-
-#include "memcpy_impl.S"
diff --git a/sysdeps/arm/armv7/multiarch/memcpy_impl.S b/sysdeps/arm/armv7/multiarch/memcpy_impl.S
deleted file mode 100644
index c1b9fb0ab5..0000000000
--- a/sysdeps/arm/armv7/multiarch/memcpy_impl.S
+++ /dev/null
@@ -1,728 +0,0 @@
-/* NEON/VFP/ARM version of memcpy optimized for Cortex-A15.
- Copyright (C) 2013-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>.
-
- This memcpy routine is optimised for Cortex-A15 cores and takes advantage
- of VFP or NEON when built with the appropriate flags.
-
- Assumptions:
-
- ARMv6 (ARMv7-a if using Neon)
- ARM state
- Unaligned accesses
-
- */
-
-/* Thumb cannot encode negative immediate offsets in memory operations. */
-#ifndef NO_THUMB
-#define NO_THUMB
-#endif
-#include <sysdep.h>
-#include <arm-features.h>
-
- .syntax unified
- /* This implementation requires ARM state. */
- .arm
-
-#ifdef MEMCPY_NEON
-
- .fpu neon
- .arch armv7-a
-# define FRAME_SIZE 4
-# define USE_VFP
-# define USE_NEON
-
-#elif defined (MEMCPY_VFP)
-
- .arch armv6
- .fpu vfpv2
-# define FRAME_SIZE 32
-# define USE_VFP
-
-#else
- .arch armv6
-# define FRAME_SIZE 32
-
-#endif
-
-#define ALIGN(addr, align) addr:align
-
-#define INSN_SIZE 4
-
-/* Call parameters. */
-#define dstin r0
-#define src r1
-#define count r2
-
-/* Locals. */
-#define tmp1 r3
-#define dst ip
-#define tmp2 r8
-
-/* These two macros both work by repeated invocation of the macro
- dispatch_step (not defined here). That macro performs one "step",
- doing one load instruction and one store instruction to copy one
- "unit". On entry, TMP1 contains the number of bytes to be copied,
- a multiple of the unit size. The macro clobbers TMP1 in the
- process of doing a computed jump to the tail containing the
- appropriate number of steps.
-
- In dispatch_7_dword, dispatch_step is invoked seven times, with an
- argument that is 7 for the first and 1 for the last. Units are
- double-words (8 bytes). TMP1 is at most 56.
-
- In dispatch_15_word, dispatch_step is invoked fifteen times,
- with an argument that is 15 for the first and 1 for the last.
- Units are words (4 bytes). TMP1 is at most 60. */
-
-#ifndef ARM_ALWAYS_BX
-# if ARM_BX_ALIGN_LOG2 != 2
-# error case not handled
-# endif
- .macro dispatch_7_dword
- rsb tmp1, tmp1, #((7 * 8) - PC_OFS + INSN_SIZE)
- add pc, pc, tmp1
- dispatch_step 7
- dispatch_step 6
- dispatch_step 5
- dispatch_step 4
- dispatch_step 3
- dispatch_step 2
- dispatch_step 1
- .purgem dispatch_step
- .endm
-
- .macro dispatch_15_word
- rsb tmp1, tmp1, #((15 * 4) - PC_OFS/2 + INSN_SIZE/2)
- add pc, pc, tmp1, lsl #1
- dispatch_step 15
- dispatch_step 14
- dispatch_step 13
- dispatch_step 12
- dispatch_step 11
- dispatch_step 10
- dispatch_step 9
- dispatch_step 8
- dispatch_step 7
- dispatch_step 6
- dispatch_step 5
- dispatch_step 4
- dispatch_step 3
- dispatch_step 2
- dispatch_step 1
- .purgem dispatch_step
- .endm
-#else
-# if ARM_BX_ALIGN_LOG2 < 3
-# error case not handled
-# endif
- .macro dispatch_helper steps, log2_bytes_per_step
- /* TMP1 gets (max_bytes - bytes_to_copy), where max_bytes is
- (STEPS << LOG2_BYTES_PER_STEP).
- So this is (steps_to_skip << LOG2_BYTES_PER_STEP).
- Then it needs further adjustment to compensate for the
- distance between the PC value taken below (0f + PC_OFS)
- and the first step's instructions (1f). */
- rsb tmp1, tmp1, #((\steps << \log2_bytes_per_step) \
- + ((1f - PC_OFS - 0f) \
- >> (ARM_BX_ALIGN_LOG2 - \log2_bytes_per_step)))
- /* Shifting down LOG2_BYTES_PER_STEP gives us the number of
- steps to skip, then shifting up ARM_BX_ALIGN_LOG2 gives us
- the (byte) distance to add to the PC. */
-0: add tmp1, pc, tmp1, lsl #(ARM_BX_ALIGN_LOG2 - \log2_bytes_per_step)
- bx tmp1
- .p2align ARM_BX_ALIGN_LOG2
-1:
- .endm
-
- .macro dispatch_7_dword
- dispatch_helper 7, 3
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 7
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 6
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 5
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 4
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 3
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 2
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 1
- .p2align ARM_BX_ALIGN_LOG2
- .purgem dispatch_step
- .endm
-
- .macro dispatch_15_word
- dispatch_helper 15, 2
- dispatch_step 15
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 14
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 13
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 12
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 11
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 10
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 9
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 8
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 7
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 6
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 5
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 4
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 3
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 2
- .p2align ARM_BX_ALIGN_LOG2
- dispatch_step 1
- .p2align ARM_BX_ALIGN_LOG2
- .purgem dispatch_step
- .endm
-
-#endif
-
-#ifndef USE_NEON
-/* For bulk copies using GP registers. */
-#define A_l r2 /* Call-clobbered. */
-#define A_h r3 /* Call-clobbered. */
-#define B_l r4
-#define B_h r5
-#define C_l r6
-#define C_h r7
-/* Don't use the pair r8,r9 because in some EABI variants r9 is reserved. */
-#define D_l r10
-#define D_h r11
-#endif
-
-/* Number of lines ahead to pre-fetch data. If you change this the code
- below will need adjustment to compensate. */
-
-#define prefetch_lines 5
-
-#ifdef USE_VFP
- .macro cpy_line_vfp vreg, base
- vstr \vreg, [dst, #\base]
- vldr \vreg, [src, #\base]
- vstr d0, [dst, #\base + 8]
- vldr d0, [src, #\base + 8]
- vstr d1, [dst, #\base + 16]
- vldr d1, [src, #\base + 16]
- vstr d2, [dst, #\base + 24]
- vldr d2, [src, #\base + 24]
- vstr \vreg, [dst, #\base + 32]
- vldr \vreg, [src, #\base + prefetch_lines * 64 - 32]
- vstr d0, [dst, #\base + 40]
- vldr d0, [src, #\base + 40]
- vstr d1, [dst, #\base + 48]
- vldr d1, [src, #\base + 48]
- vstr d2, [dst, #\base + 56]
- vldr d2, [src, #\base + 56]
- .endm
-
- .macro cpy_tail_vfp vreg, base
- vstr \vreg, [dst, #\base]
- vldr \vreg, [src, #\base]
- vstr d0, [dst, #\base + 8]
- vldr d0, [src, #\base + 8]
- vstr d1, [dst, #\base + 16]
- vldr d1, [src, #\base + 16]
- vstr d2, [dst, #\base + 24]
- vldr d2, [src, #\base + 24]
- vstr \vreg, [dst, #\base + 32]
- vstr d0, [dst, #\base + 40]
- vldr d0, [src, #\base + 40]
- vstr d1, [dst, #\base + 48]
- vldr d1, [src, #\base + 48]
- vstr d2, [dst, #\base + 56]
- vldr d2, [src, #\base + 56]
- .endm
-#endif
-
- .p2align 6
-ENTRY(memcpy)
-
- mov dst, dstin /* Preserve dstin, we need to return it. */
- cmp count, #64
- bge .Lcpy_not_short
- /* Deal with small copies quickly by dropping straight into the
- exit block. */
-
-.Ltail63unaligned:
-#ifdef USE_NEON
- /* These need an extra layer of macro just to work around a
- bug in the assembler's parser when an operand starts with
- a {...}. http://sourceware.org/bugzilla/show_bug.cgi?id=15647
- tracks that bug; it was not fixed as of binutils-2.23.2. */
- .macro neon_load_d0 reg
- vld1.8 {d0}, [\reg]!
- .endm
- .macro neon_store_d0 reg
- vst1.8 {d0}, [\reg]!
- .endm
-
- and tmp1, count, #0x38
- .macro dispatch_step i
- neon_load_d0 src
- neon_store_d0 dst
- .endm
- dispatch_7_dword
-
- tst count, #4
- ldrne tmp1, [src], #4
- strne tmp1, [dst], #4
-#else
- /* Copy up to 15 full words of data. May not be aligned. */
- /* Cannot use VFP for unaligned data. */
- and tmp1, count, #0x3c
- add dst, dst, tmp1
- add src, src, tmp1
- /* Jump directly into the sequence below at the correct offset. */
- .macro dispatch_step i
- ldr tmp1, [src, #-(\i * 4)]
- str tmp1, [dst, #-(\i * 4)]
- .endm
- dispatch_15_word
-#endif
-
- lsls count, count, #31
- ldrhcs tmp1, [src], #2
- ldrbne src, [src] /* Src is dead, use as a scratch. */
- strhcs tmp1, [dst], #2
- strbne src, [dst]
- bx lr
-
-.Lcpy_not_short:
- /* At least 64 bytes to copy, but don't know the alignment yet. */
- str tmp2, [sp, #-FRAME_SIZE]!
- cfi_adjust_cfa_offset (FRAME_SIZE)
- cfi_rel_offset (tmp2, 0)
- cfi_remember_state
- and tmp2, src, #7
- and tmp1, dst, #7
- cmp tmp1, tmp2
- bne .Lcpy_notaligned
-
-#ifdef USE_VFP
- /* Magic dust alert! Force VFP on Cortex-A9. Experiments show
- that the FP pipeline is much better at streaming loads and
- stores. This is outside the critical loop. */
- vmov.f32 s0, s0
-#endif
-
- /* SRC and DST have the same mutual 64-bit alignment, but we may
- still need to pre-copy some bytes to get to natural alignment.
- We bring SRC and DST into full 64-bit alignment. */
- lsls tmp2, dst, #29
- beq 1f
- rsbs tmp2, tmp2, #0
- sub count, count, tmp2, lsr #29
- ldrmi tmp1, [src], #4
- strmi tmp1, [dst], #4
- lsls tmp2, tmp2, #2
- ldrhcs tmp1, [src], #2
- ldrbne tmp2, [src], #1
- strhcs tmp1, [dst], #2
- strbne tmp2, [dst], #1
-
-1:
- subs tmp2, count, #64 /* Use tmp2 for count. */
- blt .Ltail63aligned
-
- cmp tmp2, #512
- bge .Lcpy_body_long
-
-.Lcpy_body_medium: /* Count in tmp2. */
-#ifdef USE_VFP
-1:
- vldr d0, [src, #0]
- subs tmp2, tmp2, #64
- vldr d1, [src, #8]
- vstr d0, [dst, #0]
- vldr d0, [src, #16]
- vstr d1, [dst, #8]
- vldr d1, [src, #24]
- vstr d0, [dst, #16]
- vldr d0, [src, #32]
- vstr d1, [dst, #24]
- vldr d1, [src, #40]
- vstr d0, [dst, #32]
- vldr d0, [src, #48]
- vstr d1, [dst, #40]
- vldr d1, [src, #56]
- vstr d0, [dst, #48]
- add src, src, #64
- vstr d1, [dst, #56]
- add dst, dst, #64
- bge 1b
- tst tmp2, #0x3f
- beq .Ldone
-
-.Ltail63aligned: /* Count in tmp2. */
- and tmp1, tmp2, #0x38
- add dst, dst, tmp1
- add src, src, tmp1
- .macro dispatch_step i
- vldr d0, [src, #-(\i * 8)]
- vstr d0, [dst, #-(\i * 8)]
- .endm
- dispatch_7_dword
-#else
- sub src, src, #8
- sub dst, dst, #8
-1:
- ldrd A_l, A_h, [src, #8]
- strd A_l, A_h, [dst, #8]
- ldrd A_l, A_h, [src, #16]
- strd A_l, A_h, [dst, #16]
- ldrd A_l, A_h, [src, #24]
- strd A_l, A_h, [dst, #24]
- ldrd A_l, A_h, [src, #32]
- strd A_l, A_h, [dst, #32]
- ldrd A_l, A_h, [src, #40]
- strd A_l, A_h, [dst, #40]
- ldrd A_l, A_h, [src, #48]
- strd A_l, A_h, [dst, #48]
- ldrd A_l, A_h, [src, #56]
- strd A_l, A_h, [dst, #56]
- ldrd A_l, A_h, [src, #64]!
- strd A_l, A_h, [dst, #64]!
- subs tmp2, tmp2, #64
- bge 1b
- tst tmp2, #0x3f
- bne 1f
- ldr tmp2,[sp], #FRAME_SIZE
- cfi_adjust_cfa_offset (-FRAME_SIZE)
- cfi_restore (tmp2)
- bx lr
-
- cfi_restore_state
- cfi_remember_state
-1:
- add src, src, #8
- add dst, dst, #8
-
-.Ltail63aligned: /* Count in tmp2. */
- /* Copy up to 7 d-words of data. Similar to Ltail63unaligned, but
- we know that the src and dest are 64-bit aligned so we can use
- LDRD/STRD to improve efficiency. */
- /* TMP2 is now negative, but we don't care about that. The bottom
- six bits still tell us how many bytes are left to copy. */
-
- and tmp1, tmp2, #0x38
- add dst, dst, tmp1
- add src, src, tmp1
- .macro dispatch_step i
- ldrd A_l, A_h, [src, #-(\i * 8)]
- strd A_l, A_h, [dst, #-(\i * 8)]
- .endm
- dispatch_7_dword
-#endif
-
- tst tmp2, #4
- ldrne tmp1, [src], #4
- strne tmp1, [dst], #4
- lsls tmp2, tmp2, #31 /* Count (tmp2) now dead. */
- ldrhcs tmp1, [src], #2
- ldrbne tmp2, [src]
- strhcs tmp1, [dst], #2
- strbne tmp2, [dst]
-
-.Ldone:
- ldr tmp2, [sp], #FRAME_SIZE
- cfi_adjust_cfa_offset (-FRAME_SIZE)
- cfi_restore (tmp2)
- bx lr
-
- cfi_restore_state
- cfi_remember_state
-
-.Lcpy_body_long: /* Count in tmp2. */
-
- /* Long copy. We know that there's at least (prefetch_lines * 64)
- bytes to go. */
-#ifdef USE_VFP
- /* Don't use PLD. Instead, read some data in advance of the current
- copy position into a register. This should act like a PLD
- operation but we won't have to repeat the transfer. */
-
- vldr d3, [src, #0]
- vldr d4, [src, #64]
- vldr d5, [src, #128]
- vldr d6, [src, #192]
- vldr d7, [src, #256]
-
- vldr d0, [src, #8]
- vldr d1, [src, #16]
- vldr d2, [src, #24]
- add src, src, #32
-
- subs tmp2, tmp2, #prefetch_lines * 64 * 2
- blt 2f
-1:
- cpy_line_vfp d3, 0
- cpy_line_vfp d4, 64
- cpy_line_vfp d5, 128
- add dst, dst, #3 * 64
- add src, src, #3 * 64
- cpy_line_vfp d6, 0
- cpy_line_vfp d7, 64
- add dst, dst, #2 * 64
- add src, src, #2 * 64
- subs tmp2, tmp2, #prefetch_lines * 64
- bge 1b
-
-2:
- cpy_tail_vfp d3, 0
- cpy_tail_vfp d4, 64
- cpy_tail_vfp d5, 128
- add src, src, #3 * 64
- add dst, dst, #3 * 64
- cpy_tail_vfp d6, 0
- vstr d7, [dst, #64]
- vldr d7, [src, #64]
- vstr d0, [dst, #64 + 8]
- vldr d0, [src, #64 + 8]
- vstr d1, [dst, #64 + 16]
- vldr d1, [src, #64 + 16]
- vstr d2, [dst, #64 + 24]
- vldr d2, [src, #64 + 24]
- vstr d7, [dst, #64 + 32]
- add src, src, #96
- vstr d0, [dst, #64 + 40]
- vstr d1, [dst, #64 + 48]
- vstr d2, [dst, #64 + 56]
- add dst, dst, #128
- add tmp2, tmp2, #prefetch_lines * 64
- b .Lcpy_body_medium
-#else
- /* Long copy. Use an SMS style loop to maximize the I/O
- bandwidth of the core. We don't have enough spare registers
- to synthesise prefetching, so use PLD operations. */
- /* Pre-bias src and dst. */
- sub src, src, #8
- sub dst, dst, #8
- pld [src, #8]
- pld [src, #72]
- subs tmp2, tmp2, #64
- pld [src, #136]
- ldrd A_l, A_h, [src, #8]
- strd B_l, B_h, [sp, #8]
- cfi_rel_offset (B_l, 8)
- cfi_rel_offset (B_h, 12)
- ldrd B_l, B_h, [src, #16]
- strd C_l, C_h, [sp, #16]
- cfi_rel_offset (C_l, 16)
- cfi_rel_offset (C_h, 20)
- ldrd C_l, C_h, [src, #24]
- strd D_l, D_h, [sp, #24]
- cfi_rel_offset (D_l, 24)
- cfi_rel_offset (D_h, 28)
- pld [src, #200]
- ldrd D_l, D_h, [src, #32]!
- b 1f
- .p2align 6
-2:
- pld [src, #232]
- strd A_l, A_h, [dst, #40]
- ldrd A_l, A_h, [src, #40]
- strd B_l, B_h, [dst, #48]
- ldrd B_l, B_h, [src, #48]
- strd C_l, C_h, [dst, #56]
- ldrd C_l, C_h, [src, #56]
- strd D_l, D_h, [dst, #64]!
- ldrd D_l, D_h, [src, #64]!
- subs tmp2, tmp2, #64
-1:
- strd A_l, A_h, [dst, #8]
- ldrd A_l, A_h, [src, #8]
- strd B_l, B_h, [dst, #16]
- ldrd B_l, B_h, [src, #16]
- strd C_l, C_h, [dst, #24]
- ldrd C_l, C_h, [src, #24]
- strd D_l, D_h, [dst, #32]
- ldrd D_l, D_h, [src, #32]
- bcs 2b
- /* Save the remaining bytes and restore the callee-saved regs. */
- strd A_l, A_h, [dst, #40]
- add src, src, #40
- strd B_l, B_h, [dst, #48]
- ldrd B_l, B_h, [sp, #8]
- cfi_restore (B_l)
- cfi_restore (B_h)
- strd C_l, C_h, [dst, #56]
- ldrd C_l, C_h, [sp, #16]
- cfi_restore (C_l)
- cfi_restore (C_h)
- strd D_l, D_h, [dst, #64]
- ldrd D_l, D_h, [sp, #24]
- cfi_restore (D_l)
- cfi_restore (D_h)
- add dst, dst, #72
- tst tmp2, #0x3f
- bne .Ltail63aligned
- ldr tmp2, [sp], #FRAME_SIZE
- cfi_adjust_cfa_offset (-FRAME_SIZE)
- cfi_restore (tmp2)
- bx lr
-#endif
-
- cfi_restore_state
- cfi_remember_state
-
-.Lcpy_notaligned:
- pld [src, #0]
- pld [src, #64]
- /* There's at least 64 bytes to copy, but there is no mutual
- alignment. */
- /* Bring DST to 64-bit alignment. */
- lsls tmp2, dst, #29
- pld [src, #(2 * 64)]
- beq 1f
- rsbs tmp2, tmp2, #0
- sub count, count, tmp2, lsr #29
- ldrmi tmp1, [src], #4
- strmi tmp1, [dst], #4
- lsls tmp2, tmp2, #2
- ldrbne tmp1, [src], #1
- ldrhcs tmp2, [src], #2
- strbne tmp1, [dst], #1
- strhcs tmp2, [dst], #2
-1:
- pld [src, #(3 * 64)]
- subs count, count, #64
- ldrmi tmp2, [sp], #FRAME_SIZE
- bmi .Ltail63unaligned
- pld [src, #(4 * 64)]
-
-#ifdef USE_NEON
- /* These need an extra layer of macro just to work around a
- bug in the assembler's parser when an operand starts with
- a {...}. */
- .macro neon_load_multi reglist, basereg
- vld1.8 {\reglist}, [\basereg]!
- .endm
- .macro neon_store_multi reglist, basereg
- vst1.8 {\reglist}, [ALIGN (\basereg, 64)]!
- .endm
-
- neon_load_multi d0-d3, src
- neon_load_multi d4-d7, src
- subs count, count, #64
- bmi 2f
-1:
- pld [src, #(4 * 64)]
- neon_store_multi d0-d3, dst
- neon_load_multi d0-d3, src
- neon_store_multi d4-d7, dst
- neon_load_multi d4-d7, src
- subs count, count, #64
- bpl 1b
-2:
- neon_store_multi d0-d3, dst
- neon_store_multi d4-d7, dst
- ands count, count, #0x3f
-#else
- /* Use an SMS style loop to maximize the I/O bandwidth. */
- sub src, src, #4
- sub dst, dst, #8
- subs tmp2, count, #64 /* Use tmp2 for count. */
- ldr A_l, [src, #4]
- ldr A_h, [src, #8]
- strd B_l, B_h, [sp, #8]
- cfi_rel_offset (B_l, 8)
- cfi_rel_offset (B_h, 12)
- ldr B_l, [src, #12]
- ldr B_h, [src, #16]
- strd C_l, C_h, [sp, #16]
- cfi_rel_offset (C_l, 16)
- cfi_rel_offset (C_h, 20)
- ldr C_l, [src, #20]
- ldr C_h, [src, #24]
- strd D_l, D_h, [sp, #24]
- cfi_rel_offset (D_l, 24)
- cfi_rel_offset (D_h, 28)
- ldr D_l, [src, #28]
- ldr D_h, [src, #32]!
- b 1f
- .p2align 6
-2:
- pld [src, #(5 * 64) - (32 - 4)]
- strd A_l, A_h, [dst, #40]
- ldr A_l, [src, #36]
- ldr A_h, [src, #40]
- strd B_l, B_h, [dst, #48]
- ldr B_l, [src, #44]
- ldr B_h, [src, #48]
- strd C_l, C_h, [dst, #56]
- ldr C_l, [src, #52]
- ldr C_h, [src, #56]
- strd D_l, D_h, [dst, #64]!
- ldr D_l, [src, #60]
- ldr D_h, [src, #64]!
- subs tmp2, tmp2, #64
-1:
- strd A_l, A_h, [dst, #8]
- ldr A_l, [src, #4]
- ldr A_h, [src, #8]
- strd B_l, B_h, [dst, #16]
- ldr B_l, [src, #12]
- ldr B_h, [src, #16]
- strd C_l, C_h, [dst, #24]
- ldr C_l, [src, #20]
- ldr C_h, [src, #24]
- strd D_l, D_h, [dst, #32]
- ldr D_l, [src, #28]
- ldr D_h, [src, #32]
- bcs 2b
-
- /* Save the remaining bytes and restore the callee-saved regs. */
- strd A_l, A_h, [dst, #40]
- add src, src, #36
- strd B_l, B_h, [dst, #48]
- ldrd B_l, B_h, [sp, #8]
- cfi_restore (B_l)
- cfi_restore (B_h)
- strd C_l, C_h, [dst, #56]
- ldrd C_l, C_h, [sp, #16]
- cfi_restore (C_l)
- cfi_restore (C_h)
- strd D_l, D_h, [dst, #64]
- ldrd D_l, D_h, [sp, #24]
- cfi_restore (D_l)
- cfi_restore (D_h)
- add dst, dst, #72
- ands count, tmp2, #0x3f
-#endif
- ldr tmp2, [sp], #FRAME_SIZE
- cfi_adjust_cfa_offset (-FRAME_SIZE)
- cfi_restore (tmp2)
- bne .Ltail63unaligned
- bx lr
-
-END(memcpy)
-libc_hidden_builtin_def (memcpy)
diff --git a/sysdeps/arm/armv7/multiarch/memcpy_neon.S b/sysdeps/arm/armv7/multiarch/memcpy_neon.S
deleted file mode 100644
index e60d1cc0e1..0000000000
--- a/sysdeps/arm/armv7/multiarch/memcpy_neon.S
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifdef __ARM_NEON__
-/* Under __ARM_NEON__, this file defines memcpy directly. */
-libc_hidden_builtin_def (memcpy)
-#else
-# define memcpy __memcpy_neon
-#endif
-
-#define MEMCPY_NEON
-#include "memcpy_impl.S"
diff --git a/sysdeps/arm/armv7/multiarch/memcpy_vfp.S b/sysdeps/arm/armv7/multiarch/memcpy_vfp.S
deleted file mode 100644
index e008c041ed..0000000000
--- a/sysdeps/arm/armv7/multiarch/memcpy_vfp.S
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Under __ARM_NEON__, memcpy_neon.S defines memcpy directly
- and the __memcpy_vfp code will never be used. */
-#ifndef __ARM_NEON__
-# define MEMCPY_VFP
-# define memcpy __memcpy_vfp
-# include "memcpy_impl.S"
-#endif
diff --git a/sysdeps/arm/armv7/strcmp.S b/sysdeps/arm/armv7/strcmp.S
deleted file mode 100644
index 25d055754e..0000000000
--- a/sysdeps/arm/armv7/strcmp.S
+++ /dev/null
@@ -1,519 +0,0 @@
-/* strcmp implementation for ARMv7-A, optimized for Cortex-A15.
- Copyright (C) 2012-2017 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 <arm-features.h>
-#include <sysdep.h>
-
-/* Implementation of strcmp for ARMv7 when DSP instructions are
- available. Use ldrd to support wider loads, provided the data
- is sufficiently aligned. Use saturating arithmetic to optimize
- the compares. */
-
-/* Build Options:
- STRCMP_PRECHECK: Run a quick pre-check of the first byte in the
- string. If comparing completely random strings the pre-check will
- save time, since there is a very high probability of a mismatch in
- the first character: we save significant overhead if this is the
- common case. However, if strings are likely to be identical (e.g.
- because we're verifying a hit in a hash table), then this check
- is largely redundant. */
-
-#define STRCMP_PRECHECK 1
-
- .syntax unified
-
-#ifdef __ARM_BIG_ENDIAN
-# define S2LO lsl
-# define S2LOEQ lsleq
-# define S2HI lsr
-# define MSB 0x000000ff
-# define LSB 0xff000000
-# define BYTE0_OFFSET 24
-# define BYTE1_OFFSET 16
-# define BYTE2_OFFSET 8
-# define BYTE3_OFFSET 0
-#else /* not __ARM_BIG_ENDIAN */
-# define S2LO lsr
-# define S2LOEQ lsreq
-# define S2HI lsl
-# define BYTE0_OFFSET 0
-# define BYTE1_OFFSET 8
-# define BYTE2_OFFSET 16
-# define BYTE3_OFFSET 24
-# define MSB 0xff000000
-# define LSB 0x000000ff
-#endif /* not __ARM_BIG_ENDIAN */
-
-/* Parameters and result. */
-#define src1 r0
-#define src2 r1
-#define result r0 /* Overlaps src1. */
-
-/* Internal variables. */
-#define tmp1 r4
-#define tmp2 r5
-#define const_m1 r12
-
-/* Additional internal variables for 64-bit aligned data. */
-#define data1a r2
-#define data1b r3
-#define data2a r6
-#define data2b r7
-#define syndrome_a tmp1
-#define syndrome_b tmp2
-
-/* Additional internal variables for 32-bit aligned data. */
-#define data1 r2
-#define data2 r3
-#define syndrome tmp2
-
-
-#ifndef NO_THUMB
-/* This code is best on Thumb. */
- .thumb
-
-/* In Thumb code we can't use MVN with a register shift, but we do have ORN. */
-.macro prepare_mask mask_reg, nbits_reg
- S2HI \mask_reg, const_m1, \nbits_reg
-.endm
-.macro apply_mask data_reg, mask_reg
- orn \data_reg, \data_reg, \mask_reg
-.endm
-#else
-/* In ARM code we don't have ORN, but we can use MVN with a register shift. */
-.macro prepare_mask mask_reg, nbits_reg
- mvn \mask_reg, const_m1, S2HI \nbits_reg
-.endm
-.macro apply_mask data_reg, mask_reg
- orr \data_reg, \data_reg, \mask_reg
-.endm
-
-/* These clobber the condition codes, which the real Thumb cbz/cbnz
- instructions do not. But it doesn't matter for any of the uses here. */
-.macro cbz reg, label
- cmp \reg, #0
- beq \label
-.endm
-.macro cbnz reg, label
- cmp \reg, #0
- bne \label
-.endm
-#endif
-
-
- /* Macro to compute and return the result value for word-aligned
- cases. */
- .macro strcmp_epilogue_aligned synd d1 d2 restore_r6
-#ifdef __ARM_BIG_ENDIAN
- /* If data1 contains a zero byte, then syndrome will contain a 1 in
- bit 7 of that byte. Otherwise, the highest set bit in the
- syndrome will highlight the first different bit. It is therefore
- sufficient to extract the eight bits starting with the syndrome
- bit. */
- clz tmp1, \synd
- lsl r1, \d2, tmp1
- .if \restore_r6
- ldrd r6, r7, [sp, #8]
- .endif
- lsl \d1, \d1, tmp1
- lsr result, \d1, #24
- ldrd r4, r5, [sp], #16
- cfi_remember_state
- cfi_def_cfa_offset (0)
- cfi_restore (r4)
- cfi_restore (r5)
- cfi_restore (r6)
- cfi_restore (r7)
- sub result, result, r1, lsr #24
- bx lr
-#else
- /* To use the big-endian trick we'd have to reverse all three words.
- that's slower than this approach. */
- rev \synd, \synd
- clz tmp1, \synd
- bic tmp1, tmp1, #7
- lsr r1, \d2, tmp1
- .if \restore_r6
- ldrd r6, r7, [sp, #8]
- .endif
- lsr \d1, \d1, tmp1
- and result, \d1, #255
- and r1, r1, #255
- ldrd r4, r5, [sp], #16
- cfi_remember_state
- cfi_def_cfa_offset (0)
- cfi_restore (r4)
- cfi_restore (r5)
- cfi_restore (r6)
- cfi_restore (r7)
- sub result, result, r1
-
- bx lr
-#endif
- .endm
-
- .text
- .p2align 5
-.Lstrcmp_start_addr:
-#if STRCMP_PRECHECK == 1
-.Lfastpath_exit:
- sub r0, r2, r3
- bx lr
- nop
-#endif
-ENTRY (strcmp)
-#if STRCMP_PRECHECK == 1
- ldrb r2, [src1]
- ldrb r3, [src2]
- cmp r2, #1
- it cs
- cmpcs r2, r3
- bne .Lfastpath_exit
-#endif
- strd r4, r5, [sp, #-16]!
- cfi_def_cfa_offset (16)
- cfi_offset (r4, -16)
- cfi_offset (r5, -12)
- orr tmp1, src1, src2
- strd r6, r7, [sp, #8]
- cfi_offset (r6, -8)
- cfi_offset (r7, -4)
- mvn const_m1, #0
- lsl r2, tmp1, #29
- cbz r2, .Lloop_aligned8
-
-.Lnot_aligned:
- eor tmp1, src1, src2
- tst tmp1, #7
- bne .Lmisaligned8
-
- /* Deal with mutual misalignment by aligning downwards and then
- masking off the unwanted loaded data to prevent a difference. */
- and tmp1, src1, #7
- bic src1, src1, #7
- and tmp2, tmp1, #3
- bic src2, src2, #7
- lsl tmp2, tmp2, #3 /* Bytes -> bits. */
- ldrd data1a, data1b, [src1], #16
- tst tmp1, #4
- ldrd data2a, data2b, [src2], #16
- prepare_mask tmp1, tmp2
- apply_mask data1a, tmp1
- apply_mask data2a, tmp1
- beq .Lstart_realigned8
- apply_mask data1b, tmp1
- mov data1a, const_m1
- apply_mask data2b, tmp1
- mov data2a, const_m1
- b .Lstart_realigned8
-
- /* Unwind the inner loop by a factor of 2, giving 16 bytes per
- pass. */
- .p2align 5,,12 /* Don't start in the tail bytes of a cache line. */
- .p2align 2 /* Always word aligned. */
-.Lloop_aligned8:
- ldrd data1a, data1b, [src1], #16
- ldrd data2a, data2b, [src2], #16
-.Lstart_realigned8:
- uadd8 syndrome_b, data1a, const_m1 /* Only want GE bits, */
- eor syndrome_a, data1a, data2a
- sel syndrome_a, syndrome_a, const_m1
- cbnz syndrome_a, .Ldiff_in_a
- uadd8 syndrome_b, data1b, const_m1 /* Only want GE bits. */
- eor syndrome_b, data1b, data2b
- sel syndrome_b, syndrome_b, const_m1
- cbnz syndrome_b, .Ldiff_in_b
-
- ldrd data1a, data1b, [src1, #-8]
- ldrd data2a, data2b, [src2, #-8]
- uadd8 syndrome_b, data1a, const_m1 /* Only want GE bits, */
- eor syndrome_a, data1a, data2a
- sel syndrome_a, syndrome_a, const_m1
- uadd8 syndrome_b, data1b, const_m1 /* Only want GE bits. */
- eor syndrome_b, data1b, data2b
- sel syndrome_b, syndrome_b, const_m1
- /* Can't use CBZ for backwards branch. */
- orrs syndrome_b, syndrome_b, syndrome_a /* Only need if s_a == 0 */
- beq .Lloop_aligned8
-
-.Ldiff_found:
- cbnz syndrome_a, .Ldiff_in_a
-
-.Ldiff_in_b:
- strcmp_epilogue_aligned syndrome_b, data1b, data2b 1
-
-.Ldiff_in_a:
- cfi_restore_state
- strcmp_epilogue_aligned syndrome_a, data1a, data2a 1
-
- cfi_restore_state
-.Lmisaligned8:
- tst tmp1, #3
- bne .Lmisaligned4
- ands tmp1, src1, #3
- bne .Lmutual_align4
-
- /* Unrolled by a factor of 2, to reduce the number of post-increment
- operations. */
-.Lloop_aligned4:
- ldr data1, [src1], #8
- ldr data2, [src2], #8
-.Lstart_realigned4:
- uadd8 syndrome, data1, const_m1 /* Only need GE bits. */
- eor syndrome, data1, data2
- sel syndrome, syndrome, const_m1
- cbnz syndrome, .Laligned4_done
- ldr data1, [src1, #-4]
- ldr data2, [src2, #-4]
- uadd8 syndrome, data1, const_m1
- eor syndrome, data1, data2
- sel syndrome, syndrome, const_m1
- cmp syndrome, #0
- beq .Lloop_aligned4
-
-.Laligned4_done:
- strcmp_epilogue_aligned syndrome, data1, data2, 0
-
-.Lmutual_align4:
- cfi_restore_state
- /* Deal with mutual misalignment by aligning downwards and then
- masking off the unwanted loaded data to prevent a difference. */
- lsl tmp1, tmp1, #3 /* Bytes -> bits. */
- bic src1, src1, #3
- ldr data1, [src1], #8
- bic src2, src2, #3
- ldr data2, [src2], #8
-
- prepare_mask tmp1, tmp1
- apply_mask data1, tmp1
- apply_mask data2, tmp1
- b .Lstart_realigned4
-
-.Lmisaligned4:
- ands tmp1, src1, #3
- beq .Lsrc1_aligned
- sub src2, src2, tmp1
- bic src1, src1, #3
- lsls tmp1, tmp1, #31
- ldr data1, [src1], #4
- beq .Laligned_m2
- bcs .Laligned_m1
-
-#if STRCMP_PRECHECK == 0
- ldrb data2, [src2, #1]
- uxtb tmp1, data1, ror #BYTE1_OFFSET
- subs tmp1, tmp1, data2
- bne .Lmisaligned_exit
- cbz data2, .Lmisaligned_exit
-
-.Laligned_m2:
- ldrb data2, [src2, #2]
- uxtb tmp1, data1, ror #BYTE2_OFFSET
- subs tmp1, tmp1, data2
- bne .Lmisaligned_exit
- cbz data2, .Lmisaligned_exit
-
-.Laligned_m1:
- ldrb data2, [src2, #3]
- uxtb tmp1, data1, ror #BYTE3_OFFSET
- subs tmp1, tmp1, data2
- bne .Lmisaligned_exit
- add src2, src2, #4
- cbnz data2, .Lsrc1_aligned
-#else /* STRCMP_PRECHECK */
- /* If we've done the pre-check, then we don't need to check the
- first byte again here. */
- ldrb data2, [src2, #2]
- uxtb tmp1, data1, ror #BYTE2_OFFSET
- subs tmp1, tmp1, data2
- bne .Lmisaligned_exit
- cbz data2, .Lmisaligned_exit
-
-.Laligned_m2:
- ldrb data2, [src2, #3]
- uxtb tmp1, data1, ror #BYTE3_OFFSET
- subs tmp1, tmp1, data2
- bne .Lmisaligned_exit
- cbnz data2, .Laligned_m1
-#endif
-
-.Lmisaligned_exit:
- mov result, tmp1
- ldr r4, [sp], #16
- cfi_remember_state
- cfi_def_cfa_offset (0)
- cfi_restore (r4)
- cfi_restore (r5)
- cfi_restore (r6)
- cfi_restore (r7)
- bx lr
-
-#if STRCMP_PRECHECK == 1
-.Laligned_m1:
- add src2, src2, #4
-#endif
-.Lsrc1_aligned:
- cfi_restore_state
- /* src1 is word aligned, but src2 has no common alignment
- with it. */
- ldr data1, [src1], #4
- lsls tmp1, src2, #31 /* C=src2[1], Z=src2[0]. */
-
- bic src2, src2, #3
- ldr data2, [src2], #4
- bhi .Loverlap1 /* C=1, Z=0 => src2[1:0] = 0b11. */
- bcs .Loverlap2 /* C=1, Z=1 => src2[1:0] = 0b10. */
-
- /* (overlap3) C=0, Z=0 => src2[1:0] = 0b01. */
-.Loverlap3:
- bic tmp1, data1, #MSB
- uadd8 syndrome, data1, const_m1
- eors syndrome, tmp1, data2, S2LO #8
- sel syndrome, syndrome, const_m1
- bne 4f
- cbnz syndrome, 5f
- ldr data2, [src2], #4
- eor tmp1, tmp1, data1
- cmp tmp1, data2, S2HI #24
- bne 6f
- ldr data1, [src1], #4
- b .Loverlap3
-4:
- S2LO data2, data2, #8
- b .Lstrcmp_tail
-
-5:
- bics syndrome, syndrome, #MSB
- bne .Lstrcmp_done_equal
-
- /* We can only get here if the MSB of data1 contains 0, so
- fast-path the exit. */
- ldrb result, [src2]
- ldrd r4, r5, [sp], #16
- cfi_remember_state
- cfi_def_cfa_offset (0)
- cfi_restore (r4)
- cfi_restore (r5)
- /* R6/7 Not used in this sequence. */
- cfi_restore (r6)
- cfi_restore (r7)
- neg result, result
- bx lr
-
-6:
- cfi_restore_state
- S2LO data1, data1, #24
- and data2, data2, #LSB
- b .Lstrcmp_tail
-
- .p2align 5,,12 /* Ensure at least 3 instructions in cache line. */
-.Loverlap2:
- and tmp1, data1, const_m1, S2LO #16
- uadd8 syndrome, data1, const_m1
- eors syndrome, tmp1, data2, S2LO #16
- sel syndrome, syndrome, const_m1
- bne 4f
- cbnz syndrome, 5f
- ldr data2, [src2], #4
- eor tmp1, tmp1, data1
- cmp tmp1, data2, S2HI #16
- bne 6f
- ldr data1, [src1], #4
- b .Loverlap2
-4:
- S2LO data2, data2, #16
- b .Lstrcmp_tail
-5:
- ands syndrome, syndrome, const_m1, S2LO #16
- bne .Lstrcmp_done_equal
-
- ldrh data2, [src2]
- S2LO data1, data1, #16
-#ifdef __ARM_BIG_ENDIAN
- lsl data2, data2, #16
-#endif
- b .Lstrcmp_tail
-
-6:
- S2LO data1, data1, #16
- and data2, data2, const_m1, S2LO #16
- b .Lstrcmp_tail
-
- .p2align 5,,12 /* Ensure at least 3 instructions in cache line. */
-.Loverlap1:
- and tmp1, data1, #LSB
- uadd8 syndrome, data1, const_m1
- eors syndrome, tmp1, data2, S2LO #24
- sel syndrome, syndrome, const_m1
- bne 4f
- cbnz syndrome, 5f
- ldr data2, [src2], #4
- eor tmp1, tmp1, data1
- cmp tmp1, data2, S2HI #8
- bne 6f
- ldr data1, [src1], #4
- b .Loverlap1
-4:
- S2LO data2, data2, #24
- b .Lstrcmp_tail
-5:
- tst syndrome, #LSB
- bne .Lstrcmp_done_equal
- ldr data2, [src2]
-6:
- S2LO data1, data1, #8
- bic data2, data2, #MSB
- b .Lstrcmp_tail
-
-.Lstrcmp_done_equal:
- mov result, #0
- ldrd r4, r5, [sp], #16
- cfi_remember_state
- cfi_def_cfa_offset (0)
- cfi_restore (r4)
- cfi_restore (r5)
- /* R6/7 not used in this sequence. */
- cfi_restore (r6)
- cfi_restore (r7)
- bx lr
-
-.Lstrcmp_tail:
- cfi_restore_state
-#ifndef __ARM_BIG_ENDIAN
- rev data1, data1
- rev data2, data2
- /* Now everything looks big-endian... */
-#endif
- uadd8 tmp1, data1, const_m1
- eor tmp1, data1, data2
- sel syndrome, tmp1, const_m1
- clz tmp1, syndrome
- lsl data1, data1, tmp1
- lsl data2, data2, tmp1
- lsr result, data1, #24
- ldrd r4, r5, [sp], #16
- cfi_def_cfa_offset (0)
- cfi_restore (r4)
- cfi_restore (r5)
- /* R6/7 not used in this sequence. */
- cfi_restore (r6)
- cfi_restore (r7)
- sub result, result, data2, lsr #24
- bx lr
-END (strcmp)
-libc_hidden_builtin_def (strcmp)
diff --git a/sysdeps/arm/atomic-machine.h b/sysdeps/arm/atomic-machine.h
deleted file mode 100644
index c22d05b766..0000000000
--- a/sysdeps/arm/atomic-machine.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/* Atomic operations. Pure ARM version.
- Copyright (C) 2002-2017 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 <stdint.h>
-
-typedef int8_t atomic8_t;
-typedef uint8_t uatomic8_t;
-typedef int_fast8_t atomic_fast8_t;
-typedef uint_fast8_t uatomic_fast8_t;
-
-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 0
-#define ATOMIC_EXCHANGE_USES_CAS 1
-
-void __arm_link_error (void);
-
-#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
-# define atomic_full_barrier() __sync_synchronize ()
-#else
-# define atomic_full_barrier() __arm_assisted_full_barrier ()
-#endif
-
-/* An OS-specific atomic-machine.h file will define this macro if
- the OS can provide something. If not, we'll fail to build
- with a compiler that doesn't supply the operation. */
-#ifndef __arm_assisted_full_barrier
-# define __arm_assisted_full_barrier() __arm_link_error()
-#endif
-
-/* Use the atomic builtins provided by GCC in case the backend provides
- a pattern to do this efficiently. */
-#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
-
-# define atomic_exchange_acq(mem, value) \
- __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_ACQUIRE)
-
-# define atomic_exchange_rel(mem, value) \
- __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_RELEASE)
-
-/* Atomic exchange (without compare). */
-
-# define __arch_exchange_8_int(mem, newval, model) \
- (__arm_link_error (), (typeof (*mem)) 0)
-
-# define __arch_exchange_16_int(mem, newval, model) \
- (__arm_link_error (), (typeof (*mem)) 0)
-
-# define __arch_exchange_32_int(mem, newval, model) \
- __atomic_exchange_n (mem, newval, model)
-
-# define __arch_exchange_64_int(mem, newval, model) \
- (__arm_link_error (), (typeof (*mem)) 0)
-
-/* Compare and exchange with "acquire" semantics, ie barrier after. */
-
-# define atomic_compare_and_exchange_bool_acq(mem, new, old) \
- __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \
- mem, new, old, __ATOMIC_ACQUIRE)
-
-# define atomic_compare_and_exchange_val_acq(mem, new, old) \
- __atomic_val_bysize (__arch_compare_and_exchange_val, int, \
- mem, new, old, __ATOMIC_ACQUIRE)
-
-/* Compare and exchange with "release" semantics, ie barrier before. */
-
-# define atomic_compare_and_exchange_val_rel(mem, new, old) \
- __atomic_val_bysize (__arch_compare_and_exchange_val, int, \
- mem, new, old, __ATOMIC_RELEASE)
-
-/* Compare and exchange.
- For all "bool" routines, we return FALSE if exchange succesful. */
-
-# define __arch_compare_and_exchange_bool_8_int(mem, newval, oldval, model) \
- ({__arm_link_error (); 0; })
-
-# define __arch_compare_and_exchange_bool_16_int(mem, newval, oldval, model) \
- ({__arm_link_error (); 0; })
-
-# define __arch_compare_and_exchange_bool_32_int(mem, newval, oldval, model) \
- ({ \
- typeof (*mem) __oldval = (oldval); \
- !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \
- model, __ATOMIC_RELAXED); \
- })
-
-# define __arch_compare_and_exchange_bool_64_int(mem, newval, oldval, model) \
- ({__arm_link_error (); 0; })
-
-# define __arch_compare_and_exchange_val_8_int(mem, newval, oldval, model) \
- ({__arm_link_error (); oldval; })
-
-# define __arch_compare_and_exchange_val_16_int(mem, newval, oldval, model) \
- ({__arm_link_error (); oldval; })
-
-# 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 __arch_compare_and_exchange_val_64_int(mem, newval, oldval, model) \
- ({__arm_link_error (); oldval; })
-
-#else
-# define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
- __arm_assisted_compare_and_exchange_val_32_acq ((mem), (newval), (oldval))
-#endif
-
-#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
-/* We don't support atomic operations on any non-word types.
- So make them link errors. */
-# define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
- ({ __arm_link_error (); oldval; })
-
-# define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
- ({ __arm_link_error (); oldval; })
-
-# define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
- ({ __arm_link_error (); oldval; })
-#endif
-
-/* An OS-specific atomic-machine.h file will define this macro if
- the OS can provide something. If not, we'll fail to build
- with a compiler that doesn't supply the operation. */
-#ifndef __arm_assisted_compare_and_exchange_val_32_acq
-# define __arm_assisted_compare_and_exchange_val_32_acq(mem, newval, oldval) \
- ({ __arm_link_error (); oldval; })
-#endif
diff --git a/sysdeps/arm/backtrace.c b/sysdeps/arm/backtrace.c
deleted file mode 100644
index 14a8053b60..0000000000
--- a/sysdeps/arm/backtrace.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/* Return backtrace of current program state.
- Copyright (C) 2008-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Kazu Hirata <kazu@codesourcery.com>, 2008.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <libc-lock.h>
-#include <dlfcn.h>
-#include <execinfo.h>
-#include <stdlib.h>
-#include <unwind.h>
-
-struct trace_arg
-{
- void **array;
- int cnt, size;
-};
-
-#ifdef SHARED
-static _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *);
-static _Unwind_VRS_Result (*unwind_vrs_get) (_Unwind_Context *,
- _Unwind_VRS_RegClass,
- _uw,
- _Unwind_VRS_DataRepresentation,
- void *);
-
-static void *libgcc_handle;
-
-static void
-init (void)
-{
- libgcc_handle = __libc_dlopen ("libgcc_s.so.1");
-
- if (libgcc_handle == NULL)
- return;
-
- unwind_backtrace = __libc_dlsym (libgcc_handle, "_Unwind_Backtrace");
- unwind_vrs_get = __libc_dlsym (libgcc_handle, "_Unwind_VRS_Get");
- if (unwind_vrs_get == NULL)
- unwind_backtrace = NULL;
-}
-
-/* This function is identical to "_Unwind_GetGR", except that it uses
- "unwind_vrs_get" instead of "_Unwind_VRS_Get". */
-static inline _Unwind_Word
-unwind_getgr (_Unwind_Context *context, int regno)
-{
- _uw val;
- unwind_vrs_get (context, _UVRSC_CORE, regno, _UVRSD_UINT32, &val);
- return val;
-}
-
-/* This macro is identical to the _Unwind_GetIP macro, except that it
- uses "unwind_getgr" instead of "_Unwind_GetGR". */
-# define unwind_getip(context) \
- (unwind_getgr (context, 15) & ~(_Unwind_Word)1)
-#else
-# define unwind_backtrace _Unwind_Backtrace
-# define unwind_getip _Unwind_GetIP
-#endif
-
-static _Unwind_Reason_Code
-backtrace_helper (struct _Unwind_Context *ctx, void *a)
-{
- struct trace_arg *arg = a;
-
- /* We are first called with address in the __backtrace function.
- Skip it. */
- if (arg->cnt != -1)
- arg->array[arg->cnt] = (void *) unwind_getip (ctx);
- if (++arg->cnt == arg->size)
- return _URC_END_OF_STACK;
- return _URC_NO_REASON;
-}
-
-int
-__backtrace (void **array, int size)
-{
- struct trace_arg arg = { .array = array, .size = size, .cnt = -1 };
-
- if (size <= 0)
- return 0;
-
-#ifdef SHARED
- __libc_once_define (static, once);
-
- __libc_once (once, init);
- if (unwind_backtrace == NULL)
- return 0;
-#endif
-
- unwind_backtrace (backtrace_helper, &arg);
-
- if (arg.cnt > 1 && arg.array[arg.cnt - 1] == NULL)
- --arg.cnt;
- return arg.cnt != -1 ? arg.cnt : 0;
-}
-weak_alias (__backtrace, backtrace)
-libc_hidden_def (__backtrace)
-
-
-#ifdef SHARED
-/* Free all resources if necessary. */
-libc_freeres_fn (free_mem)
-{
- unwind_backtrace = NULL;
- if (libgcc_handle != NULL)
- {
- __libc_dlclose (libgcc_handle);
- libgcc_handle = NULL;
- }
-}
-#endif
diff --git a/sysdeps/arm/bits/endian.h b/sysdeps/arm/bits/endian.h
deleted file mode 100644
index f49f6ab1c9..0000000000
--- a/sysdeps/arm/bits/endian.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _ENDIAN_H
-# error "Never use <bits/endian.h> directly; include <endian.h> instead."
-#endif
-
-/* ARM can be either big or little endian. */
-#ifdef __ARMEB__
-#define __BYTE_ORDER __BIG_ENDIAN
-#else
-#define __BYTE_ORDER __LITTLE_ENDIAN
-#endif
diff --git a/sysdeps/arm/bits/fenv.h b/sysdeps/arm/bits/fenv.h
deleted file mode 100644
index fe9aeb36bb..0000000000
--- a/sysdeps/arm/bits/fenv.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Copyright (C) 2004-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _FENV_H
-# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
-#endif
-
-/* Define bits representing exceptions in the FPU status word. */
-enum
- {
- FE_INVALID =
-#define FE_INVALID 1
- FE_INVALID,
- FE_DIVBYZERO =
-#define FE_DIVBYZERO 2
- FE_DIVBYZERO,
- FE_OVERFLOW =
-#define FE_OVERFLOW 4
- FE_OVERFLOW,
- FE_UNDERFLOW =
-#define FE_UNDERFLOW 8
- FE_UNDERFLOW,
- FE_INEXACT =
-#define FE_INEXACT 16
- FE_INEXACT,
- };
-
-/* Amount to shift by to convert an exception to a mask bit. */
-#define FE_EXCEPT_SHIFT 8
-
-/* All supported exceptions. */
-#define FE_ALL_EXCEPT \
- (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
-
-/* VFP supports all of the four defined rounding modes. */
-enum
- {
- FE_TONEAREST =
-#define FE_TONEAREST 0
- FE_TONEAREST,
- FE_UPWARD =
-#define FE_UPWARD 0x400000
- FE_UPWARD,
- FE_DOWNWARD =
-#define FE_DOWNWARD 0x800000
- FE_DOWNWARD,
- FE_TOWARDZERO =
-#define FE_TOWARDZERO 0xc00000
- FE_TOWARDZERO
- };
-
-/* Type representing exception flags. */
-typedef unsigned int fexcept_t;
-
-/* Type representing floating-point environment. */
-typedef struct
- {
- unsigned int __cw;
- }
-fenv_t;
-
-/* If the default argument is used we use this value. */
-#define FE_DFL_ENV ((const fenv_t *) -1l)
-
-#ifdef __USE_GNU
-/* Floating-point environment where none of the exceptions are masked. */
-# define FE_NOMASK_ENV ((const fenv_t *) -2)
-#endif
-
-#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/arm/bits/link.h b/sysdeps/arm/bits/link.h
deleted file mode 100644
index 6e6d50ed27..0000000000
--- a/sysdeps/arm/bits/link.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Copyright (C) 2005-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _LINK_H
-# error "Never include <bits/link.h> directly; use <link.h> instead."
-#endif
-
-
-/* Registers for entry into PLT on ARM. */
-typedef struct La_arm_regs
-{
- uint32_t lr_reg[4];
- uint32_t lr_sp;
- uint32_t lr_lr;
- /* Coprocessor registers used for argument passing. The data
- stored here depends on the coprocessors available in the
- system which are used for function calls in the current ABI.
- VFP uses eight 64-bit registers, and iWMMXt uses ten. */
- uint32_t lr_coproc[42];
-} La_arm_regs;
-
-/* Return values for calls from PLT on ARM. */
-typedef struct La_arm_retval
-{
- /* Up to four integer registers can be used for a return value in
- some ABIs (APCS complex long double). */
- uint32_t lrv_reg[4];
-
- /* Any coprocessor registers which might be used to return values
- in the current ABI. */
- uint32_t lrv_coproc[12];
-} La_arm_retval;
-
-
-__BEGIN_DECLS
-
-extern Elf32_Addr la_arm_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx,
- uintptr_t *__refcook,
- uintptr_t *__defcook,
- La_arm_regs *__regs,
- unsigned int *__flags,
- const char *__symname,
- long int *__framesizep);
-extern unsigned int la_arm_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx,
- uintptr_t *__refcook,
- uintptr_t *__defcook,
- const La_arm_regs *__inregs,
- La_arm_retval *__outregs,
- const char *__symname);
-
-__END_DECLS
diff --git a/sysdeps/arm/bits/setjmp.h b/sysdeps/arm/bits/setjmp.h
deleted file mode 100644
index a0b39ae35c..0000000000
--- a/sysdeps/arm/bits/setjmp.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (C) 2004-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* Define the machine-dependent type `jmp_buf'. ARM EABI version. */
-
-#ifndef _BITS_SETJMP_H
-#define _BITS_SETJMP_H 1
-
-#if !defined _SETJMP_H && !defined _PTHREAD_H
-# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
-#endif
-
-#ifndef __ASSEMBLER__
-/* The exact set of registers saved may depend on the particular core
- in use, as some coprocessor registers may need to be saved. The C
- Library ABI requires that the buffer be 8-byte aligned, and
- recommends that the buffer contain 64 words. The first 26 words
- are occupied by sp, lr, v1-v6, sl, fp, and d8-d15. */
-typedef int __jmp_buf[64] __attribute__((__aligned__ (8)));
-#endif
-
-#endif
diff --git a/sysdeps/arm/bsd-_setjmp.S b/sysdeps/arm/bsd-_setjmp.S
deleted file mode 100644
index 3fc5ef49cf..0000000000
--- a/sysdeps/arm/bsd-_setjmp.S
+++ /dev/null
@@ -1,29 +0,0 @@
-/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. ARM version.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
- We cannot do it in C because it must be a tail-call, so frame-unwinding
- in setjmp doesn't clobber the state restored by longjmp. */
-
-#include <sysdep.h>
-
-ENTRY (_setjmp)
- mov r1, #0
- b PLTJMP(HIDDEN_JUMPTARGET(__sigsetjmp))
-END (_setjmp)
-libc_hidden_def (_setjmp)
diff --git a/sysdeps/arm/bsd-setjmp.S b/sysdeps/arm/bsd-setjmp.S
deleted file mode 100644
index 2a07c6add1..0000000000
--- a/sysdeps/arm/bsd-setjmp.S
+++ /dev/null
@@ -1,28 +0,0 @@
-/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. ARM version.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
- We cannot do it in C because it must be a tail-call, so frame-unwinding
- in setjmp doesn't clobber the state restored by longjmp. */
-
-#include <sysdep.h>
-
-ENTRY (setjmp)
- mov r1, #1
- b PLTJMP(HIDDEN_JUMPTARGET(__sigsetjmp))
-END (setjmp)
diff --git a/sysdeps/arm/configure b/sysdeps/arm/configure
deleted file mode 100644
index 431e843b2b..0000000000
--- a/sysdeps/arm/configure
+++ /dev/null
@@ -1,279 +0,0 @@
-# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
- # Local configure fragment for sysdeps/arm.
-
-$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
-
-
-# We check to see if the compiler and flags are
-# selecting the hard-float ABI and if they are then
-# we set libc_cv_arm_pcs_vfp to yes which causes
-# HAVE_ARM_PCS_VFP to be defined in config.h and
-# in include/libc-symbols.h and thus available to
-# shlib-versions to select the appropriate name for
-# the dynamic linker via %ifdef.
-
-
-{ $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 whether the compiler is using the ARM hard-float ABI" >&5
-$as_echo_n "checking whether the compiler is using the ARM hard-float ABI... " >&6; }
-if ${libc_cv_arm_pcs_vfp+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __ARM_PCS_VFP
- yes
- #endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "yes" >/dev/null 2>&1; then :
- libc_cv_arm_pcs_vfp=yes
-else
- libc_cv_arm_pcs_vfp=no
-fi
-rm -f conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_arm_pcs_vfp" >&5
-$as_echo "$libc_cv_arm_pcs_vfp" >&6; }
-if test $libc_cv_arm_pcs_vfp = yes; then
- $as_echo "#define HAVE_ARM_PCS_VFP 1" >>confdefs.h
-
- config_vars="$config_vars
-default-abi = hard"
-else
- config_vars="$config_vars
-default-abi = soft"
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether PC-relative relocs in movw/movt work properly" >&5
-$as_echo_n "checking whether PC-relative relocs in movw/movt work properly... " >&6; }
-if ${libc_cv_arm_pcrel_movw+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-cat > conftest.s <<\EOF
- .syntax unified
- .arm
- .arch armv7-a
-
- .text
- .globl foo
- .type foo,%function
-foo: movw r0, #:lower16:symbol - 1f - 8
- movt r0, #:upper16:symbol - 1f - 8
-1: add r0, pc
- @ And now a case with a local symbol.
- movw r0, #:lower16:3f - 2f - 8
- movt r0, #:upper16:3f - 2f - 8
-2: add r0, pc
- bx lr
-
-.data
- .globl symbol
- .hidden symbol
-symbol: .long 23
-3: .long 17
-EOF
-libc_cv_arm_pcrel_movw=no
-${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
- -nostartfiles -nostdlib -shared \
- -o conftest.so conftest.s 1>&5 2>&5 &&
-LC_ALL=C $READELF -dr conftest.so > conftest.dr 2>&5 &&
-{
- cat conftest.dr 1>&5
- fgrep 'TEXTREL
-R_ARM_NONE' conftest.dr > /dev/null || libc_cv_arm_pcrel_movw=yes
-}
-rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_arm_pcrel_movw" >&5
-$as_echo "$libc_cv_arm_pcrel_movw" >&6; }
-if test $libc_cv_arm_pcrel_movw = yes; then
- $as_echo "#define ARM_PCREL_MOVW_OK 1" >>confdefs.h
-
-fi
-
-# This was buggy in assemblers from GNU binutils versions before 2.25.1
-# (it's known to be broken in 2.24 and 2.25; see
-# https://sourceware.org/bugzilla/show_bug.cgi?id=18383).
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether TPOFF relocs with addends are assembled correctly" >&5
-$as_echo_n "checking whether TPOFF relocs with addends are assembled correctly... " >&6; }
-if ${libc_cv_arm_tpoff_addend+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-cat > conftest.s <<\EOF
- .syntax unified
- .arm
- .arch armv7-a
-
- .text
-foo:
- .word tbase(tpoff)+4
-
- .section .tdata,"awT",%progbits
- .word -4
-tbase: .word 0
- .word 4
-EOF
-libc_cv_arm_tpoff_addend=no
-${CC-cc} -c $CFLAGS $CPPFLAGS \
- -o conftest.o conftest.s 1>&5 2>&5 &&
-LC_ALL=C $READELF -x.text conftest.o > conftest.x 2>&5 &&
-{
- cat conftest.x 1>&5
- $AWK 'BEGIN { result = 2 }
-$1 ~ /0x0+/ && $2 ~ /[0-9a-f]+/ {
-# Check for little-endian or big-endian encoding of 4 in the in-place addend.
- result = ($2 == "04000000" || $2 == "00000004") ? 0 : 1
-}
-END { exit(result) }
-' conftest.x 2>&5 && libc_cv_arm_tpoff_addend=yes
-}
-rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_arm_tpoff_addend" >&5
-$as_echo "$libc_cv_arm_tpoff_addend" >&6; }
-if test $libc_cv_arm_tpoff_addend = no; then
- config_vars="$config_vars
-test-xfail-tst-tlsalign = yes"
- config_vars="$config_vars
-test-xfail-tst-tlsalign-static = yes"
-fi
-
-
-libc_cv_gcc_unwind_find_fde=no
-
-# Remove -fno-unwind-tables that was added in sysdeps/arm/preconfigure.ac.
-CFLAGS=${CFLAGS% -fno-unwind-tables}
diff --git a/sysdeps/arm/configure.ac b/sysdeps/arm/configure.ac
deleted file mode 100644
index 90cdd69c75..0000000000
--- a/sysdeps/arm/configure.ac
+++ /dev/null
@@ -1,112 +0,0 @@
-GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local configure fragment for sysdeps/arm.
-
-dnl It is always possible to access static and hidden symbols in an
-dnl position independent way. This has been true since GCC 4.1,
-dnl which is older than the minimum version required to build libc.
-AC_DEFINE(PI_STATIC_AND_HIDDEN)
-
-# We check to see if the compiler and flags are
-# selecting the hard-float ABI and if they are then
-# we set libc_cv_arm_pcs_vfp to yes which causes
-# HAVE_ARM_PCS_VFP to be defined in config.h and
-# in include/libc-symbols.h and thus available to
-# shlib-versions to select the appropriate name for
-# the dynamic linker via %ifdef.
-AC_CACHE_CHECK([whether the compiler is using the ARM hard-float ABI],
- [libc_cv_arm_pcs_vfp],
- [AC_EGREP_CPP(yes,[#ifdef __ARM_PCS_VFP
- yes
- #endif
- ], libc_cv_arm_pcs_vfp=yes, libc_cv_arm_pcs_vfp=no)])
-if test $libc_cv_arm_pcs_vfp = yes; then
- AC_DEFINE(HAVE_ARM_PCS_VFP)
- LIBC_CONFIG_VAR([default-abi], [hard])
-else
- LIBC_CONFIG_VAR([default-abi], [soft])
-fi
-
-AC_CACHE_CHECK([whether PC-relative relocs in movw/movt work properly],
- libc_cv_arm_pcrel_movw, [
-cat > conftest.s <<\EOF
- .syntax unified
- .arm
- .arch armv7-a
-
- .text
- .globl foo
- .type foo,%function
-foo: movw r0, #:lower16:symbol - 1f - 8
- movt r0, #:upper16:symbol - 1f - 8
-1: add r0, pc
- @ And now a case with a local symbol.
- movw r0, #:lower16:3f - 2f - 8
- movt r0, #:upper16:3f - 2f - 8
-2: add r0, pc
- bx lr
-
-.data
- .globl symbol
- .hidden symbol
-symbol: .long 23
-3: .long 17
-EOF
-libc_cv_arm_pcrel_movw=no
-${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
- -nostartfiles -nostdlib -shared \
- -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD &&
-LC_ALL=C $READELF -dr conftest.so > conftest.dr 2>&AS_MESSAGE_LOG_FD &&
-{
- cat conftest.dr 1>&AS_MESSAGE_LOG_FD
- fgrep 'TEXTREL
-R_ARM_NONE' conftest.dr > /dev/null || libc_cv_arm_pcrel_movw=yes
-}
-rm -f conftest*])
-if test $libc_cv_arm_pcrel_movw = yes; then
- AC_DEFINE([ARM_PCREL_MOVW_OK])
-fi
-
-# This was buggy in assemblers from GNU binutils versions before 2.25.1
-# (it's known to be broken in 2.24 and 2.25; see
-# https://sourceware.org/bugzilla/show_bug.cgi?id=18383).
-AC_CACHE_CHECK([whether TPOFF relocs with addends are assembled correctly],
- libc_cv_arm_tpoff_addend, [
-cat > conftest.s <<\EOF
- .syntax unified
- .arm
- .arch armv7-a
-
- .text
-foo:
- .word tbase(tpoff)+4
-
- .section .tdata,"awT",%progbits
- .word -4
-tbase: .word 0
- .word 4
-EOF
-libc_cv_arm_tpoff_addend=no
-${CC-cc} -c $CFLAGS $CPPFLAGS \
- -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD &&
-LC_ALL=C $READELF -x.text conftest.o > conftest.x 2>&AS_MESSAGE_LOG_FD &&
-{
- cat conftest.x 1>&AS_MESSAGE_LOG_FD
- $AWK 'BEGIN { result = 2 }
-$1 ~ /0x0+/ && $2 ~ /[[0-9a-f]]+/ {
-# Check for little-endian or big-endian encoding of 4 in the in-place addend.
- result = ($2 == "04000000" || $2 == "00000004") ? 0 : 1
-}
-END { exit(result) }
-' conftest.x 2>&AS_MESSAGE_LOG_FD && libc_cv_arm_tpoff_addend=yes
-}
-rm -f conftest*])
-if test $libc_cv_arm_tpoff_addend = no; then
- LIBC_CONFIG_VAR([test-xfail-tst-tlsalign], [yes])
- LIBC_CONFIG_VAR([test-xfail-tst-tlsalign-static], [yes])
-fi
-
-
-libc_cv_gcc_unwind_find_fde=no
-
-# Remove -fno-unwind-tables that was added in sysdeps/arm/preconfigure.ac.
-CFLAGS=${CFLAGS% -fno-unwind-tables}
diff --git a/sysdeps/arm/crti.S b/sysdeps/arm/crti.S
deleted file mode 100644
index c71f5bd513..0000000000
--- a/sysdeps/arm/crti.S
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Special .init and .fini section support for ARM.
- Copyright (C) 1995-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- In addition to the permissions in the GNU Lesser General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file with other
- programs, and to distribute those programs without any restriction
- coming from the use of this file. (The GNU Lesser General Public
- License restrictions do apply in other respects; for example, they
- cover modification of the file, and distribution when not linked
- into another program.)
-
- Note that people who make modified versions of this file are not
- obligated to grant this special exception for their modified
- versions; it is their choice whether to do so. The GNU Lesser
- General Public License gives permission to release a modified
- version without this exception; this exception also makes it
- possible to release a modified version which carries forward this
- exception.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* crti.S puts a function prologue at the beginning of the .init and
- .fini sections and defines global symbols for those addresses, so
- they can be called as functions. The symbols _init and _fini are
- magic and cause the linker to emit DT_INIT and DT_FINI. */
-
-/* Always build .init and .fini sections in ARM mode. */
-#define NO_THUMB
-#include <libc-symbols.h>
-#include <sysdep.h>
-
-#ifndef PREINIT_FUNCTION
-# define PREINIT_FUNCTION __gmon_start__
-#endif
-
-#ifndef PREINIT_FUNCTION_WEAK
-# define PREINIT_FUNCTION_WEAK 1
-#endif
-
-#if PREINIT_FUNCTION_WEAK
- weak_extern (PREINIT_FUNCTION)
-#else
- .hidden PREINIT_FUNCTION
-#endif
-
-#if PREINIT_FUNCTION_WEAK
- .p2align 2
- .type call_weak_fn, %function
-call_weak_fn:
- ldr r3, .LGOT
- ldr r2, .LGOT+4
-.LPIC:
- add r3, pc, r3
- ldr r2, [r3, r2]
- cmp r2, #0
- bxeq lr
- b PREINIT_FUNCTION
- .p2align 2
-.LGOT:
- .word _GLOBAL_OFFSET_TABLE_-(.LPIC+8)
- .word PREINIT_FUNCTION(GOT)
-#endif
-
- .section .init,"ax",%progbits
- .p2align 2
- .globl _init
- .type _init, %function
-_init:
- push {r3, lr}
-#if PREINIT_FUNCTION_WEAK
- bl call_weak_fn
-#else
- bl PREINIT_FUNCTION
-#endif
-
- .section .fini,"ax",%progbits
- .p2align 2
- .globl _fini
- .type _fini, %function
-_fini:
- push {r3, lr}
diff --git a/sysdeps/arm/crtn.S b/sysdeps/arm/crtn.S
deleted file mode 100644
index 982933826d..0000000000
--- a/sysdeps/arm/crtn.S
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Special .init and .fini section support for ARM.
- Copyright (C) 1995-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- In addition to the permissions in the GNU Lesser General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file with other
- programs, and to distribute those programs without any restriction
- coming from the use of this file. (The GNU Lesser General Public
- License restrictions do apply in other respects; for example, they
- cover modification of the file, and distribution when not linked
- into another program.)
-
- Note that people who make modified versions of this file are not
- obligated to grant this special exception for their modified
- versions; it is their choice whether to do so. The GNU Lesser
- General Public License gives permission to release a modified
- version without this exception; this exception also makes it
- possible to release a modified version which carries forward this
- exception.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* Always build .init and .fini sections in ARM mode. */
-#define NO_THUMB
-#include <sysdep.h>
-
-/* crtn.S puts function epilogues in the .init and .fini sections
- corresponding to the prologues in crti.S. */
-
- .section .init,"ax",%progbits
-#ifdef __ARM_ARCH_4T__
- pop {r3, lr}
- bx lr
-#else
- pop {r3, pc}
-#endif
-
- .section .fini,"ax",%progbits
-#ifdef __ARM_ARCH_4T__
- pop {r3, lr}
- bx lr
-#else
- pop {r3, pc}
-#endif
diff --git a/sysdeps/arm/dl-irel.h b/sysdeps/arm/dl-irel.h
deleted file mode 100644
index dfd7850433..0000000000
--- a/sysdeps/arm/dl-irel.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Machine-dependent ELF indirect relocation inline functions.
- ARM version.
- Copyright (C) 2009-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _DL_IREL_H
-#define _DL_IREL_H
-
-#include <stdio.h>
-#include <unistd.h>
-#include <ldsodefs.h>
-
-#define ELF_MACHINE_IREL 1
-
-static inline Elf32_Addr
-__attribute ((always_inline))
-elf_ifunc_invoke (Elf32_Addr addr)
-{
- return ((Elf32_Addr (*) (unsigned long int)) (addr)) (GLRO(dl_hwcap));
-}
-
-static inline void
-__attribute ((always_inline))
-elf_irel (const Elf32_Rel *reloc)
-{
- Elf32_Addr *const reloc_addr = (void *) reloc->r_offset;
- const unsigned long int r_type = ELF32_R_TYPE (reloc->r_info);
-
- if (__builtin_expect (r_type == R_ARM_IRELATIVE, 1))
- {
- Elf32_Addr value = elf_ifunc_invoke (*reloc_addr);
- *reloc_addr = value;
- }
- else
- __libc_fatal ("unexpected reloc type in static binary");
-}
-
-#endif /* dl-irel.h */
diff --git a/sysdeps/arm/dl-lookupcfg.h b/sysdeps/arm/dl-lookupcfg.h
deleted file mode 100644
index 23b4e7e9af..0000000000
--- a/sysdeps/arm/dl-lookupcfg.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Configuration of lookup functions.
- Copyright (C) 2006-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#define DL_UNMAP_IS_SPECIAL
-
-#include_next <dl-lookupcfg.h>
-
-struct link_map;
-
-extern void internal_function _dl_unmap (struct link_map *map);
-
-#define DL_UNMAP(map) _dl_unmap (map)
diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
deleted file mode 100644
index 2c72972bd2..0000000000
--- a/sysdeps/arm/dl-machine.h
+++ /dev/null
@@ -1,698 +0,0 @@
-/* Machine-dependent ELF dynamic relocation inline functions. ARM version.
- Copyright (C) 1995-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef dl_machine_h
-#define dl_machine_h
-
-#define ELF_MACHINE_NAME "ARM"
-
-#include <sys/param.h>
-#include <tls.h>
-#include <dl-tlsdesc.h>
-#include <dl-irel.h>
-
-#ifndef CLEAR_CACHE
-# error CLEAR_CACHE definition required to handle TEXTREL
-#endif
-
-/* Return nonzero iff ELF header is compatible with the running host. */
-static inline int __attribute__ ((unused))
-elf_machine_matches_host (const Elf32_Ehdr *ehdr)
-{
- return ehdr->e_machine == EM_ARM;
-}
-
-
-/* Return the link-time address of _DYNAMIC. Conveniently, this is the
- first element of the GOT. */
-static inline Elf32_Addr __attribute__ ((unused))
-elf_machine_dynamic (void)
-{
- /* Declaring this hidden ensures that a PC-relative reference is used. */
- extern const Elf32_Addr _GLOBAL_OFFSET_TABLE_[] attribute_hidden;
- return _GLOBAL_OFFSET_TABLE_[0];
-}
-
-
-/* Return the run-time load address of the shared object. */
-static inline Elf32_Addr __attribute__ ((unused))
-elf_machine_load_address (void)
-{
- extern Elf32_Addr internal_function __dl_start (void *) asm ("_dl_start");
- Elf32_Addr got_addr = (Elf32_Addr) &__dl_start;
- Elf32_Addr pcrel_addr;
-#ifdef __thumb__
- /* Clear the low bit of the funciton address. */
- got_addr &= ~(Elf32_Addr) 1;
-#endif
- asm ("adr %0, _dl_start" : "=r" (pcrel_addr));
- return pcrel_addr - got_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__ ((unused))
-elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
-{
- Elf32_Addr *got;
- extern void _dl_runtime_resolve (Elf32_Word);
- extern void _dl_runtime_profile (Elf32_Word);
-
- if (l->l_info[DT_JMPREL] && lazy)
- {
- /* patb: this is different than i386 */
- /* The GOT entries for functions in the PLT have not yet been filled
- in. Their initial contents will arrange when called to push an
- index into the .got section, load ip with &_GLOBAL_OFFSET_TABLE_[3],
- and then jump to _GLOBAL_OFFSET_TABLE[2]. */
- got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]);
- /* If a library is prelinked but we have to relocate anyway,
- we have to be able to undo the prelinking of .got.plt.
- The prelinker saved us here address of .plt. */
- if (got[1])
- l->l_mach.plt = got[1] + l->l_addr;
- got[1] = (Elf32_Addr) l; /* Identify this shared object. */
-
- /* The got[2] entry contains the address of a function which gets
- called to get the address of a so far unresolved function and
- jump to it. The profiling extension of the dynamic linker allows
- to intercept the calls to collect information. In this case we
- don't store the address in the GOT so that all future calls also
- end in this function. */
- if (profile)
- {
- got[2] = (Elf32_Addr) &_dl_runtime_profile;
-
- if (GLRO(dl_profile) != NULL
- && _dl_name_match_p (GLRO(dl_profile), l))
- /* Say that we really want profiling and the timers are
- started. */
- GL(dl_profile_map) = l;
- }
- else
- /* 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] = (Elf32_Addr) &_dl_runtime_resolve;
- }
-
- if (l->l_info[ADDRIDX (DT_TLSDESC_GOT)] && lazy)
- *(Elf32_Addr*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_GOT)]) + l->l_addr)
- = (Elf32_Addr) &_dl_tlsdesc_lazy_resolver;
-
- return lazy;
-}
-
-#if defined(ARCH_HAS_BX)
-#define BX(x) "bx\t" #x
-#else
-#define BX(x) "mov\tpc, " #x
-#endif
-
-/* Mask identifying addresses reserved for the user program,
- where the dynamic linker should not map anything. */
-#define ELF_MACHINE_USER_ADDRESS_MASK 0xf8000000UL
-
-/* Initial entry point code for the dynamic linker.
- The C function `_dl_start' is the real entry point;
- its return value is the user program's entry point. */
-
-#define RTLD_START asm ("\
-.text\n\
-.globl _start\n\
-.type _start, %function\n\
-.globl _dl_start_user\n\
-.type _dl_start_user, %function\n\
-_start:\n\
- @ we are PIC code, so get global offset table\n\
- ldr sl, .L_GET_GOT\n\
- @ See if we were run as a command with the executable file\n\
- @ name as an extra leading argument.\n\
- ldr r4, .L_SKIP_ARGS\n\
- @ at start time, all the args are on the stack\n\
- mov r0, sp\n\
- bl _dl_start\n\
- @ returns user entry point in r0\n\
-_dl_start_user:\n\
- adr r6, .L_GET_GOT\n\
- add sl, sl, r6\n\
- ldr r4, [sl, r4]\n\
- @ save the entry point in another register\n\
- mov r6, r0\n\
- @ get the original arg count\n\
- ldr r1, [sp]\n\
- @ get the argv address\n\
- add r2, sp, #4\n\
- @ Fix up the stack if necessary.\n\
- cmp r4, #0\n\
- bne .L_fixup_stack\n\
-.L_done_fixup:\n\
- @ compute envp\n\
- add r3, r2, r1, lsl #2\n\
- add r3, r3, #4\n\
- @ now we call _dl_init\n\
- ldr r0, .L_LOADED\n\
- ldr r0, [sl, r0]\n\
- @ call _dl_init\n\
- bl _dl_init(PLT)\n\
- @ load the finalizer function\n\
- ldr r0, .L_FINI_PROC\n\
- add r0, sl, r0\n\
- @ jump to the user_s entry point\n\
- " BX(r6) "\n\
-\n\
- @ iWMMXt and EABI targets require the stack to be eight byte\n\
- @ aligned - shuffle arguments etc.\n\
-.L_fixup_stack:\n\
- @ subtract _dl_skip_args from original arg count\n\
- sub r1, r1, r4\n\
- @ store the new argc in the new stack location\n\
- str r1, [sp]\n\
- @ find the first unskipped argument\n\
- mov r3, r2\n\
- add r4, r2, r4, lsl #2\n\
- @ shuffle argv down\n\
-1: ldr r5, [r4], #4\n\
- str r5, [r3], #4\n\
- cmp r5, #0\n\
- bne 1b\n\
- @ shuffle envp down\n\
-1: ldr r5, [r4], #4\n\
- str r5, [r3], #4\n\
- cmp r5, #0\n\
- bne 1b\n\
- @ shuffle auxv down\n\
-1: ldmia r4!, {r0, r5}\n\
- stmia r3!, {r0, r5}\n\
- cmp r0, #0\n\
- bne 1b\n\
- @ Update _dl_argv\n\
- ldr r3, .L_ARGV\n\
- str r2, [sl, r3]\n\
- b .L_done_fixup\n\
-\n\
-.L_GET_GOT:\n\
- .word _GLOBAL_OFFSET_TABLE_ - .L_GET_GOT\n\
-.L_SKIP_ARGS:\n\
- .word _dl_skip_args(GOTOFF)\n\
-.L_FINI_PROC:\n\
- .word _dl_fini(GOTOFF)\n\
-.L_ARGV:\n\
- .word _dl_argv(GOTOFF)\n\
-.L_LOADED:\n\
- .word _rtld_local(GOTOFF)\n\
-.previous\n\
-");
-
-/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or
- TLS variable, so undefined references should not be allowed to
- define the value.
- ELF_RTYPE_CLASS_COPY iff TYPE should not be allowed to resolve to one
- of the main executable's symbols, as for a COPY reloc.
- ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA iff TYPE describes relocation against
- protected data whose address may be external due to copy relocation. */
-#ifndef RTLD_BOOTSTRAP
-# define elf_machine_type_class(type) \
- ((((type) == R_ARM_JUMP_SLOT || (type) == R_ARM_TLS_DTPMOD32 \
- || (type) == R_ARM_TLS_DTPOFF32 || (type) == R_ARM_TLS_TPOFF32 \
- || (type) == R_ARM_TLS_DESC) \
- * ELF_RTYPE_CLASS_PLT) \
- | (((type) == R_ARM_COPY) * ELF_RTYPE_CLASS_COPY) \
- | (((type) == R_ARM_GLOB_DAT) * ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA))
-#else
-#define elf_machine_type_class(type) \
- ((((type) == R_ARM_JUMP_SLOT) * ELF_RTYPE_CLASS_PLT) \
- | (((type) == R_ARM_COPY) * ELF_RTYPE_CLASS_COPY) \
- | (((type) == R_ARM_GLOB_DAT) * ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA))
-#endif
-
-/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
-#define ELF_MACHINE_JMP_SLOT R_ARM_JUMP_SLOT
-
-/* ARM never uses Elf32_Rela relocations for the dynamic linker.
- Prelinked libraries may use Elf32_Rela though. */
-#define ELF_MACHINE_PLT_REL 1
-
-/* We define an initialization functions. This is called very early in
- _dl_sysdep_start. */
-#define DL_PLATFORM_INIT dl_platform_init ()
-
-static inline void __attribute__ ((unused))
-dl_platform_init (void)
-{
- if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0')
- /* Avoid an empty string which would disturb us. */
- GLRO(dl_platform) = NULL;
-}
-
-static inline Elf32_Addr
-elf_machine_fixup_plt (struct link_map *map, lookup_t t,
- const Elf32_Rel *reloc,
- Elf32_Addr *reloc_addr, Elf32_Addr value)
-{
- return *reloc_addr = value;
-}
-
-/* Return the final value of a plt relocation. */
-static inline Elf32_Addr
-elf_machine_plt_value (struct link_map *map, const Elf32_Rel *reloc,
- Elf32_Addr value)
-{
- return value;
-}
-
-#endif /* !dl_machine_h */
-
-
-/* ARM never uses Elf32_Rela relocations for the dynamic linker.
- Prelinked libraries may use Elf32_Rela though. */
-#define ELF_MACHINE_NO_RELA defined RTLD_BOOTSTRAP
-#define ELF_MACHINE_NO_REL 0
-
-/* Names of the architecture-specific auditing callback functions. */
-#define ARCH_LA_PLTENTER arm_gnu_pltenter
-#define ARCH_LA_PLTEXIT arm_gnu_pltexit
-
-#ifdef RESOLVE_MAP
-/* Handle a PC24 reloc, including the out-of-range case. */
-auto void
-relocate_pc24 (struct link_map *map, Elf32_Addr value,
- Elf32_Addr *const reloc_addr, Elf32_Sword addend)
-{
- Elf32_Addr new_value;
-
- /* Set NEW_VALUE based on V, and return true iff it overflows 24 bits. */
- inline bool set_new_value (Elf32_Addr v)
- {
- new_value = v + addend - (Elf32_Addr) reloc_addr;
- Elf32_Addr topbits = new_value & 0xfe000000;
- return topbits != 0xfe000000 && topbits != 0x00000000;
- }
-
- if (set_new_value (value))
- {
- /* The PC-relative address doesn't fit in 24 bits! */
-
- static void *fix_page;
- static size_t fix_offset;
- if (fix_page == NULL)
- {
- void *new_page = __mmap (NULL, GLRO(dl_pagesize),
- PROT_READ | PROT_WRITE | PROT_EXEC,
- MAP_PRIVATE | MAP_ANON, -1, 0);
- if (new_page == MAP_FAILED)
- _dl_signal_error (0, map->l_name, NULL,
- "could not map page for fixup");
- fix_page = new_page;
- assert (fix_offset == 0);
- }
-
- Elf32_Word *fix_address = fix_page + fix_offset;
- fix_address[0] = 0xe51ff004; /* ldr pc, [pc, #-4] */
- fix_address[1] = value;
-
- fix_offset += sizeof fix_address[0] * 2;
- if (fix_offset >= GLRO(dl_pagesize))
- {
- fix_page = NULL;
- fix_offset = 0;
- }
-
- if (set_new_value ((Elf32_Addr) fix_address))
- _dl_signal_error (0, map->l_name, NULL,
- "R_ARM_PC24 relocation out of range");
- }
-
- *reloc_addr = (*reloc_addr & 0xff000000) | ((new_value >> 2) & 0x00ffffff);
-}
-
-/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
- MAP is the object containing the reloc. */
-
-auto inline void
-__attribute__ ((always_inline))
-elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
- const Elf32_Sym *sym, const struct r_found_version *version,
- void *const reloc_addr_arg, int skip_ifunc)
-{
- Elf32_Addr *const reloc_addr = reloc_addr_arg;
- const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
-
-#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC
- if (__builtin_expect (r_type == R_ARM_RELATIVE, 0))
- {
-# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC
- /* This is defined in rtld.c, but nowhere in the static libc.a;
- make the reference weak so static programs can still link.
- This declaration cannot be done when compiling rtld.c
- (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the
- common defn for _dl_rtld_map, which is incompatible with a
- weak decl in the same file. */
-# ifndef SHARED
- weak_extern (_dl_rtld_map);
-# endif
- if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */
-# endif
- *reloc_addr += map->l_addr;
- }
-# ifndef RTLD_BOOTSTRAP
- else if (__builtin_expect (r_type == R_ARM_NONE, 0))
- return;
-# endif
- else
-#endif
- {
- const Elf32_Sym *const refsym = sym;
- struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
- Elf32_Addr value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value;
-
- if (sym != NULL
- && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0)
- && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1)
- && __builtin_expect (!skip_ifunc, 1))
- value = elf_ifunc_invoke (value);
-
- switch (r_type)
- {
- case R_ARM_COPY:
- if (sym == NULL)
- /* This can happen in trace mode if an object could not be
- found. */
- break;
- if (sym->st_size > refsym->st_size
- || (GLRO(dl_verbose) && sym->st_size < refsym->st_size))
- {
- const char *strtab;
-
- strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
- _dl_error_printf ("\
-%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- RTLD_PROGNAME, strtab + refsym->st_name);
- }
- memcpy (reloc_addr_arg, (void *) value,
- MIN (sym->st_size, refsym->st_size));
- break;
- case R_ARM_GLOB_DAT:
- case R_ARM_JUMP_SLOT:
-# ifdef RTLD_BOOTSTRAP
- /* Fix weak undefined references. */
- if (sym != NULL && sym->st_value == 0)
- *reloc_addr = 0;
- else
-# endif
- *reloc_addr = value;
- break;
- case R_ARM_ABS32:
- {
- struct unaligned
- {
- Elf32_Addr x;
- } __attribute__ ((packed, may_alias));
-# ifndef RTLD_BOOTSTRAP
- /* This is defined in rtld.c, but nowhere in the static
- libc.a; make the reference weak so static programs can
- still link. This declaration cannot be done when
- compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) because
- rtld.c contains the common defn for _dl_rtld_map, which
- is incompatible with a weak decl in the same file. */
-# ifndef SHARED
- weak_extern (_dl_rtld_map);
-# endif
- if (map == &GL(dl_rtld_map))
- /* Undo the relocation done here during bootstrapping.
- Now we will relocate it anew, possibly using a
- binding found in the user program or a loaded library
- rather than the dynamic linker's built-in definitions
- used while loading those libraries. */
- value -= map->l_addr + refsym->st_value;
-# endif
- /* Support relocations on mis-aligned offsets. */
- ((struct unaligned *) reloc_addr)->x += value;
- break;
- }
- case R_ARM_TLS_DESC:
- {
- struct tlsdesc volatile *td =
- (struct tlsdesc volatile *)reloc_addr;
-
-# ifndef RTLD_BOOTSTRAP
- if (! sym)
- td->entry = _dl_tlsdesc_undefweak;
- else
-# endif
- {
- if (ELF32_R_SYM (reloc->r_info) == STN_UNDEF)
- value = td->argument.value;
- else
- value = sym->st_value;
-
-# ifndef RTLD_BOOTSTRAP
-# ifndef SHARED
- CHECK_STATIC_TLS (map, sym_map);
-# else
- if (!TRY_STATIC_TLS (map, sym_map))
- {
- td->argument.pointer
- = _dl_make_tlsdesc_dynamic (sym_map, value);
- td->entry = _dl_tlsdesc_dynamic;
- }
- else
-# endif
-# endif
- {
- td->argument.value = value + sym_map->l_tls_offset;
- td->entry = _dl_tlsdesc_return;
- }
- }
- }
- break;
- case R_ARM_PC24:
- relocate_pc24 (map, value, reloc_addr,
- /* Sign-extend the 24-bit addend in the
- instruction (which counts instructions), and
- then shift it up two so as to count bytes. */
- (((Elf32_Sword) *reloc_addr << 8) >> 8) << 2);
- break;
-#if !defined RTLD_BOOTSTRAP
- case R_ARM_TLS_DTPMOD32:
- /* Get the information from the link map returned by the
- resolv function. */
- if (sym_map != NULL)
- *reloc_addr = sym_map->l_tls_modid;
- break;
-
- case R_ARM_TLS_DTPOFF32:
- if (sym != NULL)
- *reloc_addr += sym->st_value;
- break;
-
- case R_ARM_TLS_TPOFF32:
- if (sym != NULL)
- {
- CHECK_STATIC_TLS (map, sym_map);
- *reloc_addr += sym->st_value + sym_map->l_tls_offset;
- }
- break;
- case R_ARM_IRELATIVE:
- value = map->l_addr + *reloc_addr;
- value = ((Elf32_Addr (*) (int)) value) (GLRO(dl_hwcap));
- *reloc_addr = value;
- break;
-#endif
- default:
- _dl_reloc_bad_type (map, r_type, 0);
- break;
- }
- }
-}
-
-# ifndef RTLD_BOOTSTRAP
-auto inline void
-__attribute__ ((always_inline))
-elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
- const Elf32_Sym *sym, const struct r_found_version *version,
- void *const reloc_addr_arg, int skip_ifunc)
-{
- Elf32_Addr *const reloc_addr = reloc_addr_arg;
- const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
-
- if (__builtin_expect (r_type == R_ARM_RELATIVE, 0))
- *reloc_addr = map->l_addr + reloc->r_addend;
- else if (__builtin_expect (r_type == R_ARM_NONE, 0))
- return;
- else
- {
-# ifndef RESOLVE_CONFLICT_FIND_MAP
- const Elf32_Sym *const refsym = sym;
-# endif
- struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
- Elf32_Addr value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value;
-
- if (sym != NULL
- && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0)
- && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1)
- && __builtin_expect (!skip_ifunc, 1))
- value = elf_ifunc_invoke (value);
-
- switch (r_type)
- {
-# ifndef RESOLVE_CONFLICT_FIND_MAP
- /* Not needed for dl-conflict.c. */
- case R_ARM_COPY:
- if (sym == NULL)
- /* This can happen in trace mode if an object could not be
- found. */
- break;
- if (sym->st_size > refsym->st_size
- || (GLRO(dl_verbose) && sym->st_size < refsym->st_size))
- {
- const char *strtab;
-
- strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
- _dl_error_printf ("\
-%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- RTLD_PROGNAME, strtab + refsym->st_name);
- }
- memcpy (reloc_addr_arg, (void *) value,
- MIN (sym->st_size, refsym->st_size));
- break;
-# endif /* !RESOLVE_CONFLICT_FIND_MAP */
- case R_ARM_GLOB_DAT:
- case R_ARM_JUMP_SLOT:
- case R_ARM_ABS32:
- *reloc_addr = value + reloc->r_addend;
- break;
-# ifdef RESOLVE_CONFLICT_FIND_MAP
- case R_ARM_TLS_DESC:
- {
- struct tlsdesc volatile *td __attribute__ ((unused)) =
- (struct tlsdesc volatile *) reloc_addr;
-
- RESOLVE_CONFLICT_FIND_MAP (map, reloc_addr);
-
- /* Make sure we know what's going on. */
- assert (td->entry
- == (void *) (D_PTR (map, l_info[ADDRIDX (DT_TLSDESC_PLT)])
- + map->l_addr));
- assert (map->l_info[ADDRIDX (DT_TLSDESC_GOT)]);
-
- /* Set up the lazy resolver and store the pointer to our link
- map in _GLOBAL_OFFSET_TABLE[1] now as for a prelinked
- binary elf_machine_runtime_setup() is not called and hence
- neither has been initialized. */
- *(Elf32_Addr *) (D_PTR (map, l_info[ADDRIDX (DT_TLSDESC_GOT)])
- + map->l_addr)
- = (Elf32_Addr) &_dl_tlsdesc_lazy_resolver;
- ((Elf32_Addr *) D_PTR (map, l_info[DT_PLTGOT]))[1]
- = (Elf32_Addr) map;
- }
- break;
-# endif /* RESOLVE_CONFLICT_FIND_MAP */
- case R_ARM_PC24:
- relocate_pc24 (map, value, reloc_addr, reloc->r_addend);
- break;
-#if !defined RTLD_BOOTSTRAP
- case R_ARM_TLS_DTPMOD32:
- /* Get the information from the link map returned by the
- resolv function. */
- if (sym_map != NULL)
- *reloc_addr = sym_map->l_tls_modid;
- break;
-
- case R_ARM_TLS_DTPOFF32:
- *reloc_addr = (sym == NULL ? 0 : sym->st_value) + reloc->r_addend;
- break;
-
- case R_ARM_TLS_TPOFF32:
- if (sym != NULL)
- {
- CHECK_STATIC_TLS (map, sym_map);
- *reloc_addr = (sym->st_value + sym_map->l_tls_offset
- + reloc->r_addend);
- }
- break;
- case R_ARM_IRELATIVE:
- value = map->l_addr + reloc->r_addend;
- value = ((Elf32_Addr (*) (int)) value) (GLRO(dl_hwcap));
- *reloc_addr = value;
- break;
-#endif
- default:
- _dl_reloc_bad_type (map, r_type, 0);
- break;
- }
- }
-}
-# endif
-
-auto inline void
-__attribute__ ((always_inline))
-elf_machine_rel_relative (Elf32_Addr l_addr, const Elf32_Rel *reloc,
- void *const reloc_addr_arg)
-{
- Elf32_Addr *const reloc_addr = reloc_addr_arg;
- *reloc_addr += l_addr;
-}
-
-# ifndef RTLD_BOOTSTRAP
-auto inline void
-__attribute__ ((always_inline))
-elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
- void *const reloc_addr_arg)
-{
- Elf32_Addr *const reloc_addr = reloc_addr_arg;
- *reloc_addr = l_addr + reloc->r_addend;
-}
-# endif
-
-auto inline void
-__attribute__ ((always_inline))
-elf_machine_lazy_rel (struct link_map *map,
- Elf32_Addr l_addr, const Elf32_Rel *reloc,
- int skip_ifunc)
-{
- Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset);
- const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
- /* Check for unexpected PLT reloc type. */
- if (__builtin_expect (r_type == R_ARM_JUMP_SLOT, 1))
- {
- if (__builtin_expect (map->l_mach.plt, 0) == 0)
- *reloc_addr += l_addr;
- else
- *reloc_addr = map->l_mach.plt;
- }
- else if (__builtin_expect (r_type == R_ARM_TLS_DESC, 1))
- {
- struct tlsdesc volatile *td =
- (struct tlsdesc volatile *)reloc_addr;
-
- /* The linker must have given us the parameter we need in the
- first GOT entry, and left the second one empty. The latter
- will have been preset by the prelinker if used though.
- We fill it with the resolver address. */
- assert (td->entry == 0
- || map->l_info[VALIDX (DT_GNU_PRELINKED)] != NULL);
- td->entry = (void*)(D_PTR (map, l_info[ADDRIDX (DT_TLSDESC_PLT)])
- + map->l_addr);
- }
- else
- _dl_reloc_bad_type (map, r_type, 1);
-}
-
-#endif /* RESOLVE_MAP */
diff --git a/sysdeps/arm/dl-sysdep.h b/sysdeps/arm/dl-sysdep.h
deleted file mode 100644
index ef3e1e429b..0000000000
--- a/sysdeps/arm/dl-sysdep.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* System-specific settings for dynamic linker code. Alpha version.
- Copyright (C) 2002-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include_next <dl-sysdep.h>
-
-/* _dl_argv cannot be attribute_relro, because _dl_start_user
- might write into it after _dl_start returns. */
-#define DL_ARGV_NOT_RELRO 1
-
-#define DL_EXTERN_PROTECTED_DATA
diff --git a/sysdeps/arm/dl-tls.h b/sysdeps/arm/dl-tls.h
deleted file mode 100644
index 1e47e07668..0000000000
--- a/sysdeps/arm/dl-tls.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Thread-local storage handling in the ELF dynamic linker. ARM version.
- Copyright (C) 2005-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-
-/* Type used for the representation of TLS information in the GOT. */
-typedef struct dl_tls_index
-{
- unsigned long int ti_module;
- unsigned long int ti_offset;
-} tls_index;
-
-
-extern void *__tls_get_addr (tls_index *ti);
diff --git a/sysdeps/arm/dl-tlsdesc.S b/sysdeps/arm/dl-tlsdesc.S
deleted file mode 100644
index e7bed02188..0000000000
--- a/sysdeps/arm/dl-tlsdesc.S
+++ /dev/null
@@ -1,218 +0,0 @@
-/* Thread-local storage handling in the ELF dynamic linker. ARM version.
- Copyright (C) 2006-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-#include <arm-features.h>
-#include <tls.h>
-#include "tlsdesc.h"
-
- .text
- @ emit debug information with cfi
- @ use arm-specific pseudos for unwinding itself
- CFI_SECTIONS
- .hidden _dl_tlsdesc_return
- .global _dl_tlsdesc_return
- .type _dl_tlsdesc_return,#function
- cfi_startproc
- eabi_fnstart
- .align 2
-_dl_tlsdesc_return:
- ldr r0, [r0]
- BX (lr)
- eabi_fnend
- cfi_endproc
- .size _dl_tlsdesc_return, .-_dl_tlsdesc_return
-
- .hidden _dl_tlsdesc_undefweak
- .global _dl_tlsdesc_undefweak
- .type _dl_tlsdesc_undefweak,#function
- cfi_startproc
- eabi_fnstart
- .align 2
-_dl_tlsdesc_undefweak:
- GET_TLS (r1)
- rsb r0, r0, #0
- BX (lr)
- cfi_endproc
- eabi_fnend
- .size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak
-
-#ifdef SHARED
- .hidden _dl_tlsdesc_dynamic
- .global _dl_tlsdesc_dynamic
- .type _dl_tlsdesc_dynamic,#function
-
-
-/*
- The assembly code that follows is a rendition of the following
- C code, hand-optimized a little bit.
-
-ptrdiff_t
-_dl_tlsdesc_dynamic(struct tlsdesc *tdp)
-{
- struct tlsdesc_dynamic_arg *td = tdp->argument.pointer;
- dtv_t *dtv = (dtv_t *)THREAD_DTV();
- if (__builtin_expect (td->gen_count <= dtv[0].counter
- && dtv[td->tlsinfo.ti_module].pointer.val
- != TLS_DTV_UNALLOCATED,
- 1))
- return dtv[td->tlsinfo.ti_module].pointer.val +
- td->tlsinfo.ti_offset - __builtin_thread_pointer();
-
- return __tls_get_addr (&td->tlsinfo) - __builtin_thread_pointer();
-}
-
-*/
- cfi_startproc
- eabi_fnstart
- .align 2
-_dl_tlsdesc_dynamic:
- /* Our calling convention is to clobber r0, r1 and the processor
- flags. All others that are modified must be saved */
- eabi_save ({r2,r3,r4,lr})
- push {r2,r3,r4,lr}
- cfi_adjust_cfa_offset (16)
- cfi_rel_offset (r2,0)
- cfi_rel_offset (r3,4)
- cfi_rel_offset (r4,8)
- cfi_rel_offset (lr,12)
- ldr r1, [r0] /* td */
- GET_TLS (lr)
- mov r4, r0 /* r4 = tp */
- ldr r0, [r0]
- ldr r2, [r1, #8] /* gen_count */
- ldr r3, [r0]
- cmp r2, r3
- bhi 1f
- ldr r3, [r1]
-#ifndef ARM_NO_INDEX_REGISTER
- ldr r2, [r0, r3, lsl #3]
-#else
- add lr, r0, r3, lsl #3
- ldr r2, [lr]
-#endif
- cmn r2, #1
- ittt ne
- ldrne r3, [r1, #4]
- addne r3, r2, r3
- rsbne r0, r4, r3
- bne 2f
-1: mov r0, r1
- bl __tls_get_addr
- rsb r0, r4, r0
-2:
-#if ((defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)) \
- || defined (ARM_ALWAYS_BX))
- pop {r2,r3,r4, lr}
- cfi_adjust_cfa_offset (-16)
- cfi_restore (lr)
- cfi_restore (r4)
- cfi_restore (r3)
- cfi_restore (r2)
- bx lr
-#else
- pop {r2,r3,r4, pc}
-#endif
- eabi_fnend
- cfi_endproc
- .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic
-#endif /* SHARED */
-
-/* lazy resolved for tls descriptors. */
- .hidden _dl_tlsdesc_lazy_resolver
- .global _dl_tlsdesc_lazy_resolver
- .type _dl_tlsdesc_lazy_resolver,#function
- cfi_startproc
- eabi_fnstart
- .align 2
-_dl_tlsdesc_lazy_resolver:
- /* r0 points at the tlsdesc,
- r1 points at the GOT
- r2 was pushed by the trampoline and used as a temp,
- we need to pop it here.
- We push the remaining call-clobbered registers here, and also
- R1 -- to keep the stack correctly aligned. */
- /* Tell the unwinder that r2 has already been pushed. */
- eabi_save ({r2})
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (r2, 0)
- eabi_save ({r0,r1,r3,ip,lr})
- push {r0, r1, r3, ip, lr}
- cfi_adjust_cfa_offset (20)
- cfi_rel_offset (r0, 0)
- cfi_rel_offset (r1, 4)
- cfi_rel_offset (r3, 8)
- cfi_rel_offset (ip, 12)
- cfi_rel_offset (lr, 16)
- bl _dl_tlsdesc_lazy_resolver_fixup
- pop {r0, r1, r3, ip, lr}
- cfi_adjust_cfa_offset (-20)
- cfi_restore (lr)
- cfi_restore (ip)
- cfi_restore (r3)
- cfi_restore (r1)
- cfi_restore (r0)
- pop {r2}
- cfi_adjust_cfa_offset (-4)
- cfi_restore (r2)
- ldr r1, [r0, #4]
- BX (r1)
- eabi_fnend
- cfi_endproc
- .size _dl_tlsdesc_lazy_resolver, .-_dl_tlsdesc_lazy_resolver
-
-/* Holder for lazy tls descriptors being resolve in another thread.
-
- Our calling convention is to clobber r0, r1 and the processor
- flags. All others that are modified must be saved */
- .hidden _dl_tlsdesc_resolve_hold
- .global _dl_tlsdesc_resolve_hold
- .type _dl_tlsdesc_resolve_hold,#function
- cfi_startproc
- eabi_fnstart
- .align 2
-_dl_tlsdesc_resolve_hold:
- /* r0 is saved so its original value can be used after the call and
- r1 is saved only to keep the stack aligned. (r0 points to the tls
- descriptor, it is passed to _dl_tlsdesc_resolve_hold_fixup which
- is a void function that may clobber r0, later r0 is used to load
- the new resolver.) */
- eabi_save ({r0,r1,r2,r3,ip,lr})
- push {r0, r1, r2, r3, ip, lr}
- cfi_adjust_cfa_offset (24)
- cfi_rel_offset (r0, 0)
- cfi_rel_offset (r1, 4)
- cfi_rel_offset (r2, 8)
- cfi_rel_offset (r3, 12)
- cfi_rel_offset (ip, 16)
- cfi_rel_offset (lr, 20)
- adr r1, _dl_tlsdesc_resolve_hold
- bl _dl_tlsdesc_resolve_hold_fixup
- pop {r0, r1, r2, r3, ip, lr}
- cfi_adjust_cfa_offset (-24)
- cfi_restore (lr)
- cfi_restore (ip)
- cfi_restore (r3)
- cfi_restore (r2)
- cfi_restore (r1)
- cfi_restore (r0)
- ldr r1, [r0, #4]
- BX (r1)
- eabi_fnend
- cfi_endproc
- .size _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold
diff --git a/sysdeps/arm/dl-tlsdesc.h b/sysdeps/arm/dl-tlsdesc.h
deleted file mode 100644
index 2770af0260..0000000000
--- a/sysdeps/arm/dl-tlsdesc.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Thread-local storage descriptor handling in the ELF dynamic linker.
- ARM version.
- Copyright (C) 2005-2017 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; witout even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _ARM_DL_TLSDESC_H
-# define _ARM_DL_TLSDESC_H 1
-
-/* Type used to represent a TLS descriptor in the GOT. */
-struct tlsdesc
-{
- union
- {
- void *pointer;
- long value;
- } argument;
- ptrdiff_t (*entry)(struct tlsdesc *);
-};
-
-
-typedef struct dl_tls_index
-{
- unsigned long int ti_module;
- unsigned long int ti_offset;
-} tls_index;
-
-/* Type used as the argument in a TLS descriptor for a symbol that
- needs dynamic TLS offsets. */
-struct tlsdesc_dynamic_arg
-{
- tls_index tlsinfo;
- size_t gen_count;
-};
-
-extern ptrdiff_t attribute_hidden
- _dl_tlsdesc_return(struct tlsdesc *),
- _dl_tlsdesc_undefweak(struct tlsdesc *),
- _dl_tlsdesc_resolve_hold(struct tlsdesc *),
- _dl_tlsdesc_lazy_resolver(struct tlsdesc *);
-
-# ifdef SHARED
-extern void *_dl_make_tlsdesc_dynamic (struct link_map *map, size_t ti_offset);
-
-extern ptrdiff_t attribute_hidden
- _dl_tlsdesc_dynamic(struct tlsdesc *);
-# endif
-
-#endif
diff --git a/sysdeps/arm/dl-trampoline.S b/sysdeps/arm/dl-trampoline.S
deleted file mode 100644
index 95d2efc8ea..0000000000
--- a/sysdeps/arm/dl-trampoline.S
+++ /dev/null
@@ -1,212 +0,0 @@
-/* PLT trampolines. ARM version.
- Copyright (C) 2005-2017 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/>. */
-
-/* ??? Needs more rearrangement for the LDM to handle thumb mode. */
-#define NO_THUMB
-#include <sysdep.h>
-#include <libc-symbols.h>
-
- .text
- .globl _dl_runtime_resolve
- .type _dl_runtime_resolve, #function
- CFI_SECTIONS
- cfi_startproc
- .align 2
-_dl_runtime_resolve:
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (lr, 0)
-
- @ we get called with
- @ stack[0] contains the return address from this call
- @ ip contains &GOT[n+3] (pointer to function)
- @ lr points to &GOT[2]
-
- @ Save arguments. We save r4 to realign the stack.
- push {r0-r4}
- cfi_adjust_cfa_offset (20)
- cfi_rel_offset (r0, 0)
- cfi_rel_offset (r1, 4)
- cfi_rel_offset (r2, 8)
- cfi_rel_offset (r3, 12)
-
- @ get pointer to linker struct
- ldr r0, [lr, #-4]
-
- @ prepare to call _dl_fixup()
- @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each
- sub r1, ip, lr
- sub r1, r1, #4
- add r1, r1, r1
-
- @ call fixup routine
- bl _dl_fixup
-
- @ save the return
- mov ip, r0
-
- @ get arguments and return address back. We restore r4
- @ only to realign the stack.
- pop {r0-r4,lr}
- cfi_adjust_cfa_offset (-24)
-
- @ jump to the newly found address
- BX(ip)
-
- cfi_endproc
- .size _dl_runtime_resolve, .-_dl_runtime_resolve
-
-#ifndef PROF
- .globl _dl_runtime_profile
- .type _dl_runtime_profile, #function
- CFI_SECTIONS
- cfi_startproc
- .align 2
-_dl_runtime_profile:
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (lr, 0)
-
- @ we get called with
- @ stack[0] contains the return address from this call
- @ ip contains &GOT[n+3] (pointer to function)
- @ lr points to &GOT[2]
-
- @ Stack layout:
- @ 212 - saved lr
- @ 208 - framesize returned from pltenter
- @ 16 - La_arm_regs
- @ 8 - Saved two arguments to _dl_profile_fixup
- @ 4 - Saved result of _dl_profile_fixup
- @ 0 - outgoing argument to _dl_profile_fixup
- @ For now, we only save the general purpose registers.
-
- sub sp, sp, #196
- cfi_adjust_cfa_offset (196)
- stmia sp, {r0-r3}
- cfi_rel_offset (r0, 0)
- cfi_rel_offset (r1, 4)
- cfi_rel_offset (r2, 8)
- cfi_rel_offset (r3, 12)
-
- sub sp, sp, #16
- cfi_adjust_cfa_offset (16)
-
- @ Save sp and lr.
- add r0, sp, #216
- str r0, [sp, #32]
- ldr r2, [sp, #212]
- str r2, [sp, #36]
-
- @ get pointer to linker struct
- ldr r0, [lr, #-4]
-
- @ prepare to call _dl_profile_fixup()
- @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each
- sub r1, ip, lr
- sub r1, r1, #4
- add r1, r1, r1
-
- @ Save these two arguments for pltexit.
- add r3, sp, #8
- stmia r3!, {r0,r1}
-
- @ Set up extra args for _dl_profile_fixup.
- @ r2 and r3 are already loaded.
- add ip, sp, #208
- str ip, [sp, #0]
-
- @ call profiling fixup routine
- bl _dl_profile_fixup
-
- @ The address to call is now in r0.
-
- @ Check whether we're wrapping this function.
- ldr ip, [sp, #208]
- cmp ip, #0
- bge 1f
- cfi_remember_state
-
- @ save the return
- mov ip, r0
-
- @ get arguments and return address back
- add sp, sp, #16
- cfi_adjust_cfa_offset (-16)
- ldmia sp, {r0-r3,sp,lr}
- cfi_adjust_cfa_offset (-200)
-
- @ jump to the newly found address
- BX(ip)
-
- cfi_restore_state
-1:
- @ The new frame size is in ip.
-
- @ New stack layout:
- @ 268 - saved r7
- @ 264 - saved result of _dl_profile_fixup
- @ 72 - La_arm_regs
- @ 64 - Saved two arguments to _dl_profile_fixup
- @ 0 - La_arm_retval
- @ For now, we only save the general purpose registers.
-
- @ Build the new frame.
- str r7, [sp, #212]
- cfi_rel_offset (r7, 212)
- sub r7, sp, #56
- cfi_def_cfa_register (r7)
- cfi_adjust_cfa_offset (56)
- sub sp, sp, ip
- bic sp, sp, #7
-
- @ Save the _dl_profile_fixup result around the call to memcpy.
- str r0, [r7, #264]
-
- @ Copy the stack arguments.
- mov r0, sp
- add r1, r7, #272
- mov r2, ip
- bl memcpy
-
- @ Call the function.
- add ip, r7, #72
- ldmia ip, {r0-r3}
- ldr ip, [r7, #264]
- BLX(ip)
- stmia r7, {r0-r3}
-
- @ Call pltexit.
- add ip, r7, #64
- ldmia ip, {r0,r1}
- add r2, r7, #72
- add r3, r7, #0
- bl _dl_call_pltexit
-
- @ Return to caller.
- ldmia r7, {r0-r3}
- mov sp, r7
- cfi_def_cfa_register (sp)
- ldr r7, [sp, #268]
- ldr lr, [sp, #92]
- add sp, sp, #272
- cfi_adjust_cfa_offset (-272)
- BX(lr)
-
- cfi_endproc
- .size _dl_runtime_profile, .-_dl_runtime_profile
-#endif
- .previous
diff --git a/sysdeps/arm/e_sqrt.c b/sysdeps/arm/e_sqrt.c
deleted file mode 100644
index 1f7d00806f..0000000000
--- a/sysdeps/arm/e_sqrt.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Compute square root for double. ARM version.
- Copyright (C) 2016-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifdef __SOFTFP__
-
-/* Use architecture-indendent sqrt implementation. */
-# include <sysdeps/ieee754/dbl-64/e_sqrt.c>
-
-#else
-
-/* Use VFP square root instruction. */
-# include <math.h>
-# include <sysdep.h>
-
-double
-__ieee754_sqrt (double x)
-{
- double ret;
-# if __ARM_ARCH >= 6
- asm ("vsqrt.f64 %P0, %P1" : "=w" (ret) : "w" (x));
-# else
- /* As in GCC, for VFP9 Erratum 760019 avoid overwriting the
- input. */
- asm ("vsqrt.f64 %P0, %P1" : "=&w" (ret) : "w" (x));
-# endif
- return ret;
-}
-strong_alias (__ieee754_sqrt, __sqrt_finite)
-
-#endif
diff --git a/sysdeps/arm/e_sqrtf.c b/sysdeps/arm/e_sqrtf.c
deleted file mode 100644
index abf1a7739f..0000000000
--- a/sysdeps/arm/e_sqrtf.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Compute square root for float. ARM version.
- Copyright (C) 2016-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifdef __SOFTFP__
-
-/* Use architecture-indendent sqrtf implementation. */
-# include <sysdeps/ieee754/flt-32/e_sqrtf.c>
-
-#else
-
-/* Use VFP square root instruction. */
-# include <math.h>
-# include <sysdep.h>
-
-float
-__ieee754_sqrtf (float x)
-{
- float ret;
-# if __ARM_ARCH >= 6
- asm ("vsqrt.f32 %0, %1" : "=t" (ret) : "t" (x));
-# else
- /* As in GCC, for VFP9 Erratum 760019 avoid overwriting the
- input. */
- asm ("vsqrt.f32 %0, %1" : "=&t" (ret) : "t" (x));
-# endif
- return ret;
-}
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)
-
-#endif
diff --git a/sysdeps/arm/fclrexcpt.c b/sysdeps/arm/fclrexcpt.c
deleted file mode 100644
index 6abaf4f003..0000000000
--- a/sysdeps/arm/fclrexcpt.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Clear given exceptions in current floating-point environment.
- Copyright (C) 1997-2017 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 <fenv.h>
-#include <fpu_control.h>
-#include <arm-features.h>
-
-
-int
-feclearexcept (int excepts)
-{
- fpu_control_t fpscr, new_fpscr;
-
- /* Fail if a VFP unit isn't present unless nothing needs to be done. */
- if (!ARM_HAVE_VFP)
- return (excepts != 0);
-
- _FPU_GETCW (fpscr);
- excepts &= FE_ALL_EXCEPT;
- new_fpscr = fpscr & ~excepts;
-
- /* Write new exception flags if changed. */
- if (new_fpscr != fpscr)
- _FPU_SETCW (new_fpscr);
-
- return 0;
-}
-libm_hidden_def (feclearexcept)
diff --git a/sysdeps/arm/fedisblxcpt.c b/sysdeps/arm/fedisblxcpt.c
deleted file mode 100644
index d0b3edef50..0000000000
--- a/sysdeps/arm/fedisblxcpt.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Disable floating-point exceptions.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Philip Blundell <philb@gnu.org>, 2001.
-
- 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 <fenv.h>
-#include <fpu_control.h>
-#include <arm-features.h>
-
-
-int
-fedisableexcept (int excepts)
-{
- fpu_control_t fpscr, new_fpscr;
-
- /* Fail if a VFP unit isn't present. */
- if (!ARM_HAVE_VFP)
- return -1;
-
- _FPU_GETCW (fpscr);
- excepts &= FE_ALL_EXCEPT;
- new_fpscr = fpscr & ~(excepts << FE_EXCEPT_SHIFT);
-
- /* Write new exceptions if changed. */
- if (new_fpscr != fpscr)
- _FPU_SETCW (new_fpscr);
-
- return (fpscr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT;
-}
diff --git a/sysdeps/arm/feenablxcpt.c b/sysdeps/arm/feenablxcpt.c
deleted file mode 100644
index 6e36371da3..0000000000
--- a/sysdeps/arm/feenablxcpt.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Enable floating-point exceptions.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Philip Blundell <philb@gnu.org>, 2001.
-
- 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 <fenv.h>
-#include <fpu_control.h>
-#include <arm-features.h>
-
-
-int
-feenableexcept (int excepts)
-{
- fpu_control_t fpscr, new_fpscr, updated_fpscr;
-
- /* Fail if a VFP unit isn't present. */
- if (!ARM_HAVE_VFP)
- return -1;
-
- _FPU_GETCW (fpscr);
- excepts &= FE_ALL_EXCEPT;
- new_fpscr = fpscr | (excepts << FE_EXCEPT_SHIFT);
-
- if (new_fpscr != fpscr)
- {
- _FPU_SETCW (new_fpscr);
-
- /* Not all VFP architectures support trapping exceptions, so
- test whether the relevant bits were set and fail if not. */
- _FPU_GETCW (updated_fpscr);
-
- if (new_fpscr & ~updated_fpscr)
- return -1;
- }
-
- return (fpscr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT;
-}
diff --git a/sysdeps/arm/fegetenv.c b/sysdeps/arm/fegetenv.c
deleted file mode 100644
index b76524194e..0000000000
--- a/sysdeps/arm/fegetenv.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Store current floating-point environment.
- Copyright (C) 1997-2017 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 <fenv.h>
-#include <fpu_control.h>
-#include <arm-features.h>
-
-
-int
-__fegetenv (fenv_t *envp)
-{
- fpu_control_t fpscr;
-
- /* Fail if a VFP unit isn't present. */
- if (!ARM_HAVE_VFP)
- return 1;
-
- _FPU_GETCW (fpscr);
- envp->__cw = fpscr;
- return 0;
-}
-libm_hidden_def (__fegetenv)
-weak_alias (__fegetenv, fegetenv)
-libm_hidden_weak (fegetenv)
diff --git a/sysdeps/arm/fegetexcept.c b/sysdeps/arm/fegetexcept.c
deleted file mode 100644
index 0757b52975..0000000000
--- a/sysdeps/arm/fegetexcept.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Get floating-point exceptions.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Philip Blundell <philb@gnu.org>, 2001
-
- 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 <fenv.h>
-#include <fpu_control.h>
-#include <arm-features.h>
-
-
-int
-fegetexcept (void)
-{
- fpu_control_t fpscr;
-
- /* Return with all exceptions disabled if a VFP unit isn't present. */
- if (!ARM_HAVE_VFP)
- return 0;
-
- _FPU_GETCW (fpscr);
-
- return (fpscr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT;
-}
diff --git a/sysdeps/arm/fegetmode.c b/sysdeps/arm/fegetmode.c
deleted file mode 100644
index e1acf3a009..0000000000
--- a/sysdeps/arm/fegetmode.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Store current floating-point control modes. ARM version.
- Copyright (C) 2016-2017 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 <fenv.h>
-#include <fpu_control.h>
-#include <arm-features.h>
-
-int
-fegetmode (femode_t *modep)
-{
- if (ARM_HAVE_VFP)
- _FPU_GETCW (*modep);
- return 0;
-}
diff --git a/sysdeps/arm/fegetround.c b/sysdeps/arm/fegetround.c
deleted file mode 100644
index e16c1d586c..0000000000
--- a/sysdeps/arm/fegetround.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Return current rounding direction.
- Copyright (C) 2004-2017 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 <get-rounding-mode.h>
-
-
-int
-__fegetround (void)
-{
- return get_rounding_mode ();
-}
-libm_hidden_def (__fegetround)
-weak_alias (__fegetround, fegetround)
-libm_hidden_weak (fegetround)
diff --git a/sysdeps/arm/feholdexcpt.c b/sysdeps/arm/feholdexcpt.c
deleted file mode 100644
index 36ed2408e8..0000000000
--- a/sysdeps/arm/feholdexcpt.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Store current floating-point environment and clear exceptions.
- Copyright (C) 1997-2017 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 <fenv_private.h>
-#include <arm-features.h>
-
-
-int
-__feholdexcept (fenv_t *envp)
-{
- /* Fail if a VFP unit isn't present. */
- if (!ARM_HAVE_VFP)
- return 1;
-
- libc_feholdexcept_vfp (envp);
- return 0;
-}
-libm_hidden_def (__feholdexcept)
-weak_alias (__feholdexcept, feholdexcept)
-libm_hidden_weak (feholdexcept)
diff --git a/sysdeps/arm/fenv_private.h b/sysdeps/arm/fenv_private.h
deleted file mode 100644
index af31025d95..0000000000
--- a/sysdeps/arm/fenv_private.h
+++ /dev/null
@@ -1,249 +0,0 @@
-/* Private floating point rounding and exceptions handling. ARM VFP version.
- Copyright (C) 2014-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef FENV_PRIVATE_H
-#define FENV_PRIVATE_H 1
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-static __always_inline void
-libc_feholdexcept_vfp (fenv_t *envp)
-{
- fpu_control_t fpscr;
-
- _FPU_GETCW (fpscr);
- envp->__cw = fpscr;
-
- /* Clear exception flags and set all exceptions to non-stop. */
- fpscr &= ~_FPU_MASK_EXCEPT;
- _FPU_SETCW (fpscr);
-}
-
-static __always_inline void
-libc_fesetround_vfp (int round)
-{
- fpu_control_t fpscr;
-
- _FPU_GETCW (fpscr);
-
- /* Set new rounding mode if different. */
- if (__glibc_unlikely ((fpscr & _FPU_MASK_RM) != round))
- _FPU_SETCW ((fpscr & ~_FPU_MASK_RM) | round);
-}
-
-static __always_inline void
-libc_feholdexcept_setround_vfp (fenv_t *envp, int round)
-{
- fpu_control_t fpscr;
-
- _FPU_GETCW (fpscr);
- envp->__cw = fpscr;
-
- /* Clear exception flags, set all exceptions to non-stop,
- and set new rounding mode. */
- fpscr &= ~(_FPU_MASK_EXCEPT | _FPU_MASK_RM);
- _FPU_SETCW (fpscr | round);
-}
-
-static __always_inline void
-libc_feholdsetround_vfp (fenv_t *envp, int round)
-{
- fpu_control_t fpscr;
-
- _FPU_GETCW (fpscr);
- envp->__cw = fpscr;
-
- /* Set new rounding mode if different. */
- if (__glibc_unlikely ((fpscr & _FPU_MASK_RM) != round))
- _FPU_SETCW ((fpscr & ~_FPU_MASK_RM) | round);
-}
-
-static __always_inline void
-libc_feresetround_vfp (fenv_t *envp)
-{
- fpu_control_t fpscr, round;
-
- _FPU_GETCW (fpscr);
-
- /* Check whether rounding modes are different. */
- round = (envp->__cw ^ fpscr) & _FPU_MASK_RM;
-
- /* Restore the rounding mode if it was changed. */
- if (__glibc_unlikely (round != 0))
- _FPU_SETCW (fpscr ^ round);
-}
-
-static __always_inline int
-libc_fetestexcept_vfp (int ex)
-{
- fpu_control_t fpscr;
-
- _FPU_GETCW (fpscr);
- return fpscr & ex & FE_ALL_EXCEPT;
-}
-
-static __always_inline void
-libc_fesetenv_vfp (const fenv_t *envp)
-{
- fpu_control_t fpscr, new_fpscr;
-
- _FPU_GETCW (fpscr);
- new_fpscr = envp->__cw;
-
- /* Write new FPSCR if different (ignoring NZCV flags). */
- if (__glibc_unlikely (((fpscr ^ new_fpscr) & ~_FPU_MASK_NZCV) != 0))
- _FPU_SETCW (new_fpscr);
-}
-
-static __always_inline int
-libc_feupdateenv_test_vfp (const fenv_t *envp, int ex)
-{
- fpu_control_t fpscr, new_fpscr;
- int excepts;
-
- _FPU_GETCW (fpscr);
-
- /* Merge current exception flags with the saved fenv. */
- excepts = fpscr & FE_ALL_EXCEPT;
- new_fpscr = envp->__cw | excepts;
-
- /* Write new FPSCR if different (ignoring NZCV flags). */
- if (__glibc_unlikely (((fpscr ^ new_fpscr) & ~_FPU_MASK_NZCV) != 0))
- _FPU_SETCW (new_fpscr);
-
- /* Raise the exceptions if enabled in the new FP state. */
- if (__glibc_unlikely (excepts & (new_fpscr >> FE_EXCEPT_SHIFT)))
- __feraiseexcept (excepts);
-
- return excepts & ex;
-}
-
-static __always_inline void
-libc_feupdateenv_vfp (const fenv_t *envp)
-{
- libc_feupdateenv_test_vfp (envp, 0);
-}
-
-static __always_inline void
-libc_feholdsetround_vfp_ctx (struct rm_ctx *ctx, int r)
-{
- fpu_control_t fpscr, round;
-
- _FPU_GETCW (fpscr);
- ctx->updated_status = false;
- ctx->env.__cw = fpscr;
-
- /* Check whether rounding modes are different. */
- round = (fpscr ^ r) & _FPU_MASK_RM;
-
- /* Set the rounding mode if changed. */
- if (__glibc_unlikely (round != 0))
- {
- ctx->updated_status = true;
- _FPU_SETCW (fpscr ^ round);
- }
-}
-
-static __always_inline void
-libc_feresetround_vfp_ctx (struct rm_ctx *ctx)
-{
- /* Restore the rounding mode if updated. */
- if (__glibc_unlikely (ctx->updated_status))
- {
- fpu_control_t fpscr;
-
- _FPU_GETCW (fpscr);
- fpscr = (fpscr & ~_FPU_MASK_RM) | (ctx->env.__cw & _FPU_MASK_RM);
- _FPU_SETCW (fpscr);
- }
-}
-
-static __always_inline void
-libc_fesetenv_vfp_ctx (struct rm_ctx *ctx)
-{
- fpu_control_t fpscr, new_fpscr;
-
- _FPU_GETCW (fpscr);
- new_fpscr = ctx->env.__cw;
-
- /* Write new FPSCR if different (ignoring NZCV flags). */
- if (__glibc_unlikely (((fpscr ^ new_fpscr) & ~_FPU_MASK_NZCV) != 0))
- _FPU_SETCW (new_fpscr);
-}
-
-#ifndef __SOFTFP__
-
-# define libc_feholdexcept libc_feholdexcept_vfp
-# define libc_feholdexceptf libc_feholdexcept_vfp
-# define libc_feholdexceptl libc_feholdexcept_vfp
-
-# define libc_fesetround libc_fesetround_vfp
-# define libc_fesetroundf libc_fesetround_vfp
-# define libc_fesetroundl libc_fesetround_vfp
-
-# define libc_feresetround libc_feresetround_vfp
-# define libc_feresetroundf libc_feresetround_vfp
-# define libc_feresetroundl libc_feresetround_vfp
-
-# define libc_feresetround_noex libc_fesetenv_vfp
-# define libc_feresetround_noexf libc_fesetenv_vfp
-# define libc_feresetround_noexl libc_fesetenv_vfp
-
-# define libc_feholdexcept_setround libc_feholdexcept_setround_vfp
-# define libc_feholdexcept_setroundf libc_feholdexcept_setround_vfp
-# define libc_feholdexcept_setroundl libc_feholdexcept_setround_vfp
-
-# define libc_feholdsetround libc_feholdsetround_vfp
-# define libc_feholdsetroundf libc_feholdsetround_vfp
-# define libc_feholdsetroundl libc_feholdsetround_vfp
-
-# define libc_fetestexcept libc_fetestexcept_vfp
-# define libc_fetestexceptf libc_fetestexcept_vfp
-# define libc_fetestexceptl libc_fetestexcept_vfp
-
-# define libc_fesetenv libc_fesetenv_vfp
-# define libc_fesetenvf libc_fesetenv_vfp
-# define libc_fesetenvl libc_fesetenv_vfp
-
-# define libc_feupdateenv libc_feupdateenv_vfp
-# define libc_feupdateenvf libc_feupdateenv_vfp
-# define libc_feupdateenvl libc_feupdateenv_vfp
-
-# define libc_feupdateenv_test libc_feupdateenv_test_vfp
-# define libc_feupdateenv_testf libc_feupdateenv_test_vfp
-# define libc_feupdateenv_testl libc_feupdateenv_test_vfp
-
-/* We have support for rounding mode context. */
-#define HAVE_RM_CTX 1
-
-# define libc_feholdsetround_ctx libc_feholdsetround_vfp_ctx
-# define libc_feresetround_ctx libc_feresetround_vfp_ctx
-# define libc_feresetround_noex_ctx libc_fesetenv_vfp_ctx
-
-# define libc_feholdsetroundf_ctx libc_feholdsetround_vfp_ctx
-# define libc_feresetroundf_ctx libc_feresetround_vfp_ctx
-# define libc_feresetround_noexf_ctx libc_fesetenv_vfp_ctx
-
-# define libc_feholdsetroundl_ctx libc_feholdsetround_vfp_ctx
-# define libc_feresetroundl_ctx libc_feresetround_vfp_ctx
-# define libc_feresetround_noexl_ctx libc_fesetenv_vfp_ctx
-
-#endif
-
-#endif /* FENV_PRIVATE_H */
diff --git a/sysdeps/arm/fesetenv.c b/sysdeps/arm/fesetenv.c
deleted file mode 100644
index e28d0a5d02..0000000000
--- a/sysdeps/arm/fesetenv.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Install given floating-point environment.
- Copyright (C) 2004-2017 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 <fenv.h>
-#include <fpu_control.h>
-#include <arm-features.h>
-
-
-int
-__fesetenv (const fenv_t *envp)
-{
- fpu_control_t fpscr, new_fpscr, updated_fpscr;
-
- /* Fail if a VFP unit isn't present. */
- if (!ARM_HAVE_VFP)
- return 1;
-
- _FPU_GETCW (fpscr);
-
- if ((envp != FE_DFL_ENV) && (envp != FE_NOMASK_ENV))
- {
- /* The new FPSCR is valid, so don't merge the reserved flags. */
- new_fpscr = envp->__cw;
-
- /* Write new FPSCR if different (ignoring NZCV flags). */
- if (((fpscr ^ new_fpscr) & ~_FPU_MASK_NZCV) != 0)
- _FPU_SETCW (new_fpscr);
-
- return 0;
- }
-
- /* Preserve the reserved FPSCR flags. */
- new_fpscr = fpscr & _FPU_RESERVED;
- new_fpscr |= (envp == FE_DFL_ENV) ? _FPU_DEFAULT : _FPU_IEEE;
-
- if (((new_fpscr ^ fpscr) & ~_FPU_MASK_NZCV) != 0)
- {
- _FPU_SETCW (new_fpscr);
-
- /* Not all VFP architectures support trapping exceptions, so
- test whether the relevant bits were set and fail if not. */
- _FPU_GETCW (updated_fpscr);
-
- return new_fpscr & ~updated_fpscr;
- }
-
- return 0;
-}
-libm_hidden_def (__fesetenv)
-weak_alias (__fesetenv, fesetenv)
-libm_hidden_weak (fesetenv)
diff --git a/sysdeps/arm/fesetexcept.c b/sysdeps/arm/fesetexcept.c
deleted file mode 100644
index 994ccf5bb8..0000000000
--- a/sysdeps/arm/fesetexcept.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Set given exception flags. ARM version.
- Copyright (C) 2016-2017 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 <fenv.h>
-#include <fpu_control.h>
-#include <arm-features.h>
-
-int
-fesetexcept (int excepts)
-{
- fpu_control_t fpscr, new_fpscr;
-
- /* Fail if a VFP unit isn't present unless nothing needs to be done. */
- if (!ARM_HAVE_VFP)
- return (excepts != 0);
-
- _FPU_GETCW (fpscr);
- new_fpscr = fpscr | (excepts & FE_ALL_EXCEPT);
- if (new_fpscr != fpscr)
- _FPU_SETCW (new_fpscr);
-
- return 0;
-}
diff --git a/sysdeps/arm/fesetmode.c b/sysdeps/arm/fesetmode.c
deleted file mode 100644
index d2006985eb..0000000000
--- a/sysdeps/arm/fesetmode.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Install given floating-point control modes. ARM version.
- Copyright (C) 2016-2017 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 <fenv.h>
-#include <fpu_control.h>
-#include <arm-features.h>
-
-/* NZCV flags, QC bit, IDC bit and bits for IEEE exception status. */
-#define FPU_STATUS_BITS 0xf800009f
-
-int
-fesetmode (const femode_t *modep)
-{
- fpu_control_t fpscr, new_fpscr;
-
- if (!ARM_HAVE_VFP)
- /* Nothing to do. */
- return 0;
-
- _FPU_GETCW (fpscr);
- if (modep == FE_DFL_MODE)
- new_fpscr = (fpscr & (_FPU_RESERVED | FPU_STATUS_BITS)) | _FPU_DEFAULT;
- else
- new_fpscr = (fpscr & FPU_STATUS_BITS) | (*modep & ~FPU_STATUS_BITS);
-
- if (((new_fpscr ^ fpscr) & ~_FPU_MASK_NZCV) != 0)
- _FPU_SETCW (new_fpscr);
-
- return 0;
-}
diff --git a/sysdeps/arm/fesetround.c b/sysdeps/arm/fesetround.c
deleted file mode 100644
index e3ebd20055..0000000000
--- a/sysdeps/arm/fesetround.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Set current rounding direction.
- Copyright (C) 2004-2017 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 <fenv_private.h>
-#include <arm-features.h>
-
-
-int
-__fesetround (int round)
-{
- /* FE_TONEAREST is the only supported rounding mode
- if a VFP unit isn't present. */
- if (!ARM_HAVE_VFP)
- return (round == FE_TONEAREST) ? 0 : 1;
-
- if (round & ~_FPU_MASK_RM)
- return 1;
-
- libc_fesetround_vfp (round);
- return 0;
-}
-libm_hidden_def (__fesetround)
-weak_alias (__fesetround, fesetround)
-libm_hidden_weak (fesetround)
diff --git a/sysdeps/arm/feupdateenv.c b/sysdeps/arm/feupdateenv.c
deleted file mode 100644
index 21afa51d4a..0000000000
--- a/sysdeps/arm/feupdateenv.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Install given floating-point environment and raise exceptions.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- 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 <fenv.h>
-#include <fpu_control.h>
-#include <arm-features.h>
-
-
-int
-__feupdateenv (const fenv_t *envp)
-{
- fpu_control_t fpscr, new_fpscr, updated_fpscr;
- int excepts;
-
- /* Fail if a VFP unit isn't present. */
- if (!ARM_HAVE_VFP)
- return 1;
-
- _FPU_GETCW (fpscr);
- excepts = fpscr & FE_ALL_EXCEPT;
-
- if ((envp != FE_DFL_ENV) && (envp != FE_NOMASK_ENV))
- {
- /* Merge current exception flags with the saved fenv. */
- new_fpscr = envp->__cw | excepts;
-
- /* Write new FPSCR if different (ignoring NZCV flags). */
- if (((fpscr ^ new_fpscr) & ~_FPU_MASK_NZCV) != 0)
- _FPU_SETCW (new_fpscr);
-
- /* Raise the exceptions if enabled in the new FP state. */
- if (excepts & (new_fpscr >> FE_EXCEPT_SHIFT))
- return __feraiseexcept (excepts);
-
- return 0;
- }
-
- /* Preserve the reserved FPSCR flags. */
- new_fpscr = fpscr & (_FPU_RESERVED | FE_ALL_EXCEPT);
- new_fpscr |= (envp == FE_DFL_ENV) ? _FPU_DEFAULT : _FPU_IEEE;
-
- if (((new_fpscr ^ fpscr) & ~_FPU_MASK_NZCV) != 0)
- {
- _FPU_SETCW (new_fpscr);
-
- /* Not all VFP architectures support trapping exceptions, so
- test whether the relevant bits were set and fail if not. */
- _FPU_GETCW (updated_fpscr);
-
- if (new_fpscr & ~updated_fpscr)
- return 1;
- }
-
- /* Raise the exceptions if enabled in the new FP state. */
- if (excepts & (new_fpscr >> FE_EXCEPT_SHIFT))
- return __feraiseexcept (excepts);
-
- return 0;
-}
-libm_hidden_def (__feupdateenv)
-weak_alias (__feupdateenv, feupdateenv)
-libm_hidden_weak (feupdateenv)
diff --git a/sysdeps/arm/fgetexcptflg.c b/sysdeps/arm/fgetexcptflg.c
deleted file mode 100644
index 272dd22e9c..0000000000
--- a/sysdeps/arm/fgetexcptflg.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Store current representation for exceptions.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- 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 <fenv_private.h>
-#include <arm-features.h>
-
-
-int
-fegetexceptflag (fexcept_t *flagp, int excepts)
-{
- /* Fail if a VFP unit isn't present. */
- if (!ARM_HAVE_VFP)
- return 1;
-
- *flagp = libc_fetestexcept_vfp (excepts);
- return 0;
-}
diff --git a/sysdeps/arm/find_exidx.c b/sysdeps/arm/find_exidx.c
deleted file mode 100644
index 1e6f1dc773..0000000000
--- a/sysdeps/arm/find_exidx.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (C) 2005-2017 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 <link.h>
-#include <unwind.h>
-
-struct unw_eh_callback_data
-{
- _Unwind_Ptr pc;
- _Unwind_Ptr exidx_start;
- int exidx_len;
-};
-
-
-/* Callback to determins if the PC lies within an object, and remember the
- location of the exception index table if it does. */
-
-static int
-find_exidx_callback (struct dl_phdr_info * info, size_t size, void * ptr)
-{
- struct unw_eh_callback_data * data;
- const ElfW(Phdr) *phdr;
- int i;
- int match;
- _Unwind_Ptr load_base;
-
- data = (struct unw_eh_callback_data *) ptr;
- load_base = info->dlpi_addr;
- phdr = info->dlpi_phdr;
-
- match = 0;
- for (i = info->dlpi_phnum; i > 0; i--, phdr++)
- {
- if (phdr->p_type == PT_LOAD)
- {
- _Unwind_Ptr vaddr = phdr->p_vaddr + load_base;
- if (data->pc >= vaddr && data->pc < vaddr + phdr->p_memsz)
- match = 1;
- }
- else if (phdr->p_type == PT_ARM_EXIDX)
- {
- data->exidx_start = (_Unwind_Ptr) (phdr->p_vaddr + load_base);
- data->exidx_len = phdr->p_memsz;
- }
- }
-
- return match;
-}
-
-
-/* Find the exception index table containing PC. */
-
-_Unwind_Ptr
-__gnu_Unwind_Find_exidx (_Unwind_Ptr pc, int * pcount)
-{
- struct unw_eh_callback_data data;
-
- data.pc = pc;
- data.exidx_start = 0;
- if (__dl_iterate_phdr (find_exidx_callback, &data) <= 0)
- return 0;
-
- *pcount = data.exidx_len / 8;
- return data.exidx_start;
-}
diff --git a/sysdeps/arm/fix-fp-int-convert-overflow.h b/sysdeps/arm/fix-fp-int-convert-overflow.h
deleted file mode 100644
index cb7fea7abb..0000000000
--- a/sysdeps/arm/fix-fp-int-convert-overflow.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Fix for conversion of floating point to integer overflow. ARM version.
- Copyright (C) 2015-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef FIX_FP_INT_CONVERT_OVERFLOW_H
-#define FIX_FP_INT_CONVERT_OVERFLOW_H 1
-
-/* As of GCC 5, the generic libgcc2.c conversions from floating point
- to long long may not raise the correct exceptions on overflow (and
- may raise spurious "inexact" exceptions even in non-overflow cases,
- see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59412>). */
-#define FIX_FLT_LLONG_CONVERT_OVERFLOW 1
-#define FIX_DBL_LLONG_CONVERT_OVERFLOW 1
-#define FIX_LDBL_LLONG_CONVERT_OVERFLOW 0
-
-#define FIX_FLT_LONG_CONVERT_OVERFLOW 0
-#define FIX_DBL_LONG_CONVERT_OVERFLOW 0
-#define FIX_LDBL_LONG_CONVERT_OVERFLOW 0
-
-#endif /* fix-fp-int-convert-overflow.h */
diff --git a/sysdeps/arm/fpu_control.h b/sysdeps/arm/fpu_control.h
deleted file mode 100644
index 405d427c84..0000000000
--- a/sysdeps/arm/fpu_control.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* FPU control word definitions. ARM VFP version.
- Copyright (C) 2004-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _FPU_CONTROL_H
-#define _FPU_CONTROL_H
-
-#if !(defined(_LIBC) && !defined(_LIBC_TEST)) && defined(__SOFTFP__)
-
-#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)
-extern fpu_control_t __fpu_control;
-
-#else
-
-/* masking of interrupts */
-#define _FPU_MASK_IM 0x00000100 /* invalid operation */
-#define _FPU_MASK_ZM 0x00000200 /* divide by zero */
-#define _FPU_MASK_OM 0x00000400 /* overflow */
-#define _FPU_MASK_UM 0x00000800 /* underflow */
-#define _FPU_MASK_PM 0x00001000 /* inexact */
-
-#define _FPU_MASK_NZCV 0xf0000000 /* NZCV flags */
-#define _FPU_MASK_RM 0x00c00000 /* rounding mode */
-#define _FPU_MASK_EXCEPT 0x00001f1f /* all exception flags */
-
-/* Some bits in the FPSCR are not yet defined. They must be preserved when
- modifying the contents. */
-#define _FPU_RESERVED 0x00086060
-#define _FPU_DEFAULT 0x00000000
-
-/* Default + exceptions enabled. */
-#define _FPU_IEEE (_FPU_DEFAULT | 0x00001f00)
-
-/* Type of the control word. */
-typedef unsigned int fpu_control_t;
-
-/* Macros for accessing the hardware control word. */
-#ifdef __SOFTFP__
-/* This is fmrx %0, fpscr. */
-# define _FPU_GETCW(cw) \
- __asm__ __volatile__ ("mrc p10, 7, %0, cr1, cr0, 0" : "=r" (cw))
-/* This is fmxr fpscr, %0. */
-# define _FPU_SETCW(cw) \
- __asm__ __volatile__ ("mcr p10, 7, %0, cr1, cr0, 0" : : "r" (cw))
-#else
-# define _FPU_GETCW(cw) \
- __asm__ __volatile__ ("vmrs %0, fpscr" : "=r" (cw))
-# define _FPU_SETCW(cw) \
- __asm__ __volatile__ ("vmsr fpscr, %0" : : "r" (cw))
-#endif
-
-/* Default control word set at startup. */
-extern fpu_control_t __fpu_control;
-
-#endif /* __SOFTFP__ */
-
-#endif /* _FPU_CONTROL_H */
diff --git a/sysdeps/arm/fraiseexcpt.c b/sysdeps/arm/fraiseexcpt.c
deleted file mode 100644
index be53409b36..0000000000
--- a/sysdeps/arm/fraiseexcpt.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Raise given exceptions.
- Copyright (C) 2004-2017 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 <fpu_control.h>
-#include <fenv.h>
-#include <float.h>
-#include <arm-features.h>
-
-
-int
-__feraiseexcept (int excepts)
-{
- /* Fail if a VFP unit isn't present unless nothing needs to be done. */
- if (!ARM_HAVE_VFP)
- return (excepts != 0);
- else
- {
- fpu_control_t fpscr;
- const float fp_zero = 0.0, fp_one = 1.0, fp_max = FLT_MAX,
- fp_min = FLT_MIN, fp_1e32 = 1.0e32f, fp_two = 2.0,
- fp_three = 3.0;
-
- /* Raise exceptions represented by EXPECTS. But we must raise only
- one signal at a time. It is important that if the overflow/underflow
- exception and the inexact exception are given at the same time,
- the overflow/underflow exception follows the inexact exception. After
- each exception we read from the fpscr, to force the exception to be
- raised immediately. */
-
- /* There are additional complications because this file may be compiled
- without VFP support enabled, and we also can't assume that the
- assembler has VFP instructions enabled. To get around this we use the
- generic coprocessor mnemonics and avoid asking GCC to put float values
- in VFP registers. */
-
- /* First: invalid exception. */
- if (FE_INVALID & excepts)
- __asm__ __volatile__ (
- "ldc p10, cr0, %1\n\t" /* flds s0, %1 */
- "cdp p10, 8, cr0, cr0, cr0, 0\n\t" /* fdivs s0, s0, s0 */
- "mrc p10, 7, %0, cr1, cr0, 0" : "=r" (fpscr) /* fmrx %0, fpscr */
- : "m" (fp_zero)
- : "s0");
-
- /* Next: division by zero. */
- if (FE_DIVBYZERO & excepts)
- __asm__ __volatile__ (
- "ldc p10, cr0, %1\n\t" /* flds s0, %1 */
- "ldcl p10, cr0, %2\n\t" /* flds s1, %2 */
- "cdp p10, 8, cr0, cr0, cr0, 1\n\t" /* fdivs s0, s0, s1 */
- "mrc p10, 7, %0, cr1, cr0, 0" : "=r" (fpscr) /* fmrx %0, fpscr */
- : "m" (fp_one), "m" (fp_zero)
- : "s0", "s1");
-
- /* Next: overflow. */
- if (FE_OVERFLOW & excepts)
- /* There's no way to raise overflow without also raising inexact. */
- __asm__ __volatile__ (
- "ldc p10, cr0, %1\n\t" /* flds s0, %1 */
- "ldcl p10, cr0, %2\n\t" /* flds s1, %2 */
- "cdp p10, 3, cr0, cr0, cr0, 1\n\t" /* fadds s0, s0, s1 */
- "mrc p10, 7, %0, cr1, cr0, 0" : "=r" (fpscr) /* fmrx %0, fpscr */
- : "m" (fp_max), "m" (fp_1e32)
- : "s0", "s1");
-
- /* Next: underflow. */
- if (FE_UNDERFLOW & excepts)
- __asm__ __volatile__ (
- "ldc p10, cr0, %1\n\t" /* flds s0, %1 */
- "ldcl p10, cr0, %2\n\t" /* flds s1, %2 */
- "cdp p10, 8, cr0, cr0, cr0, 1\n\t" /* fdivs s0, s0, s1 */
- "mrc p10, 7, %0, cr1, cr0, 0" : "=r" (fpscr) /* fmrx %0, fpscr */
- : "m" (fp_min), "m" (fp_three)
- : "s0", "s1");
-
- /* Last: inexact. */
- if (FE_INEXACT & excepts)
- __asm__ __volatile__ (
- "ldc p10, cr0, %1\n\t" /* flds s0, %1 */
- "ldcl p10, cr0, %2\n\t" /* flds s1, %2 */
- "cdp p10, 8, cr0, cr0, cr0, 1\n\t" /* fdivs s0, s0, s1 */
- "mrc p10, 7, %0, cr1, cr0, 0" : "=r" (fpscr) /* fmrx %0, fpscr */
- : "m" (fp_two), "m" (fp_three)
- : "s0", "s1");
-
- /* Success. */
- return 0;
- }
-}
-libm_hidden_def (__feraiseexcept)
-weak_alias (__feraiseexcept, feraiseexcept)
-libm_hidden_weak (feraiseexcept)
diff --git a/sysdeps/arm/frame.h b/sysdeps/arm/frame.h
deleted file mode 100644
index 22dabfd207..0000000000
--- a/sysdeps/arm/frame.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Definition of stack frame structure. ARM/APCS version.
- Copyright (C) 2000-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This is the APCS stack backtrace structure. */
-struct layout
-{
- struct layout *next;
- void *sp;
- void *return_address;
-};
-
-#define FIRST_FRAME_POINTER ADVANCE_STACK_FRAME (__builtin_frame_address (0))
diff --git a/sysdeps/arm/framestate.c b/sysdeps/arm/framestate.c
deleted file mode 100644
index 710cecca97..0000000000
--- a/sysdeps/arm/framestate.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Empty */
diff --git a/sysdeps/arm/fsetexcptflg.c b/sysdeps/arm/fsetexcptflg.c
deleted file mode 100644
index 4871a9bd5c..0000000000
--- a/sysdeps/arm/fsetexcptflg.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Set floating-point environment exception handling.
- Copyright (C) 1997-2017 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 <fenv.h>
-#include <fpu_control.h>
-#include <arm-features.h>
-
-
-int
-fesetexceptflag (const fexcept_t *flagp, int excepts)
-{
- fpu_control_t fpscr, new_fpscr;
-
- /* Fail if a VFP unit isn't present unless nothing needs to be done. */
- if (!ARM_HAVE_VFP)
- return (excepts != 0);
-
- _FPU_GETCW (fpscr);
- excepts &= FE_ALL_EXCEPT;
-
- /* Set the desired exception mask. */
- new_fpscr = fpscr & ~excepts;
- new_fpscr |= *flagp & excepts;
-
- /* Write new exception flags if changed. */
- if (new_fpscr != fpscr)
- _FPU_SETCW (new_fpscr);
-
- return 0;
-}
diff --git a/sysdeps/arm/ftestexcept.c b/sysdeps/arm/ftestexcept.c
deleted file mode 100644
index b1e13d751b..0000000000
--- a/sysdeps/arm/ftestexcept.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Test exception in current environment.
- Copyright (C) 1997-2017 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 <fenv_private.h>
-#include <arm-features.h>
-
-
-int
-fetestexcept (int excepts)
-{
- /* Return no exception flags if a VFP unit isn't present. */
- if (!ARM_HAVE_VFP)
- return 0;
-
- return libc_fetestexcept_vfp (excepts);
-}
-libm_hidden_def (fetestexcept)
diff --git a/sysdeps/arm/gcc-compat.h b/sysdeps/arm/gcc-compat.h
deleted file mode 100644
index a8524ccc69..0000000000
--- a/sysdeps/arm/gcc-compat.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Macros for checking required GCC compatibility. ARM version.
- Copyright (C) 2014-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _ARM_GCC_COMPAT_H
-#define _ARM_GCC_COMPAT_H 1
-
-#ifndef GCC_COMPAT_VERSION
-# ifdef __ARM_PCS_VFP
-/* The hard-float ABI was first supported in 4.5. */
-# define GCC_COMPAT_VERSION GCC_VERSION (4, 5)
-# else
-/* The EABI configurations (the only ones we handle) were first supported
- in 4.1. */
-# define GCC_COMPAT_VERSION GCC_VERSION (4, 1)
-# endif
-#endif
-
-#include_next <gcc-compat.h>
-
-#endif
diff --git a/sysdeps/arm/gccframe.h b/sysdeps/arm/gccframe.h
deleted file mode 100644
index 13e7eed89f..0000000000
--- a/sysdeps/arm/gccframe.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Definition of object in frame unwind info. arm version.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#define FIRST_PSEUDO_REGISTER 27
-
-#include <sysdeps/generic/gccframe.h>
diff --git a/sysdeps/arm/get-rounding-mode.h b/sysdeps/arm/get-rounding-mode.h
deleted file mode 100644
index a76d4bacb6..0000000000
--- a/sysdeps/arm/get-rounding-mode.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Determine floating-point rounding mode within libc. ARM version.
- Copyright (C) 2012-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _ARM_GET_ROUNDING_MODE_H
-#define _ARM_GET_ROUNDING_MODE_H 1
-
-#include <arm-features.h>
-#include <fenv.h>
-#include <fpu_control.h>
-
-/* Return the floating-point rounding mode. */
-
-static inline int
-get_rounding_mode (void)
-{
- fpu_control_t fpscr;
-
- /* FE_TONEAREST is the only supported rounding mode
- if a VFP unit isn't present. */
- if (!ARM_HAVE_VFP)
- return FE_TONEAREST;
-
- _FPU_GETCW (fpscr);
- return fpscr & _FPU_MASK_RM;
-}
-
-#endif /* get-rounding-mode.h */
diff --git a/sysdeps/arm/gmp-mparam.h b/sysdeps/arm/gmp-mparam.h
deleted file mode 100644
index 5731dbde8f..0000000000
--- a/sysdeps/arm/gmp-mparam.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* gmp-mparam.h -- Compiler/machine parameter header file.
-
-Copyright (C) 1991-2017 Free Software Foundation, Inc.
-
-This file is part of the GNU MP Library.
-
-The GNU MP Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 of the License, or (at your
-option) any later version.
-
-The GNU MP Library is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser General Public License
-along with the GNU MP Library. If not, see <http://www.gnu.org/licenses/>. */
-
-#define BITS_PER_MP_LIMB 32
-#define BYTES_PER_MP_LIMB 4
-#define BITS_PER_LONGINT 32
-#define BITS_PER_INT 32
-#define BITS_PER_SHORTINT 16
-#define BITS_PER_CHAR 8
-
-#if defined(__ARMEB__)
-# define IEEE_DOUBLE_MIXED_ENDIAN 0
-# define IEEE_DOUBLE_BIG_ENDIAN 1
-#elif defined(__VFP_FP__)
-# define IEEE_DOUBLE_MIXED_ENDIAN 0
-# define IEEE_DOUBLE_BIG_ENDIAN 0
-#else
-# define IEEE_DOUBLE_BIG_ENDIAN 0
-# define IEEE_DOUBLE_MIXED_ENDIAN 1
-#endif
diff --git a/sysdeps/arm/include/bits/setjmp.h b/sysdeps/arm/include/bits/setjmp.h
deleted file mode 100644
index 9e24705f22..0000000000
--- a/sysdeps/arm/include/bits/setjmp.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Private jmp_buf-related definitions. ARM EABI version.
- Copyright (C) 2013-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _INCLUDE_BITS_SETJMP_H
-#define _INCLUDE_BITS_SETJMP_H 1
-
-#ifndef __ASSEMBLER__
-/* Get the public declarations. */
-# include <sysdeps/arm/bits/setjmp.h>
-#endif
-
-#ifndef _ISOMAC
-/* Register list for a ldm/stm instruction to load/store
- the general registers from a __jmp_buf. */
-# define JMP_BUF_REGLIST {v1-v6, sl, fp}
-
-/* Index of __jmp_buf where the sp register resides. */
-# define __JMP_BUF_SP 0
-#endif
-
-#endif /* include/bits/setjmp.h */
diff --git a/sysdeps/arm/jmpbuf-unwind.h b/sysdeps/arm/jmpbuf-unwind.h
deleted file mode 100644
index 7a4e49ea78..0000000000
--- a/sysdeps/arm/jmpbuf-unwind.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright (C) 2005-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <setjmp.h>
-#include <stdint.h>
-#include <sysdep.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[__JMP_BUF_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 regs)
-{
- uintptr_t sp = regs[__JMP_BUF_SP];
-#ifdef PTR_DEMANGLE
- PTR_DEMANGLE (sp);
-#endif
- return sp;
-}
-
-#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
- ((uintptr_t) (_address) - (_adj) < _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/arm/ldsodefs.h b/sysdeps/arm/ldsodefs.h
deleted file mode 100644
index 0dd568cff3..0000000000
--- a/sysdeps/arm/ldsodefs.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Run-time dynamic linker data structures for loaded ELF shared objects.
- Copyright (C) 2005-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _ARM_LDSODEFS_H
-#define _ARM_LDSODEFS_H 1
-
-#include <elf.h>
-
-struct La_arm_regs;
-struct La_arm_retval;
-
-#define ARCH_PLTENTER_MEMBERS \
- Elf32_Addr (*arm_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, \
- uintptr_t *, struct La_arm_regs *, \
- unsigned int *, const char *, \
- long int *)
-
-#define ARCH_PLTEXIT_MEMBERS \
- Elf32_Addr (*arm_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *, \
- uintptr_t *, const struct La_arm_regs *, \
- struct La_arm_retval *, const char *)
-
-#include_next <ldsodefs.h>
-
-#endif
diff --git a/sysdeps/arm/libc-aeabi_read_tp.S b/sysdeps/arm/libc-aeabi_read_tp.S
deleted file mode 100644
index 6132afc151..0000000000
--- a/sysdeps/arm/libc-aeabi_read_tp.S
+++ /dev/null
@@ -1 +0,0 @@
-#include <aeabi_read_tp.S>
diff --git a/sysdeps/arm/libc-tls.c b/sysdeps/arm/libc-tls.c
deleted file mode 100644
index 9b2a52e0ec..0000000000
--- a/sysdeps/arm/libc-tls.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Thread-local storage handling in the ELF dynamic linker. ARM version.
- Copyright (C) 2005-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <csu/libc-tls.c>
-#include <dl-tls.h>
-
-/* On ARM, linker optimizations are not required, so __tls_get_addr
- can be called even in statically linked binaries. In this case module
- must be always 1 and PT_TLS segment exist in the binary, otherwise it
- would not link. */
-
-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/arm/libm-test-ulps b/sysdeps/arm/libm-test-ulps
deleted file mode 100644
index c6ee80095a..0000000000
--- a/sysdeps/arm/libm-test-ulps
+++ /dev/null
@@ -1,1690 +0,0 @@
-# Begin of automatic generation
-
-# Maximal error of functions:
-Function: "acos":
-float: 1
-ifloat: 1
-
-Function: "acos_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "acos_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "acos_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "acosh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "acosh_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "acosh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "acosh_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "asin":
-float: 1
-ifloat: 1
-
-Function: "asin_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "asin_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "asin_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "asinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "asinh_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: "asinh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "asinh_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: "atan":
-float: 1
-ifloat: 1
-
-Function: "atan2":
-float: 1
-ifloat: 1
-
-Function: "atan2_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "atan2_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "atan2_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "atan_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "atan_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "atan_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "atanh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "atanh_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: "atanh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "atanh_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: "cabs":
-double: 1
-idouble: 1
-
-Function: "cabs_downward":
-double: 1
-idouble: 1
-
-Function: "cabs_towardzero":
-double: 1
-idouble: 1
-
-Function: "cabs_upward":
-double: 1
-idouble: 1
-
-Function: Real part of "cacos":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Imaginary part of "cacos":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Real part of "cacos_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: Imaginary part of "cacos_downward":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-
-Function: Real part of "cacos_towardzero":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: Imaginary part of "cacos_towardzero":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-
-Function: Real part of "cacos_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Imaginary part of "cacos_upward":
-double: 5
-float: 7
-idouble: 5
-ifloat: 7
-
-Function: Real part of "cacosh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Imaginary part of "cacosh":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "cacosh_downward":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-
-Function: Imaginary part of "cacosh_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: Real part of "cacosh_towardzero":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-
-Function: Imaginary part of "cacosh_towardzero":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: Real part of "cacosh_upward":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-
-Function: Imaginary part of "cacosh_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "carg":
-float: 1
-ifloat: 1
-
-Function: "carg_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "carg_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "carg_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "casin":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "casin":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Real part of "casin_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: Imaginary part of "casin_downward":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-
-Function: Real part of "casin_towardzero":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-
-Function: Imaginary part of "casin_towardzero":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-
-Function: Real part of "casin_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: Imaginary part of "casin_upward":
-double: 5
-float: 7
-idouble: 5
-ifloat: 7
-
-Function: Real part of "casinh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Imaginary part of "casinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "casinh_downward":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-
-Function: Imaginary part of "casinh_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: Real part of "casinh_towardzero":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-
-Function: Imaginary part of "casinh_towardzero":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-
-Function: Real part of "casinh_upward":
-double: 5
-float: 7
-idouble: 5
-ifloat: 7
-
-Function: Imaginary part of "casinh_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: Real part of "catan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "catan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "catan_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Imaginary part of "catan_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Real part of "catan_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Imaginary part of "catan_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Real part of "catan_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "catan_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: Real part of "catanh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "catanh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "catanh_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Imaginary part of "catanh_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "catanh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Imaginary part of "catanh_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "catanh_upward":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-
-Function: Imaginary part of "catanh_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "cbrt":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-
-Function: "cbrt_downward":
-double: 4
-float: 1
-idouble: 4
-ifloat: 1
-
-Function: "cbrt_towardzero":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-
-Function: "cbrt_upward":
-double: 5
-float: 1
-idouble: 5
-ifloat: 1
-
-Function: Real part of "ccos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "ccos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "ccos_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "ccos_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: Real part of "ccos_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Imaginary part of "ccos_towardzero":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: Real part of "ccos_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Imaginary part of "ccos_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Real part of "ccosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "ccosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "ccosh_downward":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-
-Function: Imaginary part of "ccosh_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: Real part of "ccosh_towardzero":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-
-Function: Imaginary part of "ccosh_towardzero":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: Real part of "ccosh_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Imaginary part of "ccosh_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Real part of "cexp":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: Imaginary part of "cexp":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "cexp_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Imaginary part of "cexp_downward":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-
-Function: Real part of "cexp_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Imaginary part of "cexp_towardzero":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-
-Function: Real part of "cexp_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Imaginary part of "cexp_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "clog":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: Imaginary part of "clog":
-float: 1
-ifloat: 1
-
-Function: Real part of "clog10":
-double: 3
-float: 4
-idouble: 3
-ifloat: 4
-
-Function: Imaginary part of "clog10":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Real part of "clog10_downward":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-
-Function: Imaginary part of "clog10_downward":
-double: 2
-float: 4
-idouble: 2
-ifloat: 4
-
-Function: Real part of "clog10_towardzero":
-double: 5
-float: 5
-idouble: 5
-ifloat: 5
-
-Function: Imaginary part of "clog10_towardzero":
-double: 2
-float: 4
-idouble: 2
-ifloat: 4
-
-Function: Real part of "clog10_upward":
-double: 6
-float: 5
-idouble: 6
-ifloat: 5
-
-Function: Imaginary part of "clog10_upward":
-double: 2
-float: 4
-idouble: 2
-ifloat: 4
-
-Function: Real part of "clog_downward":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-
-Function: Imaginary part of "clog_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "clog_towardzero":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-
-Function: Imaginary part of "clog_towardzero":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-
-Function: Real part of "clog_upward":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-
-Function: Imaginary part of "clog_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "cos":
-float: 1
-ifloat: 1
-
-Function: "cos_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "cos_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "cos_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "cosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "cosh_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "cosh_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "cosh_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "cpow":
-double: 2
-float: 4
-idouble: 2
-ifloat: 4
-
-Function: Imaginary part of "cpow":
-float: 2
-ifloat: 2
-
-Function: Real part of "cpow_downward":
-double: 4
-float: 8
-idouble: 4
-ifloat: 8
-
-Function: Imaginary part of "cpow_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "cpow_towardzero":
-double: 4
-float: 8
-idouble: 4
-ifloat: 8
-
-Function: Imaginary part of "cpow_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "cpow_upward":
-double: 4
-float: 1
-idouble: 4
-ifloat: 1
-
-Function: Imaginary part of "cpow_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "csin":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "csin_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: Imaginary part of "csin_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "csin_towardzero":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: Imaginary part of "csin_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "csin_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Imaginary part of "csin_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "csinh":
-float: 1
-ifloat: 1
-
-Function: Imaginary part of "csinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "csinh_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Imaginary part of "csinh_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: Real part of "csinh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Imaginary part of "csinh_towardzero":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: Real part of "csinh_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Imaginary part of "csinh_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Real part of "csqrt":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Imaginary part of "csqrt":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Real part of "csqrt_downward":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-
-Function: Imaginary part of "csqrt_downward":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-
-Function: Real part of "csqrt_towardzero":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-
-Function: Imaginary part of "csqrt_towardzero":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-
-Function: Real part of "csqrt_upward":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-
-Function: Imaginary part of "csqrt_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: Real part of "ctan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "ctan":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: Real part of "ctan_downward":
-double: 6
-float: 5
-idouble: 6
-ifloat: 5
-
-Function: Imaginary part of "ctan_downward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: Real part of "ctan_towardzero":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-
-Function: Imaginary part of "ctan_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Real part of "ctan_upward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: Imaginary part of "ctan_upward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: Real part of "ctanh":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: Imaginary part of "ctanh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Real part of "ctanh_downward":
-double: 4
-float: 1
-idouble: 4
-ifloat: 1
-
-Function: Imaginary part of "ctanh_downward":
-double: 6
-float: 5
-idouble: 6
-ifloat: 5
-
-Function: Real part of "ctanh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Imaginary part of "ctanh_towardzero":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-
-Function: Real part of "ctanh_upward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: Imaginary part of "ctanh_upward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: "erf":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "erf_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "erf_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "erf_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "erfc":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "erfc_downward":
-double: 5
-float: 6
-idouble: 5
-ifloat: 6
-
-Function: "erfc_towardzero":
-double: 3
-float: 4
-idouble: 3
-ifloat: 4
-
-Function: "erfc_upward":
-double: 5
-float: 6
-idouble: 5
-ifloat: 6
-
-Function: "exp":
-float: 1
-ifloat: 1
-
-Function: "exp10":
-double: 2
-idouble: 2
-
-Function: "exp10_downward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: "exp10_towardzero":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: "exp10_upward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: "exp2":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "exp2_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "exp2_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "exp2_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "exp_downward":
-double: 1
-idouble: 1
-
-Function: "exp_towardzero":
-double: 1
-idouble: 1
-
-Function: "exp_upward":
-double: 1
-idouble: 1
-
-Function: "expm1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "expm1_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "expm1_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "expm1_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "gamma":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-
-Function: "gamma_downward":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-
-Function: "gamma_towardzero":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-
-Function: "gamma_upward":
-double: 5
-float: 5
-idouble: 5
-ifloat: 5
-
-Function: "hypot":
-double: 1
-idouble: 1
-
-Function: "hypot_downward":
-double: 1
-idouble: 1
-
-Function: "hypot_towardzero":
-double: 1
-idouble: 1
-
-Function: "hypot_upward":
-double: 1
-idouble: 1
-
-Function: "j0":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "j0_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: "j0_towardzero":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "j0_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "j1":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "j1_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "j1_towardzero":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "j1_upward":
-double: 3
-float: 5
-idouble: 3
-ifloat: 5
-
-Function: "jn":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-
-Function: "jn_downward":
-double: 5
-float: 5
-idouble: 5
-ifloat: 5
-
-Function: "jn_towardzero":
-double: 5
-float: 5
-idouble: 5
-ifloat: 5
-
-Function: "jn_upward":
-double: 5
-float: 5
-idouble: 5
-ifloat: 5
-
-Function: "lgamma":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-
-Function: "lgamma_downward":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-
-Function: "lgamma_towardzero":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-
-Function: "lgamma_upward":
-double: 5
-float: 5
-idouble: 5
-ifloat: 5
-
-Function: "log":
-float: 1
-ifloat: 1
-
-Function: "log10":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "log10_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-
-Function: "log10_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "log10_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "log1p":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "log1p_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "log1p_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "log1p_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "log2":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: "log2_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: "log2_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "log2_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: "log_downward":
-float: 2
-ifloat: 2
-
-Function: "log_towardzero":
-float: 2
-ifloat: 2
-
-Function: "log_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "pow":
-float: 1
-ifloat: 1
-
-Function: "pow10":
-double: 2
-idouble: 2
-
-Function: "pow10_downward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: "pow10_towardzero":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: "pow10_upward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: "pow_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "pow_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "pow_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "sin":
-float: 1
-ifloat: 1
-
-Function: "sin_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "sin_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "sin_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "sincos":
-float: 1
-ifloat: 1
-
-Function: "sincos_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "sincos_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "sincos_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "sinh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "sinh_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: "sinh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "sinh_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: "tan":
-float: 1
-ifloat: 1
-
-Function: "tan_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "tan_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "tan_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "tanh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "tanh_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: "tanh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "tanh_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: "tgamma":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-
-Function: "tgamma_downward":
-double: 5
-float: 5
-idouble: 5
-ifloat: 5
-
-Function: "tgamma_towardzero":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-
-Function: "tgamma_upward":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-
-Function: "y0":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: "y0_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "y0_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: "y0_upward":
-double: 3
-float: 4
-idouble: 3
-ifloat: 4
-
-Function: "y1":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "y1_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "y1_towardzero":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "y1_upward":
-double: 7
-float: 2
-idouble: 7
-ifloat: 2
-
-Function: "yn":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "yn_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "yn_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-
-Function: "yn_upward":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-
-# end of automatic generation
diff --git a/sysdeps/arm/libm-test-ulps-name b/sysdeps/arm/libm-test-ulps-name
deleted file mode 100644
index 74f9acfffa..0000000000
--- a/sysdeps/arm/libm-test-ulps-name
+++ /dev/null
@@ -1 +0,0 @@
-ARM
diff --git a/sysdeps/arm/linkmap.h b/sysdeps/arm/linkmap.h
deleted file mode 100644
index 7c2b4a6da8..0000000000
--- a/sysdeps/arm/linkmap.h
+++ /dev/null
@@ -1,5 +0,0 @@
-struct link_map_machine
- {
- Elf32_Addr plt; /* Address of .plt */
- void *tlsdesc_table; /* Address of TLS descriptor hash table. */
- };
diff --git a/sysdeps/arm/machine-gmon.h b/sysdeps/arm/machine-gmon.h
deleted file mode 100644
index 8e9f43a662..0000000000
--- a/sysdeps/arm/machine-gmon.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Machine-dependent definitions for profiling support. ARM EABI version.
- Copyright (C) 2008-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
-/* GCC for the ARM cannot compile __builtin_return_address(N) for N != 0,
- so we must use an assembly stub. */
-
-/* We must not pollute the global namespace. */
-#define mcount_internal __mcount_internal
-
-extern void mcount_internal (u_long frompc, u_long selfpc) internal_function;
-#define _MCOUNT_DECL(frompc, selfpc) \
- void internal_function mcount_internal (u_long frompc, u_long selfpc)
-
-
-/* Define MCOUNT as empty since we have the implementation in another file. */
-#define MCOUNT
diff --git a/sysdeps/arm/math-tests.h b/sysdeps/arm/math-tests.h
deleted file mode 100644
index 14f9265ad8..0000000000
--- a/sysdeps/arm/math-tests.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Configuration for math tests. ARM version.
- Copyright (C) 2013-2017 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/>. */
-
-/* On systems with VFP support, but where glibc is built for
- soft-float, the libgcc functions used in libc and libm do not
- support rounding modes, although fesetround succeeds, and do not
- support exceptions. */
-#ifdef __SOFTFP__
-# 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)
-# define EXCEPTION_TESTS_float 0
-# define EXCEPTION_TESTS_double 0
-# define EXCEPTION_TESTS_long_double 0
-#endif
-
-/* Not all VFP implementations support trapping exceptions. */
-#define EXCEPTION_ENABLE_SUPPORTED(EXCEPT) ((EXCEPT) == 0)
-
-#include_next <math-tests.h>
diff --git a/sysdeps/arm/math_private.h b/sysdeps/arm/math_private.h
deleted file mode 100644
index d39e9ee24a..0000000000
--- a/sysdeps/arm/math_private.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef ARM_MATH_PRIVATE_H
-#define ARM_MATH_PRIVATE_H 1
-
-/* Enable __finitel, __isinfl, and __isnanl for binary compatibility
- when built without long double support. */
-#define LDBL_CLASSIFY_COMPAT 1
-
-#include "fenv_private.h"
-#include_next <math_private.h>
-
-#endif
diff --git a/sysdeps/arm/memcpy.S b/sysdeps/arm/memcpy.S
deleted file mode 100644
index 62e48c3e4a..0000000000
--- a/sysdeps/arm/memcpy.S
+++ /dev/null
@@ -1,320 +0,0 @@
-/* Copyright (C) 2006-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- Contributed by MontaVista Software, Inc. (written by Nicolas Pitre)
-
- 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/>. */
-
-/* Thumb requires excessive IT insns here. */
-#define NO_THUMB
-#include <sysdep.h>
-#include <arm-features.h>
-
-/*
- * Data preload for architectures that support it (ARM V5TE and above)
- */
-#if (!defined (__ARM_ARCH_2__) && !defined (__ARM_ARCH_3__) \
- && !defined (__ARM_ARCH_3M__) && !defined (__ARM_ARCH_4__) \
- && !defined (__ARM_ARCH_4T__) && !defined (__ARM_ARCH_5__) \
- && !defined (__ARM_ARCH_5T__))
-#define PLD(code...) code
-#else
-#define PLD(code...)
-#endif
-
-/*
- * This can be used to enable code to cacheline align the source pointer.
- * Experiments on tested architectures (StrongARM and XScale) didn't show
- * this a worthwhile thing to do. That might be different in the future.
- */
-//#define CALGN(code...) code
-#define CALGN(code...)
-
-/*
- * Endian independent macros for shifting bytes within registers.
- */
-#ifndef __ARMEB__
-#define PULL lsr
-#define PUSH lsl
-#else
-#define PULL lsl
-#define PUSH lsr
-#endif
-
- .text
- .syntax unified
-
-/* Prototype: void *memcpy(void *dest, const void *src, size_t n); */
-
-ENTRY(memcpy)
-
- push {r0, r4, lr}
- cfi_adjust_cfa_offset (12)
- cfi_rel_offset (r4, 4)
- cfi_rel_offset (lr, 8)
-
- cfi_remember_state
-
- subs r2, r2, #4
- blt 8f
- ands ip, r0, #3
- PLD( pld [r1, #0] )
- bne 9f
- ands ip, r1, #3
- bne 10f
-
-1: subs r2, r2, #(28)
- push {r5 - r8}
- cfi_adjust_cfa_offset (16)
- cfi_rel_offset (r5, 0)
- cfi_rel_offset (r6, 4)
- cfi_rel_offset (r7, 8)
- cfi_rel_offset (r8, 12)
- blt 5f
-
- CALGN( ands ip, r1, #31 )
- CALGN( rsb r3, ip, #32 )
- CALGN( sbcsne r4, r3, r2 ) @ C is always set here
- CALGN( bcs 2f )
- CALGN( adr r4, 6f )
- CALGN( subs r2, r2, r3 ) @ C gets set
-#ifndef ARM_ALWAYS_BX
- CALGN( add pc, r4, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2))
-#else
- CALGN( add r4, r4, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2))
- CALGN( bx r4 )
-#endif
-
- PLD( pld [r1, #0] )
-2: PLD( subs r2, r2, #96 )
- PLD( pld [r1, #28] )
- PLD( blt 4f )
- PLD( pld [r1, #60] )
- PLD( pld [r1, #92] )
-
-3: PLD( pld [r1, #124] )
-4: ldmia r1!, {r3, r4, r5, r6, r7, r8, ip, lr}
- subs r2, r2, #32
- stmia r0!, {r3, r4, r5, r6, r7, r8, ip, lr}
- bge 3b
- PLD( cmn r2, #96 )
- PLD( bge 4b )
-
-5: ands ip, r2, #28
- rsb ip, ip, #32
-#ifndef ARM_ALWAYS_BX
- /* C is always clear here. */
- addne pc, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
- b 7f
-#else
- beq 7f
- push {r10}
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (r10, 0)
-0: add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
- /* If alignment is not perfect, then there will be some
- padding (nop) instructions between this BX and label 6.
- The computation above assumed that two instructions
- later is exactly the right spot. */
- add r10, #(6f - (0b + PC_OFS))
- bx r10
-#endif
- .p2align ARM_BX_ALIGN_LOG2
-6: nop
- .p2align ARM_BX_ALIGN_LOG2
- ldr r3, [r1], #4
- .p2align ARM_BX_ALIGN_LOG2
- ldr r4, [r1], #4
- .p2align ARM_BX_ALIGN_LOG2
- ldr r5, [r1], #4
- .p2align ARM_BX_ALIGN_LOG2
- ldr r6, [r1], #4
- .p2align ARM_BX_ALIGN_LOG2
- ldr r7, [r1], #4
- .p2align ARM_BX_ALIGN_LOG2
- ldr r8, [r1], #4
- .p2align ARM_BX_ALIGN_LOG2
- ldr lr, [r1], #4
-
-#ifndef ARM_ALWAYS_BX
- add pc, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
- nop
-#else
-0: add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
- /* If alignment is not perfect, then there will be some
- padding (nop) instructions between this BX and label 66.
- The computation above assumed that two instructions
- later is exactly the right spot. */
- add r10, #(66f - (0b + PC_OFS))
- bx r10
-#endif
- .p2align ARM_BX_ALIGN_LOG2
-66: nop
- .p2align ARM_BX_ALIGN_LOG2
- str r3, [r0], #4
- .p2align ARM_BX_ALIGN_LOG2
- str r4, [r0], #4
- .p2align ARM_BX_ALIGN_LOG2
- str r5, [r0], #4
- .p2align ARM_BX_ALIGN_LOG2
- str r6, [r0], #4
- .p2align ARM_BX_ALIGN_LOG2
- str r7, [r0], #4
- .p2align ARM_BX_ALIGN_LOG2
- str r8, [r0], #4
- .p2align ARM_BX_ALIGN_LOG2
- str lr, [r0], #4
-
-#ifdef ARM_ALWAYS_BX
- pop {r10}
- cfi_adjust_cfa_offset (-4)
- cfi_restore (r10)
-#endif
-
- CALGN( bcs 2b )
-
-7: pop {r5 - r8}
- cfi_adjust_cfa_offset (-16)
- cfi_restore (r5)
- cfi_restore (r6)
- cfi_restore (r7)
- cfi_restore (r8)
-
-8: movs r2, r2, lsl #31
- ldrbne r3, [r1], #1
- ldrbcs r4, [r1], #1
- ldrbcs ip, [r1]
- strbne r3, [r0], #1
- strbcs r4, [r0], #1
- strbcs ip, [r0]
-
-#if ((defined (__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)) \
- || defined (ARM_ALWAYS_BX))
- pop {r0, r4, lr}
- cfi_adjust_cfa_offset (-12)
- cfi_restore (r4)
- cfi_restore (lr)
- bx lr
-#else
- pop {r0, r4, pc}
-#endif
-
- cfi_restore_state
-
-9: rsb ip, ip, #4
- cmp ip, #2
- ldrbgt r3, [r1], #1
- ldrbge r4, [r1], #1
- ldrb lr, [r1], #1
- strbgt r3, [r0], #1
- strbge r4, [r0], #1
- subs r2, r2, ip
- strb lr, [r0], #1
- blt 8b
- ands ip, r1, #3
- beq 1b
-
-10: bic r1, r1, #3
- cmp ip, #2
- ldr lr, [r1], #4
- beq 17f
- bgt 18f
-
-
- .macro forward_copy_shift pull push
-
- subs r2, r2, #28
- blt 14f
-
- CALGN( ands ip, r1, #31 )
- CALGN( rsb ip, ip, #32 )
- CALGN( sbcsne r4, ip, r2 ) @ C is always set here
- CALGN( subcc r2, r2, ip )
- CALGN( bcc 15f )
-
-11: push {r5 - r8, r10}
- cfi_adjust_cfa_offset (20)
- cfi_rel_offset (r5, 0)
- cfi_rel_offset (r6, 4)
- cfi_rel_offset (r7, 8)
- cfi_rel_offset (r8, 12)
- cfi_rel_offset (r10, 16)
-
- PLD( pld [r1, #0] )
- PLD( subs r2, r2, #96 )
- PLD( pld [r1, #28] )
- PLD( blt 13f )
- PLD( pld [r1, #60] )
- PLD( pld [r1, #92] )
-
-12: PLD( pld [r1, #124] )
-13: ldmia r1!, {r4, r5, r6, r7}
- mov r3, lr, PULL #\pull
- subs r2, r2, #32
- ldmia r1!, {r8, r10, ip, lr}
- orr r3, r3, r4, PUSH #\push
- mov r4, r4, PULL #\pull
- orr r4, r4, r5, PUSH #\push
- mov r5, r5, PULL #\pull
- orr r5, r5, r6, PUSH #\push
- mov r6, r6, PULL #\pull
- orr r6, r6, r7, PUSH #\push
- mov r7, r7, PULL #\pull
- orr r7, r7, r8, PUSH #\push
- mov r8, r8, PULL #\pull
- orr r8, r8, r10, PUSH #\push
- mov r10, r10, PULL #\pull
- orr r10, r10, ip, PUSH #\push
- mov ip, ip, PULL #\pull
- orr ip, ip, lr, PUSH #\push
- stmia r0!, {r3, r4, r5, r6, r7, r8, r10, ip}
- bge 12b
- PLD( cmn r2, #96 )
- PLD( bge 13b )
-
- pop {r5 - r8, r10}
- cfi_adjust_cfa_offset (-20)
- cfi_restore (r5)
- cfi_restore (r6)
- cfi_restore (r7)
- cfi_restore (r8)
- cfi_restore (r10)
-
-14: ands ip, r2, #28
- beq 16f
-
-15: mov r3, lr, PULL #\pull
- ldr lr, [r1], #4
- subs ip, ip, #4
- orr r3, r3, lr, PUSH #\push
- str r3, [r0], #4
- bgt 15b
- CALGN( cmp r2, #0 )
- CALGN( bge 11b )
-
-16: sub r1, r1, #(\push / 8)
- b 8b
-
- .endm
-
-
- forward_copy_shift pull=8 push=24
-
-17: forward_copy_shift pull=16 push=16
-
-18: forward_copy_shift pull=24 push=8
-
-END(memcpy)
-libc_hidden_builtin_def (memcpy)
diff --git a/sysdeps/arm/memmove.S b/sysdeps/arm/memmove.S
deleted file mode 100644
index b18aa329d3..0000000000
--- a/sysdeps/arm/memmove.S
+++ /dev/null
@@ -1,336 +0,0 @@
-/* Copyright (C) 2006-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- Contributed by MontaVista Software, Inc. (written by Nicolas Pitre)
-
- 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/>. */
-
-/* Thumb requires excessive IT insns here. */
-#define NO_THUMB
-#include <sysdep.h>
-#include <arm-features.h>
-
-/*
- * Data preload for architectures that support it (ARM V5TE and above)
- */
-#if (!defined (__ARM_ARCH_2__) && !defined (__ARM_ARCH_3__) \
- && !defined (__ARM_ARCH_3M__) && !defined (__ARM_ARCH_4__) \
- && !defined (__ARM_ARCH_4T__) && !defined (__ARM_ARCH_5__) \
- && !defined (__ARM_ARCH_5T__))
-#define PLD(code...) code
-#else
-#define PLD(code...)
-#endif
-
-/*
- * This can be used to enable code to cacheline align the source pointer.
- * Experiments on tested architectures (StrongARM and XScale) didn't show
- * this a worthwhile thing to do. That might be different in the future.
- */
-//#define CALGN(code...) code
-#define CALGN(code...)
-
-/*
- * Endian independent macros for shifting bytes within registers.
- */
-#ifndef __ARMEB__
-#define PULL lsr
-#define PUSH lsl
-#else
-#define PULL lsl
-#define PUSH lsr
-#endif
-
- .text
- .syntax unified
-
-/*
- * Prototype: void *memmove(void *dest, const void *src, size_t n);
- *
- * Note:
- *
- * If the memory regions don't overlap, we simply branch to memcpy which is
- * normally a bit faster. Otherwise the copy is done going downwards.
- */
-
-ENTRY(memmove)
-
- subs ip, r0, r1
- cmphi r2, ip
-#if !IS_IN (libc)
- bls memcpy
-#else
- bls HIDDEN_JUMPTARGET(memcpy)
-#endif
-
- push {r0, r4, lr}
- cfi_adjust_cfa_offset (12)
- cfi_rel_offset (r4, 4)
- cfi_rel_offset (lr, 8)
-
- cfi_remember_state
-
- add r1, r1, r2
- add r0, r0, r2
- subs r2, r2, #4
- blt 8f
- ands ip, r0, #3
- PLD( pld [r1, #-4] )
- bne 9f
- ands ip, r1, #3
- bne 10f
-
-1: subs r2, r2, #(28)
- push {r5 - r8}
- cfi_adjust_cfa_offset (16)
- cfi_rel_offset (r5, 0)
- cfi_rel_offset (r6, 4)
- cfi_rel_offset (r7, 8)
- cfi_rel_offset (r8, 12)
- blt 5f
-
- CALGN( ands ip, r1, #31 )
- CALGN( sbcsne r4, ip, r2 ) @ C is always set here
- CALGN( bcs 2f )
- CALGN( adr r4, 6f )
- CALGN( subs r2, r2, ip ) @ C is set here
-#ifndef ARM_ALWAYS_BX
- CALGN( add pc, r4, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2))
-#else
- CALGN( add r4, r4, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2))
- CALGN( bx r4 )
-#endif
-
- PLD( pld [r1, #-4] )
-2: PLD( subs r2, r2, #96 )
- PLD( pld [r1, #-32] )
- PLD( blt 4f )
- PLD( pld [r1, #-64] )
- PLD( pld [r1, #-96] )
-
-3: PLD( pld [r1, #-128] )
-4: ldmdb r1!, {r3, r4, r5, r6, r7, r8, ip, lr}
- subs r2, r2, #32
- stmdb r0!, {r3, r4, r5, r6, r7, r8, ip, lr}
- bge 3b
- PLD( cmn r2, #96 )
- PLD( bge 4b )
-
-5: ands ip, r2, #28
- rsb ip, ip, #32
-#ifndef ARM_ALWAYS_BX
- /* C is always clear here. */
- addne pc, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
- b 7f
-#else
- beq 7f
- push {r10}
- cfi_adjust_cfa_offset (4)
- cfi_rel_offset (r10, 0)
-0: add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
- /* If alignment is not perfect, then there will be some
- padding (nop) instructions between this BX and label 6.
- The computation above assumed that two instructions
- later is exactly the right spot. */
- add r10, #(6f - (0b + PC_OFS))
- bx r10
-#endif
- .p2align ARM_BX_ALIGN_LOG2
-6: nop
- .p2align ARM_BX_ALIGN_LOG2
- ldr r3, [r1, #-4]!
- .p2align ARM_BX_ALIGN_LOG2
- ldr r4, [r1, #-4]!
- .p2align ARM_BX_ALIGN_LOG2
- ldr r5, [r1, #-4]!
- .p2align ARM_BX_ALIGN_LOG2
- ldr r6, [r1, #-4]!
- .p2align ARM_BX_ALIGN_LOG2
- ldr r7, [r1, #-4]!
- .p2align ARM_BX_ALIGN_LOG2
- ldr r8, [r1, #-4]!
- .p2align ARM_BX_ALIGN_LOG2
- ldr lr, [r1, #-4]!
-
-#ifndef ARM_ALWAYS_BX
- add pc, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
- nop
-#else
-0: add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2)
- /* If alignment is not perfect, then there will be some
- padding (nop) instructions between this BX and label 66.
- The computation above assumed that two instructions
- later is exactly the right spot. */
- add r10, #(66f - (0b + PC_OFS))
- bx r10
-#endif
- .p2align ARM_BX_ALIGN_LOG2
-66: nop
- .p2align ARM_BX_ALIGN_LOG2
- str r3, [r0, #-4]!
- .p2align ARM_BX_ALIGN_LOG2
- str r4, [r0, #-4]!
- .p2align ARM_BX_ALIGN_LOG2
- str r5, [r0, #-4]!
- .p2align ARM_BX_ALIGN_LOG2
- str r6, [r0, #-4]!
- .p2align ARM_BX_ALIGN_LOG2
- str r7, [r0, #-4]!
- .p2align ARM_BX_ALIGN_LOG2
- str r8, [r0, #-4]!
- .p2align ARM_BX_ALIGN_LOG2
- str lr, [r0, #-4]!
-
-#ifdef ARM_ALWAYS_BX
- pop {r10}
- cfi_adjust_cfa_offset (-4)
- cfi_restore (r10)
-#endif
-
- CALGN( bcs 2b )
-
-7: pop {r5 - r8}
- cfi_adjust_cfa_offset (-16)
- cfi_restore (r5)
- cfi_restore (r6)
- cfi_restore (r7)
- cfi_restore (r8)
-
-8: movs r2, r2, lsl #31
- ldrbne r3, [r1, #-1]!
- ldrbcs r4, [r1, #-1]!
- ldrbcs ip, [r1, #-1]
- strbne r3, [r0, #-1]!
- strbcs r4, [r0, #-1]!
- strbcs ip, [r0, #-1]
-
-#if ((defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)) \
- || defined (ARM_ALWAYS_BX))
- pop {r0, r4, lr}
- cfi_adjust_cfa_offset (-12)
- cfi_restore (r4)
- cfi_restore (lr)
- bx lr
-#else
- pop {r0, r4, pc}
-#endif
-
- cfi_restore_state
-
-9: cmp ip, #2
- ldrbgt r3, [r1, #-1]!
- ldrbge r4, [r1, #-1]!
- ldrb lr, [r1, #-1]!
- strbgt r3, [r0, #-1]!
- strbge r4, [r0, #-1]!
- subs r2, r2, ip
- strb lr, [r0, #-1]!
- blt 8b
- ands ip, r1, #3
- beq 1b
-
-10: bic r1, r1, #3
- cmp ip, #2
- ldr r3, [r1, #0]
- beq 17f
- blt 18f
-
-
- .macro backward_copy_shift push pull
-
- subs r2, r2, #28
- blt 14f
-
- CALGN( ands ip, r1, #31 )
- CALGN( rsb ip, ip, #32 )
- CALGN( sbcsne r4, ip, r2 ) @ C is always set here
- CALGN( subcc r2, r2, ip )
- CALGN( bcc 15f )
-
-11: push {r5 - r8, r10}
- cfi_adjust_cfa_offset (20)
- cfi_rel_offset (r5, 0)
- cfi_rel_offset (r6, 4)
- cfi_rel_offset (r7, 8)
- cfi_rel_offset (r8, 12)
- cfi_rel_offset (r10, 16)
-
- PLD( pld [r1, #-4] )
- PLD( subs r2, r2, #96 )
- PLD( pld [r1, #-32] )
- PLD( blt 13f )
- PLD( pld [r1, #-64] )
- PLD( pld [r1, #-96] )
-
-12: PLD( pld [r1, #-128] )
-13: ldmdb r1!, {r7, r8, r10, ip}
- mov lr, r3, PUSH #\push
- subs r2, r2, #32
- ldmdb r1!, {r3, r4, r5, r6}
- orr lr, lr, ip, PULL #\pull
- mov ip, ip, PUSH #\push
- orr ip, ip, r10, PULL #\pull
- mov r10, r10, PUSH #\push
- orr r10, r10, r8, PULL #\pull
- mov r8, r8, PUSH #\push
- orr r8, r8, r7, PULL #\pull
- mov r7, r7, PUSH #\push
- orr r7, r7, r6, PULL #\pull
- mov r6, r6, PUSH #\push
- orr r6, r6, r5, PULL #\pull
- mov r5, r5, PUSH #\push
- orr r5, r5, r4, PULL #\pull
- mov r4, r4, PUSH #\push
- orr r4, r4, r3, PULL #\pull
- stmdb r0!, {r4 - r8, r10, ip, lr}
- bge 12b
- PLD( cmn r2, #96 )
- PLD( bge 13b )
-
- pop {r5 - r8, r10}
- cfi_adjust_cfa_offset (-20)
- cfi_restore (r5)
- cfi_restore (r6)
- cfi_restore (r7)
- cfi_restore (r8)
- cfi_restore (r10)
-
-14: ands ip, r2, #28
- beq 16f
-
-15: mov lr, r3, PUSH #\push
- ldr r3, [r1, #-4]!
- subs ip, ip, #4
- orr lr, lr, r3, PULL #\pull
- str lr, [r0, #-4]!
- bgt 15b
- CALGN( cmp r2, #0 )
- CALGN( bge 11b )
-
-16: add r1, r1, #(\pull / 8)
- b 8b
-
- .endm
-
-
- backward_copy_shift push=8 pull=24
-
-17: backward_copy_shift push=16 pull=16
-
-18: backward_copy_shift push=24 pull=8
-
-
-END(memmove)
-libc_hidden_builtin_def (memmove)
diff --git a/sysdeps/arm/memset.S b/sysdeps/arm/memset.S
deleted file mode 100644
index 95946360bf..0000000000
--- a/sysdeps/arm/memset.S
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Copyright (C) 1998-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Philip Blundell <philb@gnu.org>
-
- 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/>. */
-
-/* Thumb requires excessive IT insns here. */
-#define NO_THUMB
-#include <sysdep.h>
-
- .text
- .syntax unified
-
-/* void *memset (dstpp, c, len) */
-
-ENTRY(memset)
- mov r3, r0
- cmp r2, #8
- bcc 2f @ less than 8 bytes to move
-
-1:
- tst r3, #3 @ aligned yet?
- strbne r1, [r3], #1
- subne r2, r2, #1
- bne 1b
-
- and r1, r1, #255 @ clear any sign bits
- orr r1, r1, r1, lsl $8
- orr r1, r1, r1, lsl $16
- mov ip, r1
-
-1:
- subs r2, r2, #8
- stmiacs r3!, {r1, ip} @ store up to 32 bytes per loop iteration
- subscs r2, r2, #8
- stmiacs r3!, {r1, ip}
- subscs r2, r2, #8
- stmiacs r3!, {r1, ip}
- subscs r2, r2, #8
- stmiacs r3!, {r1, ip}
- bcs 1b
-
- and r2, r2, #7
-2:
- subs r2, r2, #1 @ store up to 4 bytes per loop iteration
- strbcs r1, [r3], #1
- subscs r2, r2, #1
- strbcs r1, [r3], #1
- subscs r2, r2, #1
- strbcs r1, [r3], #1
- subscs r2, r2, #1
- strbcs r1, [r3], #1
- bcs 2b
-
- DO_RET(lr)
-END(memset)
-libc_hidden_builtin_def (memset)
diff --git a/sysdeps/arm/memusage.h b/sysdeps/arm/memusage.h
deleted file mode 100644
index 7592202fc3..0000000000
--- a/sysdeps/arm/memusage.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Copyright (C) 2000-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/arm/nptl-aeabi_unwind_cpp_pr1.c b/sysdeps/arm/nptl-aeabi_unwind_cpp_pr1.c
deleted file mode 100644
index 7b83522437..0000000000
--- a/sysdeps/arm/nptl-aeabi_unwind_cpp_pr1.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <aeabi_unwind_cpp_pr1.c>
diff --git a/sysdeps/arm/nptl/Makefile b/sysdeps/arm/nptl/Makefile
deleted file mode 100644
index 34eec51bc1..0000000000
--- a/sysdeps/arm/nptl/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (C) 2005-2017 Free Software Foundation, Inc.
-# This file is part of the GNU C Library.
-#
-# The GNU C Library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# The GNU C Library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with the GNU C Library. If not, see
-# <http://www.gnu.org/licenses/>.
-
-ifeq ($(subdir),csu)
-gen-as-const-headers += tcb-offsets.sym
-endif
-
-ifeq ($(subdir),nptl)
-libpthread-sysdep_routines += nptl-aeabi_unwind_cpp_pr1
-libpthread-shared-only-routines += nptl-aeabi_unwind_cpp_pr1
-
-# This test relies on compiling part of the binary with EH information,
-# part without, and unwinding through. The .ARM.exidx tables have
-# start addresses for EH regions, but no end addresses. Every
-# region an exception needs to propogate through must have unwind
-# information, or a previous function's unwind table may be used
-# by mistake.
-tests := $(filter-out tst-cleanupx4,$(tests))
-endif
diff --git a/sysdeps/arm/nptl/bits/pthreadtypes-arch.h b/sysdeps/arm/nptl/bits/pthreadtypes-arch.h
deleted file mode 100644
index 3f9eca4645..0000000000
--- a/sysdeps/arm/nptl/bits/pthreadtypes-arch.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _BITS_PTHREADTYPES_ARCH_H
-#define _BITS_PTHREADTYPES_ARCH_H 1
-
-#include <endian.h>
-
-#define __SIZEOF_PTHREAD_ATTR_T 36
-#define __SIZEOF_PTHREAD_MUTEX_T 24
-#define __SIZEOF_PTHREAD_MUTEXATTR_T 4
-#define __SIZEOF_PTHREAD_COND_T 48
-#define __SIZEOF_PTHREAD_CONDATTR_T 4
-#define __SIZEOF_PTHREAD_RWLOCK_T 32
-#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
-#define __SIZEOF_PTHREAD_BARRIER_T 20
-#define __SIZEOF_PTHREAD_BARRIERATTR_T 4
-
-/* Data structure for mutex handling. */
-#define __PTHREAD_COMPAT_PADDING_MID
-#define __PTHREAD_COMPAT_PADDING_END
-#define __PTHREAD_MUTEX_LOCK_ELISION 0
-
-#define __LOCK_ALIGNMENT
-#define __ONCE_ALIGNMENT
-
-struct __pthread_rwlock_arch_t
-{
- unsigned int __readers;
- unsigned int __writers;
- unsigned int __wrphase_futex;
- unsigned int __writers_futex;
- unsigned int __pad3;
- unsigned int __pad4;
-#if __BYTE_ORDER == __BIG_ENDIAN
- unsigned char __pad1;
- unsigned char __pad2;
- unsigned char __shared;
- /* FLAGS must stay at this position in the structure to maintain
- binary compatibility. */
- unsigned char __flags;
-#else
- /* FLAGS must stay at this position in the structure to maintain
- binary compatibility. */
- unsigned char __flags;
- unsigned char __shared;
- unsigned char __pad1;
- unsigned char __pad2;
-#endif
- int __cur_writer;
-};
-
-#define __PTHREAD_RWLOCK_ELISION_EXTRA 0
-
-#endif /* bits/pthreadtypes.h */
diff --git a/sysdeps/arm/nptl/bits/semaphore.h b/sysdeps/arm/nptl/bits/semaphore.h
deleted file mode 100644
index 0b0844994b..0000000000
--- a/sysdeps/arm/nptl/bits/semaphore.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _SEMAPHORE_H
-# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
-#endif
-
-
-#define __SIZEOF_SEM_T 16
-
-
-/* Value returned if `sem_open' failed. */
-#define SEM_FAILED ((sem_t *) 0)
-
-
-typedef union
-{
- char __size[__SIZEOF_SEM_T];
- long int __align;
-} sem_t;
diff --git a/sysdeps/arm/nptl/pthreaddef.h b/sysdeps/arm/nptl/pthreaddef.h
deleted file mode 100644
index f69e0ffa65..0000000000
--- a/sysdeps/arm/nptl/pthreaddef.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* Default stack size. */
-#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024)
-
-/* Required stack pointer alignment at beginning. SSE requires 16
- bytes. */
-#define STACK_ALIGN 16
-
-/* Minimal stack size after allocating thread descriptor and guard size. */
-#define MINIMAL_REST_STACK 2048
-
-/* Alignment requirement for TCB. */
-#define TCB_ALIGNMENT 16
-
-
-/* Location of current stack frame.
-
- __builtin_frame_address (0) returns the value of the hard frame
- pointer, which will point at the location of the saved PC on the
- stack. Below this in memory is the remainder of the linkage info,
- occupying 12 bytes. Therefore in order to address from
- CURRENT_STACK_FRAME using "struct layout", we need to have the macro
- return the hard FP minus 12. Of course, this makes no sense
- without the obsolete APCS stack layout... */
-#define CURRENT_STACK_FRAME (__builtin_frame_address (0) - 12)
diff --git a/sysdeps/arm/nptl/tcb-offsets.sym b/sysdeps/arm/nptl/tcb-offsets.sym
deleted file mode 100644
index bf9c0a1c17..0000000000
--- a/sysdeps/arm/nptl/tcb-offsets.sym
+++ /dev/null
@@ -1,10 +0,0 @@
-#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 thread_offsetof (header.multiple_threads)
-TID_OFFSET thread_offsetof (tid)
diff --git a/sysdeps/arm/nptl/tls.h b/sysdeps/arm/nptl/tls.h
deleted file mode 100644
index 43e9164897..0000000000
--- a/sysdeps/arm/nptl/tls.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Definition for thread-local data handling. NPTL/ARM version.
- Copyright (C) 2005-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _ARM_NPTL_TLS_H
-#define _ARM_NPTL_TLS_H 1
-
-#include <dl-sysdep.h>
-
-#ifndef __ASSEMBLER__
-# include <stdbool.h>
-# include <stddef.h>
-# include <stdint.h>
-# include <dl-dtv.h>
-
-#else /* __ASSEMBLER__ */
-# include <tcb-offsets.h>
-#endif /* __ASSEMBLER__ */
-
-
-#ifndef __ASSEMBLER__
-
-/* The TP points to the start of the thread blocks. */
-# 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;
- void *private;
-} tcbhead_t;
-
-/* 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 16
-
-/* This is the size of the TCB. */
-# define TLS_TCB_SIZE sizeof (tcbhead_t)
-
-/* This is the size we need before TCB. */
-# define TLS_PRE_TCB_SIZE sizeof (struct pthread)
-
-/* Alignment requirements for the TCB. */
-# define TLS_TCB_ALIGN 16
-
-/* 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)
-
-# 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_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) ()
-
-#endif /* __ASSEMBLER__ */
-
-#endif /* tls.h */
diff --git a/sysdeps/arm/preconfigure b/sysdeps/arm/preconfigure
deleted file mode 100644
index 33e9501c4f..0000000000
--- a/sysdeps/arm/preconfigure
+++ /dev/null
@@ -1,55 +0,0 @@
-# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
- # Local preconfigure fragment for sysdeps/arm
-
-case "$machine" in
-arm*)
- # If the compiler enables unwind tables by default, this causes
- # problems with undefined symbols in -nostdlib link tests. To
- # avoid this, add -fno-unwind-tables here and remove it in
- # sysdeps/arm/configure.ac after those tests have been run.
- if test "${CFLAGS+set}" != "set"; then
- CFLAGS="-g -O2"
- fi
- CFLAGS="$CFLAGS -fno-unwind-tables"
-
- base_machine=arm
- # Lets ask the compiler which ARM family we've got
- # Unfortunately it doesn't define any flags for implementations
- # that you might pass to -mcpu or -mtune
- # Note if you add patterns here you must ensure that
- # an appropriate directory exists in sysdeps/arm
- archcppflag=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null |
- sed -n 's/^#define \(__ARM_ARCH_[0-9].*__\) .*$/\1/p'`
-
- case "x$archcppflag" in
- x__ARM_ARCH_89*__)
- machine=armv7
- { $as_echo "$as_me:${as_lineno-$LINENO}: Found compiler is configured for something newer than v7 - using v7" >&5
-$as_echo "$as_me: Found compiler is configured for something newer than v7 - using v7" >&6;}
- ;;
-
- x__ARM_ARCH_7A__)
- machine=armv7
- { $as_echo "$as_me:${as_lineno-$LINENO}: Found compiler is configured for $machine" >&5
-$as_echo "$as_me: Found compiler is configured for $machine" >&6;}
- ;;
-
- x__ARM_ARCH_6T2__)
- machine=armv6t2
- { $as_echo "$as_me:${as_lineno-$LINENO}: Found compiler is configured for $machine" >&5
-$as_echo "$as_me: Found compiler is configured for $machine" >&6;}
- ;;
- x__ARM_ARCH_6*__)
- machine=armv6
- { $as_echo "$as_me:${as_lineno-$LINENO}: Found compiler is configured for $machine" >&5
-$as_echo "$as_me: Found compiler is configured for $machine" >&6;}
- ;;
- *)
- machine=arm
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: arm/preconfigure: Did not find ARM architecture type; using default" >&5
-$as_echo "$as_me: WARNING: arm/preconfigure: Did not find ARM architecture type; using default" >&2;}
- ;;
- esac
-
- machine=arm/$machine
-esac
diff --git a/sysdeps/arm/preconfigure.ac b/sysdeps/arm/preconfigure.ac
deleted file mode 100644
index 20de5bcfea..0000000000
--- a/sysdeps/arm/preconfigure.ac
+++ /dev/null
@@ -1,50 +0,0 @@
-GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local preconfigure fragment for sysdeps/arm
-
-case "$machine" in
-arm*)
- # If the compiler enables unwind tables by default, this causes
- # problems with undefined symbols in -nostdlib link tests. To
- # avoid this, add -fno-unwind-tables here and remove it in
- # sysdeps/arm/configure.ac after those tests have been run.
- if test "${CFLAGS+set}" != "set"; then
- CFLAGS="-g -O2"
- fi
- CFLAGS="$CFLAGS -fno-unwind-tables"
-
- base_machine=arm
- # Lets ask the compiler which ARM family we've got
- # Unfortunately it doesn't define any flags for implementations
- # that you might pass to -mcpu or -mtune
- # Note if you add patterns here you must ensure that
- # an appropriate directory exists in sysdeps/arm
- archcppflag=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null |
- sed -n 's/^#define \(__ARM_ARCH_[0-9].*__\) .*$/\1/p'`
-
- case "x$archcppflag" in
- x__ARM_ARCH_[89]*__)
- machine=armv7
- AC_MSG_NOTICE([Found compiler is configured for something newer than v7 - using v7])
- ;;
-
- x__ARM_ARCH_7A__)
- machine=armv7
- AC_MSG_NOTICE([Found compiler is configured for $machine])
- ;;
-
- x__ARM_ARCH_6T2__)
- machine=armv6t2
- AC_MSG_NOTICE([Found compiler is configured for $machine])
- ;;
- x__ARM_ARCH_6*__)
- machine=armv6
- AC_MSG_NOTICE([Found compiler is configured for $machine])
- ;;
- *)
- machine=arm
- AC_MSG_WARN([arm/preconfigure: Did not find ARM architecture type; using default])
- ;;
- esac
-
- machine=arm/$machine
-esac
diff --git a/sysdeps/arm/pt-arm-unwind-resume.S b/sysdeps/arm/pt-arm-unwind-resume.S
deleted file mode 100644
index 7cb555c02b..0000000000
--- a/sysdeps/arm/pt-arm-unwind-resume.S
+++ /dev/null
@@ -1,2 +0,0 @@
-#define __libgcc_s_init pthread_cancel_init
-#include <arm-unwind-resume.S>
diff --git a/sysdeps/arm/rt-aeabi_unwind_cpp_pr1.c b/sysdeps/arm/rt-aeabi_unwind_cpp_pr1.c
deleted file mode 100644
index 7b83522437..0000000000
--- a/sysdeps/arm/rt-aeabi_unwind_cpp_pr1.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <aeabi_unwind_cpp_pr1.c>
diff --git a/sysdeps/arm/rt-arm-unwind-resume.S b/sysdeps/arm/rt-arm-unwind-resume.S
deleted file mode 100644
index 9144b0ce88..0000000000
--- a/sysdeps/arm/rt-arm-unwind-resume.S
+++ /dev/null
@@ -1 +0,0 @@
-#include <arm-unwind-resume.S>
diff --git a/sysdeps/arm/rtld-global-offsets.sym b/sysdeps/arm/rtld-global-offsets.sym
deleted file mode 100644
index ff4e97f2a6..0000000000
--- a/sysdeps/arm/rtld-global-offsets.sym
+++ /dev/null
@@ -1,7 +0,0 @@
-#define SHARED 1
-
-#include <ldsodefs.h>
-
-#define rtld_global_ro_offsetof(mem) offsetof (struct rtld_global_ro, mem)
-
-RTLD_GLOBAL_RO_DL_HWCAP_OFFSET rtld_global_ro_offsetof (_dl_hwcap)
diff --git a/sysdeps/arm/s_fma.c b/sysdeps/arm/s_fma.c
deleted file mode 100644
index dc4e27bfc1..0000000000
--- a/sysdeps/arm/s_fma.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifdef __SOFTFP__
-# include <soft-fp/fmadf4.c>
-#else
-# include <sysdeps/ieee754/dbl-64/s_fma.c>
-#endif
diff --git a/sysdeps/arm/s_fmaf.c b/sysdeps/arm/s_fmaf.c
deleted file mode 100644
index 550d8b85d3..0000000000
--- a/sysdeps/arm/s_fmaf.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifdef __SOFTFP__
-# include <soft-fp/fmasf4.c>
-#else
-# include <sysdeps/ieee754/dbl-64/s_fmaf.c>
-#endif
diff --git a/sysdeps/arm/setfpucw.c b/sysdeps/arm/setfpucw.c
deleted file mode 100644
index e6c075e620..0000000000
--- a/sysdeps/arm/setfpucw.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Set the FPU control word.
- Copyright (C) 1996-2017 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 <math.h>
-#include <fpu_control.h>
-#include <arm-features.h>
-
-
-void
-__setfpucw (fpu_control_t set)
-{
- fpu_control_t fpscr, new_fpscr;
-
- /* Do nothing if a VFP unit isn't present. */
- if (!ARM_HAVE_VFP)
- return;
-
- _FPU_GETCW (fpscr);
-
- /* Preserve the reserved bits, and set the rest as the user
- specified (or the default, if the user gave zero). */
- new_fpscr = fpscr & _FPU_RESERVED;
- new_fpscr |= set & ~_FPU_RESERVED;
-
- /* Write FPSCR if changed. */
- if (new_fpscr != fpscr)
- _FPU_SETCW (fpscr);
-}
diff --git a/sysdeps/arm/setjmp.S b/sysdeps/arm/setjmp.S
deleted file mode 100644
index 2235890936..0000000000
--- a/sysdeps/arm/setjmp.S
+++ /dev/null
@@ -1,101 +0,0 @@
-/* setjmp for ARM.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-#include <stap-probe.h>
-#include <bits/setjmp.h>
-#include <rtld-global-offsets.h>
-#include <arm-features.h>
-
-ENTRY (__sigsetjmp)
-#ifdef PTR_MANGLE
- PTR_MANGLE_LOAD (a3, ip)
-#endif
- mov ip, r0
-
- /* setjmp probe expects sigsetjmp first argument (4@r0), second
- argument (-4@r1), and target address (4@r14), respectively. */
- LIBC_PROBE (setjmp, 3, 4@r0, -4@r1, 4@r14)
-
- /* Save sp and lr */
-#ifdef PTR_MANGLE
- mov a4, sp
- PTR_MANGLE2 (a4, a4, a3)
- str a4, [ip], #4
- PTR_MANGLE2 (a4, lr, a3)
- str a4, [ip], #4
-#else
- str sp, [ip], #4
- str lr, [ip], #4
-#endif
- /* Save registers */
- stmia ip!, JMP_BUF_REGLIST
-
-#if !defined ARM_ASSUME_NO_IWMMXT || defined __SOFTFP__
-# define NEED_HWCAP 1
-#endif
-
-#ifdef NEED_HWCAP
- /* Check if we have a VFP unit. */
-# if IS_IN (rtld)
- LDST_PCREL (ldr, a3, a4, \
- C_SYMBOL_NAME(_rtld_local_ro) \
- + RTLD_GLOBAL_RO_DL_HWCAP_OFFSET)
-# else
-# ifdef SHARED
- LDR_GLOBAL (a3, a4, C_SYMBOL_NAME(_rtld_global_ro), \
- RTLD_GLOBAL_RO_DL_HWCAP_OFFSET)
-# else
- LDR_GLOBAL (a3, a4, C_SYMBOL_NAME(_dl_hwcap), 0)
-# endif
-# endif
-#endif
-
-#ifdef __SOFTFP__
- tst a3, #HWCAP_ARM_VFP
- beq .Lno_vfp
-#endif
-
- /* Store the VFP registers.
- Don't use VFP instructions directly because this code
- is used in non-VFP multilibs. */
- /* Following instruction is vstmia ip!, {d8-d15}. */
- stc p11, cr8, [ip], #64
-.Lno_vfp:
-
-#ifndef ARM_ASSUME_NO_IWMMXT
- tst a3, #HWCAP_ARM_IWMMXT
- beq .Lno_iwmmxt
-
- /* Save the call-preserved iWMMXt registers. */
- /* Following instructions are wstrd wr10, [ip], #8 (etc.) */
- stcl p1, cr10, [r12], #8
- stcl p1, cr11, [r12], #8
- stcl p1, cr12, [r12], #8
- stcl p1, cr13, [r12], #8
- stcl p1, cr14, [r12], #8
- stcl p1, cr15, [r12], #8
-.Lno_iwmmxt:
-#endif
-
- /* Make a tail call to __sigjmp_save; it takes the same args. */
- B PLTJMP(C_SYMBOL_NAME(__sigjmp_save))
-
-END (__sigsetjmp)
-
-hidden_def (__sigsetjmp)
diff --git a/sysdeps/arm/sfp-machine.h b/sysdeps/arm/sfp-machine.h
deleted file mode 100644
index 2e7c156294..0000000000
--- a/sysdeps/arm/sfp-machine.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#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
-#define _FP_NANFRAC_D _FP_QNANBIT_D, 0
-#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0
-#define _FP_NANSIGN_S 0
-#define _FP_NANSIGN_D 0
-#define _FP_NANSIGN_Q 0
-
-#define _FP_KEEPNANFRACP 1
-#define _FP_QNANNEGATEDP 0
-
-/* Someone please check this. */
-#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
- do { \
- if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
- && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
- { \
- R##_s = Y##_s; \
- _FP_FRAC_COPY_##wc(R,Y); \
- } \
- else \
- { \
- R##_s = X##_s; \
- _FP_FRAC_COPY_##wc(R,X); \
- } \
- R##_c = FP_CLS_NAN; \
- } while (0)
-
-#define _FP_TININESS_AFTER_ROUNDING 0
diff --git a/sysdeps/arm/sotruss-lib.c b/sysdeps/arm/sotruss-lib.c
deleted file mode 100644
index 467bb26f38..0000000000
--- a/sysdeps/arm/sotruss-lib.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Override generic sotruss-lib.c to define actual functions for ARM.
- Copyright (C) 2012-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#define HAVE_ARCH_PLTENTER
-#define HAVE_ARCH_PLTEXIT
-
-#include <elf/sotruss-lib.c>
-
-ElfW(Addr)
-la_arm_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)),
- unsigned int ndx __attribute__ ((unused)),
- uintptr_t *refcook, uintptr_t *defcook,
- La_arm_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_arm_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
- uintptr_t *defcook, const struct La_arm_regs *inregs,
- struct La_arm_retval *outregs, const char *symname)
-{
- print_exit (refcook, defcook, symname, outregs->lrv_reg[0]);
-
- return 0;
-}
diff --git a/sysdeps/arm/stackinfo.h b/sysdeps/arm/stackinfo.h
deleted file mode 100644
index 8cec761ab8..0000000000
--- a/sysdeps/arm/stackinfo.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright (C) 2001-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This file contains a bit of information about the stack allocation
- of the processor. */
-
-#ifndef _STACKINFO_H
-#define _STACKINFO_H 1
-
-#include <elf.h>
-
-/* On Arm the stack grows down. */
-#define _STACK_GROWS_DOWN 1
-
-/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is
- * present, but it is presumed absent. */
-#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X)
-
-#endif /* stackinfo.h */
diff --git a/sysdeps/arm/start.S b/sysdeps/arm/start.S
deleted file mode 100644
index 4973878f05..0000000000
--- a/sysdeps/arm/start.S
+++ /dev/null
@@ -1,148 +0,0 @@
-/* Startup code for ARM & ELF
- Copyright (C) 1995-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- In addition to the permissions in the GNU Lesser General Public
- License, the Free Software Foundation gives you unlimited
- permission to link the compiled version of this file with other
- programs, and to distribute those programs without any restriction
- coming from the use of this file. (The GNU Lesser General Public
- License restrictions do apply in other respects; for example, they
- cover modification of the file, and distribution when not linked
- into another program.)
-
- Note that people who make modified versions of this file are not
- obligated to grant this special exception for their modified
- versions; it is their choice whether to do so. The GNU Lesser
- General Public License gives permission to release a modified
- version without this exception; this exception also makes it
- possible to release a modified version which carries forward this
- exception.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This is the canonical entry point, usually the first thing in the text
- segment.
-
- Note that the code in the .init section has already been run.
- This includes _init and _libc_init
-
-
- At this entry point, most registers' values are unspecified, except:
-
- a1 Contains a function pointer to be registered with `atexit'.
- This is how the dynamic linker arranges to have DT_FINI
- functions called for shared libraries that have been loaded
- before this code runs.
-
- sp The stack contains the arguments and environment:
- 0(sp) argc
- 4(sp) argv[0]
- ...
- (4*argc)(sp) NULL
- (4*(argc+1))(sp) envp[0]
- ...
- NULL
-*/
-
-/* Tag_ABI_align8_preserved: This code preserves 8-byte
- alignment in any callee. */
- .eabi_attribute 25, 1
-/* Tag_ABI_align8_needed: This code may require 8-byte alignment from
- the caller. */
- .eabi_attribute 24, 1
-
-#if defined(__thumb2__)
- .thumb
- .syntax unified
-#endif
-
- .text
- .globl _start
- .type _start,#function
-_start:
- /* Protect against unhandled exceptions. */
- .fnstart
- /* Clear the frame pointer and link register since this is the outermost frame. */
- mov fp, #0
- mov lr, #0
-
- /* Pop argc off the stack and save a pointer to argv */
- pop { a2 }
- mov a3, sp
-
- /* Push stack limit */
- push { a3 }
-
- /* Push rtld_fini */
- push { a1 }
-
-#ifdef SHARED
- ldr sl, .L_GOT
- adr a4, .L_GOT
- add sl, sl, a4
-
- ldr ip, .L_GOT+4 /* __libc_csu_fini */
- ldr ip, [sl, ip]
-
- push { ip } /* Push __libc_csu_fini */
-
- ldr a4, .L_GOT+8 /* __libc_csu_init */
- ldr a4, [sl, a4]
-
- ldr a1, .L_GOT+12 /* main */
- ldr a1, [sl, a1]
-
- /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end) */
- /* Let the libc call main and exit with its return code. */
- bl __libc_start_main(PLT)
-#else
- /* Fetch address of __libc_csu_fini */
- ldr ip, =__libc_csu_fini
-
- /* Push __libc_csu_fini */
- push { ip }
-
- /* Set up the other arguments in registers */
- ldr a1, =main
- ldr a4, =__libc_csu_init
-
- /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, stack_end) */
- /* Let the libc call main and exit with its return code. */
- bl __libc_start_main
-#endif
-
- /* should never get here....*/
- bl abort
-
-#ifdef SHARED
- .align 2
-.L_GOT:
- .word _GLOBAL_OFFSET_TABLE_ - .L_GOT
- .word __libc_csu_fini(GOT)
- .word __libc_csu_init(GOT)
- .word main(GOT)
-#endif
-
- .cantunwind
- .fnend
-
-/* 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/arm/static-stubs.c b/sysdeps/arm/static-stubs.c
deleted file mode 100644
index d90d603a95..0000000000
--- a/sysdeps/arm/static-stubs.c
+++ /dev/null
@@ -1,7 +0,0 @@
-/* When building with GCC with static-only libgcc, the dummy
- _Unwind_Resume from static-stubs.c needs to be used together with
- the dummy __aeabi_unwind_cpp_pr* from aeabi_unwind_cpp_pr1.c
- instead of the copies from libgcc. */
-
-#include <elf/static-stubs.c>
-#include <aeabi_unwind_cpp_pr1.c>
diff --git a/sysdeps/arm/strlen.S b/sysdeps/arm/strlen.S
deleted file mode 100644
index fb1589bbe6..0000000000
--- a/sysdeps/arm/strlen.S
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Copyright (C) 1998-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Code contributed by Matthew Wilcox <willy@odie.barnet.ac.uk>
-
- 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/>. */
-
-/* Thumb requires excessive IT insns here. */
-#define NO_THUMB
-#include <sysdep.h>
-
-/* size_t strlen(const char *S)
- * entry: r0 -> string
- * exit: r0 = len
- */
-
- .syntax unified
- .text
-
-ENTRY(strlen)
- bic r1, r0, $3 @ addr of word containing first byte
- ldr r2, [r1], $4 @ get the first word
- ands r3, r0, $3 @ how many bytes are duff?
- rsb r0, r3, $0 @ get - that number into counter.
- beq Laligned @ skip into main check routine if no
- @ more
-#ifdef __ARMEB__
- orr r2, r2, $0xff000000 @ set this byte to non-zero
- subs r3, r3, $1 @ any more to do?
- orrgt r2, r2, $0x00ff0000 @ if so, set this byte
- subs r3, r3, $1 @ more?
- orrgt r2, r2, $0x0000ff00 @ then set.
-#else
- orr r2, r2, $0x000000ff @ set this byte to non-zero
- subs r3, r3, $1 @ any more to do?
- orrgt r2, r2, $0x0000ff00 @ if so, set this byte
- subs r3, r3, $1 @ more?
- orrgt r2, r2, $0x00ff0000 @ then set.
-#endif
-Laligned: @ here, we have a word in r2. Does it
- tst r2, $0x000000ff @ contain any zeroes?
- tstne r2, $0x0000ff00 @
- tstne r2, $0x00ff0000 @
- tstne r2, $0xff000000 @
- addne r0, r0, $4 @ if not, the string is 4 bytes longer
- ldrne r2, [r1], $4 @ and we continue to the next word
- bne Laligned @
-Llastword: @ drop through to here once we find a
-#ifdef __ARMEB__
- tst r2, $0xff000000 @ word that has a zero byte in it
- addne r0, r0, $1 @
- tstne r2, $0x00ff0000 @ and add up to 3 bytes on to it
- addne r0, r0, $1 @
- tstne r2, $0x0000ff00 @ (if first three all non-zero, 4th
- addne r0, r0, $1 @ must be zero)
-#else
- tst r2, $0x000000ff @ word that has a zero byte in it
- addne r0, r0, $1 @
- tstne r2, $0x0000ff00 @ and add up to 3 bytes on to it
- addne r0, r0, $1 @
- tstne r2, $0x00ff0000 @ (if first three all non-zero, 4th
- addne r0, r0, $1 @ must be zero)
-#endif
- DO_RET(lr)
-END(strlen)
-libc_hidden_builtin_def (strlen)
diff --git a/sysdeps/arm/sub_n.S b/sysdeps/arm/sub_n.S
deleted file mode 100644
index 8eafa41e64..0000000000
--- a/sysdeps/arm/sub_n.S
+++ /dev/null
@@ -1,2 +0,0 @@
-#define USE_AS_SUB_N
-#include "add_n.S"
diff --git a/sysdeps/arm/submul_1.S b/sysdeps/arm/submul_1.S
deleted file mode 100644
index 24d39d93b8..0000000000
--- a/sysdeps/arm/submul_1.S
+++ /dev/null
@@ -1,68 +0,0 @@
-/* mpn_submul_1 -- multiply and subtract bignums.
- Copyright (C) 2013-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .syntax unified
- .text
-
-@ cycles/limb
-@ StrongArm ?
-@ Cortex-A8 ?
-@ Cortex-A9 ?
-@ Cortex-A15 4
-
-/* mp_limb_t mpn_submul_1(res_ptr, src1_ptr, size, s2_limb) */
-
-ENTRY (__mpn_submul_1)
- push { r4, r5, r6, r7 }
- cfi_adjust_cfa_offset (16)
- cfi_rel_offset (r4, 0)
- cfi_rel_offset (r5, 4)
- cfi_rel_offset (r6, 8)
- cfi_rel_offset (r7, 12)
-
- ldr r6, [r1], #4
- ldr r7, [r0]
- mov r4, #0 /* init carry in */
- b 1f
-0:
- ldr r6, [r1], #4 /* load next ul */
- adds r5, r5, r4 /* (lpl, c) = lpl + cl */
- adc r4, ip, #0 /* cl = hpl + c */
- subs r5, r7, r5 /* (lpl, !c) = rl - lpl */
- ldr r7, [r0, #4] /* load next rl */
- it cc
- addcc r4, r4, #1 /* cl += !c */
- str r5, [r0], #4
-1:
- umull r5, ip, r6, r3 /* (hpl, lpl) = ul * vl */
- subs r2, r2, #1
- bne 0b
-
- adds r5, r5, r4 /* (lpl, c) = lpl + cl */
- adc r4, ip, #0 /* cl = hpl + c */
- subs r5, r7, r5 /* (lpl, !c) = rl - lpl */
- str r5, [r0], #4
- it cc
- addcc r4, r4, #1 /* cl += !c */
- mov r0, r4 /* return carry */
-
- pop { r4, r5, r6, r7 }
- DO_RET (lr)
-END (__mpn_submul_1)
diff --git a/sysdeps/arm/sys/ucontext.h b/sysdeps/arm/sys/ucontext.h
deleted file mode 100644
index 722300a7f1..0000000000
--- a/sysdeps/arm/sys/ucontext.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Copyright (C) 1998-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* System V/ARM 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/sigcontext.h>
-#include <bits/types/stack_t.h>
-
-
-typedef int greg_t;
-
-/* Number of general registers. */
-#define __NGREG 16
-#ifdef __USE_MISC
-# define NGREG __NGREG
-#endif
-
-/* Container for all general registers. */
-typedef greg_t gregset_t[__NGREG];
-
-#ifdef __USE_MISC
-/* Number of each register is the `gregset_t' array. */
-enum
-{
- R0 = 0,
-# define R0 R0
- R1 = 1,
-# define R1 R1
- R2 = 2,
-# define R2 R2
- R3 = 3,
-# define R3 R3
- R4 = 4,
-# define R4 R4
- R5 = 5,
-# define R5 R5
- R6 = 6,
-# define R6 R6
- R7 = 7,
-# define R7 R7
- R8 = 8,
-# define R8 R8
- R9 = 9,
-# define R9 R9
- R10 = 10,
-# define R10 R10
- R11 = 11,
-# define R11 R11
- R12 = 12,
-# define R12 R12
- R13 = 13,
-# define R13 R13
- R14 = 14,
-# define R14 R14
- R15 = 15,
-# define R15 R15
-};
-#endif
-
-#ifdef __USE_MISC
-# define __ctx(fld) fld
-#else
-# define __ctx(fld) __ ## fld
-#endif
-
-/* Structure to describe FPU registers. */
-typedef struct fpregset
- {
- } fpregset_t;
-
-/* Context to describe whole processor state. */
-typedef struct
- {
- gregset_t __ctx(gregs);
- fpregset_t __ctx(fpregs);
- } mcontext_t;
-
-#undef __ctx
-
-/* Userlevel context. */
-typedef struct ucontext
- {
- unsigned long int uc_flags;
- struct ucontext *uc_link;
- sigset_t uc_sigmask;
- stack_t uc_stack;
- mcontext_t uc_mcontext;
- long int uc_filler[5];
- } ucontext_t;
-
-#endif /* sys/ucontext.h */
diff --git a/sysdeps/arm/sysdep.h b/sysdeps/arm/sysdep.h
deleted file mode 100644
index 6d60c34df1..0000000000
--- a/sysdeps/arm/sysdep.h
+++ /dev/null
@@ -1,339 +0,0 @@
-/* Assembler macros for ARM.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdeps/generic/sysdep.h>
-#include <features.h>
-
-#ifndef __ASSEMBLER__
-# include <stdint.h>
-#else
-# include <arm-features.h>
-#endif
-
-/* The __ARM_ARCH define is provided by gcc 4.8. Construct it otherwise. */
-#ifndef __ARM_ARCH
-# ifdef __ARM_ARCH_2__
-# define __ARM_ARCH 2
-# elif defined (__ARM_ARCH_3__) || defined (__ARM_ARCH_3M__)
-# define __ARM_ARCH 3
-# elif defined (__ARM_ARCH_4__) || defined (__ARM_ARCH_4T__)
-# define __ARM_ARCH 4
-# elif defined (__ARM_ARCH_5__) || defined (__ARM_ARCH_5E__) \
- || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__) \
- || defined(__ARM_ARCH_5TEJ__)
-# define __ARM_ARCH 5
-# elif defined (__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
- || defined (__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \
- || defined (__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__)
-# define __ARM_ARCH 6
-# elif defined (__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
- || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
- || defined(__ARM_ARCH_7EM__)
-# define __ARM_ARCH 7
-# else
-# error unknown arm architecture
-# endif
-#endif
-
-#if __ARM_ARCH > 4 || defined (__ARM_ARCH_4T__)
-# define ARCH_HAS_BX
-#endif
-#if __ARM_ARCH > 4
-# define ARCH_HAS_BLX
-#endif
-#if __ARM_ARCH > 6 || defined (__ARM_ARCH_6K__) || defined (__ARM_ARCH_6ZK__)
-# define ARCH_HAS_HARD_TP
-#endif
-#if __ARM_ARCH > 6 || defined (__ARM_ARCH_6T2__)
-# define ARCH_HAS_T2
-#endif
-
-#ifdef __ASSEMBLER__
-
-/* Syntactic details of assembler. */
-
-#define ALIGNARG(log2) log2
-#define ASM_SIZE_DIRECTIVE(name) .size name,.-name
-
-#define PLTJMP(_x) _x##(PLT)
-
-#ifdef ARCH_HAS_BX
-# define BX(R) bx R
-# define BXC(C, R) bx##C R
-# ifdef ARCH_HAS_BLX
-# define BLX(R) blx R
-# else
-# define BLX(R) mov lr, pc; bx R
-# endif
-#else
-# define BX(R) mov pc, R
-# define BXC(C, R) mov##C pc, R
-# define BLX(R) mov lr, pc; mov pc, R
-#endif
-
-#define DO_RET(R) BX(R)
-#define RETINSTR(C, R) BXC(C, R)
-
-/* Define an entry point visible from C. */
-#define ENTRY(name) \
- .globl C_SYMBOL_NAME(name); \
- .type C_SYMBOL_NAME(name),%function; \
- .align ALIGNARG(4); \
- C_LABEL(name) \
- CFI_SECTIONS; \
- cfi_startproc; \
- CALL_MCOUNT
-
-#define CFI_SECTIONS \
- .cfi_sections .debug_frame
-
-#undef END
-#define END(name) \
- cfi_endproc; \
- ASM_SIZE_DIRECTIVE(name)
-
-/* If compiled for profiling, call `mcount' at the start of each function. */
-#ifdef PROF
-/* Call __gnu_mcount_nc (GCC >= 4.4). */
-#define CALL_MCOUNT \
- push {lr}; \
- cfi_adjust_cfa_offset (4); \
- cfi_rel_offset (lr, 0); \
- bl PLTJMP(mcount); \
- cfi_adjust_cfa_offset (-4); \
- cfi_restore (lr)
-#else
-#define CALL_MCOUNT /* Do nothing. */
-#endif
-
-/* Since C identifiers are not normally prefixed with an underscore
- on this system, the asm identifier `syscall_error' intrudes on the
- C name space. Make sure we use an innocuous name. */
-#define syscall_error __syscall_error
-#define mcount __gnu_mcount_nc
-
-/* Tag_ABI_align8_preserved: This code preserves 8-byte
- alignment in any callee. */
- .eabi_attribute 25, 1
-/* Tag_ABI_align8_needed: This code may require 8-byte alignment from
- the caller. */
- .eabi_attribute 24, 1
-
-/* The thumb2 encoding is reasonably complete. Unless suppressed, use it. */
- .syntax unified
-# if defined(__thumb2__) && !defined(NO_THUMB)
- .thumb
-#else
-# undef __thumb__
-# undef __thumb2__
- .arm
-# endif
-
-/* Load or store to/from address X + Y into/from R, (maybe) using T.
- X or Y can use T freely; T can be R if OP is a load. The first
- version eschews the two-register addressing mode, while the
- second version uses it. */
-# define LDST_INDEXED_NOINDEX(OP, R, T, X, Y) \
- add T, X, Y; \
- OP R, [T]
-# define LDST_INDEXED_INDEX(OP, R, X, Y) \
- OP R, [X, Y]
-
-# ifdef ARM_NO_INDEX_REGISTER
-/* We're never using the two-register addressing mode, so this
- always uses an intermediate add. */
-# define LDST_INDEXED(OP, R, T, X, Y) LDST_INDEXED_NOINDEX (OP, R, T, X, Y)
-# define LDST_PC_INDEXED(OP, R, T, X) LDST_INDEXED_NOINDEX (OP, R, T, pc, X)
-# else
-/* The two-register addressing mode is OK, except on Thumb with pc. */
-# define LDST_INDEXED(OP, R, T, X, Y) LDST_INDEXED_INDEX (OP, R, X, Y)
-# ifdef __thumb2__
-# define LDST_PC_INDEXED(OP, R, T, X) LDST_INDEXED_NOINDEX (OP, R, T, pc, X)
-# else
-# define LDST_PC_INDEXED(OP, R, T, X) LDST_INDEXED_INDEX (OP, R, pc, X)
-# endif
-# endif
-
-/* Load or store to/from a pc-relative EXPR into/from R, using T. */
-# ifdef __thumb2__
-# define LDST_PCREL(OP, R, T, EXPR) \
- ldr T, 98f; \
- .subsection 2; \
-98: .word EXPR - 99f - PC_OFS; \
- .previous; \
-99: add T, T, pc; \
- OP R, [T]
-# elif defined (ARCH_HAS_T2) && ARM_PCREL_MOVW_OK
-# define LDST_PCREL(OP, R, T, EXPR) \
- movw T, #:lower16:EXPR - 99f - PC_OFS; \
- movt T, #:upper16:EXPR - 99f - PC_OFS; \
-99: LDST_PC_INDEXED (OP, R, T, T)
-# else
-# define LDST_PCREL(OP, R, T, EXPR) \
- ldr T, 98f; \
- .subsection 2; \
-98: .word EXPR - 99f - PC_OFS; \
- .previous; \
-99: OP R, [pc, T]
-# endif
-
-/* Load from a global SYMBOL + CONSTANT into R, using T. */
-# if defined (ARCH_HAS_T2) && !defined (PIC)
-# define LDR_GLOBAL(R, T, SYMBOL, CONSTANT) \
- movw T, #:lower16:SYMBOL; \
- movt T, #:upper16:SYMBOL; \
- ldr R, [T, $CONSTANT]
-# elif defined (ARCH_HAS_T2) && defined (PIC) && ARM_PCREL_MOVW_OK
-# define LDR_GLOBAL(R, T, SYMBOL, CONSTANT) \
- movw R, #:lower16:_GLOBAL_OFFSET_TABLE_ - 97f - PC_OFS; \
- movw T, #:lower16:99f - 98f - PC_OFS; \
- movt R, #:upper16:_GLOBAL_OFFSET_TABLE_ - 97f - PC_OFS; \
- movt T, #:upper16:99f - 98f - PC_OFS; \
- .pushsection .rodata.cst4, "aM", %progbits, 4; \
- .balign 4; \
-99: .word SYMBOL##(GOT); \
- .popsection; \
-97: add R, R, pc; \
-98: LDST_PC_INDEXED (ldr, T, T, T); \
- LDST_INDEXED (ldr, R, T, R, T); \
- ldr R, [R, $CONSTANT]
-# else
-# define LDR_GLOBAL(R, T, SYMBOL, CONSTANT) \
- ldr T, 99f; \
- ldr R, 100f; \
-98: add T, T, pc; \
- ldr T, [T, R]; \
- .subsection 2; \
-99: .word _GLOBAL_OFFSET_TABLE_ - 98b - PC_OFS; \
-100: .word SYMBOL##(GOT); \
- .previous; \
- ldr R, [T, $CONSTANT]
-# endif
-
-/* This is the same as LDR_GLOBAL, but for a SYMBOL that is known to
- be in the same linked object (as for one with hidden visibility).
- We can avoid the GOT indirection in the PIC case. For the pure
- static case, LDR_GLOBAL is already optimal. */
-# ifdef PIC
-# define LDR_HIDDEN(R, T, SYMBOL, CONSTANT) \
- LDST_PCREL (ldr, R, T, SYMBOL + CONSTANT)
-# else
-# define LDR_HIDDEN(R, T, SYMBOL, CONSTANT) \
- LDR_GLOBAL (R, T, SYMBOL, CONSTANT)
-# endif
-
-/* Cope with negative memory offsets, which thumb can't encode.
- Use NEGOFF_ADJ_BASE to (conditionally) alter the base register,
- and then NEGOFF_OFF1 to use 0 for thumb and the offset for arm,
- or NEGOFF_OFF2 to use A-B for thumb and A for arm. */
-# ifdef __thumb2__
-# define NEGOFF_ADJ_BASE(R, OFF) add R, R, $OFF
-# define NEGOFF_ADJ_BASE2(D, S, OFF) add D, S, $OFF
-# define NEGOFF_OFF1(R, OFF) [R]
-# define NEGOFF_OFF2(R, OFFA, OFFB) [R, $((OFFA) - (OFFB))]
-# else
-# define NEGOFF_ADJ_BASE(R, OFF)
-# define NEGOFF_ADJ_BASE2(D, S, OFF) mov D, S
-# define NEGOFF_OFF1(R, OFF) [R, $OFF]
-# define NEGOFF_OFF2(R, OFFA, OFFB) [R, $OFFA]
-# endif
-
-/* Helper to get the TLS base pointer. The interface is that TMP is a
- register that may be used to hold the LR, if necessary. TMP may be
- LR itself to indicate that LR need not be saved. The base pointer
- is returned in R0. Only R0 and TMP are modified. */
-
-# ifdef ARCH_HAS_HARD_TP
-/* If the cpu has cp15 available, use it. */
-# define GET_TLS(TMP) mrc p15, 0, r0, c13, c0, 3
-# else
-/* At this generic level we have no tricks to pull. Call the ABI routine. */
-# define GET_TLS(TMP) \
- push { r1, r2, r3, lr }; \
- cfi_remember_state; \
- cfi_adjust_cfa_offset (16); \
- cfi_rel_offset (r1, 0); \
- cfi_rel_offset (r2, 4); \
- cfi_rel_offset (r3, 8); \
- cfi_rel_offset (lr, 12); \
- bl __aeabi_read_tp; \
- pop { r1, r2, r3, lr }; \
- cfi_restore_state
-# endif /* ARCH_HAS_HARD_TP */
-
-/* These are the directives used for EABI unwind info.
- Wrap them in macros so another configuration's sysdep.h
- file can define them away if it doesn't use EABI unwind info. */
-# define eabi_fnstart .fnstart
-# define eabi_fnend .fnend
-# define eabi_save(...) .save __VA_ARGS__
-# define eabi_cantunwind .cantunwind
-# define eabi_pad(n) .pad n
-
-#endif /* __ASSEMBLER__ */
-
-/* This number is the offset from the pc at the current location. */
-#ifdef __thumb__
-# define PC_OFS 4
-#else
-# define PC_OFS 8
-#endif
-
-/* Pointer mangling support. */
-#if (IS_IN (rtld) || \
- (!defined SHARED && (IS_IN (libc) || IS_IN (libpthread))))
-# ifdef __ASSEMBLER__
-# define PTR_MANGLE_LOAD(guard, tmp) \
- LDR_HIDDEN (guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard_local), 0)
-# define PTR_MANGLE(dst, src, guard, tmp) \
- PTR_MANGLE_LOAD(guard, tmp); \
- PTR_MANGLE2(dst, src, guard)
-/* Use PTR_MANGLE2 for efficiency if guard is already loaded. */
-# define PTR_MANGLE2(dst, src, guard) \
- eor dst, src, guard
-# define PTR_DEMANGLE(dst, src, guard, tmp) \
- PTR_MANGLE (dst, src, guard, tmp)
-# define PTR_DEMANGLE2(dst, src, guard) \
- PTR_MANGLE2 (dst, src, guard)
-# else
-extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
-# define PTR_MANGLE(var) \
- (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
-# define PTR_DEMANGLE(var) PTR_MANGLE (var)
-# endif
-#else
-# ifdef __ASSEMBLER__
-# define PTR_MANGLE_LOAD(guard, tmp) \
- LDR_GLOBAL (guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard), 0);
-# define PTR_MANGLE(dst, src, guard, tmp) \
- PTR_MANGLE_LOAD(guard, tmp); \
- PTR_MANGLE2(dst, src, guard)
-/* Use PTR_MANGLE2 for efficiency if guard is already loaded. */
-# define PTR_MANGLE2(dst, src, guard) \
- eor dst, src, guard
-# define PTR_DEMANGLE(dst, src, guard, tmp) \
- PTR_MANGLE (dst, src, guard, tmp)
-# define PTR_DEMANGLE2(dst, src, guard) \
- PTR_MANGLE2 (dst, src, guard)
-# else
-extern uintptr_t __pointer_chk_guard attribute_relro;
-# define PTR_MANGLE(var) \
- (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard)
-# define PTR_DEMANGLE(var) PTR_MANGLE (var)
-# endif
-#endif
diff --git a/sysdeps/arm/test-fpucw.c b/sysdeps/arm/test-fpucw.c
deleted file mode 100644
index 9fc721c7f4..0000000000
--- a/sysdeps/arm/test-fpucw.c
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Defining _LIBC_TEST stops fpu_control.h from defining the
- hard-float versions of macros (for use with dynamic VFP detection)
- when compiling for soft-float. */
-#define _LIBC_TEST
-#include <math/test-fpucw.c>
diff --git a/sysdeps/arm/tls-macros.h b/sysdeps/arm/tls-macros.h
deleted file mode 100644
index 25cd84931b..0000000000
--- a/sysdeps/arm/tls-macros.h
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <sysdep.h> /* For ARCH_HAS_T2. */
-
-#ifdef __thumb2__
-# define ARM_PC_OFFSET "4"
-#else
-# define ARM_PC_OFFSET "8"
-#endif
-
-/* Returns the address of data containing ".word SYMBOL(RELOC)". */
-#if defined (ARCH_HAS_T2) && !defined (PIC)
-# define GET_SPECIAL_RELOC(symbol, reloc) \
- ({ \
- int *__##symbol##_rodata; \
- asm ("movw %0, #:lower16:1f\n" \
- "movt %0, #:upper16:1f\n" \
- ".pushsection .rodata.cst4, \"aM\", %%progbits, 4\n" \
- ".balign 4\n" \
- "1: .word " #symbol "(" #reloc ")\n" \
- ".popsection" \
- : "=r" (__##symbol##_rodata)); \
- __##symbol##_rodata; \
- })
-#elif defined (ARCH_HAS_T2) && defined (PIC) && ARM_PCREL_MOVW_OK
-# define GET_SPECIAL_RELOC(symbol, reloc) \
- ({ \
- int *__##symbol##_rodata; \
- asm ("movw %0, #:lower16:1f - 2f - " ARM_PC_OFFSET "\n" \
- "movt %0, #:upper16:1f - 2f - " ARM_PC_OFFSET "\n" \
- ".pushsection .rodata.cst4, \"aM\", %%progbits, 4\n" \
- ".balign 4\n" \
- "1: .word " #symbol "(" #reloc ")\n" \
- ".popsection\n" \
- "2: add %0, %0, pc" \
- : "=r" (__##symbol##_rodata)); \
- __##symbol##_rodata; \
- })
-#else
-# define GET_SPECIAL_RELOC(symbol, reloc) \
- ({ \
- int *__##symbol##_rodata; \
- asm ("adr %0, 1f\n" \
- "b 2f\n" \
- ".balign 4\n" \
- "1: .word " #symbol "(" #reloc ")\n" \
- "2:" \
- : "=r" (__##symbol##_rodata)); \
- __##symbol##_rodata; \
- })
-#endif
-
-/* Returns the pointer value (SYMBOL(RELOC) + pc - PC_OFS). */
-#define GET_SPECIAL_PCREL(symbol, reloc) \
- ({ \
- int *__##symbol##_rodata = GET_SPECIAL_RELOC (symbol, reloc); \
- (void *) ((int) __##symbol##_rodata + *__##symbol##_rodata); \
- })
-
-#define TLS_LE(x) \
- (__builtin_thread_pointer () + *GET_SPECIAL_RELOC (x, tpoff))
-
-#define TLS_IE(x) \
- ((int *) (__builtin_thread_pointer () \
- + *(int *) GET_SPECIAL_PCREL (x, gottpoff)))
-
-extern void *__tls_get_addr (void *);
-
-#define TLS_LD(x) \
- ((int *) (__tls_get_addr (GET_SPECIAL_PCREL (x, tlsldm)) \
- + *GET_SPECIAL_RELOC (x, tlsldo)))
-
-#define TLS_GD(x) \
- ((int *) __tls_get_addr (GET_SPECIAL_PCREL (x, tlsgd)))
diff --git a/sysdeps/arm/tlsdesc.c b/sysdeps/arm/tlsdesc.c
deleted file mode 100644
index 7ec5fef688..0000000000
--- a/sysdeps/arm/tlsdesc.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/* Manage TLS descriptors. ARM version.
- Copyright (C) 2005-2017 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 <link.h>
-#include <ldsodefs.h>
-#include <elf/dynamic-link.h>
-#include <tls.h>
-#include <dl-tlsdesc.h>
-#include <dl-unmap-segments.h>
-#include <tlsdeschtab.h>
-
-/* This function is used to lazily resolve TLS_DESC REL relocations
- Besides the TLS descriptor itself, we get the module's got address
- as the second parameter. */
-
-void
-attribute_hidden
-_dl_tlsdesc_lazy_resolver_fixup (struct tlsdesc volatile *td,
- Elf32_Addr *got)
-{
- struct link_map *l = (struct link_map *)got[1];
- lookup_t result;
- unsigned long value;
-
- if (_dl_tlsdesc_resolve_early_return_p
- (td, (void*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_PLT)]) + l->l_addr)))
- return;
-
- if (td->argument.value & 0x80000000)
- {
- /* A global symbol, this is the symbol index. */
- /* The code below was borrowed from _dl_fixup(). */
- const Elf_Symndx symndx = td->argument.value ^ 0x80000000;
- const ElfW(Sym) *const symtab
- = (const void *) D_PTR (l, l_info[DT_SYMTAB]);
- const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]);
- const ElfW(Sym) *sym = &symtab[symndx];
-
- /* Look up the target symbol. If the normal lookup rules are not
- used don't look in the global scope. */
- if (ELFW(ST_BIND) (sym->st_info) != STB_LOCAL
- && __builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0)
- {
- const struct r_found_version *version = NULL;
-
- if (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL)
- {
- const ElfW(Half) *vernum =
- (const void *) D_PTR (l, l_info[VERSYMIDX (DT_VERSYM)]);
- ElfW(Half) ndx = vernum[symndx] & 0x7fff;
- version = &l->l_versions[ndx];
- if (version->hash == 0)
- version = NULL;
- }
-
- result = _dl_lookup_symbol_x
- (strtab + sym->st_name, l, &sym,
- l->l_scope, version, ELF_RTYPE_CLASS_PLT,
- DL_LOOKUP_ADD_DEPENDENCY, NULL);
- if (sym)
- value = sym->st_value;
- else
- {
- td->entry = _dl_tlsdesc_undefweak;
- goto done;
- }
- }
- else
- {
- /* We already found the symbol. The module (and therefore its load
- address) is also known. */
- result = l;
- value = sym->st_value;
- }
- }
- else
- {
- /* A local symbol, this is the offset within our tls section.
- */
- value = td->argument.value;
- result = l;
- }
-
-#ifndef SHARED
- CHECK_STATIC_TLS (l, result);
-#else
- if (!TRY_STATIC_TLS (l, result))
- {
- td->argument.pointer = _dl_make_tlsdesc_dynamic (result, value);
- td->entry = _dl_tlsdesc_dynamic;
- }
- else
-#endif
- {
- td->argument.value = value + result->l_tls_offset;
- td->entry = _dl_tlsdesc_return;
- }
-
- done:
- _dl_tlsdesc_wake_up_held_fixups ();
-}
-
-/* This function is used to avoid busy waiting for other threads to
- complete the lazy relocation. Once another thread wins the race to
- relocate a TLS descriptor, it sets the descriptor up such that this
- function is called to wait until the resolver releases the
- lock. */
-
-void
-attribute_hidden
-_dl_tlsdesc_resolve_hold_fixup (struct tlsdesc volatile *td,
- void *caller)
-{
- /* Maybe we're lucky and can return early. */
- if (caller != td->entry)
- return;
-
- /* Locking here will stop execution until the running resolver runs
- _dl_tlsdesc_wake_up_held_fixups(), releasing the lock.
-
- FIXME: We'd be better off waiting on a condition variable, such
- that we didn't have to hold the lock throughout the relocation
- processing. */
- __rtld_lock_lock_recursive (GL(dl_load_lock));
- __rtld_lock_unlock_recursive (GL(dl_load_lock));
-}
-
-/* Unmap the dynamic object, but also release its TLS descriptor table
- if there is one. */
-
-void
-internal_function
-_dl_unmap (struct link_map *map)
-{
- _dl_unmap_segments (map);
-
-#ifdef SHARED
- /* _dl_unmap is only called for dlopen()ed libraries, for which
- calling free() is safe, or before we've completed the initial
- relocation, in which case calling free() is probably pointless,
- but still safe. */
- if (map->l_mach.tlsdesc_table)
- htab_delete (map->l_mach.tlsdesc_table);
-#endif
-}
diff --git a/sysdeps/arm/tlsdesc.sym b/sysdeps/arm/tlsdesc.sym
deleted file mode 100644
index 3f3a13e2c4..0000000000
--- a/sysdeps/arm/tlsdesc.sym
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stddef.h>
-#include <sysdep.h>
-#include <tls.h>
-#include <link.h>
-#include <dl-tlsdesc.h>
-
---
-
--- Abuse tls.h macros to derive offsets relative to the thread register.
-
-TLSDESC_ARG offsetof(struct tlsdesc, argument.pointer)
-
-TLSDESC_GEN_COUNT offsetof(struct tlsdesc_dynamic_arg, gen_count)
-TLSDESC_MODID offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_module)
-TLSDESC_MODOFF offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_offset)
diff --git a/sysdeps/arm/tst-armtlsdescextlazy.c b/sysdeps/arm/tst-armtlsdescextlazy.c
deleted file mode 100644
index 36ae9994f7..0000000000
--- a/sysdeps/arm/tst-armtlsdescextlazy.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-armtlsdescloc.c"
diff --git a/sysdeps/arm/tst-armtlsdescextlazymod.c b/sysdeps/arm/tst-armtlsdescextlazymod.c
deleted file mode 100644
index 2cb8f8c853..0000000000
--- a/sysdeps/arm/tst-armtlsdescextlazymod.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-armtlsdesclocmod.c"
diff --git a/sysdeps/arm/tst-armtlsdescextnow.c b/sysdeps/arm/tst-armtlsdescextnow.c
deleted file mode 100644
index 36ae9994f7..0000000000
--- a/sysdeps/arm/tst-armtlsdescextnow.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-armtlsdescloc.c"
diff --git a/sysdeps/arm/tst-armtlsdescextnowmod.c b/sysdeps/arm/tst-armtlsdescextnowmod.c
deleted file mode 100644
index 2cb8f8c853..0000000000
--- a/sysdeps/arm/tst-armtlsdescextnowmod.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-armtlsdesclocmod.c"
diff --git a/sysdeps/arm/tst-armtlsdescloc.c b/sysdeps/arm/tst-armtlsdescloc.c
deleted file mode 100644
index 0abb5930c5..0000000000
--- a/sysdeps/arm/tst-armtlsdescloc.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* ARM immediate binding GNU TLS descriptor relocation test.
- Copyright (C) 2014-2017 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/>. */
-
-int getfoo (void);
-
-int
-do_test (void)
-{
- return getfoo ();
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/sysdeps/arm/tst-armtlsdesclocmod.c b/sysdeps/arm/tst-armtlsdesclocmod.c
deleted file mode 100644
index 4f0be0b389..0000000000
--- a/sysdeps/arm/tst-armtlsdesclocmod.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* DSO used for ARM immediate binding GNU TLS descriptor relocation test.
- Copyright (C) 2014-2017 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/>. */
-
-static int __thread bar = 1;
-static int __thread foo;
-
-int
-getfoo (void)
-{
- return foo;
-}
-
-void
-setfoo (int i)
-{
- foo = 1;
-}
-
-int
-getbar (void)
-{
- return bar;
-}
-
-void
-setbar (int i)
-{
- bar = 1;
-}
diff --git a/sysdeps/arm/tst-audit.h b/sysdeps/arm/tst-audit.h
deleted file mode 100644
index e6cc5a6ef3..0000000000
--- a/sysdeps/arm/tst-audit.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Definitions for testing PLT entry/exit auditing. ARM version.
-
- Copyright (C) 2005-2017 Free Software Foundation, Inc.
-
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#define pltenter la_arm_gnu_pltenter
-#define pltexit la_arm_gnu_pltexit
-#define La_regs La_arm_regs
-#define La_retval La_arm_retval
-#define int_retval lrv_reg[0]
diff --git a/sysdeps/arm/unwind-dw2-fde-glibc.c b/sysdeps/arm/unwind-dw2-fde-glibc.c
deleted file mode 100644
index bc3cd1fc1f..0000000000
--- a/sysdeps/arm/unwind-dw2-fde-glibc.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Dummy exception handling and frame unwind runtime interface routines.
- Copyright (C) 2004-2017 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/>. */
-
-/* ARM uses setjmp-longjmp exceptions. However, previous versions of
- GNU libc exported some DWARF-2 exception handling support routines.
- They are not necessary, but older (or broken) configurations of GCC
- will do so. Even though all references to these are weak, because
- they refer to versioned symbols, they must be provided. */
-
-#include <stdlib.h>
-#include <unwind.h>
-#include <unwind-dw2-fde.h>
-
-/* These may be called from startup code, but don't need to do
- anything. */
-
-void __register_frame_info_bases (void *a1, struct object *a2,
- void *a3, void *a4)
-{
-}
-
-void __register_frame_info (void *a1, struct object *a2)
-{
-}
-
-void __register_frame (void *a1)
-{
-}
-
-void __register_frame_info_table_bases (void *a1, struct object *a2,
- void *a3, void *a4)
-{
-}
-
-void __register_frame_info_table (void *a1, struct object *a2)
-{
-}
-
-void __register_frame_table (void *a1)
-{
-}
-
-void *__deregister_frame_info (void *a1)
-{
- return NULL;
-}
-
-void *__deregister_frame_info_bases (void *a1)
-{
- return NULL;
-}
-
-void __deregister_frame (void *a1)
-{
-}
-
-/* This should not be called. */
-
-fde *
-_Unwind_Find_FDE (void *a1, struct dwarf_eh_bases *a2)
-{
- abort ();
-}
diff --git a/sysdeps/arm/unwind-pe.c b/sysdeps/arm/unwind-pe.c
deleted file mode 100644
index 710cecca97..0000000000
--- a/sysdeps/arm/unwind-pe.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Empty */
diff --git a/sysdeps/arm/unwind-resume.h b/sysdeps/arm/unwind-resume.h
deleted file mode 100644
index 221f10135d..0000000000
--- a/sysdeps/arm/unwind-resume.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Definitions for unwind-resume.c. ARM (EABI) version.
- Copyright (C) 2015-2017 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; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-/* The EABI personality routine has a different signature than the
- canonical one. These macros tell sysdeps/gnu/unwind*.c how to
- define __gcc_personality_v0. */
-#define PERSONALITY_PROTO \
- (_Unwind_State state, \
- struct _Unwind_Exception *ue_header, \
- struct _Unwind_Context *context)
-#define PERSONALITY_ARGS \
- (state, ue_header, context)
-
-/* It's vitally important that _Unwind_Resume not have a stack frame; the
- ARM unwinder relies on register state at entrance. So we write this in
- assembly (see arm-unwind-resume.S). This macro tells the generic code
- not to provide the generic C definition. */
-#define HAVE_ARCH_UNWIND_RESUME 1
diff --git a/sysdeps/arm/unwind.h b/sysdeps/arm/unwind.h
deleted file mode 100644
index 08b6f38022..0000000000
--- a/sysdeps/arm/unwind.h
+++ /dev/null
@@ -1,278 +0,0 @@
-/* Header file for the ARM EABI unwinder
- Copyright (C) 2003-2017 Free Software Foundation, Inc.
- Contributed by Paul Brook
-
- This file is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- In addition to the permissions in the GNU General Public License, the
- Free Software Foundation gives you unlimited permission to link the
- compiled version of this file into combinations with other programs,
- and to distribute those combinations without any restriction coming
- from the use of this file. (The General Public License restrictions
- do apply in other respects; for example, they cover modification of
- the file, and distribution when not linked into a combine
- executable.)
-
- This file 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* Language-independent unwinder header public defines. This contains both
- ABI defined objects, and GNU support routines. */
-
-#ifndef UNWIND_ARM_H
-#define UNWIND_ARM_H
-
-#define __ARM_EABI_UNWINDER__ 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
- typedef unsigned _Unwind_Word __attribute__((__mode__(__word__)));
- typedef signed _Unwind_Sword __attribute__((__mode__(__word__)));
- typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__)));
- typedef unsigned _Unwind_Internal_Ptr __attribute__((__mode__(__pointer__)));
- typedef _Unwind_Word _uw;
- typedef unsigned _uw64 __attribute__((mode(__DI__)));
- typedef unsigned _uw16 __attribute__((mode(__HI__)));
- typedef unsigned _uw8 __attribute__((mode(__QI__)));
-
- typedef enum
- {
- _URC_OK = 0, /* operation completed successfully */
- _URC_FOREIGN_EXCEPTION_CAUGHT = 1,
- _URC_END_OF_STACK = 5,
- _URC_HANDLER_FOUND = 6,
- _URC_INSTALL_CONTEXT = 7,
- _URC_CONTINUE_UNWIND = 8,
- _URC_FAILURE = 9 /* unspecified failure of some kind */
- }
- _Unwind_Reason_Code;
-
- typedef enum
- {
- _US_VIRTUAL_UNWIND_FRAME = 0,
- _US_UNWIND_FRAME_STARTING = 1,
- _US_UNWIND_FRAME_RESUME = 2,
- _US_ACTION_MASK = 3,
- _US_FORCE_UNWIND = 8,
- _US_END_OF_STACK = 16
- }
- _Unwind_State;
-
- /* Provided only for for compatibility with existing code. */
- typedef int _Unwind_Action;
-#define _UA_SEARCH_PHASE 1
-#define _UA_CLEANUP_PHASE 2
-#define _UA_HANDLER_FRAME 4
-#define _UA_FORCE_UNWIND 8
-#define _UA_END_OF_STACK 16
-#define _URC_NO_REASON _URC_OK
-
- typedef struct _Unwind_Control_Block _Unwind_Control_Block;
- typedef struct _Unwind_Context _Unwind_Context;
- typedef _uw _Unwind_EHT_Header;
-
-
- /* UCB: */
-
- struct _Unwind_Control_Block
- {
-#ifdef _LIBC
- /* For the benefit of code which assumes this is a scalar. All
- glibc ever does is clear it. */
- _uw64 exception_class;
-#else
- char exception_class[8];
-#endif
- void (*exception_cleanup)(_Unwind_Reason_Code, _Unwind_Control_Block *);
- /* Unwinder cache, private fields for the unwinder's use */
- struct
- {
- _uw reserved1; /* Forced unwind stop fn, 0 if not forced */
- _uw reserved2; /* Personality routine address */
- _uw reserved3; /* Saved callsite address */
- _uw reserved4; /* Forced unwind stop arg */
- _uw reserved5;
- }
- unwinder_cache;
- /* Propagation barrier cache (valid after phase 1): */
- struct
- {
- _uw sp;
- _uw bitpattern[5];
- }
- barrier_cache;
- /* Cleanup cache (preserved over cleanup): */
- struct
- {
- _uw bitpattern[4];
- }
- cleanup_cache;
- /* Pr cache (for pr's benefit): */
- struct
- {
- _uw fnstart; /* function start address */
- _Unwind_EHT_Header *ehtp; /* pointer to EHT entry header word */
- _uw additional; /* additional data */
- _uw reserved1;
- }
- pr_cache;
- long long int :0; /* Force alignment to 8-byte boundary */
- };
-
- /* Virtual Register Set*/
-
- typedef enum
- {
- _UVRSC_CORE = 0, /* integer register */
- _UVRSC_VFP = 1, /* vfp */
- _UVRSC_FPA = 2, /* fpa */
- _UVRSC_WMMXD = 3, /* Intel WMMX data register */
- _UVRSC_WMMXC = 4 /* Intel WMMX control register */
- }
- _Unwind_VRS_RegClass;
-
- typedef enum
- {
- _UVRSD_UINT32 = 0,
- _UVRSD_VFPX = 1,
- _UVRSD_FPAX = 2,
- _UVRSD_UINT64 = 3,
- _UVRSD_FLOAT = 4,
- _UVRSD_DOUBLE = 5
- }
- _Unwind_VRS_DataRepresentation;
-
- typedef enum
- {
- _UVRSR_OK = 0,
- _UVRSR_NOT_IMPLEMENTED = 1,
- _UVRSR_FAILED = 2
- }
- _Unwind_VRS_Result;
-
- /* Frame unwinding state. */
- typedef struct
- {
- /* The current word (bytes packed msb first). */
- _uw data;
- /* Pointer to the next word of data. */
- _uw *next;
- /* The number of bytes left in this word. */
- _uw8 bytes_left;
- /* The number of words pointed to by ptr. */
- _uw8 words_left;
- }
- __gnu_unwind_state;
-
- typedef _Unwind_Reason_Code (*personality_routine) (_Unwind_State,
- _Unwind_Control_Block *, _Unwind_Context *);
-
- _Unwind_VRS_Result _Unwind_VRS_Set(_Unwind_Context *, _Unwind_VRS_RegClass,
- _uw, _Unwind_VRS_DataRepresentation,
- void *);
-
- _Unwind_VRS_Result _Unwind_VRS_Get(_Unwind_Context *, _Unwind_VRS_RegClass,
- _uw, _Unwind_VRS_DataRepresentation,
- void *);
-
- _Unwind_VRS_Result _Unwind_VRS_Pop(_Unwind_Context *, _Unwind_VRS_RegClass,
- _uw, _Unwind_VRS_DataRepresentation);
-
-
- /* Support functions for the PR. */
-#define _Unwind_Exception _Unwind_Control_Block
- typedef char _Unwind_Exception_Class[8];
-
- void * _Unwind_GetLanguageSpecificData (_Unwind_Context *);
- _Unwind_Ptr _Unwind_GetRegionStart (_Unwind_Context *);
-
- /* These two should never be used. */
- _Unwind_Ptr _Unwind_GetDataRelBase (_Unwind_Context *);
- _Unwind_Ptr _Unwind_GetTextRelBase (_Unwind_Context *);
-
- /* Interface functions: */
- _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Control_Block *ucbp);
- void __attribute__((noreturn)) _Unwind_Resume(_Unwind_Control_Block *ucbp);
- _Unwind_Reason_Code _Unwind_Resume_or_Rethrow (_Unwind_Control_Block *ucbp);
-
- typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)
- (int, _Unwind_Action, _Unwind_Exception_Class,
- _Unwind_Control_Block *, struct _Unwind_Context *, void *);
- _Unwind_Reason_Code _Unwind_ForcedUnwind (_Unwind_Control_Block *,
- _Unwind_Stop_Fn, void *);
- _Unwind_Word _Unwind_GetCFA (struct _Unwind_Context *);
- void _Unwind_Complete(_Unwind_Control_Block *ucbp);
- void _Unwind_DeleteException (_Unwind_Exception *);
-
- _Unwind_Reason_Code __gnu_unwind_frame (_Unwind_Control_Block *,
- _Unwind_Context *);
- _Unwind_Reason_Code __gnu_unwind_execute (_Unwind_Context *,
- __gnu_unwind_state *);
-
- /* Decode an R_ARM_TARGET2 relocation. */
- static inline _Unwind_Word
- _Unwind_decode_target2 (_Unwind_Word ptr)
- {
- _Unwind_Word tmp;
-
- tmp = *(_Unwind_Word *) ptr;
- /* Zero values are always NULL. */
- if (!tmp)
- return 0;
-
-#if defined(linux) || defined(__NetBSD__)
- /* Pc-relative indirect. */
- tmp += ptr;
- tmp = *(_Unwind_Word *) tmp;
-#elif defined(__symbian__)
- /* Absolute pointer. Nothing more to do. */
-#else
- /* Pc-relative pointer. */
- tmp += ptr;
-#endif
- return tmp;
- }
-
- static inline _Unwind_Word
- _Unwind_GetGR (_Unwind_Context *context, int regno)
- {
- _uw val;
- _Unwind_VRS_Get (context, _UVRSC_CORE, regno, _UVRSD_UINT32, &val);
- return val;
- }
-
- /* Return the address of the instruction, not the actual IP value. */
-#define _Unwind_GetIP(context) \
- (_Unwind_GetGR (context, 15) & ~(_Unwind_Word)1)
-
- static inline void
- _Unwind_SetGR (_Unwind_Context *context, int regno, _Unwind_Word val)
- {
- _Unwind_VRS_Set (context, _UVRSC_CORE, regno, _UVRSD_UINT32, &val);
- }
-
- /* The dwarf unwinder doesn't understand arm/thumb state. We assume the
- landing pad uses the same instruction set as the call site. */
-#define _Unwind_SetIP(context, val) \
- _Unwind_SetGR (context, 15, val | (_Unwind_GetGR (context, 15) & 1))
-
-typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)
- (struct _Unwind_Context *, void *);
-
-extern _Unwind_Reason_Code _Unwind_Backtrace (_Unwind_Trace_Fn, void *);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* defined UNWIND_ARM_H */