diff options
Diffstat (limited to 'ports')
267 files changed, 12 insertions, 26716 deletions
diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm index d23a6cca55..176b766422 100644 --- a/ports/ChangeLog.arm +++ b/ports/ChangeLog.arm @@ -1,5 +1,17 @@ +This file describes changes to the ARM port while it was in the ports +add-on directory. This port is no longer part of an add-on and so +future changes to it should be listed in the top-level ChangeLog file, +not here. + + + 2014-02-08 Joseph Myers <joseph@codesourcery.com> + * sysdeps/arm: Move directory to ../sysdeps/arm. + * sysdeps/unix/arm: Move directory to ../sysdeps.arm. + * sysdeps/unix/sysv/linux/arm: Move directory to + ../sysdeps/unix/sysv/linux/arm. + * sysdeps/unix/sysv/linux/arm/msgctl.c: Move from sysdeps/unix/sysv/linux/alpha/msgctl.c instead of #include of that file. diff --git a/ports/sysdeps/arm/Implies b/ports/sysdeps/arm/Implies deleted file mode 100644 index 10bd93a160..0000000000 --- a/ports/sysdeps/arm/Implies +++ /dev/null @@ -1,4 +0,0 @@ -arm/soft-fp -wordsize-32 -ieee754/flt-32 -ieee754/dbl-64 diff --git a/ports/sysdeps/arm/Makefile b/ports/sysdeps/arm/Makefile deleted file mode 100644 index b218e76eac..0000000000 --- a/ports/sysdeps/arm/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -gnulib-arch = $(elfobjdir)/libgcc-stubs.a -static-gnulib-arch = $(elfobjdir)/libgcc-stubs.a - -ifeq ($(subdir),elf) -sysdep-dl-routines += tlsdesc dl-tlsdesc -sysdep_routines += aeabi_unwind_cpp_pr1 find_exidx tlsdesc dl-tlsdesc -sysdep-rtld-routines += aeabi_unwind_cpp_pr1 tlsdesc dl-tlsdesc -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 -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 - -sysdep_routines += $(aeabi_constants) $(aeabi_routines) -static-only-routines += $(aeabi_constants) -endif - -ifeq ($(subdir),gmon) -sysdep_routines += arm-mcount -endif - -ifeq ($(subdir),debug) -CFLAGS-backtrace.c += -funwind-tables -endif diff --git a/ports/sysdeps/arm/Versions b/ports/sysdeps/arm/Versions deleted file mode 100644 index 5f2af29c38..0000000000 --- a/ports/sysdeps/arm/Versions +++ /dev/null @@ -1,20 +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; - } -} diff --git a/ports/sysdeps/arm/__longjmp.S b/ports/sysdeps/arm/__longjmp.S deleted file mode 100644 index 27c57a12df..0000000000 --- a/ports/sysdeps/arm/__longjmp.S +++ /dev/null @@ -1,140 +0,0 @@ -/* longjmp for ARM. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <bits/setjmp.h> -#include <rtld-global-offsets.h> -#include <arm-features.h> - -/* __longjmp(jmpbuf, val) */ - -ENTRY (__longjmp) - mov ip, r0 - movs r0, r1 /* get the return value in place */ - it eq - moveq r0, #1 /* can't let setjmp() return zero! */ - -#ifdef CHECK_SP - sfi_breg ip, \ - ldr r4, [\B, #32] /* jmpbuf's sp */ - cfi_undefined (r4) -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (r4, r4, a3, a4) -#endif - CHECK_SP (r4) -#endif - sfi_sp sfi_breg ip, \ - ldmia \B!, JMP_BUF_REGLIST -#ifdef PTR_DEMANGLE - ldr a4, [ip], #4 - PTR_DEMANGLE (a4, a4, a3, a2) - mov sp, a4 - ldr a4, [ip], #4 - PTR_DEMANGLE2 (lr, a4, a3) -#else - ldr sp, [ip], #4 - ldr lr, [ip], #4 -#endif - 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 -# ifdef IS_IN_rtld - ldr a2, 1f - ldr a3, .Lrtld_local_ro -0: add a2, pc, a2 - add a2, a2, a3 - ldr a2, [a2, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET] -# else -# ifdef PIC - ldr a2, 1f - ldr a3, .Lrtld_global_ro -0: add a2, pc, a2 - ldr a2, [a2, a3] - ldr a2, [a2, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET] -# else - ldr a2, .Lhwcap - ldr a2, [a2, #0] -# endif -# endif -#endif - -#ifdef __SOFTFP__ - tst a2, #HWCAP_ARM_VFP - beq .Lno_vfp -#endif - - /* Restore the VFP registers. */ - /* Following instruction is vldmia ip!, {d8-d15}. */ - sfi_breg r12, \ - ldc p11, cr8, [\B], #64 -.Lno_vfp: - -#ifndef ARM_ASSUME_NO_IWMMXT - tst a2, #HWCAP_ARM_IWMMXT - beq .Lno_iwmmxt - - /* Restore the call-preserved iWMMXt registers. */ - /* Following instructions are wldrd wr10, [ip], #8 (etc.) */ - sfi_breg r12, \ - ldcl p1, cr10, [\B], #8 - sfi_breg r12, \ - ldcl p1, cr11, [\B], #8 - sfi_breg r12, \ - ldcl p1, cr12, [\B], #8 - sfi_breg r12, \ - ldcl p1, cr13, [\B], #8 - sfi_breg r12, \ - ldcl p1, cr14, [\B], #8 - sfi_breg r12, \ - ldcl p1, cr15, [\B], #8 -.Lno_iwmmxt: -#endif - - DO_RET(lr) - -#ifdef NEED_HWCAP -# ifdef IS_IN_rtld -1: .long _GLOBAL_OFFSET_TABLE_ - 0b - PC_OFS -.Lrtld_local_ro: - .long C_SYMBOL_NAME(_rtld_local_ro)(GOTOFF) -# else -# ifdef PIC -1: .long _GLOBAL_OFFSET_TABLE_ - 0b - PC_OFS -.Lrtld_global_ro: - .long C_SYMBOL_NAME(_rtld_global_ro)(GOT) -# else -.Lhwcap: - .long C_SYMBOL_NAME(_dl_hwcap) -# endif -# endif -#endif - -END (__longjmp) diff --git a/ports/sysdeps/arm/abi-note.S b/ports/sysdeps/arm/abi-note.S deleted file mode 100644 index 1060c3d280..0000000000 --- a/ports/sysdeps/arm/abi-note.S +++ /dev/null @@ -1,9 +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/ports/sysdeps/arm/add_n.S b/ports/sysdeps/arm/add_n.S deleted file mode 100644 index 4cc1ac287f..0000000000 --- a/ports/sysdeps/arm/add_n.S +++ /dev/null @@ -1,99 +0,0 @@ -/* mpn_add_n -- add (or subtract) bignums. - Copyright (C) 2013-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 - - sfi_breg r1, \ - ldr r4, [\B], #4 /* do one to make count even */ - sfi_breg r2, \ - ldr r5, [\B], #4 - OPC r4, r4, r5 - teq r1, lr /* end of count? (preserve carry) */ - sfi_breg r0, \ - str r4, [\B], #4 - beq 9f -1: - tst r3, #2 /* count & 2 == 2? */ - beq 2f - sfi_breg r1, \ - ldm \B!, { r4, r5 } /* do two to make count 0 mod 4 */ - sfi_breg r2, \ - ldm \B!, { r6, r7 } - OPC r4, r4, r6 - OPC r5, r5, r7 - teq r1, lr /* end of count? */ - sfi_breg r0, \ - stm \B!, { r4, r5 } - beq 9f -2: - sfi_breg r1, \ - ldm \B!, { r3, r5, r7, r10 } /* do four each loop */ - sfi_breg r2, \ - ldm \B!, { r4, r6, r8, ip } - OPC r3, r3, r4 - OPC r5, r5, r6 - OPC r7, r7, r8 - OPC r10, r10, ip - teq r1, lr - sfi_breg r0, \ - stm \B!, { 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/ports/sysdeps/arm/addmul_1.S b/ports/sysdeps/arm/addmul_1.S deleted file mode 100644 index fab1ae8cd4..0000000000 --- a/ports/sysdeps/arm/addmul_1.S +++ /dev/null @@ -1,73 +0,0 @@ -/* mpn_addmul_1 -- multiply and accumulate bignums. - Copyright (C) 2013-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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) - - sfi_breg r1, \ - ldr r6, [\B], #4 - sfi_breg r0, \ - ldr r5, [\B] - mov r4, #0 /* init carry in */ - b 1f -0: - sfi_breg r1, \ - ldr r6, [\B], #4 /* load next ul */ - adds r7, r4, r5 /* (out, c) = cl + lpl */ - sfi_breg r0, \ - ldr r5, [\B, #4] /* load next rl */ - adc r4, ip, #0 /* cl = hpl + c */ - sfi_breg r0, \ - str r7, [\B], #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 */ - sfi_breg r0, \ - str r4, [\B] - 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/ports/sysdeps/arm/aeabi_assert.c b/ports/sysdeps/arm/aeabi_assert.c deleted file mode 100644 index 0a31ffb4fb..0000000000 --- a/ports/sysdeps/arm/aeabi_assert.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 2004-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/aeabi_atexit.c b/ports/sysdeps/arm/aeabi_atexit.c deleted file mode 100644 index c5c207f4cf..0000000000 --- a/ports/sysdeps/arm/aeabi_atexit.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/aeabi_errno_addr.c b/ports/sysdeps/arm/aeabi_errno_addr.c deleted file mode 100644 index 160c765a09..0000000000 --- a/ports/sysdeps/arm/aeabi_errno_addr.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2004-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/aeabi_lcsts.c b/ports/sysdeps/arm/aeabi_lcsts.c deleted file mode 100644 index dac9a17604..0000000000 --- a/ports/sysdeps/arm/aeabi_lcsts.c +++ /dev/null @@ -1,98 +0,0 @@ -/* Link-time constants for ARM EABI. - Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser 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/ports/sysdeps/arm/aeabi_localeconv.c b/ports/sysdeps/arm/aeabi_localeconv.c deleted file mode 100644 index 2a7615f6de..0000000000 --- a/ports/sysdeps/arm/aeabi_localeconv.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2004-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/aeabi_math.c b/ports/sysdeps/arm/aeabi_math.c deleted file mode 100644 index 6b4211fbc5..0000000000 --- a/ports/sysdeps/arm/aeabi_math.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2004-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser 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/ports/sysdeps/arm/aeabi_mb_cur_max.c b/ports/sysdeps/arm/aeabi_mb_cur_max.c deleted file mode 100644 index ba2cc3a341..0000000000 --- a/ports/sysdeps/arm/aeabi_mb_cur_max.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2004-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/aeabi_memclr.c b/ports/sysdeps/arm/aeabi_memclr.c deleted file mode 100644 index 3bdfb3edf2..0000000000 --- a/ports/sysdeps/arm/aeabi_memclr.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/aeabi_memcpy.c b/ports/sysdeps/arm/aeabi_memcpy.c deleted file mode 100644 index 88e2e7bfbb..0000000000 --- a/ports/sysdeps/arm/aeabi_memcpy.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/aeabi_memmove.c b/ports/sysdeps/arm/aeabi_memmove.c deleted file mode 100644 index 14961337e2..0000000000 --- a/ports/sysdeps/arm/aeabi_memmove.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/aeabi_memset.c b/ports/sysdeps/arm/aeabi_memset.c deleted file mode 100644 index 160cfbb497..0000000000 --- a/ports/sysdeps/arm/aeabi_memset.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/aeabi_sighandlers.S b/ports/sysdeps/arm/aeabi_sighandlers.S deleted file mode 100644 index c14193b066..0000000000 --- a/ports/sysdeps/arm/aeabi_sighandlers.S +++ /dev/null @@ -1,53 +0,0 @@ -/* Link-time constants for ARM EABI - signal handlers. - Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser 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/ports/sysdeps/arm/aeabi_unwind_cpp_pr1.c b/ports/sysdeps/arm/aeabi_unwind_cpp_pr1.c deleted file mode 100644 index f65061310a..0000000000 --- a/ports/sysdeps/arm/aeabi_unwind_cpp_pr1.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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) -{ -#ifndef IS_IN_rtld - abort (); -#endif -} - -attribute_hidden -void -__aeabi_unwind_cpp_pr1 (void) -{ -#ifndef IS_IN_rtld - abort (); -#endif -} - -attribute_hidden -void -__aeabi_unwind_cpp_pr2 (void) -{ -#ifndef IS_IN_rtld - abort (); -#endif -} diff --git a/ports/sysdeps/arm/arm-features.h b/ports/sysdeps/arm/arm-features.h deleted file mode 100644 index b743756519..0000000000 --- a/ports/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-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/arm-mcount.S b/ports/sysdeps/arm/arm-mcount.S deleted file mode 100644 index 7e433c6ff7..0000000000 --- a/ports/sysdeps/arm/arm-mcount.S +++ /dev/null @@ -1,129 +0,0 @@ -/* Implementation of profiling support. ARM EABI version. - Copyright (C) 2008-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 - sfi_breg r0, \ - ldrne r0, [\B, #-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/ports/sysdeps/arm/armv6/rawmemchr.S b/ports/sysdeps/arm/armv6/rawmemchr.S deleted file mode 100644 index c34fdc6988..0000000000 --- a/ports/sysdeps/arm/armv6/rawmemchr.S +++ /dev/null @@ -1,109 +0,0 @@ -/* rawmemchr -- find a byte within an unsized memory block. - Copyright (C) 2013-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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. - sfi_breg r0, \ - ldrb r2, [\B] @ 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: sfi_breg r0, \ - ldrb r2, [\B, #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. - sfi_breg r0, \ - ldrd r2, r3, [\B], #8 - orr r1, r1, r1, lsl #8 @ Replicate C to all bytes -#ifdef ARCH_HAS_T2 - movw ip, #0x0101 - sfi_pld r0, #64 - movt ip, #0x0101 -#else - ldr ip, =0x01010101 - sfi_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 - sfi_pld r0, #128 - orrs r3, r3, r2 @ Test both words for found - it eq - sfi_breg r0, \ - ldrdeq r2, r3, [\B], #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/ports/sysdeps/arm/armv6/stpcpy.S b/ports/sysdeps/arm/armv6/stpcpy.S deleted file mode 100644 index 21a4f385be..0000000000 --- a/ports/sysdeps/arm/armv6/stpcpy.S +++ /dev/null @@ -1 +0,0 @@ -/* Defined in strcpy.S. */ diff --git a/ports/sysdeps/arm/armv6/strchr.S b/ports/sysdeps/arm/armv6/strchr.S deleted file mode 100644 index e4de0f3323..0000000000 --- a/ports/sysdeps/arm/armv6/strchr.S +++ /dev/null @@ -1,147 +0,0 @@ -/* strchr -- find the first instance of C in a nul-terminated string. - Copyright (C) 2013-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 - sfi_breg r0, \ - ldrb r2, [\B] @ 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: sfi_breg r0, \ - ldrb r2, [\B, #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) - - sfi_breg r0, \ - ldrd r2, r3, [\B], #8 - orr r1, r1, r1, lsl #8 @ Replicate C to all bytes -#ifdef ARCH_HAS_T2 - movw ip, #0x0101 - sfi_pld r0, #64 - movt ip, #0x0101 -#else - ldr ip, =0x01010101 - sfi_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 - sfi_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 - sfi_breg r0, \ - ldrdeq r2, r3, [\B], #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/ports/sysdeps/arm/armv6/strcpy.S b/ports/sysdeps/arm/armv6/strcpy.S deleted file mode 100644 index 833a83c28f..0000000000 --- a/ports/sysdeps/arm/armv6/strcpy.S +++ /dev/null @@ -1,231 +0,0 @@ -/* strcpy -- copy a nul-terminated string. - Copyright (C) 2013-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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: - sfi_pld r0 - sfi_pld r1 - - @ 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: sfi_breg r1, \ - ldrb r2, [\B], #1 - subs r3, r3, #1 @ ... the alignment point - sfi_breg r0, \ - strb r2, [\B], #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 - sfi_breg r1, \ - ldrd r2, r3, [\B], #8 - sfi_pld r0, #64 - sfi_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 - sfi_pld r1, #128 - cmp r4, #0 @ EOS in first word? - sfi_pld r0, #128 - bne 3f - sfi_breg r0, \ - str r2, [\B], #4 - cmp r5, #0 @ EOS in second word? - bne 4f - sfi_breg r0, \ - str r3, [\B], #4 - sfi_breg r1, \ - ldrd r2, r3, [\B], #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: - sfi_breg r1, \ - ldrb r2, [\B], #1 - cmp r2, #0 - sfi_breg r0, \ - strb r2, [\B], #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 - mvns r4, r4 @ 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 - sfi_breg r0, \ - strb r2, [\B], #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: mvns r5, r5 @ 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) - sfi_breg r0, \ - str r2, [\B], #4 - @ The "real" start of the unaligned copy loop. - sfi_breg r1, \ - ldrd r2, r3, [\B], #8 @ Load 8 more bytes - uqsub8 r4, r7, r2 @ Find EOS - sfi_pld r1, #128 - uqsub8 r5, r7, r3 - sfi_pld r0, #128 - mvns r4, r4 @ 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) - sfi_breg r0, \ - str r6, [\B], #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 - sfi_breg r0, \ - strb r2, [\B], #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/ports/sysdeps/arm/armv6/strlen.S b/ports/sysdeps/arm/armv6/strlen.S deleted file mode 100644 index 290d7bc86d..0000000000 --- a/ports/sysdeps/arm/armv6/strlen.S +++ /dev/null @@ -1,103 +0,0 @@ -/* strlen -- find the length of a nul-terminated string. - Copyright (C) 2013-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 - sfi_breg r0, \ - ldrb r2, [\B] @ 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: sfi_breg r0, \ - ldrb r2, [\B, #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. - sfi_breg r0, \ - ldrd r2, r3, [\B], #8 -#ifdef ARCH_HAS_T2 - movw ip, #0x0101 - sfi_pld r0, #64 - movt ip, #0x0101 -#else - ldr ip, =0x01010101 - sfi_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 - sfi_pld r0, #128 @ Prefetch 2 lines ahead - orrs r3, r3, r2 @ Combine the two words - it eq - sfi_breg r0, \ - ldrdeq r2, r3, [\B], #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/ports/sysdeps/arm/armv6/strrchr.S b/ports/sysdeps/arm/armv6/strrchr.S deleted file mode 100644 index a1e753c11b..0000000000 --- a/ports/sysdeps/arm/armv6/strrchr.S +++ /dev/null @@ -1,131 +0,0 @@ -/* strrchr -- find the last occurence of C in a nul-terminated string - Copyright (C) 2013-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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: sfi_breg r3, \ - ldrb r2, [\B], #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: sfi_breg r3, \ - ldrd r4, r5, [\B], #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/ports/sysdeps/arm/armv6t2/Implies b/ports/sysdeps/arm/armv6t2/Implies deleted file mode 100644 index 20a87fc8a5..0000000000 --- a/ports/sysdeps/arm/armv6t2/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# We can do everything that 6 can -arm/armv6 diff --git a/ports/sysdeps/arm/armv6t2/ffs.S b/ports/sysdeps/arm/armv6t2/ffs.S deleted file mode 100644 index b61624aedc..0000000000 --- a/ports/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-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/armv6t2/ffsll.S b/ports/sysdeps/arm/armv6t2/ffsll.S deleted file mode 100644 index 204ff80092..0000000000 --- a/ports/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-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/armv6t2/memchr.S b/ports/sysdeps/arm/armv6t2/memchr.S deleted file mode 100644 index 65bb94fe70..0000000000 --- a/ports/sysdeps/arm/armv6t2/memchr.S +++ /dev/null @@ -1,187 +0,0 @@ -/* Copyright (C) 2011-2014 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: - sfi_breg r0, \ - ldrb r3, [\B],#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: - sfi_breg r0, \ - ldrd r4,r5, [\B],#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 - sfi_breg r0, \ - ldrb r3,[\B],#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/ports/sysdeps/arm/armv6t2/strlen.S b/ports/sysdeps/arm/armv6t2/strlen.S deleted file mode 100644 index 1706f6c6b8..0000000000 --- a/ports/sysdeps/arm/armv6t2/strlen.S +++ /dev/null @@ -1,169 +0,0 @@ -/* Copyright (C) 2010-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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) - sfi_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. */ - sfi_pld src, #32 - bne.w .Lmisaligned8 - mov const_0, #0 - mov result, #-8 -.Lloop_aligned: - /* Bytes 0-7. */ - sfi_breg src, \ - ldrd data1a, data1b, [\B] - sfi_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. */ - sfi_breg src, \ - ldrd data1a, data1b, [\B, #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. */ - sfi_breg src, \ - ldrd data1a, data1b, [\B, #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. */ - sfi_breg src, \ - ldrd data1a, data1b, [\B, #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 - sfi_breg src, \ - ldrd data1a, data1b, [\B] - and tmp2, tmp1, #3 - rsb result, tmp1, #0 - lsl tmp2, tmp2, #3 /* Bytes -> bits. */ - tst tmp1, #4 - sfi_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/ports/sysdeps/arm/armv7/Implies b/ports/sysdeps/arm/armv7/Implies deleted file mode 100644 index c6cd0eb877..0000000000 --- a/ports/sysdeps/arm/armv7/Implies +++ /dev/null @@ -1,2 +0,0 @@ -# We can do everything that 6T2 can -arm/armv6t2 diff --git a/ports/sysdeps/arm/armv7/configure b/ports/sysdeps/arm/armv7/configure deleted file mode 100644 index 46e5d52df4..0000000000 --- a/ports/sysdeps/arm/armv7/configure +++ /dev/null @@ -1,72 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/arm/armv7. - -# We need binutils 2.21 to ensure that NEON alignments are assembled correctly. -libc_cv_arm_as_version_ok=yes -for ac_prog in $AS -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AS+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AS"; then - ac_cv_prog_AS="$AS" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AS="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AS=$ac_cv_prog_AS -if test -n "$AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 -$as_echo "$AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AS" && break -done - -if test -z "$AS"; then - ac_verc_fail=yes -else - # Found it, now check the version. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of $AS" >&5 -$as_echo_n "checking version of $AS... " >&6; } - ac_prog_version=`$AS --version 2>&1 | sed -n 's/^.*GNU assembler.* \([0-9]*\.[0-9.]*\).*$/\1/p'` - case $ac_prog_version in - '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - 2.1[0-9][0-9]*|2.2[1-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*) - ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; - *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; - - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 -$as_echo "$ac_prog_version" >&6; } -fi -if test $ac_verc_fail = yes; then - libc_cv_arm_as_version_ok=no -fi - - -if test $libc_cv_arm_as_version_ok != yes; then - as_fn_error $? "as version too old, at least 2.21 is required" "$LINENO" 5 -fi diff --git a/ports/sysdeps/arm/armv7/configure.ac b/ports/sysdeps/arm/armv7/configure.ac deleted file mode 100644 index 01e93ecd36..0000000000 --- a/ports/sysdeps/arm/armv7/configure.ac +++ /dev/null @@ -1,12 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/arm/armv7. - -# We need binutils 2.21 to ensure that NEON alignments are assembled correctly. -libc_cv_arm_as_version_ok=yes -AC_CHECK_PROG_VER(AS, $AS, --version, - [GNU assembler.* \([0-9]*\.[0-9.]*\)], - [2.1[0-9][0-9]*|2.2[1-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*], libc_cv_arm_as_version_ok=no) - -if test $libc_cv_arm_as_version_ok != yes; then - AC_MSG_ERROR([as version too old, at least 2.21 is required]) -fi diff --git a/ports/sysdeps/arm/armv7/multiarch/Makefile b/ports/sysdeps/arm/armv7/multiarch/Makefile deleted file mode 100644 index e834cc937f..0000000000 --- a/ports/sysdeps/arm/armv7/multiarch/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),string) -sysdep_routines += memcpy_neon memcpy_vfp -endif diff --git a/ports/sysdeps/arm/armv7/multiarch/aeabi_memcpy.c b/ports/sysdeps/arm/armv7/multiarch/aeabi_memcpy.c deleted file mode 100644 index c6a2a98a55..0000000000 --- a/ports/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/ports/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c b/ports/sysdeps/arm/armv7/multiarch/ifunc-impl-list.c deleted file mode 100644 index 2515418eda..0000000000 --- a/ports/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-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/armv7/multiarch/memcpy.S b/ports/sysdeps/arm/armv7/multiarch/memcpy.S deleted file mode 100644 index c4f4e80fb0..0000000000 --- a/ports/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-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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> - -#ifndef NOT_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/ports/sysdeps/arm/armv7/multiarch/memcpy_impl.S b/ports/sysdeps/arm/armv7/multiarch/memcpy_impl.S deleted file mode 100644 index 1562416cf6..0000000000 --- a/ports/sysdeps/arm/armv7/multiarch/memcpy_impl.S +++ /dev/null @@ -1,917 +0,0 @@ -/* NEON/VFP/ARM version of memcpy optimized for Cortex-A15. - Copyright (C) 2013-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 - sfi_breg dst, \ - vstr \vreg, [\B, #\base] - sfi_breg src, \ - vldr \vreg, [\B, #\base] - sfi_breg dst, \ - vstr d0, [\B, #\base + 8] - sfi_breg src, \ - vldr d0, [\B, #\base + 8] - sfi_breg dst, \ - vstr d1, [\B, #\base + 16] - sfi_breg src, \ - vldr d1, [\B, #\base + 16] - sfi_breg dst, \ - vstr d2, [\B, #\base + 24] - sfi_breg src, \ - vldr d2, [\B, #\base + 24] - sfi_breg dst, \ - vstr \vreg, [\B, #\base + 32] - sfi_breg src, \ - vldr \vreg, [\B, #\base + prefetch_lines * 64 - 32] - sfi_breg dst, \ - vstr d0, [\B, #\base + 40] - sfi_breg src, \ - vldr d0, [\B, #\base + 40] - sfi_breg dst, \ - vstr d1, [\B, #\base + 48] - sfi_breg src, \ - vldr d1, [\B, #\base + 48] - sfi_breg dst, \ - vstr d2, [\B, #\base + 56] - sfi_breg src, \ - vldr d2, [\B, #\base + 56] - .endm - - .macro cpy_tail_vfp vreg, base - sfi_breg dst, \ - vstr \vreg, [\B, #\base] - sfi_breg src, \ - vldr \vreg, [\B, #\base] - sfi_breg dst, \ - vstr d0, [\B, #\base + 8] - sfi_breg src, \ - vldr d0, [\B, #\base + 8] - sfi_breg dst, \ - vstr d1, [\B, #\base + 16] - sfi_breg src, \ - vldr d1, [\B, #\base + 16] - sfi_breg dst, \ - vstr d2, [\B, #\base + 24] - sfi_breg src, \ - vldr d2, [\B, #\base + 24] - sfi_breg dst, \ - vstr \vreg, [\B, #\base + 32] - sfi_breg dst, \ - vstr d0, [\B, #\base + 40] - sfi_breg src, \ - vldr d0, [\B, #\base + 40] - sfi_breg dst, \ - vstr d1, [\B, #\base + 48] - sfi_breg src, \ - vldr d1, [\B, #\base + 48] - sfi_breg dst, \ - vstr d2, [\B, #\base + 56] - sfi_breg src, \ - vldr d2, [\B, #\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 - - /* These are used by the NaCl sfi_breg macro. */ - .macro _sfi_breg_dmask_neon_load_d0 reg - _sfi_dmask \reg - .endm - .macro _sfi_breg_dmask_neon_store_d0 reg - _sfi_dmask \reg - .endm - - and tmp1, count, #0x38 - .macro dispatch_step i - sfi_breg src, neon_load_d0 \B - sfi_breg dst, neon_store_d0 \B - .endm - dispatch_7_dword - - tst count, #4 - sfi_breg src, \ - ldrne tmp1, [\B], #4 - sfi_breg dst, \ - strne tmp1, [\B], #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 - sfi_breg src, \ - ldr tmp1, [\B, #-(\i * 4)] - sfi_breg dst, \ - str tmp1, [\B, #-(\i * 4)] - .endm - dispatch_15_word -#endif - - lsls count, count, #31 - sfi_breg src, \ - ldrhcs tmp1, [\B], #2 - sfi_breg src, \ - ldrbne src, [\B] /* Src is dead, use as a scratch. */ - sfi_breg dst, \ - strhcs tmp1, [\B], #2 - sfi_breg dst, \ - strbne src, [\B] - 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 - sfi_breg src, \ - ldrmi tmp1, [\B], #4 - sfi_breg dst, \ - strmi tmp1, [\B], #4 - lsls tmp2, tmp2, #2 - sfi_breg src, \ - ldrhcs tmp1, [\B], #2 - sfi_breg src, \ - ldrbne tmp2, [\B], #1 - sfi_breg dst, \ - strhcs tmp1, [\B], #2 - sfi_breg dst, \ - strbne tmp2, [\B], #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: - sfi_breg src, \ - vldr d0, [\B, #0] - subs tmp2, tmp2, #64 - sfi_breg src, \ - vldr d1, [\B, #8] - sfi_breg dst, \ - vstr d0, [\B, #0] - sfi_breg src, \ - vldr d0, [\B, #16] - sfi_breg dst, \ - vstr d1, [\B, #8] - sfi_breg src, \ - vldr d1, [\B, #24] - sfi_breg dst, \ - vstr d0, [\B, #16] - sfi_breg src, \ - vldr d0, [\B, #32] - sfi_breg dst, \ - vstr d1, [\B, #24] - sfi_breg src, \ - vldr d1, [\B, #40] - sfi_breg dst, \ - vstr d0, [\B, #32] - sfi_breg src, \ - vldr d0, [\B, #48] - sfi_breg dst, \ - vstr d1, [\B, #40] - sfi_breg src, \ - vldr d1, [\B, #56] - sfi_breg dst, \ - vstr d0, [\B, #48] - add src, src, #64 - sfi_breg dst, \ - vstr d1, [\B, #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 - sfi_breg src, \ - vldr d0, [\B, #-(\i * 8)] - sfi_breg dst, \ - vstr d0, [\B, #-(\i * 8)] - .endm - dispatch_7_dword -#else - sub src, src, #8 - sub dst, dst, #8 -1: - sfi_breg src, \ - ldrd A_l, A_h, [\B, #8] - sfi_breg dst, \ - strd A_l, A_h, [\B, #8] - sfi_breg src, \ - ldrd A_l, A_h, [\B, #16] - sfi_breg dst, \ - strd A_l, A_h, [\B, #16] - sfi_breg src, \ - ldrd A_l, A_h, [\B, #24] - sfi_breg dst, \ - strd A_l, A_h, [\B, #24] - sfi_breg src, \ - ldrd A_l, A_h, [\B, #32] - sfi_breg dst, \ - strd A_l, A_h, [\B, #32] - sfi_breg src, \ - ldrd A_l, A_h, [\B, #40] - sfi_breg dst, \ - strd A_l, A_h, [\B, #40] - sfi_breg src, \ - ldrd A_l, A_h, [\B, #48] - sfi_breg dst, \ - strd A_l, A_h, [\B, #48] - sfi_breg src, \ - ldrd A_l, A_h, [\B, #56] - sfi_breg dst, \ - strd A_l, A_h, [\B, #56] - sfi_breg src, \ - ldrd A_l, A_h, [\B, #64]! - sfi_breg dst, \ - strd A_l, A_h, [\B, #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 - sfi_breg src, \ - ldrd A_l, A_h, [\B, #-(\i * 8)] - sfi_breg dst, \ - strd A_l, A_h, [\B, #-(\i * 8)] - .endm - dispatch_7_dword -#endif - - tst tmp2, #4 - sfi_breg src, \ - ldrne tmp1, [\B], #4 - sfi_breg dst, \ - strne tmp1, [\B], #4 - lsls tmp2, tmp2, #31 /* Count (tmp2) now dead. */ - sfi_breg src, \ - ldrhcs tmp1, [\B], #2 - sfi_breg src, \ - ldrbne tmp2, [\B] - sfi_breg dst, \ - strhcs tmp1, [\B], #2 - sfi_breg dst, \ - strbne tmp2, [\B] - -.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. */ - - sfi_breg src, \ - vldr d3, [\B, #0] - sfi_breg src, \ - vldr d4, [\B, #64] - sfi_breg src, \ - vldr d5, [\B, #128] - sfi_breg src, \ - vldr d6, [\B, #192] - sfi_breg src, \ - vldr d7, [\B, #256] - - sfi_breg src, \ - vldr d0, [\B, #8] - sfi_breg src, \ - vldr d1, [\B, #16] - sfi_breg src, \ - vldr d2, [\B, #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 - sfi_breg dst, \ - vstr d7, [\B, #64] - sfi_breg src, \ - vldr d7, [\B, #64] - sfi_breg dst, \ - vstr d0, [\B, #64 + 8] - sfi_breg src, \ - vldr d0, [\B, #64 + 8] - sfi_breg dst, \ - vstr d1, [\B, #64 + 16] - sfi_breg src, \ - vldr d1, [\B, #64 + 16] - sfi_breg dst, \ - vstr d2, [\B, #64 + 24] - sfi_breg src, \ - vldr d2, [\B, #64 + 24] - sfi_breg dst, \ - vstr d7, [\B, #64 + 32] - add src, src, #96 - sfi_breg dst, \ - vstr d0, [\B, #64 + 40] - sfi_breg dst, \ - vstr d1, [\B, #64 + 48] - sfi_breg dst, \ - vstr d2, [\B, #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 - sfi_pld src, #8 - sfi_pld src, #72 - subs tmp2, tmp2, #64 - sfi_pld src, #136 - sfi_breg src, \ - ldrd A_l, A_h, [\B, #8] - strd B_l, B_h, [sp, #8] - cfi_rel_offset (B_l, 8) - cfi_rel_offset (B_h, 12) - sfi_breg src, \ - ldrd B_l, B_h, [\B, #16] - strd C_l, C_h, [sp, #16] - cfi_rel_offset (C_l, 16) - cfi_rel_offset (C_h, 20) - sfi_breg src, \ - ldrd C_l, C_h, [\B, #24] - strd D_l, D_h, [sp, #24] - cfi_rel_offset (D_l, 24) - cfi_rel_offset (D_h, 28) - sfi_pld src, #200 - sfi_breg src, \ - ldrd D_l, D_h, [\B, #32]! - b 1f - .p2align 6 -2: - sfi_pld src, #232 - sfi_breg dst, \ - strd A_l, A_h, [\B, #40] - sfi_breg src, \ - ldrd A_l, A_h, [\B, #40] - sfi_breg dst, \ - strd B_l, B_h, [\B, #48] - sfi_breg src, \ - ldrd B_l, B_h, [\B, #48] - sfi_breg dst, \ - strd C_l, C_h, [\B, #56] - sfi_breg src, \ - ldrd C_l, C_h, [\B, #56] - sfi_breg dst, \ - strd D_l, D_h, [\B, #64]! - sfi_breg src, \ - ldrd D_l, D_h, [\B, #64]! - subs tmp2, tmp2, #64 -1: - sfi_breg dst, \ - strd A_l, A_h, [\B, #8] - sfi_breg src, \ - ldrd A_l, A_h, [\B, #8] - sfi_breg dst, \ - strd B_l, B_h, [\B, #16] - sfi_breg src, \ - ldrd B_l, B_h, [\B, #16] - sfi_breg dst, \ - strd C_l, C_h, [\B, #24] - sfi_breg src, \ - ldrd C_l, C_h, [\B, #24] - sfi_breg dst, \ - strd D_l, D_h, [\B, #32] - sfi_breg src, \ - ldrd D_l, D_h, [\B, #32] - bcs 2b - /* Save the remaining bytes and restore the callee-saved regs. */ - sfi_breg dst, \ - strd A_l, A_h, [\B, #40] - add src, src, #40 - sfi_breg dst, \ - strd B_l, B_h, [\B, #48] - ldrd B_l, B_h, [sp, #8] - cfi_restore (B_l) - cfi_restore (B_h) - sfi_breg dst, \ - strd C_l, C_h, [\B, #56] - ldrd C_l, C_h, [sp, #16] - cfi_restore (C_l) - cfi_restore (C_h) - sfi_breg dst, \ - strd D_l, D_h, [\B, #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: - sfi_pld src - sfi_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 - sfi_pld src, #(2 * 64) - beq 1f - rsbs tmp2, tmp2, #0 - sub count, count, tmp2, lsr #29 - sfi_breg src, \ - ldrmi tmp1, [\B], #4 - sfi_breg dst, \ - strmi tmp1, [\B], #4 - lsls tmp2, tmp2, #2 - sfi_breg src, \ - ldrbne tmp1, [\B], #1 - sfi_breg src, \ - ldrhcs tmp2, [\B], #2 - sfi_breg dst, \ - strbne tmp1, [\B], #1 - sfi_breg dst, \ - strhcs tmp2, [\B], #2 -1: - sfi_pld src, #(3 * 64) - subs count, count, #64 - ldrmi tmp2, [sp], #FRAME_SIZE - bmi .Ltail63unaligned - sfi_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 - - /* These are used by the NaCl sfi_breg macro. */ - .macro _sfi_breg_dmask_neon_load_multi reg - _sfi_dmask \reg - .endm - .macro _sfi_breg_dmask_neon_store_multi reg - _sfi_dmask \reg - .endm - - sfi_breg src, neon_load_multi d0-d3, \B - sfi_breg src, neon_load_multi d4-d7, \B - subs count, count, #64 - bmi 2f -1: - sfi_pld src, #(4 * 64) - sfi_breg dst, neon_store_multi d0-d3, \B - sfi_breg src, neon_load_multi d0-d3, \B - sfi_breg dst, neon_store_multi d4-d7, \B - sfi_breg src, neon_load_multi d4-d7, \B - subs count, count, #64 - bpl 1b -2: - sfi_breg dst, neon_store_multi d0-d3, \B - sfi_breg dst, neon_store_multi d4-d7, \B - 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. */ - sfi_breg src, \ - ldr A_l, [\B, #4] - sfi_breg src, \ - ldr A_h, [\B, #8] - strd B_l, B_h, [sp, #8] - cfi_rel_offset (B_l, 8) - cfi_rel_offset (B_h, 12) - sfi_breg src, \ - ldr B_l, [\B, #12] - sfi_breg src, \ - ldr B_h, [\B, #16] - strd C_l, C_h, [sp, #16] - cfi_rel_offset (C_l, 16) - cfi_rel_offset (C_h, 20) - sfi_breg src, \ - ldr C_l, [\B, #20] - sfi_breg src, \ - ldr C_h, [\B, #24] - strd D_l, D_h, [sp, #24] - cfi_rel_offset (D_l, 24) - cfi_rel_offset (D_h, 28) - sfi_breg src, \ - ldr D_l, [\B, #28] - sfi_breg src, \ - ldr D_h, [\B, #32]! - b 1f - .p2align 6 -2: - sfi_pld src, #(5 * 64) - (32 - 4) - sfi_breg dst, \ - strd A_l, A_h, [\B, #40] - sfi_breg src, \ - ldr A_l, [\B, #36] - sfi_breg src, \ - ldr A_h, [\B, #40] - sfi_breg dst, \ - strd B_l, B_h, [\B, #48] - sfi_breg src, \ - ldr B_l, [\B, #44] - sfi_breg src, \ - ldr B_h, [\B, #48] - sfi_breg dst, \ - strd C_l, C_h, [\B, #56] - sfi_breg src, \ - ldr C_l, [\B, #52] - sfi_breg src, \ - ldr C_h, [\B, #56] - sfi_breg dst, \ - strd D_l, D_h, [\B, #64]! - sfi_breg src, \ - ldr D_l, [\B, #60] - sfi_breg src, \ - ldr D_h, [\B, #64]! - subs tmp2, tmp2, #64 -1: - sfi_breg dst, \ - strd A_l, A_h, [\B, #8] - sfi_breg src, \ - ldr A_l, [\B, #4] - sfi_breg src, \ - ldr A_h, [\B, #8] - sfi_breg dst, \ - strd B_l, B_h, [\B, #16] - sfi_breg src, \ - ldr B_l, [\B, #12] - sfi_breg src, \ - ldr B_h, [\B, #16] - sfi_breg dst, \ - strd C_l, C_h, [\B, #24] - sfi_breg src, \ - ldr C_l, [\B, #20] - sfi_breg src, \ - ldr C_h, [\B, #24] - sfi_breg dst, \ - strd D_l, D_h, [\B, #32] - sfi_breg src, \ - ldr D_l, [\B, #28] - sfi_breg src, \ - ldr D_h, [\B, #32] - bcs 2b - - /* Save the remaining bytes and restore the callee-saved regs. */ - sfi_breg dst, \ - strd A_l, A_h, [\B, #40] - add src, src, #36 - sfi_breg dst, \ - strd B_l, B_h, [\B, #48] - ldrd B_l, B_h, [sp, #8] - cfi_restore (B_l) - cfi_restore (B_h) - sfi_breg dst, \ - strd C_l, C_h, [\B, #56] - ldrd C_l, C_h, [sp, #16] - cfi_restore (C_l) - cfi_restore (C_h) - sfi_breg dst, \ - strd D_l, D_h, [\B, #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/ports/sysdeps/arm/armv7/multiarch/memcpy_neon.S b/ports/sysdeps/arm/armv7/multiarch/memcpy_neon.S deleted file mode 100644 index e60d1cc0e1..0000000000 --- a/ports/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/ports/sysdeps/arm/armv7/multiarch/memcpy_vfp.S b/ports/sysdeps/arm/armv7/multiarch/memcpy_vfp.S deleted file mode 100644 index e008c041ed..0000000000 --- a/ports/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/ports/sysdeps/arm/backtrace.c b/ports/sysdeps/arm/backtrace.c deleted file mode 100644 index 15ba506411..0000000000 --- a/ports/sysdeps/arm/backtrace.c +++ /dev/null @@ -1,125 +0,0 @@ -/* Return backtrace of current program state. - Copyright (C) 2008-2014 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 <bits/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 (array, size) - void **array; - int size; -{ - struct trace_arg arg = { .array = array, .size = size, .cnt = -1 }; -#ifdef SHARED - __libc_once_define (static, once); - - __libc_once (once, init); - if (unwind_backtrace == NULL) - return 0; -#endif - - if (size >= 1) - 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/ports/sysdeps/arm/bits/atomic.h b/ports/sysdeps/arm/bits/atomic.h deleted file mode 100644 index c2d5be5703..0000000000 --- a/ports/sysdeps/arm/bits/atomic.h +++ /dev/null @@ -1,159 +0,0 @@ -/* Atomic operations. Pure ARM version. - Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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; - -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 bits/atomic.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. */ -#if __GNUC_PREREQ (4, 7) && defined __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_bool_rel(mem, new, old) \ - __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \ - mem, new, old, __ATOMIC_RELEASE) - -# 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 (); oldval; }) - -# define __arch_compare_and_exchange_bool_16_int(mem, newval, oldval, model) \ - ({__arm_link_error (); oldval; }) - -# 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 (); oldval; }) - -# 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; }) - -#elif defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 -/* Atomic compare and exchange. */ -# define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - __sync_val_compare_and_swap ((mem), (oldval), (newval)) -#else -# define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - __arm_assisted_compare_and_exchange_val_32_acq ((mem), (newval), (oldval)) -#endif - -#if !__GNUC_PREREQ (4, 7) || !defined (__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 bits/atomic.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/ports/sysdeps/arm/bits/endian.h b/ports/sysdeps/arm/bits/endian.h deleted file mode 100644 index f49f6ab1c9..0000000000 --- a/ports/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/ports/sysdeps/arm/bits/fenv.h b/ports/sysdeps/arm/bits/fenv.h deleted file mode 100644 index c7f5876c5c..0000000000 --- a/ports/sysdeps/arm/bits/fenv.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 2004-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 diff --git a/ports/sysdeps/arm/bits/link.h b/ports/sysdeps/arm/bits/link.h deleted file mode 100644 index 9412cf8800..0000000000 --- a/ports/sysdeps/arm/bits/link.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/bits/linkmap.h b/ports/sysdeps/arm/bits/linkmap.h deleted file mode 100644 index 7c2b4a6da8..0000000000 --- a/ports/sysdeps/arm/bits/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/ports/sysdeps/arm/bits/mathdef.h b/ports/sysdeps/arm/bits/mathdef.h deleted file mode 100644 index be727e5b8d..0000000000 --- a/ports/sysdeps/arm/bits/mathdef.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 1999-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/>. */ - -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" -#endif - -#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF -# define _MATH_H_MATHDEF 1 - -/* GCC does not promote `float' values to `double'. */ -typedef float float_t; /* `float' expressions are evaluated as - `float'. */ -typedef double double_t; /* `double' expressions are evaluated as - `double'. */ - -/* The values returned by `ilogb' for 0 and NaN respectively. */ -# define FP_ILOGB0 (-2147483647) -# define FP_ILOGBNAN (2147483647) - -/* The GCC 4.6 compiler will define __FP_FAST_FMA{,F,L} if the fma{,f,l} - builtins are supported. */ -# if __FP_FAST_FMA -# define FP_FAST_FMA 1 -# endif - -# if __FP_FAST_FMAF -# define FP_FAST_FMAF 1 -# endif - -# if __FP_FAST_FMAL -# define FP_FAST_FMAL 1 -# endif - -#endif /* ISO C99 */ - -#ifndef __NO_LONG_DOUBLE_MATH -/* Signal that we do not really have a `long double'. This disables the - declaration of all the `long double' function variants. */ -# define __NO_LONG_DOUBLE_MATH 1 -#endif diff --git a/ports/sysdeps/arm/bits/setjmp.h b/ports/sysdeps/arm/bits/setjmp.h deleted file mode 100644 index 41423b2c3b..0000000000 --- a/ports/sysdeps/arm/bits/setjmp.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2004-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 27 words - are occupied by v1-v6, sl, fp, sp, pc, and d8-d15. (Note that - d8-15 require 17 words, due to the use of fstmx.) */ -typedef int __jmp_buf[64] __attribute__((__aligned__ (8))); -#endif - -#endif diff --git a/ports/sysdeps/arm/bsd-_setjmp.S b/ports/sysdeps/arm/bsd-_setjmp.S deleted file mode 100644 index e8c5b245bf..0000000000 --- a/ports/sysdeps/arm/bsd-_setjmp.S +++ /dev/null @@ -1,29 +0,0 @@ -/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. ARM version. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/bsd-setjmp.S b/ports/sysdeps/arm/bsd-setjmp.S deleted file mode 100644 index 682e8130f1..0000000000 --- a/ports/sysdeps/arm/bsd-setjmp.S +++ /dev/null @@ -1,28 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. ARM version. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/configure b/ports/sysdeps/arm/configure deleted file mode 100644 index d79ef76ec9..0000000000 --- a/ports/sysdeps/arm/configure +++ /dev/null @@ -1,205 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/arm. - -#AC_DEFINE(PI_STATIC_AND_HIDDEN) - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the CFI directive .cfi_sections is supported" >&5 -$as_echo_n "checking whether the CFI directive .cfi_sections is supported... " >&6; } -if ${libc_cv_asm_cfi_directive_sections+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.s <<EOF - .text - .cfi_sections .debug_frame, .eh_frame - .cfi_startproc - .cfi_endproc -EOF - if { ac_try='${CC-cc} $ASFLAGS -c conftest.s 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - libc_cv_asm_cfi_directive_sections=yes - else - libc_cv_asm_cfi_directive_sections=no - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_cfi_directive_sections" >&5 -$as_echo "$libc_cv_asm_cfi_directive_sections" >&6; } -if test $libc_cv_asm_cfi_directive_sections != yes; then - as_fn_error $? "need .cfi_sections in this configuration" "$LINENO" 5 -fi - -# 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" - { test -f "$ac_path_GREP" && $as_test_x "$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" - { test -f "$ac_path_EGREP" && $as_test_x "$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 diff --git a/ports/sysdeps/arm/configure.ac b/ports/sysdeps/arm/configure.ac deleted file mode 100644 index d66500b3fd..0000000000 --- a/ports/sysdeps/arm/configure.ac +++ /dev/null @@ -1,46 +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. -dnl NOTE: This feature was added by the GCC TLS patches. We should test for -dnl it. Until we do, don't define it. -#AC_DEFINE(PI_STATIC_AND_HIDDEN) - -AC_CACHE_CHECK([whether the CFI directive .cfi_sections is supported], - [libc_cv_asm_cfi_directive_sections], - [cat > conftest.s <<EOF - .text - .cfi_sections .debug_frame, .eh_frame - .cfi_startproc - .cfi_endproc -EOF - if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then - libc_cv_asm_cfi_directive_sections=yes - else - libc_cv_asm_cfi_directive_sections=no - fi - rm -f conftest*]) -if test $libc_cv_asm_cfi_directive_sections != yes; then - AC_MSG_ERROR([need .cfi_sections in this configuration]) -fi - -# 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 diff --git a/ports/sysdeps/arm/crti.S b/ports/sysdeps/arm/crti.S deleted file mode 100644 index d053e17ddb..0000000000 --- a/ports/sysdeps/arm/crti.S +++ /dev/null @@ -1,95 +0,0 @@ -/* Special .init and .fini section support for ARM. - Copyright (C) 1995-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser 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/ports/sysdeps/arm/crtn.S b/ports/sysdeps/arm/crtn.S deleted file mode 100644 index d3254ad41f..0000000000 --- a/ports/sysdeps/arm/crtn.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Special .init and .fini section support for ARM. - Copyright (C) 1995-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser 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/ports/sysdeps/arm/dl-irel.h b/ports/sysdeps/arm/dl-irel.h deleted file mode 100644 index 5c89ce496b..0000000000 --- a/ports/sysdeps/arm/dl-irel.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - ARM version. - Copyright (C) 2009-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/dl-lookupcfg.h b/ports/sysdeps/arm/dl-lookupcfg.h deleted file mode 100644 index 20b6fc626e..0000000000 --- a/ports/sysdeps/arm/dl-lookupcfg.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Configuration of lookup functions. - Copyright (C) 2006-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/dl-machine.h b/ports/sysdeps/arm/dl-machine.h deleted file mode 100644 index 02d1a5ebdf..0000000000 --- a/ports/sysdeps/arm/dl-machine.h +++ /dev/null @@ -1,662 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. ARM version. - Copyright (C) 1995-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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_internal(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_NOCOPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. */ -#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)) -#else -#define elf_machine_type_class(type) \ - ((((type) == R_ARM_JUMP_SLOT) * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_ARM_COPY) * ELF_RTYPE_CLASS_COPY)) -#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 - -/* 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 - { - value = sym->st_value + td->argument.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; - 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_addr; - 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. We fill the - last with the resolver address */ - assert (td->entry == 0); - 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/ports/sysdeps/arm/dl-sysdep.h b/ports/sysdeps/arm/dl-sysdep.h deleted file mode 100644 index e9c86dfc12..0000000000 --- a/ports/sysdeps/arm/dl-sysdep.h +++ /dev/null @@ -1,23 +0,0 @@ -/* System-specific settings for dynamic linker code. Alpha version. - Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 diff --git a/ports/sysdeps/arm/dl-tls.h b/ports/sysdeps/arm/dl-tls.h deleted file mode 100644 index 8dea3672f0..0000000000 --- a/ports/sysdeps/arm/dl-tls.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. ARM version. - Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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); - -/* Value used for dtv entries for which the allocation is delayed. */ -#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/ports/sysdeps/arm/dl-tlsdesc.S b/ports/sysdeps/arm/dl-tlsdesc.S deleted file mode 100644 index 1644a32793..0000000000 --- a/ports/sysdeps/arm/dl-tlsdesc.S +++ /dev/null @@ -1,226 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. ARM version. - Copyright (C) 2006-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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: - sfi_breg r0, \ - ldr r0, [\B] - 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) - sfi_breg r0, \ - ldr r1, [\B] /* td */ - GET_TLS (lr) - mov r4, r0 /* r4 = tp */ - sfi_breg r0, \ - ldr r0, [\B] - sfi_breg r1, \ - ldr r2, [\B, #8] /* gen_count */ - sfi_breg r0, \ - ldr r3, [\B] - cmp r2, r3 - bhi 1f - sfi_breg r1, \ - ldr r3, [\B] -#ifndef ARM_NO_INDEX_REGISTER - ldr r2, [r0, r3, lsl #3] -#else - add lr, r0, r3, lsl #3 - sfi_breg lr, \ - ldr r2, [\B] -#endif - cmn r2, #1 - ittt ne - sfi_breg r1, \ - 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) - sfi_breg r0, \ - ldr r1, [\B, #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. - Same ABI as the lazy resolver itself. */ - .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: - /* 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) - adr r2, _dl_tlsdesc_resolve_hold - bl _dl_tlsdesc_resolve_hold_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) - sfi_breg r0, \ - ldr r1, [\B, #4] - BX (r1) - eabi_fnend - cfi_endproc - .size _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold diff --git a/ports/sysdeps/arm/dl-tlsdesc.h b/ports/sysdeps/arm/dl-tlsdesc.h deleted file mode 100644 index 27a5d5d948..0000000000 --- a/ports/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-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (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/ports/sysdeps/arm/dl-trampoline.S b/ports/sysdeps/arm/dl-trampoline.S deleted file mode 100644 index 2b7033b896..0000000000 --- a/ports/sysdeps/arm/dl-trampoline.S +++ /dev/null @@ -1,212 +0,0 @@ -/* PLT trampolines. ARM version. - Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/fclrexcpt.c b/ports/sysdeps/arm/fclrexcpt.c deleted file mode 100644 index 8b54114e37..0000000000 --- a/ports/sysdeps/arm/fclrexcpt.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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) -{ - if (ARM_HAVE_VFP) - { - unsigned long int temp; - - /* Mask out unsupported bits/exceptions. */ - excepts &= FE_ALL_EXCEPT; - - /* Get the current floating point status. */ - _FPU_GETCW (temp); - - /* Clear the relevant bits. */ - temp = (temp & ~FE_ALL_EXCEPT) | (temp & FE_ALL_EXCEPT & ~excepts); - - /* Put the new data in effect. */ - _FPU_SETCW (temp); - - /* Success. */ - return 0; - } - - /* Unsupported, so fail unless nothing needs to be done. */ - return (excepts != 0); -} - -#include <shlib-compat.h> -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feclearexcept, __old_feclearexcept) -compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1); -#endif - -libm_hidden_ver (__feclearexcept, feclearexcept) -versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2); diff --git a/ports/sysdeps/arm/fedisblxcpt.c b/ports/sysdeps/arm/fedisblxcpt.c deleted file mode 100644 index 88da539439..0000000000 --- a/ports/sysdeps/arm/fedisblxcpt.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2001-2014 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) -{ - if (ARM_HAVE_VFP) - { - unsigned long int new_exc, old_exc; - - _FPU_GETCW(new_exc); - - old_exc = (new_exc >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; - - excepts &= FE_ALL_EXCEPT; - - new_exc &= ~(excepts << FE_EXCEPT_SHIFT); - - _FPU_SETCW(new_exc); - - return old_exc; - } - - /* Unsupported, so return -1 for failure. */ - return -1; -} diff --git a/ports/sysdeps/arm/feenablxcpt.c b/ports/sysdeps/arm/feenablxcpt.c deleted file mode 100644 index b286ec5565..0000000000 --- a/ports/sysdeps/arm/feenablxcpt.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2001-2014 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) -{ - if (ARM_HAVE_VFP) - { - unsigned long int new_exc, old_exc; - - _FPU_GETCW(new_exc); - - old_exc = (new_exc >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; - - excepts &= FE_ALL_EXCEPT; - - new_exc |= (excepts << FE_EXCEPT_SHIFT); - - _FPU_SETCW(new_exc); - - if (excepts != 0) - { - /* VFPv3 and VFPv4 do not support trapping exceptions, so - test whether the relevant bits were set and fail if - not. */ - unsigned int temp; - _FPU_GETCW (temp); - if ((temp & (excepts << FE_EXCEPT_SHIFT)) - != (excepts << FE_EXCEPT_SHIFT)) - return -1; - } - - return old_exc; - } - - /* Unsupported, so return -1 for failure. */ - return -1; -} diff --git a/ports/sysdeps/arm/fegetenv.c b/ports/sysdeps/arm/fegetenv.c deleted file mode 100644 index 7003a01304..0000000000 --- a/ports/sysdeps/arm/fegetenv.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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) -{ - if (ARM_HAVE_VFP) - { - unsigned long int temp; - _FPU_GETCW (temp); - envp->__cw = temp; - - /* Success. */ - return 0; - } - - /* Unsupported, so fail. */ - return 1; -} - -#include <shlib-compat.h> -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetenv, __old_fegetenv) -compat_symbol (libm, __old_fegetenv, fegetenv, GLIBC_2_1); -#endif - -libm_hidden_ver (__fegetenv, fegetenv) -versioned_symbol (libm, __fegetenv, fegetenv, GLIBC_2_2); diff --git a/ports/sysdeps/arm/fegetexcept.c b/ports/sysdeps/arm/fegetexcept.c deleted file mode 100644 index 5974c63336..0000000000 --- a/ports/sysdeps/arm/fegetexcept.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Get floating-point exceptions. - Copyright (C) 2001-2014 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) -{ - if (ARM_HAVE_VFP) - { - unsigned long temp; - - _FPU_GETCW (temp); - - return (temp >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; - } - - /* Unsupported. Return all exceptions disabled. */ - return 0; -} diff --git a/ports/sysdeps/arm/fegetround.c b/ports/sysdeps/arm/fegetround.c deleted file mode 100644 index cb4cf1bce2..0000000000 --- a/ports/sysdeps/arm/fegetround.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 2004-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 -fegetround (void) -{ - if (ARM_HAVE_VFP) - { - unsigned int temp; - - /* Get the current environment. */ - _FPU_GETCW (temp); - - return temp & FE_TOWARDZERO; - } - - /* The current soft-float implementation only handles TONEAREST. */ - return FE_TONEAREST; -} -libm_hidden_def (fegetround) diff --git a/ports/sysdeps/arm/feholdexcpt.c b/ports/sysdeps/arm/feholdexcpt.c deleted file mode 100644 index 9ca673c6fb..0000000000 --- a/ports/sysdeps/arm/feholdexcpt.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 -feholdexcept (fenv_t *envp) -{ - if (ARM_HAVE_VFP) - { - unsigned long int temp; - - /* Store the environment. */ - _FPU_GETCW(temp); - envp->__cw = temp; - - /* Now set all exceptions to non-stop. */ - temp &= ~(FE_ALL_EXCEPT << FE_EXCEPT_SHIFT); - - /* And clear all exception flags. */ - temp &= ~FE_ALL_EXCEPT; - - _FPU_SETCW(temp); - - return 0; - } - - /* Unsupported, so fail. */ - return 1; -} - -libm_hidden_def (feholdexcept) diff --git a/ports/sysdeps/arm/fesetenv.c b/ports/sysdeps/arm/fesetenv.c deleted file mode 100644 index af4f25d47d..0000000000 --- a/ports/sysdeps/arm/fesetenv.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 2004-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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) -{ - if (ARM_HAVE_VFP) - { - unsigned int temp; - - _FPU_GETCW (temp); - temp &= _FPU_RESERVED; - - if (envp == FE_DFL_ENV) - temp |= _FPU_DEFAULT; - else if (envp == FE_NOMASK_ENV) - temp |= _FPU_IEEE; - else - temp |= envp->__cw & ~_FPU_RESERVED; - - _FPU_SETCW (temp); - - if (envp == FE_NOMASK_ENV) - { - /* VFPv3 and VFPv4 do not support trapping exceptions, so - test whether the relevant bits were set and fail if - not. */ - _FPU_GETCW (temp); - if ((temp & _FPU_IEEE) != _FPU_IEEE) - return 1; - } - - /* Success. */ - return 0; - } - - /* Unsupported, so fail. */ - return 1; -} - -#include <shlib-compat.h> -libm_hidden_ver (__fesetenv, fesetenv) -versioned_symbol (libm, __fesetenv, fesetenv, GLIBC_2_2); diff --git a/ports/sysdeps/arm/fesetround.c b/ports/sysdeps/arm/fesetround.c deleted file mode 100644 index 6f533d1992..0000000000 --- a/ports/sysdeps/arm/fesetround.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 2004-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 -fesetround (int round) -{ - if (ARM_HAVE_VFP) - { - fpu_control_t temp; - - switch (round) - { - case FE_TONEAREST: - case FE_UPWARD: - case FE_DOWNWARD: - case FE_TOWARDZERO: - _FPU_GETCW (temp); - temp = (temp & ~FE_TOWARDZERO) | round; - _FPU_SETCW (temp); - return 0; - default: - return 1; - } - } - else if (round == FE_TONEAREST) - /* This is the only supported rounding mode for soft-fp. */ - return 0; - - /* Unsupported, so fail. */ - return 1; -} - -libm_hidden_def (fesetround) diff --git a/ports/sysdeps/arm/feupdateenv.c b/ports/sysdeps/arm/feupdateenv.c deleted file mode 100644 index 58ec5f66db..0000000000 --- a/ports/sysdeps/arm/feupdateenv.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 1997-2014 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) -{ - if (ARM_HAVE_VFP) - { - unsigned int temp; - - /* Get the current exception state. */ - _FPU_GETCW (temp); - - /* Install new environment. */ - fesetenv (envp); - - /* Raise the saved exceptions. */ - feraiseexcept (temp & FE_ALL_EXCEPT); - - /* Success. */ - return 0; - } - - /* Unsupported, so fail. */ - return 1; -} - -#include <shlib-compat.h> -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__feupdateenv, __old_feupdateenv) -compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1); -#endif - -libm_hidden_ver (__feupdateenv, feupdateenv) -versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2); diff --git a/ports/sysdeps/arm/fgetexcptflg.c b/ports/sysdeps/arm/fgetexcptflg.c deleted file mode 100644 index 114597990a..0000000000 --- a/ports/sysdeps/arm/fgetexcptflg.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 1997-2014 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 -__fegetexceptflag (fexcept_t *flagp, int excepts) -{ - if (ARM_HAVE_VFP) - { - unsigned long temp; - - /* Get the current exceptions. */ - _FPU_GETCW (temp); - - *flagp = temp & excepts & FE_ALL_EXCEPT; - - /* Success. */ - return 0; - } - - /* Unsupported, so fail. */ - return 1; -} - -#include <shlib-compat.h> -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fegetexceptflag, __old_fegetexceptflag) -compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1); -#endif -versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2); diff --git a/ports/sysdeps/arm/find_exidx.c b/ports/sysdeps/arm/find_exidx.c deleted file mode 100644 index 39910ed350..0000000000 --- a/ports/sysdeps/arm/find_exidx.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/fpu_control.h b/ports/sysdeps/arm/fpu_control.h deleted file mode 100644 index 6d54b9bfee..0000000000 --- a/ports/sysdeps/arm/fpu_control.h +++ /dev/null @@ -1,63 +0,0 @@ -/* FPU control word definitions. ARM VFP version. - Copyright (C) 2004-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 */ - -/* 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. */ -/* 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)) - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif /* __SOFTFP__ */ - -#endif /* _FPU_CONTROL_H */ diff --git a/ports/sysdeps/arm/fraiseexcpt.c b/ports/sysdeps/arm/fraiseexcpt.c deleted file mode 100644 index 8b320651eb..0000000000 --- a/ports/sysdeps/arm/fraiseexcpt.c +++ /dev/null @@ -1,106 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 2004-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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) -{ - if (ARM_HAVE_VFP) - { - int 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; - } - - /* Unsupported, so fail unless nothing needs to be done. */ - return (excepts != 0); -} - -libm_hidden_def (feraiseexcept) diff --git a/ports/sysdeps/arm/frame.h b/ports/sysdeps/arm/frame.h deleted file mode 100644 index eba5967c3f..0000000000 --- a/ports/sysdeps/arm/frame.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Definition of stack frame structure. ARM/APCS version. - Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/framestate.c b/ports/sysdeps/arm/framestate.c deleted file mode 100644 index 710cecca97..0000000000 --- a/ports/sysdeps/arm/framestate.c +++ /dev/null @@ -1 +0,0 @@ -/* Empty */ diff --git a/ports/sysdeps/arm/fsetexcptflg.c b/ports/sysdeps/arm/fsetexcptflg.c deleted file mode 100644 index 0c88c0fa70..0000000000 --- a/ports/sysdeps/arm/fsetexcptflg.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <math.h> -#include <fpu_control.h> -#include <arm-features.h> - - -int -__fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - if (ARM_HAVE_VFP) - { - fexcept_t temp; - - /* Get the current environment. */ - _FPU_GETCW (temp); - - /* Set the desired exception mask. */ - temp &= ~(excepts & FE_ALL_EXCEPT); - temp |= (*flagp & excepts & FE_ALL_EXCEPT); - - /* Save state back to the FPU. */ - _FPU_SETCW (temp); - - /* Success. */ - return 0; - } - - /* Unsupported, so fail unless nothing needs to be done. */ - return (excepts != 0); -} - -#include <shlib-compat.h> -#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2) -strong_alias (__fesetexceptflag, __old_fesetexceptflag) -compat_symbol (libm, __old_fesetexceptflag, fesetexceptflag, GLIBC_2_1); -#endif - -versioned_symbol (libm, __fesetexceptflag, fesetexceptflag, GLIBC_2_2); diff --git a/ports/sysdeps/arm/ftestexcept.c b/ports/sysdeps/arm/ftestexcept.c deleted file mode 100644 index 9295c0fec2..0000000000 --- a/ports/sysdeps/arm/ftestexcept.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 -fetestexcept (int excepts) -{ - if (ARM_HAVE_VFP) - { - fexcept_t temp; - - /* Get current exceptions. */ - _FPU_GETCW(temp); - - return temp & excepts & FE_ALL_EXCEPT; - } - - /* Unsupported, return 0. */ - return 0; -} -libm_hidden_def (fetestexcept) diff --git a/ports/sysdeps/arm/gcc-compat.h b/ports/sysdeps/arm/gcc-compat.h deleted file mode 100644 index 680f30e3a7..0000000000 --- a/ports/sysdeps/arm/gcc-compat.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Macros for checking required GCC compatibility. ARM version. - Copyright (C) 2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/gccframe.h b/ports/sysdeps/arm/gccframe.h deleted file mode 100644 index f417b45791..0000000000 --- a/ports/sysdeps/arm/gccframe.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Definition of object in frame unwind info. arm version. - Copyright (C) 2001-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/get-rounding-mode.h b/ports/sysdeps/arm/get-rounding-mode.h deleted file mode 100644 index 7d6054cd89..0000000000 --- a/ports/sysdeps/arm/get-rounding-mode.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Determine floating-point rounding mode within libc. ARM version. - Copyright (C) 2012-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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) -{ - if (ARM_HAVE_VFP) - { - fpu_control_t fc; - - _FPU_GETCW (fc); - return fc & FE_TOWARDZERO; - } - else - return FE_TONEAREST; -} - -#endif /* get-rounding-mode.h */ diff --git a/ports/sysdeps/arm/gmp-mparam.h b/ports/sysdeps/arm/gmp-mparam.h deleted file mode 100644 index e2276b7bce..0000000000 --- a/ports/sysdeps/arm/gmp-mparam.h +++ /dev/null @@ -1,36 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991-2014 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/ports/sysdeps/arm/include/bits/setjmp.h b/ports/sysdeps/arm/include/bits/setjmp.h deleted file mode 100644 index 220dfe8d96..0000000000 --- a/ports/sysdeps/arm/include/bits/setjmp.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Private jmp_buf-related definitions. ARM EABI version. - Copyright (C) 2013-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 8 -#endif - -#endif /* include/bits/setjmp.h */ diff --git a/ports/sysdeps/arm/jmpbuf-unwind.h b/ports/sysdeps/arm/jmpbuf-unwind.h deleted file mode 100644 index 4dfba44ef8..0000000000 --- a/ports/sysdeps/arm/jmpbuf-unwind.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/ldsodefs.h b/ports/sysdeps/arm/ldsodefs.h deleted file mode 100644 index 47cbc4f205..0000000000 --- a/ports/sysdeps/arm/ldsodefs.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/libc-tls.c b/ports/sysdeps/arm/libc-tls.c deleted file mode 100644 index b364401bbe..0000000000 --- a/ports/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-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/libm-test-ulps b/ports/sysdeps/arm/libm-test-ulps deleted file mode 100644 index 3811ff0309..0000000000 --- a/ports/sysdeps/arm/libm-test-ulps +++ /dev/null @@ -1,8028 +0,0 @@ -# Begin of automatic generation - -# acos_downward -Test "acos_downward (-0x8p-4)": -float: 1 -ifloat: 1 - -# acos_towardzero -Test "acos_towardzero (-0x8p-4)": -float: 1 -ifloat: 1 - -# acos_upward -Test "acos_upward (+0)": -double: 1 -idouble: 1 -Test "acos_upward (-0)": -double: 1 -idouble: 1 -Test "acos_upward (-0x1p+0)": -double: 1 -idouble: 1 -Test "acos_upward (-0x4p-1024)": -double: 1 -idouble: 1 -Test "acos_upward (-0x4p-1076)": -double: 1 -idouble: 1 -Test "acos_upward (-0x4p-128)": -double: 1 -idouble: 1 -Test "acos_upward (-0x8p-152)": -double: 1 -idouble: 1 -Test "acos_upward (-0x8p-972)": -double: 1 -idouble: 1 -Test "acos_upward (0x1.70ef54646d496p-56)": -double: 1 -idouble: 1 -Test "acos_upward (0x1.70ef54646d497p-56)": -double: 1 -idouble: 1 -Test "acos_upward (0x1.70ef54p-56)": -double: 1 -idouble: 1 -Test "acos_upward (0x1.70ef56p-56)": -double: 1 -idouble: 1 -Test "acos_upward (0x4p-1024)": -double: 1 -idouble: 1 -Test "acos_upward (0x4p-1076)": -double: 1 -idouble: 1 -Test "acos_upward (0x4p-128)": -double: 1 -idouble: 1 -Test "acos_upward (0x8p-152)": -double: 1 -idouble: 1 -Test "acos_upward (0x8p-972)": -double: 1 -idouble: 1 - -# acosh -Test "acosh (0x6.4p+4)": -double: 1 -idouble: 1 -Test "acosh (0xf.ffffffffffff8p+1020)": -double: 1 - -# asin_downward -Test "asin_downward (-0x1p+0)": -double: 1 -idouble: 1 -Test "asin_downward (-0x8p-4)": -double: 1 -idouble: 1 -Test "asin_downward (-0xf.fffffff8p-4)": -double: 1 -idouble: 1 -Test "asin_downward (-0xf.ffffffffffff8p-4)": -double: 1 -idouble: 1 -Test "asin_downward (-0xf.fffffffffffp-4)": -double: 1 -idouble: 1 -Test "asin_downward (-0xf.fffffp-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "asin_downward (0x8p-4)": -float: 1 -ifloat: 1 - -# asin_towardzero -Test "asin_towardzero (-0x4p-1024)": -double: 1 -idouble: 1 -Test "asin_towardzero (-0x4p-1076)": -double: 1 -idouble: 1 -Test "asin_towardzero (-0x4p-128)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "asin_towardzero (-0x8p-152)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "asin_towardzero (-0x8p-4)": -float: 1 -ifloat: 1 -Test "asin_towardzero (-0x8p-972)": -double: 1 -idouble: 1 -Test "asin_towardzero (0x8p-4)": -float: 1 -ifloat: 1 - -# asin_upward -Test "asin_upward (-0x4p-1024)": -double: 1 -idouble: 1 -Test "asin_upward (-0x4p-1076)": -double: 1 -idouble: 1 -Test "asin_upward (-0x4p-128)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "asin_upward (-0x8p-152)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "asin_upward (-0x8p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "asin_upward (-0x8p-972)": -double: 1 -idouble: 1 -Test "asin_upward (-0xf.fffffff8p-4)": -double: 1 -idouble: 1 -Test "asin_upward (-0xf.ffffffffffff8p-4)": -double: 1 -idouble: 1 -Test "asin_upward (-0xf.fffffffffffp-4)": -double: 1 -idouble: 1 -Test "asin_upward (-0xf.fffffp-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "asin_upward (0x1p+0)": -double: 1 -idouble: 1 -Test "asin_upward (0x4p-1024)": -double: 1 -idouble: 1 -Test "asin_upward (0x4p-1076)": -double: 1 -idouble: 1 -Test "asin_upward (0x4p-128)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "asin_upward (0x8p-152)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "asin_upward (0x8p-972)": -double: 1 -idouble: 1 - -# asinh -Test "asinh (-0xf.ffffffffffff8p+1020)": -double: 1 -Test "asinh (0xap+0)": -float: 1 -ifloat: 1 -Test "asinh (0xf.ffffffffffff8p+1020)": -double: 1 - -# atan2 -Test "atan2 (-0x1.effe82p-8, -0x7.57d1d8p-12)": -float: 1 -ifloat: 1 -Test "atan2 (-0xcp-4, -0x1p+0)": -float: 1 -ifloat: 1 -Test "atan2 (-0xf.fffffp+124, -0x4p-128)": -float: 1 -ifloat: 1 -Test "atan2 (-0xf.fffffp+124, -0x8p-152)": -float: 1 -ifloat: 1 -Test "atan2 (0x1.64p+0, 0xe.ep-4)": -float: 1 -ifloat: 1 -Test "atan2 (0xcp-4, -0x1p+0)": -float: 1 -ifloat: 1 -Test "atan2 (0xf.fffffp+124, -0x4p-128)": -float: 1 -ifloat: 1 -Test "atan2 (0xf.fffffp+124, -0x8p-152)": -float: 1 -ifloat: 1 - -# atanh -Test "atanh (-0xcp-4)": -float: 1 -ifloat: 1 -Test "atanh (0xcp-4)": -float: 1 -ifloat: 1 - -# cacos -Test "Imaginary part of: cacos (+0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (+0 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacos (+0 + 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (+0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (+0 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacos (+0 - 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0 + 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0 - 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (-0.25 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0.25 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0.25 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0.25 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0.5 + 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0.5 + 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0.5 + 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0.5 + 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (-0.5 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0.5 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0.5 - 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0.5 - 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0.5 - 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0.5 - 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (-0.5 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0.5 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 + 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 - 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0x0.ffffffp0 + 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cacos (-0x0.ffffffp0 - 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cacos (-0x1.000002p0 + 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1.000002p0 - 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1.fp-10 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0x1.fp-10 - 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (-0x1.fp-100 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1.fp-100 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-100 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1.fp-100 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1.fp-1000 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0x1.fp-1000 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (-0x1.fp-129 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1.fp-129 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-129 + 0x0.ffffffp0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-129 + 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-129 + 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-129 + 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-129 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1.fp-129 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-129 + 1.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1.fp-129 + 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (-0x1.fp-129 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1.fp-129 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-129 - 0x0.ffffffp0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-129 - 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-129 - 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-129 - 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-129 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1.fp-129 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-129 - 1.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1.fp-129 - 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (-0x1.fp-30 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1.fp-30 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1.fp-30 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1.fp-30 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-105 + 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-105 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1p-105 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-105 + 0x1p-105 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-105 - 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-105 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1p-105 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-105 - 0x1p-105 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-112 + 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-112 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1p-112 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-112 + 0x1p-112 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-112 - 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-112 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1p-112 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-112 - 0x1p-112 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-23 + 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-23 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1p-23 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1p-23 + 0x0.ffffffp0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (-0x1p-23 + 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-23 + 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-23 - 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-23 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1p-23 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1p-23 - 0x0.ffffffp0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (-0x1p-23 - 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-23 - 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-52 + 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-52 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1p-52 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-52 + 0x1p-52 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-52 - 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-52 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1p-52 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-52 - 0x1p-52 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-63 + 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-63 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1p-63 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-63 + 0x1p-63 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-63 - 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-63 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-0x1p-63 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-0x1p-63 - 0x1p-63 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-1.0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-1.0 + 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-1.0 + 0x1p50 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-1.0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (-1.0 - 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-1.0 - 0x1p50 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (-2 - 3 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0.25 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0.25 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (0.5 + +0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 + 0x1.fp-1025 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 + 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0.5 + 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 + 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0.5 + 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 + 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0.5 + 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0.5 + 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 + 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 + 0x1p-63 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0.5 + 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 - 0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 - 0x1.fp-1025 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 - 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0.5 - 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 - 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0.5 - 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 - 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0.5 - 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0.5 - 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 - 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 - 0x1p-63 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0.5 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0.5 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 + 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 - 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0x0.ffffffp0 + 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (0x0.ffffffp0 + 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (0x0.ffffffp0 + 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cacos (0x0.ffffffp0 + 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Real part of: cacos (0x0.ffffffp0 - 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (0x0.ffffffp0 - 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (0x0.ffffffp0 - 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cacos (0x0.ffffffp0 - 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Real part of: cacos (0x1.0000000000001p0 + 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0x1.0000000000001p0 - 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (0x1.000002p0 + 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cacos (0x1.000002p0 + 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (0x1.000002p0 - 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cacos (0x1.000002p0 - 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1.fp-10 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1.fp-10 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1.fp-100 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1.fp-100 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1.fp-1000 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1.fp-1000 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1.fp-1025 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1.fp-1025 + 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1.fp-1025 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1.fp-1025 - 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1.fp-129 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1.fp-129 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1.fp-129 + 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1.fp-129 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1.fp-129 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1.fp-129 - 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1.fp-30 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1.fp-30 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1.fp1023 + 0x1.fp1023 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1.fp127 + 0x1.fp127 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1p-105 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1p-105 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1p-112 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1p-112 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1p-23 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1p-23 + 0x0.ffffffp0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1p-23 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1p-23 - 0x0.ffffffp0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacos (0x1p-52 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1p-52 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1p-63 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (0x1p-63 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (1.0 + 0.25 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (1.0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (1.0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (1.0 + 0x1.fp-10 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cacos (1.0 + 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (1.0 - 0.25 i)": -double: 1 -idouble: 1 -Test "Real part of: cacos (1.0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacos (1.0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacos (1.0 - 0x1.fp-10 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cacos (1.0 - 0x1.fp-10 i)": -float: 1 -ifloat: 1 - -# cacosh -Test "Real part of: cacosh (+0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (+0 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacosh (+0 + 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (+0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (+0 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacosh (+0 - 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacosh (-0 + 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacosh (-0 - 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0.25 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0.25 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacosh (-0.25 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0.25 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacosh (-0.5 + 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0.5 + 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0.5 + 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0.5 + 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0.5 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (-0.5 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0.5 - 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0.5 - 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0.5 - 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0.5 - 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0.5 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (-0.5 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x0.fffffffffffff8p0 + 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0x0.fffffffffffff8p0 - 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0x0.ffffffp0 + 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Real part of: cacosh (-0x0.ffffffp0 - 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Real part of: cacosh (-0x1.000002p0 + 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1.000002p0 - 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1.fp-10 + 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0x1.fp-10 - 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0x1.fp-100 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-100 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1.fp-100 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-100 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1.fp-1000 + 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0x1.fp-1000 - 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0x1.fp-1025 + 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0x1.fp-1025 + 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0x1.fp-1025 - 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0x1.fp-1025 - 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (-0x1.fp-129 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x0.ffffffp0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1.fp-129 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1.fp-129 + 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 + 1.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1.fp-129 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x0.ffffffp0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1.fp-129 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1.fp-129 - 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (-0x1.fp-129 - 1.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1.fp-30 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-30 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1.fp-30 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1.fp-30 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-105 + 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1p-105 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-105 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-105 + 0x1p-105 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-105 - 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1p-105 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-105 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-105 - 0x1p-105 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-112 + 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1p-112 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-112 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-112 + 0x1p-112 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-112 - 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1p-112 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-112 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-112 - 0x1p-112 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-23 + 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1p-23 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-23 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1p-23 + 0x0.ffffffp0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (-0x1p-23 + 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-23 + 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-23 - 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1p-23 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-23 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1p-23 - 0x0.ffffffp0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (-0x1p-23 - 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-23 - 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-52 + 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1p-52 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-52 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-52 + 0x1p-52 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-52 - 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1p-52 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-52 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-52 - 0x1p-52 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-63 + 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1p-63 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-63 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-63 + 0x1p-63 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-63 - 0.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-0x1p-63 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-63 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-0x1p-63 - 0x1p-63 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-1.0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-1.0 + 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-1.0 + 0x1p50 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-1.0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (-1.0 - 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-1.0 - 0x1p50 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (-2 - 3 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0.25 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0.25 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (0.5 + +0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 + 0x1.fp-1025 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0.5 + 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 + 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0.5 + 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 + 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0.5 + 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 + 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0.5 + 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 + 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 + 0x1p-63 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0.5 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (0.5 - 0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 - 0x1.fp-1025 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0.5 - 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 - 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0.5 - 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 - 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0.5 - 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 - 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0.5 - 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 - 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 - 0x1p-63 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0.5 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0.5 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x0.fffffffffffff8p0 + 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x0.fffffffffffff8p0 - 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x0.ffffffp0 + 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x0.ffffffp0 - 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cacosh (0x1.0000000000001p0 + 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cacosh (0x1.0000000000001p0 - 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1.000002p0 + 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (0x1.000002p0 + 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Real part of: cacosh (0x1.000002p0 - 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (0x1.000002p0 - 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Real part of: cacosh (0x1.fp-10 + 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1.fp-10 - 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1.fp-100 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1.fp-100 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1.fp-1000 + 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1.fp-1000 - 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1.fp-1025 + 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1.fp-1025 + 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1.fp-1025 - 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1.fp-1025 - 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1.fp-129 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1.fp-129 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1.fp-129 + 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1.fp-129 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1.fp-129 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1.fp-129 - 1.5 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1.fp-30 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1.fp-30 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1.fp1023 + 0x1.fp1023 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1.fp127 + 0x1.fp127 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1p-105 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1p-105 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1p-112 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1p-112 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1p-23 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1p-23 + 0x0.ffffffp0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1p-23 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1p-23 - 0x0.ffffffp0 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (0x1p-52 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1p-52 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1p-63 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (0x1p-63 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (1.0 + 0.25 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (1.0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (1.0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (1.0 + 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (1.0 + 0x1.fp-10 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cacosh (1.0 - 0.25 i)": -double: 1 -idouble: 1 -Test "Real part of: cacosh (1.0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (1.0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: cacosh (1.0 - 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cacosh (1.0 - 0x1.fp-10 i)": -float: 2 -ifloat: 2 - -# casin -Test "Imaginary part of: casin (+0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (+0 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (+0 + 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (+0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (+0 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (+0 - 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0 + 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0 - 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0.25 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0.25 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0.5 + 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0.5 + 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0.5 + 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0.5 + 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0.5 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0.5 - 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0.5 - 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0.5 - 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0.5 - 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0.5 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 + 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 - 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0x0.ffffffp0 + 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: casin (-0x0.ffffffp0 - 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: casin (-0x1.000002p0 + 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1.000002p0 - 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Real part of: casin (-0x1.fp-10 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1.fp-10 + 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: casin (-0x1.fp-10 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1.fp-10 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0x1.fp-100 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1.fp-100 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1.fp-1000 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0x1.fp-1000 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0x1.fp-1025 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0x1.fp-1025 + 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0x1.fp-1025 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0x1.fp-1025 - 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0x1.fp-129 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1.fp-129 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1.fp-129 + 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0x1.fp-129 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1.fp-129 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1.fp-129 - 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (-0x1.fp-30 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1.fp-30 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1p-105 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1p-105 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1p-112 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1p-112 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: casin (-0x1p-23 + 0.5 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1p-23 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1p-23 + 0x0.ffffffp0 i)": -double: 1 -idouble: 1 -Test "Real part of: casin (-0x1p-23 + 0x1.000002p0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casin (-0x1p-23 - 0.5 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1p-23 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1p-23 - 0x0.ffffffp0 i)": -double: 1 -idouble: 1 -Test "Real part of: casin (-0x1p-23 - 0x1.000002p0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1p-52 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1p-52 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1p-63 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-0x1p-63 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: casin (-1.0 + 0.25 i)": -double: 1 -idouble: 1 -Test "Real part of: casin (-1.0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-1.0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-1.0 + 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Real part of: casin (-1.0 - 0.25 i)": -double: 1 -idouble: 1 -Test "Real part of: casin (-1.0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-1.0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (-1.0 - 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0.25 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0.25 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0.5 + 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0.5 + 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0.5 + 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0.5 + 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0.5 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0.5 - 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0.5 - 0x1p-105 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0.5 - 0x1p-112 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0.5 - 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0.5 - 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: casin (0.75 + 1.25 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x0.fffffffffffff8p0 + 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0x0.fffffffffffff8p0 - 0x1p-52 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0x0.ffffffp0 + 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: casin (0x0.ffffffp0 - 0x1p-23 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: casin (0x1.000002p0 + 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1.000002p0 - 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Real part of: casin (0x1.fp-10 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1.fp-10 + 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: casin (0x1.fp-10 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1.fp-10 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0x1.fp-100 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1.fp-100 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1.fp-1000 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0x1.fp-1000 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0x1.fp-1025 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0x1.fp-1025 + 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0x1.fp-1025 - 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0x1.fp-1025 - 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0x1.fp-129 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1.fp-129 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1.fp-129 + 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0x1.fp-129 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1.fp-129 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1.fp-129 - 1.5 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0x1.fp-30 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1.fp-30 - 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1.fp1023 + 0x1.fp1023 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0x1.fp127 + 0x1.fp127 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casin (0x1p-105 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1p-105 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1p-112 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1p-112 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: casin (0x1p-23 + 0.5 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1p-23 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1p-23 + 0x0.ffffffp0 i)": -double: 1 -idouble: 1 -Test "Real part of: casin (0x1p-23 + 0x1.000002p0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casin (0x1p-23 - 0.5 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1p-23 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1p-23 - 0x0.ffffffp0 i)": -double: 1 -idouble: 1 -Test "Real part of: casin (0x1p-23 - 0x1.000002p0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1p-52 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1p-52 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1p-63 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (0x1p-63 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: casin (1.0 + 0.25 i)": -double: 1 -idouble: 1 -Test "Real part of: casin (1.0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (1.0 + 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (1.0 + 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Real part of: casin (1.0 - 0.25 i)": -double: 1 -idouble: 1 -Test "Real part of: casin (1.0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (1.0 - 0.5 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casin (1.0 - 0x1.fp-10 i)": -float: 1 -ifloat: 1 - -# casinh -Test "Imaginary part of: casinh (-0.25 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casinh (-0.25 - 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-0.5 + +0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 + 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 + 0x1p-105 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 + 0x1p-112 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 + 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casinh (-0.5 + 0x1p-23 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 + 0x1p-52 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 + 0x1p-63 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casinh (-0.5 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 - 0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 - 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 - 0x1p-105 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 - 0x1p-112 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 - 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casinh (-0.5 - 0x1p-23 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 - 0x1p-52 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 - 0x1p-63 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0.5 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casinh (-0.5 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0x0.ffffffp0 + 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-0x0.ffffffp0 - 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casinh (-0x1.000002p0 + 0x1p-23 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casinh (-0x1.000002p0 - 0x1p-23 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (-0x1.fp-10 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0x1.fp-10 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0x1.fp-129 + 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-0x1.fp-129 - 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-0x1p-105 + 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-0x1p-105 - 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-0x1p-112 + 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-0x1p-112 - 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-0x1p-23 + 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-0x1p-23 + 0x0.ffffffp0 i)": -float: 2 -ifloat: 2 -Test "Real part of: casinh (-0x1p-23 + 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0x1p-23 - 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-0x1p-23 - 0x0.ffffffp0 i)": -float: 2 -ifloat: 2 -Test "Real part of: casinh (-0x1p-23 - 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-0x1p-52 + 0x0.fffffffffffff8p0 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-0x1p-52 - 0x0.fffffffffffff8p0 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-1.0 + +0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (-1.0 + 0.25 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-1.0 + 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-1.0 + 0x1.fp-10 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casinh (-1.0 + 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-1.0 + 0x1.fp-100 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (-1.0 + 0x1.fp-1000 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-1.0 + 0x1.fp-1025 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-1.0 + 0x1.fp-129 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (-1.0 + 0x1.fp-30 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (-1.0 - 0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (-1.0 - 0.25 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-1.0 - 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-1.0 - 0x1.fp-10 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casinh (-1.0 - 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (-1.0 - 0x1.fp-100 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (-1.0 - 0x1.fp-1000 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-1.0 - 0x1.fp-1025 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-1.0 - 0x1.fp-129 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (-1.0 - 0x1.fp-30 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (-1.5 + +0 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-1.5 + 0x1.fp-1025 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-1.5 + 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-1.5 - 0 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-1.5 - 0x1.fp-1025 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (-1.5 - 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casinh (0.25 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casinh (0.25 - 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (0.5 + +0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 + 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 + 0x1p-105 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 + 0x1p-112 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 + 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casinh (0.5 + 0x1p-23 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 + 0x1p-52 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 + 0x1p-63 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casinh (0.5 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 - 0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 - 0x1.fp-129 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 - 0x1p-105 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 - 0x1p-112 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 - 0x1p-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casinh (0.5 - 0x1p-23 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 - 0x1p-52 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 - 0x1p-63 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.5 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casinh (0.5 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0.75 + 1.25 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: casinh (0.75 + 1.25 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (0x0.ffffffp0 + 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (0x0.ffffffp0 - 0x1p-23 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casinh (0x1.000002p0 + 0x1p-23 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: casinh (0x1.000002p0 - 0x1p-23 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (0x1.fp-10 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0x1.fp-10 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0x1.fp-129 + 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (0x1.fp-129 - 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (0x1.fp1023 + 0x1.fp1023 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (0x1.fp127 + 0x1.fp127 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (0x1p-105 + 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (0x1p-105 - 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (0x1p-112 + 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (0x1p-112 - 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (0x1p-23 + 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (0x1p-23 + 0x0.ffffffp0 i)": -float: 2 -ifloat: 2 -Test "Real part of: casinh (0x1p-23 + 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0x1p-23 - 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (0x1p-23 - 0x0.ffffffp0 i)": -float: 2 -ifloat: 2 -Test "Real part of: casinh (0x1p-23 - 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (0x1p-52 + 0x0.fffffffffffff8p0 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (0x1p-52 - 0x0.fffffffffffff8p0 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (1.0 + +0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (1.0 + 0.25 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (1.0 + 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (1.0 + 0x1.fp-10 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casinh (1.0 + 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (1.0 + 0x1.fp-100 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (1.0 + 0x1.fp-1000 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (1.0 + 0x1.fp-1025 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (1.0 + 0x1.fp-129 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (1.0 + 0x1.fp-30 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (1.0 - 0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (1.0 - 0.25 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (1.0 - 0.5 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (1.0 - 0x1.fp-10 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: casinh (1.0 - 0x1.fp-10 i)": -float: 1 -ifloat: 1 -Test "Real part of: casinh (1.0 - 0x1.fp-100 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (1.0 - 0x1.fp-1000 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (1.0 - 0x1.fp-1025 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (1.0 - 0x1.fp-129 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (1.0 - 0x1.fp-30 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: casinh (1.5 + +0 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (1.5 + 0x1.fp-1025 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (1.5 + 0x1.fp-129 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (1.5 - 0 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (1.5 - 0x1.fp-1025 i)": -double: 1 -idouble: 1 -Test "Real part of: casinh (1.5 - 0x1.fp-129 i)": -double: 1 -idouble: 1 - -# catan -Test "Imaginary part of: catan (-0x0.fffffffffffff8p0 + 0x1p-27 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (-0x0.ffffffp0 + 0x1p-13 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: catan (-0x1.0000000000001p0 - 0x1p-27 i)": -double: 1 -idouble: 1 -Test "Real part of: catan (-0x1.000002p0 + 0x1p-126 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (-0x1.000002p0 + 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (-0x1.000002p0 - 0x1p-126 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (-0x1.000002p0 - 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catan (-0x1.000002p0 - 0x1p-13 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (-0x1.fp1023 + 0x1.fp1023 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (-0x1.fp1023 - 0x1.fp1023 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (-0x1.fp127 + 0x1.fp127 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (-0x1.fp127 - 0x1.fp127 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (-0x1p-1020 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (-0x1p-1020 - 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: catan (-0x1p-13 + 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (-0x1p-13 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (-0x1p-13 - 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catan (-0x1p-13 - 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (-0x1p-13 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catan (-0x1p-54 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catan (-0x1p-54 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catan (-0x1p-57 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catan (-0x1p-57 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (-1.0 + 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (-1.0 - 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catan (-2 - 3 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: catan (0x0.fffffffffffff8p0 + 0x1p-27 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (0x0.ffffffp0 + 0x1p-13 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: catan (0x1.0000000000001p0 - 0x1p-27 i)": -double: 1 -idouble: 1 -Test "Real part of: catan (0x1.000002p0 + 0x1p-126 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (0x1.000002p0 + 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (0x1.000002p0 - 0x1p-126 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (0x1.000002p0 - 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catan (0x1.000002p0 - 0x1p-13 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (0x1.fp1023 + 0x1.fp1023 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (0x1.fp1023 - 0x1.fp1023 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (0x1.fp127 + 0x1.fp127 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (0x1.fp127 - 0x1.fp127 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (0x1p-1020 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catan (0x1p-1020 - 1.0 i)": -double: 1 -idouble: 1 -Test "Real part of: catan (0x1p-13 + 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (0x1p-13 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (0x1p-13 - 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catan (0x1p-13 - 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (0x1p-13 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catan (0x1p-54 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catan (0x1p-54 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catan (0x1p-57 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catan (0x1p-57 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (1.0 + 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Real part of: catan (1.0 - 0x1p-13 i)": -float: 1 -ifloat: 1 - -# catanh -Test "Real part of: catanh (-0x1.000002p0 + 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catanh (-0x1.000002p0 + 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (-0x1.000002p0 - 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catanh (-0x1.000002p0 - 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (-0x1.fp1023 + 0x1.fp1023 i)": -double: 1 -idouble: 1 -Test "Real part of: catanh (-0x1.fp1023 - 0x1.fp1023 i)": -double: 1 -idouble: 1 -Test "Real part of: catanh (-0x1.fp127 + 0x1.fp127 i)": -double: 1 -idouble: 1 -Test "Real part of: catanh (-0x1.fp127 - 0x1.fp127 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catanh (-0x1p-126 + 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catanh (-0x1p-126 - 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (-0x1p-13 + 0x1.000002p0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catanh (-0x1p-13 + 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catanh (-0x1p-13 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (-0x1p-13 - 0x1.000002p0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catanh (-0x1p-13 - 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catanh (-0x1p-13 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (-0x1p-27 + 0x1.0000000000001p0 i)": -double: 1 -idouble: 1 -Test "Real part of: catanh (-0x1p-27 - 0x1.0000000000001p0 i)": -double: 1 -idouble: 1 -Test "Real part of: catanh (-1.0 + 0x1p-1020 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catanh (-1.0 + 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (-1.0 + 0x1p-54 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (-1.0 + 0x1p-57 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (-1.0 - 0x1p-1020 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catanh (-1.0 - 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (-1.0 - 0x1p-54 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (-1.0 - 0x1p-57 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (-2 - 3 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catanh (0x1.000002p0 + 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catanh (0x1.000002p0 - 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (0x1.fp1023 + 0x1.fp1023 i)": -double: 1 -idouble: 1 -Test "Real part of: catanh (0x1.fp1023 - 0x1.fp1023 i)": -double: 1 -idouble: 1 -Test "Real part of: catanh (0x1.fp127 + 0x1.fp127 i)": -double: 1 -idouble: 1 -Test "Real part of: catanh (0x1.fp127 - 0x1.fp127 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catanh (0x1p-126 + 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catanh (0x1p-126 - 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (0x1p-13 + 0x0.ffffffp0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: catanh (0x1p-13 + 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catanh (0x1p-13 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (0x1p-13 - 0x0.ffffffp0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: catanh (0x1p-13 - 0x1.000002p0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: catanh (0x1p-13 - 1.0 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (0x1p-27 + 0x0.fffffffffffff8p0 i)": -double: 1 -idouble: 1 -Test "Real part of: catanh (0x1p-27 - 0x0.fffffffffffff8p0 i)": -double: 1 -idouble: 1 -Test "Real part of: catanh (1.0 + 0x1p-1020 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catanh (1.0 + 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (1.0 + 0x1p-54 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (1.0 + 0x1p-57 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (1.0 - 0x1p-1020 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: catanh (1.0 - 0x1p-13 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (1.0 - 0x1p-54 i)": -float: 1 -ifloat: 1 -Test "Real part of: catanh (1.0 - 0x1p-57 i)": -float: 1 -ifloat: 1 - -# cbrt -Test "cbrt (-0x1.bp+4)": -double: 1 -idouble: 1 -Test "cbrt (-0x4.18937p-12)": -float: 1 -ifloat: 1 -Test "cbrt (0xcp-4)": -double: 1 -idouble: 1 -Test "cbrt (0xf.ep-4)": -double: 1 -idouble: 1 - -# ccos -Test "Imaginary part of: ccos (-0x2p+0 - 0x3p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ccos (-0xcp-4 + 0x2.c68p+8 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ccos (-0xcp-4 + 0x5.98p+4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ccos (-0xcp-4 - 0x2.c68p+8 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ccos (-0xcp-4 - 0x5.98p+4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ccos (0x4p-1076 + 0x5.ap+8 i)": -double: 1 -idouble: 1 -Test "Real part of: ccos (0xcp-4 + 0x1.4p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ccos (0xcp-4 + 0x1.4p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ccos (0xcp-4 + 0x2.c68p+8 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ccos (0xcp-4 + 0x5.98p+4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ccos (0xcp-4 - 0x2.c68p+8 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ccos (0xcp-4 - 0x5.98p+4 i)": -float: 1 -ifloat: 1 - -# ccosh -Test "Imaginary part of: ccosh (-0x2.c68p+8 + 0xcp-4 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ccosh (-0x2.c68p+8 - 0xcp-4 i)": -double: 1 -idouble: 1 -Test "Real part of: ccosh (-0x2p+0 - 0x3p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ccosh (-0x2p+0 - 0x3p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ccosh (-0x5.98p+4 + 0xcp-4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ccosh (-0x5.98p+4 - 0xcp-4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ccosh (0x2.c68p+8 + 0xcp-4 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ccosh (0x2.c68p+8 - 0xcp-4 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ccosh (0x5.98p+4 + 0xcp-4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ccosh (0x5.98p+4 - 0xcp-4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ccosh (0x5.ap+8 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Real part of: ccosh (0xcp-4 + 0x1.4p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ccosh (0xcp-4 + 0x1.4p+0 i)": -float: 1 -ifloat: 1 - -# cexp -Test "Imaginary part of: cexp (-0x2p+0 - 0x3p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cexp (-0x5.fp+4 + 0xcp-4 i)": -double: 1 -idouble: 1 -Test "Real part of: cexp (0x1.f4p+8 + 0x8p+1020 i)": -double: 1 -idouble: 1 -Test "Real part of: cexp (0x2.c5dp+8 + 0xcp-4 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: cexp (0x2.c5dp+8 + 0xcp-4 i)": -double: 1 -idouble: 1 -Test "Real part of: cexp (0x3.2p+4 + 0x8p+124 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Imaginary part of: cexp (0x3.2p+4 + 0x8p+124 i)": -double: 1 -idouble: 1 -Test "Real part of: cexp (0x5.8cp+4 + 0xcp-4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: cexp (0x5.8cp+4 + 0xcp-4 i)": -float: 2 -ifloat: 2 -Test "Imaginary part of: cexp (0x5.ap+8 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Real part of: cexp (0xcp-4 + 0x1.4p+0 i)": -float: 1 -ifloat: 1 - -# clog -Test "Real part of: clog (+0 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (-0x1.0000000123456p+0 + +0 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (-0x1.0000000123456p+0 + 0x1.2345678p-1000 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d1598p-32 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d159ep-32 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (-0x1.0000000123456p+0 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (-0x1.000002p+0 + +0 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d1598p-32 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d159ep-32 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d15ap-32 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: clog (-0x1.000002p+0 + 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog (-0x1.234566p-40 - 0x1p+0 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (-0x8p-152 + 0xf.8p+124 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog (-0x8p-152 + 0xf.8p+124 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog (-0x8p-152 + 0xf.fffffp+124 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (-0x8p-152 - 0xf.8p+124 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog (-0x8p-152 - 0xf.8p+124 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog (-0x8p-152 - 0xf.fffffp+124 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (-0xf.8p+124 + 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (-0xf.8p+124 - 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x1.0000000000001p+0 + +0 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234566p-60 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-1000 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-60 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234568p-60 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1.0000000000001p+0 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1.000002p+0 + +0 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x1.000002p+0 + 0x1.234566p-60 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x1.000002p+0 + 0x1.234568p-60 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x1.000002p+0 + 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x1.000566p+0 + 0x4.8dp-12 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x1.48e45e3268d8p-4 + 0xf.f2c64p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c63p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c64p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdf8p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdf8p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e08p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e1p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4ep-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4dp-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4ep-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e1p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x1p+0 + 0x4.8d1598p-12 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a3p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a38p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a3p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x2p-148 + 0x2p-148 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x3.3b8f94p-4 + 0xf.ab873p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57cp-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d118p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d6p-4 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog (0x3.bea2cp-4 + 0xf.8e3d6p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x3.bea2cp-4 + 0xf.8e3d7p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d08p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d08p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3p-4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog (0x3.e1d0ap-4 + 0xf.859b4p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1af8e3ce8p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d758p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d76p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a6p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x4.d9e8c8p-4 + 0xf.3f303p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x4.d9e8cp-4 + 0xf.3f30281507d8p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x4p-1076 + +0 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x4p-1076 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog (0x5.03p-4 + 0xf.31ep-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x5.318c596a8cb1p-4 + 0xf.22364p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452b965da9fp-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452bp-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x5.b06b7p-4 + 0xe.f452b965da9fp-4 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog (0x5.b06b7p-4 + 0xe.f452bp-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e21p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e2p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e2086dcca8p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e21p-4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog (0x6.02fd5p-4 + 0xe.d3e21p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x6.1c643068cd128p-4 + 0xe.c97c2p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b4288p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b428p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c3p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a6p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a599a86ba8p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a5p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x6.2aff88p-4 + 0xe.c36a599a86ba8p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x6.b10b48p-4 + 0xe.8893cbb44925p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893dp-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb449258p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb44925p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x7.eca921b40e028p-4 + 0xd.e655fp-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e5108p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655fp-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d66p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65939160b8p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160bp-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x7.f4b088p-4 + 0xd.e1bf04f3688p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x8.88fafp-4 + 0xd.888bdp-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x8.ecbf810c4ae6p-4 + 0xd.47946p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x8.ecbf8p-4 + 0xd.479468b09a37p-4 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog (0x8.ecbf8p-4 + 0xd.47946p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x8.ecbf9p-4 + 0xd.479468b09a37p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x8p-152 + 0xf.8p+124 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x8p-152 - 0xf.8p+124 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x9.b386fp-4 + 0xc.b9317p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7dp-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53ep-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53dp-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53ep-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7dp-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53dp-4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53ep-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0xa.afc57p-4 + 0xb.e867932966df8p-4 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog (0xa.afc58p-4 + 0xb.e867ap-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0xa.b96da19075eap-8 + 0xf.fc679p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc67818f89d2p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc678p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc679p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0xa.e7de8cc868ff8p-4 + 0xb.b51cbp-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0xa.e7de8p-4 + 0xb.b51cbp-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0xa.e7de9p-4 + 0xb.b51cb9f04d4dp-4 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog (0xa.e7de9p-4 + 0xb.b51cbp-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f24p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a68p-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f25p-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0xb.263a77543bp-4 + 0xb.79c9ap-4 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0xb.263a8p-4 + 0xb.79c9bp-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0xf.8p+124 + 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0xf.8p+124 - 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0xf.fffffp+124 + 0x8p+1020 i)": -double: 1 -idouble: 1 -Test "Real part of: clog (0xf.fffffp-4 + +0 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0xf.fffffp-4 + 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog (0xf.fffffp-4 + 0xf.fffffp-104 i)": -float: 1 -ifloat: 1 - -# clog10 -Test "Imaginary part of: clog10 (-0 + inf i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-0 - inf i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)": -double: 2 -idouble: 2 -Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)": -double: 1 -idouble: 1 -Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)": -double: 2 -idouble: 2 -Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (-0x1.fp+1023 + 0x1p-1074 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (-0x1.fp+1023 - 0x1p-1074 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (-0x1.fp+127 + 0x1p-149 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-0x1.fp+127 - 0x1p-149 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-0x1p-1074 + 0x1.fp+1023 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (-0x1p-1074 - 0x1.fp+1023 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (-0x1p-149 + 0x1.fp+127 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (-0x1p-149 - 0x1.fp+127 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (-2 - 3 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (-3 + inf i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-3 - inf i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-inf + 0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-inf + 1 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-inf + inf i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (-inf - 0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (-inf - 1 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0 + inf i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0 - inf i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i)": -double: 1 -idouble: 1 -Test "Real part of: clog10 (0x0.ffffffp0 + 0x0.ffffffp-100 i)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-10 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i)": -double: 1 -idouble: 1 -Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-100 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x1.234566p-30 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x1.234566p-60 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)": -double: 1 -idouble: 1 -Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i)": -double: 1 -idouble: 1 -Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0x164c74eea876p-45 + 0x16f393482f77p-45 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0x1a6p-10 + 0x3a5p-10 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0x1p-1073 + 0x1p-1073 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i)": -double: 1 -idouble: 1 -Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0x1p-1074 + 0x1p-1074 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0x1p-1074 - 0x1.fp+1023 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x1p-149 + 0x1.fp+127 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x1p-149 - 0x1.fp+127 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x1p-509 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0x1p-510 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0x1p-511 + 1.0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0x1p-61 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x1p-62 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x1p-63 + 1.0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: clog10 (0x2818p-15 + 0x798fp-15 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i)": -float: 1 -ifloat: 1 -Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i)": -double: 1 -idouble: 1 -Test "Real part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)": -double: 1 -idouble: 1 -Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0x9b57bp-20 + 0xcb7b4p-20 i)": -double: 1 -idouble: 1 -Test "Real part of: clog10 (0xf2p-10 + 0x3e3p-10 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0xf2p-10 + 0x3e3p-10 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: clog10 (3 + inf i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (3 - inf i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (inf + inf i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: clog10 (inf - inf i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -# cos -Test "cos (0x1p+120)": -float: 1 -ifloat: 1 -Test "cos (0x7p+0)": -float: 1 -ifloat: 1 -Test "cos (0x8p+124)": -float: 1 -ifloat: 1 -Test "cos (0xc.d4967p-4)": -float: 1 -ifloat: 1 - -# cos_downward -Test "cos_downward (-0x4p-1024)": -double: 1 -idouble: 1 -Test "cos_downward (-0x4p-1076)": -double: 1 -idouble: 1 -Test "cos_downward (-0x4p-128)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_downward (-0x8p-152)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_downward (-0x8p-972)": -double: 1 -idouble: 1 -Test "cos_downward (-0xf.ffffffffffff8p+1020)": -double: 1 -idouble: 1 -Test "cos_downward (-0xf.fffffp+124)": -double: 1 -idouble: 1 -Test "cos_downward (0x1.000000cf4a2a2p+0)": -double: 1 -idouble: 1 -Test "cos_downward (0x1.0000010b239a9p+0)": -double: 1 -idouble: 1 -Test "cos_downward (0x1.00000162a932bp+0)": -double: 1 -idouble: 1 -Test "cos_downward (0x1.000002d452a1p+0)": -double: 1 -idouble: 1 -Test "cos_downward (0x1.000002p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_downward (0x1.000004p+0)": -float: 1 -ifloat: 1 -Test "cos_downward (0x1.000006p+0)": -float: 1 -ifloat: 1 -Test "cos_downward (0x1.0c1522p+0)": -float: 1 -ifloat: 1 -Test "cos_downward (0x1.0c152382d7365p+0)": -double: 1 -idouble: 1 -Test "cos_downward (0x1.0c1524p+0)": -float: 1 -ifloat: 1 -Test "cos_downward (0x1.921fb4p+0)": -float: 1 -ifloat: 1 -Test "cos_downward (0x1.921fb54442d18p+0)": -double: 1 -idouble: 1 -Test "cos_downward (0x1.921fb6p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_downward (0x1p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_downward (0x1p+120)": -float: 2 -ifloat: 2 -Test "cos_downward (0x1p+28)": -double: 1 -idouble: 1 -Test "cos_downward (0x2.182a44p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_downward (0x2.182a4705ae6cap+0)": -double: 1 -idouble: 1 -Test "cos_downward (0x2.182a48p+0)": -float: 1 -ifloat: 1 -Test "cos_downward (0x2.1e19e0c9bab24p+72)": -double: 1 -idouble: 1 -Test "cos_downward (0x2.1e19e4p+72)": -double: 1 -idouble: 1 -Test "cos_downward (0x2.1e19ep+72)": -double: 1 -idouble: 1 -Test "cos_downward (0x2p+0)": -float: 1 -ifloat: 1 -Test "cos_downward (0x3p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_downward (0x4p+48)": -double: 1 -idouble: 1 -Test "cos_downward (0x4p-1024)": -double: 1 -idouble: 1 -Test "cos_downward (0x4p-1076)": -double: 1 -idouble: 1 -Test "cos_downward (0x4p-128)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_downward (0x8p+0)": -float: 1 -ifloat: 1 -Test "cos_downward (0x8p-152)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_downward (0x8p-972)": -double: 1 -idouble: 1 -Test "cos_downward (0x9p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_downward (0xa.217bap+12)": -float: 1 -ifloat: 1 -Test "cos_downward (0xap+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_downward (0xc.d4966d92d1708p-4)": -double: 1 -idouble: 1 -Test "cos_downward (0xc.d4966d92d171p-4)": -double: 1 -idouble: 1 -Test "cos_downward (0xc.d4966p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_downward (0xc.d4967p-4)": -float: 1 -ifloat: 1 -Test "cos_downward (0xcp-4)": -double: 1 -idouble: 1 -Test "cos_downward (0xf.ffffffffffff8p+1020)": -double: 1 -idouble: 1 -Test "cos_downward (0xf.fffffp+124)": -double: 1 -idouble: 1 - -# cos_tonearest -Test "cos_tonearest (0x1p+120)": -float: 1 -ifloat: 1 -Test "cos_tonearest (0x7p+0)": -float: 1 -ifloat: 1 -Test "cos_tonearest (0x8p+124)": -float: 1 -ifloat: 1 -Test "cos_tonearest (0xc.d4967p-4)": -float: 1 -ifloat: 1 - -# cos_towardzero -Test "cos_towardzero (-0x4p-1024)": -double: 1 -idouble: 1 -Test "cos_towardzero (-0x4p-1076)": -double: 1 -idouble: 1 -Test "cos_towardzero (-0x4p-128)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_towardzero (-0x8p-152)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_towardzero (-0x8p-972)": -double: 1 -idouble: 1 -Test "cos_towardzero (-0xf.fffffp+124)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x1.000000cf4a2a2p+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x1.0000010b239a9p+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x1.00000162a932bp+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x1.000002d452a1p+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x1.000002p+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x1.0c152382d7365p+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x1.921fb54442d18p+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x1.921fb54442d19p+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x1p+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x1p+120)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_towardzero (0x2.182a4705ae6ccp+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x2.182a48p+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x2.1e19e0c9bab24p+72)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x2.1e19e4p+72)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x2.1e19ep+72)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x2p+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x4p+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x4p+48)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x4p-1024)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x4p-1076)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x4p-128)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_towardzero (0x8p+0)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x8p+1020)": -double: 1 -idouble: 1 -Test "cos_towardzero (0x8p-152)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_towardzero (0x8p-972)": -double: 1 -idouble: 1 -Test "cos_towardzero (0xc.d4966d92d1708p-4)": -double: 1 -idouble: 1 -Test "cos_towardzero (0xc.d4966d92d171p-4)": -double: 1 -idouble: 1 -Test "cos_towardzero (0xc.d4966p-4)": -double: 1 -idouble: 1 -Test "cos_towardzero (0xcp-4)": -double: 1 -idouble: 1 -Test "cos_towardzero (0xf.fffffp+124)": -double: 1 -idouble: 1 - -# cos_upward -Test "cos_upward (-0x2p+64)": -double: 1 -idouble: 1 -Test "cos_upward (0x1.000002p+0)": -float: 1 -ifloat: 1 -Test "cos_upward (0x1.000004p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_upward (0x1.000005bc7d86dp+0)": -double: 1 -idouble: 1 -Test "cos_upward (0x1.000006p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_upward (0x1.0c1522p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_upward (0x1.0c152382d7366p+0)": -double: 1 -idouble: 1 -Test "cos_upward (0x1.0c1524p+0)": -double: 1 -idouble: 1 -Test "cos_upward (0x1.921fb4p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_upward (0x1.921fb54442d19p+0)": -double: 1 -idouble: 1 -Test "cos_upward (0x1.921fb6p+0)": -float: 1 -ifloat: 1 -Test "cos_upward (0x1p+0)": -float: 1 -ifloat: 1 -Test "cos_upward (0x1p+120)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_upward (0x2.182a44p+0)": -float: 1 -ifloat: 1 -Test "cos_upward (0x2.182a4705ae6ccp+0)": -double: 1 -idouble: 1 -Test "cos_upward (0x2.182a48p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_upward (0x2.1e19e4p+72)": -float: 1 -ifloat: 1 -Test "cos_upward (0x2p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_upward (0x2p+64)": -double: 1 -idouble: 1 -Test "cos_upward (0x3p+0)": -float: 1 -ifloat: 1 -Test "cos_upward (0x4p+0)": -double: 1 -idouble: 1 -Test "cos_upward (0x5p+0)": -double: 1 -idouble: 1 -Test "cos_upward (0x6p+0)": -double: 1 -idouble: 1 -Test "cos_upward (0x7p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_upward (0x8p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_upward (0x8p+1020)": -double: 1 -idouble: 1 -Test "cos_upward (0x8p+124)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_upward (0x9p+0)": -float: 2 -ifloat: 2 -Test "cos_upward (0xa.217bap+12)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_upward (0xap+0)": -float: 1 -ifloat: 1 -Test "cos_upward (0xc.d4966p-4)": -float: 1 -ifloat: 1 -Test "cos_upward (0xc.d4967p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "cos_upward (0xf.ffffcp+124)": -double: 1 -idouble: 1 - -# cosh -Test "cosh (-0x1p+0)": -float: 1 -ifloat: 1 -Test "cosh (-0x2.c5e3acp+8)": -double: 1 -idouble: 1 -Test "cosh (-0x2.c679dp+8)": -double: 1 -idouble: 1 -Test "cosh (0x2.c5e3acp+8)": -double: 1 -idouble: 1 -Test "cosh (0x2.c679dp+8)": -double: 1 -idouble: 1 - -# cosh_downward -Test "cosh_downward (-0x2.c5e3bp+8)": -double: 1 -idouble: 1 -Test "cosh_downward (-0x2.c679d1f73f0fap+8)": -double: 1 -idouble: 1 -Test "cosh_downward (-0x2.c679dp+8)": -double: 1 -idouble: 1 -Test "cosh_downward (-0x5.96a7ep+4)": -float: 1 -ifloat: 1 -Test "cosh_downward (0x1.6p+4)": -double: 1 -idouble: 1 -Test "cosh_downward (0x1.7p+4)": -double: 1 -idouble: 1 -Test "cosh_downward (0x2.c5e3bp+8)": -double: 1 -idouble: 1 -Test "cosh_downward (0x2.c679d1f73f0fap+8)": -double: 1 -idouble: 1 -Test "cosh_downward (0x2.c679dp+8)": -double: 1 -idouble: 1 -Test "cosh_downward (0x5.96a7ep+4)": -float: 1 -ifloat: 1 - -# cosh_tonearest -Test "cosh_tonearest (-0x1p+0)": -float: 1 -ifloat: 1 -Test "cosh_tonearest (-0x2.c5e3acp+8)": -double: 1 -idouble: 1 -Test "cosh_tonearest (-0x2.c679dp+8)": -double: 1 -idouble: 1 -Test "cosh_tonearest (0x2.c5e3acp+8)": -double: 1 -idouble: 1 -Test "cosh_tonearest (0x2.c679dp+8)": -double: 1 -idouble: 1 - -# cosh_towardzero -Test "cosh_towardzero (-0x2.c5e3bp+8)": -double: 1 -idouble: 1 -Test "cosh_towardzero (-0x2.c679d1f73f0fap+8)": -double: 1 -idouble: 1 -Test "cosh_towardzero (-0x2.c679dp+8)": -double: 1 -idouble: 1 -Test "cosh_towardzero (-0x5.96a7ep+4)": -float: 1 -ifloat: 1 -Test "cosh_towardzero (0x1.6p+4)": -double: 1 -idouble: 1 -Test "cosh_towardzero (0x1.7p+4)": -double: 1 -idouble: 1 -Test "cosh_towardzero (0x2.c5e3bp+8)": -double: 1 -idouble: 1 -Test "cosh_towardzero (0x2.c679d1f73f0fap+8)": -double: 1 -idouble: 1 -Test "cosh_towardzero (0x2.c679dp+8)": -double: 1 -idouble: 1 -Test "cosh_towardzero (0x5.96a7ep+4)": -float: 1 -ifloat: 1 - -# cosh_upward -Test "cosh_upward (-0x1p+0)": -float: 1 -ifloat: 1 -Test "cosh_upward (-0x2.c5e3bp+8)": -double: 1 -idouble: 1 -Test "cosh_upward (-0x2.c679d1f73f0fap+8)": -double: 1 -idouble: 1 -Test "cosh_upward (-0x2.c679dp+8)": -double: 1 -idouble: 1 -Test "cosh_upward (-0x5.96a7e8p+4)": -double: 1 -idouble: 1 -Test "cosh_upward (-0x5.96a7ep+4)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "cosh_upward (0x1.8p+4)": -double: 1 -idouble: 1 -Test "cosh_upward (0x2.c5e3bp+8)": -double: 1 -idouble: 1 -Test "cosh_upward (0x2.c679d1f73f0fap+8)": -double: 1 -idouble: 1 -Test "cosh_upward (0x2.c679dp+8)": -double: 1 -idouble: 1 -Test "cosh_upward (0x3.2p+4)": -double: 1 -idouble: 1 -Test "cosh_upward (0x5.96a7e8p+4)": -double: 1 -idouble: 1 -Test "cosh_upward (0x5.96a7ep+4)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -# cpow -Test "Real part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)": -double: 1 -float: 4 -idouble: 1 -ifloat: 4 -Test "Imaginary part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)": -float: 2 -ifloat: 2 -Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, +0 + 0x1p+0 i)": -float: 1 -ifloat: 1 -Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0x1p+0 + 0x1p+0 i)": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0xcp-4 + 0x1.4p+0 i)": -double: 1 -float: 4 -idouble: 1 -ifloat: 4 - -# csin -Test "Real part of: csin (-0.75 + 710.5 i)": -double: 1 -idouble: 1 -Test "Real part of: csin (-0.75 + 89.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: csin (-0.75 - 710.5 i)": -double: 1 -idouble: 1 -Test "Real part of: csin (-0.75 - 89.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: csin (0.75 + 710.5 i)": -double: 1 -idouble: 1 -Test "Real part of: csin (0.75 + 89.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: csin (0.75 - 710.5 i)": -double: 1 -idouble: 1 -Test "Real part of: csin (0.75 - 89.5 i)": -float: 1 -ifloat: 1 -Test "Real part of: csin (0x1p-1074 + 1440 i)": -double: 1 -idouble: 1 - -# csinh -Test "Imaginary part of: csinh (-2 - 3 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csinh (-710.5 + 0.75 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csinh (-710.5 - 0.75 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csinh (-89.5 + 0.75 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: csinh (-89.5 - 0.75 i)": -float: 1 -ifloat: 1 -Test "Real part of: csinh (0.75 + 1.25 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: csinh (0.75 + 1.25 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: csinh (1440 + 0x1p-1074 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csinh (710.5 + 0.75 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csinh (710.5 - 0.75 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csinh (89.5 + 0.75 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: csinh (89.5 - 0.75 i)": -float: 1 -ifloat: 1 - -# csqrt -Test "Real part of: csqrt (-0x2p+0 + 0x3p+0 i)": -float: 1 -ifloat: 1 -Test "Real part of: csqrt (-0x2p+0 - 0x3p+0 i)": -float: 1 -ifloat: 1 -Test "Real part of: csqrt (-0x4.000008p-128 - 0x4.000008p-128 i)": -double: 1 -idouble: 1 -Test "Real part of: csqrt (-0x8p-152 - 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csqrt (0x4.000008p-128 + 0x4.000008p-128 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csqrt (0x4p-1076 + 0xf.fffffp+124 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csqrt (0x8p+1020 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csqrt (0x8p+124 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-1076 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csqrt (0x8p-152 + 0xf.fffffp+124 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p+1020 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Real part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.fffffp+124 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: csqrt (0xf.fffffp+124 + 0x1p+0 i)": -float: 1 -ifloat: 1 - -# ctan -Test "Real part of: ctan (-0x2p+0 - 0x3p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctan (-0x2p+0 - 0x3p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan (0x1.921fb4p+0 + +0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan (0x1.921fb54442d19p+0 + +0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)": -double: 2 -idouble: 2 -Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)": -double: 2 -idouble: 2 -Test "Real part of: ctan (0x1.921fb6p+0 + +0 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctan (0x8p+1020 + 0x1p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan (0x8p+124 + 0x1p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan (0xcp-4 + 0x1.4p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan (0xf.ffffffffffff8p+1020 + 0x1p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan (0xf.fffffp+124 + 0x1p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan (0xf.fffffp+124 + 0x1p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -# ctan_downward -Test "Real part of: ctan_downward (-0x2p+0 - 0x3p+0 i)": -double: 3 -idouble: 3 -Test "Imaginary part of: ctan_downward (-0x2p+0 - 0x3p+0 i)": -double: 2 -idouble: 2 -Test "Real part of: ctan_downward (0x1.921fb4p+0 + +0 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctan_downward (0x1.921fb4p+0 + 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctan_downward (0x1.921fb4p+0 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + +0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_downward (0x1.921fb6p+0 + +0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x8p-152 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctan_downward (0x1p+0 + 0x2.dp+4 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctan_downward (0x8p+1020 + 0x1p+0 i)": -double: 6 -idouble: 6 -Test "Real part of: ctan_downward (0x8p+124 + 0x1p+0 i)": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -Test "Imaginary part of: ctan_downward (0x8p+124 + 0x1p+0 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Real part of: ctan_downward (0xcp-4 + 0x1.4p+0 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctan_downward (0xf.ffffffffffff8p+1020 + 0x1p+0 i)": -double: 3 -idouble: 3 -Test "Real part of: ctan_downward (0xf.fffffp+124 + 0x1p+0 i)": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -Test "Imaginary part of: ctan_downward (0xf.fffffp+124 + 0x1p+0 i)": -double: 1 -idouble: 1 - -# ctan_tonearest -Test "Real part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + +0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + +0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)": -double: 2 -idouble: 2 -Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)": -double: 2 -idouble: 2 -Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + +0 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctan_tonearest (0x8p+1020 + 0x1p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan_tonearest (0x8p+124 + 0x1p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan_tonearest (0xcp-4 + 0x1.4p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_tonearest (0xf.ffffffffffff8p+1020 + 0x1p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -# ctan_towardzero -Test "Real part of: ctan_towardzero (-0x2p+0 - 0x3p+0 i)": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 -Test "Imaginary part of: ctan_towardzero (-0x2p+0 - 0x3p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan_towardzero (-0xc.35p+12 - 0xc.35p+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctan_towardzero (0x1.921fb4p+0 + +0 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctan_towardzero (0x1.921fb4p+0 + 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctan_towardzero (0x1.921fb4p+0 + 0x8p-152 i)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + +0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + +0 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-152 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctan_towardzero (0x1p+0 + 0x2.dp+4 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_towardzero (0x8p+1020 + 0x1p+0 i)": -double: 5 -idouble: 5 -Test "Real part of: ctan_towardzero (0x8p+124 + 0x1p+0 i)": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -Test "Imaginary part of: ctan_towardzero (0x8p+124 + 0x1p+0 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Imaginary part of: ctan_towardzero (0xc.35p+12 - 0xc.35p+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctan_towardzero (0xcp-4 + 0x1.4p+0 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctan_towardzero (0xf.ffffffffffff8p+1020 + 0x1p+0 i)": -double: 2 -idouble: 2 -Test "Real part of: ctan_towardzero (0xf.fffffp+124 + 0x1p+0 i)": -double: 4 -float: 2 -idouble: 4 -ifloat: 2 -Test "Imaginary part of: ctan_towardzero (0xf.fffffp+124 + 0x1p+0 i)": -double: 1 -idouble: 1 - -# ctan_upward -Test "Real part of: ctan_upward (-0x2p+0 - 0x3p+0 i)": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -Test "Imaginary part of: ctan_upward (-0x2p+0 - 0x3p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctan_upward (-0xc.35p+12 + 0xc.35p+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctan_upward (-0xc.35p+12 - 0xc.35p+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctan_upward (0x1.921fb4p+0 + +0 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctan_upward (0x1.921fb4p+0 + 0x8p-152 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctan_upward (0x1.921fb4p+0 + 0x8p-152 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + +0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + +0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + 0x4p-1076 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan_upward (0x1.921fb54442d19p+0 + 0x4p-1076 i)": -double: 2 -idouble: 2 -Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + 0x8p-152 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_upward (0x1.921fb6p+0 + +0 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x4p-1076 i)": -double: 2 -idouble: 2 -Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x8p-152 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x8p-152 i)": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63ap+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63p+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63p+8 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.6dp+8 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctan_upward (0x1p+0 + 0x2.dp+4 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctan_upward (0x1p+0 + 0x2.dp+4 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Real part of: ctan_upward (0x1p+0 + 0x2.fp+4 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan_upward (0x1p+0 + 0x2.fp+4 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Real part of: ctan_upward (0x8p+1020 + 0x1p+0 i)": -double: 2 -idouble: 2 -Test "Imaginary part of: ctan_upward (0x8p+1020 + 0x1p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_upward (0x8p+124 + 0x1p+0 i)": -double: 2 -idouble: 2 -Test "Imaginary part of: ctan_upward (0x8p+124 + 0x1p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctan_upward (0xc.35p+12 + 0xc.35p+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctan_upward (0xc.35p+12 - 0xc.35p+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctan_upward (0xcp-4 + 0x1.4p+0 i)": -double: 2 -idouble: 2 -Test "Imaginary part of: ctan_upward (0xcp-4 + 0x1.4p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctan_upward (0xf.ffffffffffff8p+1020 + 0x1p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctan_upward (0xf.fffffp+124 + 0x1p+0 i)": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -# ctanh -Test "Imaginary part of: ctanh (+0 + 0x1.921fb4p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh (+0 + 0x1.921fb54442d19p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh (+0 + 0x1.921fb6p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168cp-4 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh (+0 + 0xc.90fdap-4 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Imaginary part of: ctanh (+0 + 0xc.90fdbp-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctanh (-0x2p+0 - 0x3p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh (-0x2p+0 - 0x3p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+1020 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh (0x1p+0 + 0x8p+124 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh (0x1p+0 + 0xf.ffffffffffff8p+1020 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)": -double: 2 -idouble: 2 -Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)": -double: 2 -idouble: 2 -Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctanh (0xcp-4 + 0x1.4p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh (0xcp-4 + 0x1.4p+0 i)": -float: 2 -ifloat: 2 - -# ctanh_downward -Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb4p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb54442d18p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb6p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdap-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctanh_downward (-0x2p+0 - 0x3p+0 i)": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -Test "Imaginary part of: ctanh_downward (-0x2p+0 - 0x3p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_downward (0x1p+0 + 0x8p+1020 i)": -double: 6 -idouble: 6 -Test "Real part of: ctanh_downward (0x1p+0 + 0x8p+124 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Imaginary part of: ctanh_downward (0x1p+0 + 0x8p+124 i)": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -Test "Imaginary part of: ctanh_downward (0x1p+0 + 0xf.ffffffffffff8p+1020 i)": -double: 3 -idouble: 3 -Test "Real part of: ctanh_downward (0x1p+0 + 0xf.fffffp+124 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_downward (0x1p+0 + 0xf.fffffp+124 i)": -double: 5 -float: 5 -idouble: 5 -ifloat: 5 -Test "Imaginary part of: ctanh_downward (0x2.dp+4 + 0x1p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d18p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb6p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb4p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb4p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d18p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb6p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb6p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_downward (0xcp-4 + 0x1.4p+0 i)": -double: 1 -idouble: 1 - -# ctanh_tonearest -Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb4p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb54442d19p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb6p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168cp-4 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdap-4 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdbp-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+1020 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh_tonearest (0x1p+0 + 0x8p+124 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffff8p+1020 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)": -double: 2 -idouble: 2 -Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)": -double: 2 -idouble: 2 -Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)": -float: 2 -ifloat: 2 - -# ctanh_towardzero -Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb4p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb54442d18p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb6p+0 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctanh_towardzero (-0x2p+0 - 0x3p+0 i)": -double: 2 -idouble: 2 -Test "Imaginary part of: ctanh_towardzero (-0x2p+0 - 0x3p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctanh_towardzero (-0xc.35p+12 + 0xc.35p+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctanh_towardzero (-0xc.35p+12 - 0xc.35p+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+1020 i)": -double: 5 -idouble: 5 -Test "Real part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.ffffffffffff8p+1020 i)": -double: 2 -idouble: 2 -Test "Real part of: ctanh_towardzero (0x1p+0 + 0xf.fffffp+124 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.fffffp+124 i)": -double: 4 -float: 2 -idouble: 4 -ifloat: 2 -Test "Imaginary part of: ctanh_towardzero (0x2.dp+4 + 0x1p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d18p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb4p+0 i)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb4p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d18p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb6p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb6p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_towardzero (0xcp-4 + 0x1.4p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -# ctanh_upward -Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb4p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb54442d18p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb54442d19p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb6p+0 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdap-4 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdbp-4 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctanh_upward (-0x2p+0 - 0x3p+0 i)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "Imaginary part of: ctanh_upward (-0x2p+0 - 0x3p+0 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Real part of: ctanh_upward (-0xc.35p+12 + 0xc.35p+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctanh_upward (-0xc.35p+12 - 0xc.35p+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctanh_upward (0x1.63ap+12 + 0x1p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctanh_upward (0x1.63p+12 + 0x1p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctanh_upward (0x1.63p+8 + 0x1p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctanh_upward (0x1.6dp+8 + 0x1p+0 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctanh_upward (0x1p+0 + 0x8p+1020 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+1020 i)": -double: 2 -idouble: 2 -Test "Real part of: ctanh_upward (0x1p+0 + 0x8p+124 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+124 i)": -double: 2 -idouble: 2 -Test "Imaginary part of: ctanh_upward (0x1p+0 + 0xf.ffffffffffff8p+1020 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_upward (0x1p+0 + 0xf.fffffp+124 i)": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -Test "Real part of: ctanh_upward (0x2.dp+4 + 0x1p+0 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Imaginary part of: ctanh_upward (0x2.dp+4 + 0x1p+0 i)": -float: 1 -ifloat: 1 -Test "Real part of: ctanh_upward (0x2.fp+4 + 0x1p+0 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Imaginary part of: ctanh_upward (0x2.fp+4 + 0x1p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d18p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d18p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d19p+0 i)": -double: 2 -idouble: 2 -Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d19p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb6p+0 i)": -double: 2 -idouble: 2 -Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb4p+0 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb4p+0 i)": -float: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d18p+0 i)": -double: 1 -idouble: 1 -Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d19p+0 i)": -double: 1 -idouble: 1 -Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb6p+0 i)": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb6p+0 i)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "Real part of: ctanh_upward (0xc.35p+12 + 0xc.35p+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Real part of: ctanh_upward (0xc.35p+12 - 0xc.35p+12 i)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "Imaginary part of: ctanh_upward (0xcp-4 + 0x1.4p+0 i)": -float: 2 -ifloat: 2 - -# erf -Test "erf (0x1.4p+0)": -double: 1 -idouble: 1 - -# erfc -Test "erfc (-0x8p-4)": -float: 1 -ifloat: 1 -Test "erfc (0x2p+0)": -double: 1 -idouble: 1 -Test "erfc (0x3.ee6078p+0)": -double: 1 -idouble: 1 -Test "erfc (0x4.2p+0)": -double: 1 -idouble: 1 -Test "erfc (0x7.fe8008p+0)": -float: 1 -ifloat: 1 -Test "erfc (0x7.fffd6p+0)": -float: 1 -ifloat: 1 - -# exp10 -Test "exp10 (-0x1.31p+8)": -double: 1 -idouble: 1 -Test "exp10 (-0x1p+0)": -double: 1 -idouble: 1 -Test "exp10 (-0x2.4p+4)": -double: 1 -idouble: 1 -Test "exp10 (0x2.4p+4)": -double: 1 -idouble: 1 -Test "exp10 (0x3p+0)": -double: 1 -idouble: 1 - -# exp10_downward -Test "exp10_downward (0x2.4p+4)": -double: 1 -idouble: 1 - -# exp10_tonearest -Test "exp10_tonearest (-0x1.31p+8)": -double: 1 -idouble: 1 -Test "exp10_tonearest (-0x1p+0)": -double: 1 -idouble: 1 -Test "exp10_tonearest (-0x2.4p+4)": -double: 1 -idouble: 1 -Test "exp10_tonearest (0x2.4p+4)": -double: 1 -idouble: 1 -Test "exp10_tonearest (0x3p+0)": -double: 1 -idouble: 1 - -# exp10_towardzero -Test "exp10_towardzero (0x2.4p+4)": -double: 1 -idouble: 1 - -# exp10_upward -Test "exp10_upward (-0x1.344p+12)": -float: 1 -ifloat: 1 -Test "exp10_upward (-0x1.86ap+16)": -float: 1 -ifloat: 1 -Test "exp10_upward (-0xf.424p+16)": -float: 1 -ifloat: 1 -Test "exp10_upward (-0xf.fffffp+124)": -float: 1 -ifloat: 1 -Test "exp10_upward (0x2.4p+4)": -double: 1 -idouble: 1 -Test "exp10_upward (0x3p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -# exp_downward -Test "exp_downward (0x2p+0)": -double: 1 -idouble: 1 -Test "exp_downward (0x3p+0)": -double: 1 -idouble: 1 -Test "exp_downward (0x5.8b9028p+4)": -double: 1 -idouble: 1 -Test "exp_downward (0xcp-4)": -double: 1 -idouble: 1 - -# exp_towardzero -Test "exp_towardzero (0x2p+0)": -double: 1 -idouble: 1 -Test "exp_towardzero (0x3p+0)": -double: 1 -idouble: 1 -Test "exp_towardzero (0x5.8b9028p+4)": -double: 1 -idouble: 1 -Test "exp_towardzero (0xcp-4)": -double: 1 -idouble: 1 - -# exp_upward -Test "exp_upward (-0x2.e870a4p+8)": -double: 1 -idouble: 1 -Test "exp_upward (-0x2.e870a7e5e88c2p+8)": -double: 1 -idouble: 1 -Test "exp_upward (-0x2.e870a7e5e88cp+8)": -double: 1 -idouble: 1 -Test "exp_upward (-0x2.e870a8p+8)": -double: 1 -idouble: 1 -Test "exp_upward (-0x2.ebe224p+8)": -double: 1 -idouble: 1 -Test "exp_upward (-0x2.ebe227861639p+8)": -double: 1 -idouble: 1 -Test "exp_upward (-0x2.ebe228p+8)": -double: 1 -idouble: 1 -Test "exp_upward (-0x4.d2p+8)": -double: 1 -idouble: 1 -Test "exp_upward (-0xf.ffffffffffff8p+1020)": -double: 1 -idouble: 1 -Test "exp_upward (-0xf.fffffp+124)": -double: 1 -idouble: 1 -Test "exp_upward (0x1p+0)": -double: 1 -idouble: 1 -Test "exp_upward (0x2.c5cp+8)": -double: 1 -idouble: 1 -Test "exp_upward (0x3.2p+4)": -double: 1 -idouble: 1 - -# expm1 -Test "expm1 (0x1.f4p+8)": -double: 1 -idouble: 1 -Test "expm1 (0x1p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "expm1 (0xcp-4)": -double: 1 -idouble: 1 - -# expm1_downward -Test "expm1_downward (0x1.f4p+8)": -double: 1 -idouble: 1 -Test "expm1_downward (0x3.2p+4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "expm1_downward (0x7.fp+4)": -double: 1 -idouble: 1 - -# expm1_tonearest -Test "expm1_tonearest (0x1.f4p+8)": -double: 1 -idouble: 1 -Test "expm1_tonearest (0x1p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "expm1_tonearest (0xcp-4)": -double: 1 -idouble: 1 - -# expm1_towardzero -Test "expm1_towardzero (-0x1p-100)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "expm1_towardzero (-0x1p-32)": -float: 1 -ifloat: 1 -Test "expm1_towardzero (-0x1p-64)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "expm1_towardzero (-0x4p-52)": -float: 1 -ifloat: 1 -Test "expm1_towardzero (-0x8p-32)": -float: 1 -ifloat: 1 -Test "expm1_towardzero (0x1.f4p+8)": -double: 1 -idouble: 1 -Test "expm1_towardzero (0x3.2p+4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "expm1_towardzero (0x7.fp+4)": -double: 1 -idouble: 1 - -# expm1_upward -Test "expm1_upward (-0x1p-100)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "expm1_upward (-0x1p-32)": -float: 1 -ifloat: 1 -Test "expm1_upward (-0x1p-64)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "expm1_upward (-0x4p-52)": -float: 1 -ifloat: 1 -Test "expm1_upward (-0x8p-32)": -float: 1 -ifloat: 1 -Test "expm1_upward (0x1p-100)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "expm1_upward (0x1p-32)": -float: 1 -ifloat: 1 -Test "expm1_upward (0x1p-64)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "expm1_upward (0x4p-52)": -float: 1 -ifloat: 1 -Test "expm1_upward (0x8p-32)": -float: 1 -ifloat: 1 - -# gamma -Test "gamma (-0x1p-20)": -double: 1 -idouble: 1 -Test "gamma (-0x2p-16)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "gamma (-0x4p-12)": -double: 1 -idouble: 1 -Test "gamma (-0x8p-8)": -double: 1 -idouble: 1 -Test "gamma (0x4p-12)": -float: 1 -ifloat: 1 -Test "gamma (0x4p-32)": -double: 1 -idouble: 1 -Test "gamma (0xb.333333333333p-4)": -double: 1 -idouble: 1 -Test "gamma (0xb.33333p-4)": -double: 1 -idouble: 1 - -# hypot -Test "hypot (-0xb.33334p-4, -0xc.6666666666668p+0)": -double: 1 -idouble: 1 -Test "hypot (-0xb.33334p-4, 0xc.6666666666668p+0)": -double: 1 -idouble: 1 -Test "hypot (-0xc.6666666666668p+0, -0xb.33334p-4)": -double: 1 -idouble: 1 -Test "hypot (-0xc.6666666666668p+0, 0xb.33334p-4)": -double: 1 -idouble: 1 -Test "hypot (0xb.33334p-4, -0xc.6666666666668p+0)": -double: 1 -idouble: 1 -Test "hypot (0xb.33334p-4, 0xc.6666666666668p+0)": -double: 1 -idouble: 1 -Test "hypot (0xc.6666666666668p+0, -0xb.33334p-4)": -double: 1 -idouble: 1 -Test "hypot (0xc.6666666666668p+0, 0xb.33334p-4)": -double: 1 -idouble: 1 - -# j0 -Test "j0 (-0x4p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "j0 (-0xf.fffffp+124)": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -Test "j0 (0x2p+0)": -float: 2 -ifloat: 2 -Test "j0 (0x4p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "j0 (0x8p+0)": -float: 1 -ifloat: 1 -Test "j0 (0xap+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "j0 (0xcp-4)": -float: 1 -ifloat: 1 -Test "j0 (0xe.be71dp+104)": -float: 2 -ifloat: 2 -Test "j0 (0xf.fffffp+124)": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -# j1 -Test "j1 (0x1.ff00000000002p+840)": -double: 1 -idouble: 1 -Test "j1 (0x2p+0)": -double: 1 -idouble: 1 -Test "j1 (0x4.ffcp+72)": -double: 1 -idouble: 1 -Test "j1 (0x8p+0)": -double: 1 -idouble: 1 -Test "j1 (0xap+0)": -float: 2 -ifloat: 2 -Test "j1 (0xf.ffffffffffff8p+1020)": -double: 1 -idouble: 1 -Test "j1 (0xf.fffffp+124)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -# jn -Test "jn (0, -0x4p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "jn (0, 0x2p+0)": -float: 2 -ifloat: 2 -Test "jn (0, 0x4p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "jn (0, 0x8p+0)": -float: 1 -ifloat: 1 -Test "jn (0, 0xap+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "jn (0, 0xcp-4)": -float: 1 -ifloat: 1 -Test "jn (1, 0x2p+0)": -double: 1 -idouble: 1 -Test "jn (1, 0x8p+0)": -double: 1 -idouble: 1 -Test "jn (1, 0xap+0)": -float: 2 -ifloat: 2 -Test "jn (10, 0x2p+0)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "jn (10, 0x2p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "jn (10, 0xap+0)": -double: 4 -float: 2 -idouble: 4 -ifloat: 2 -Test "jn (10, 0xcp-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "jn (2, 0x2.67a2a4p+0)": -float: 1 -ifloat: 1 -Test "jn (2, 0x2.67a2a5d2e3682p+0)": -double: 1 -idouble: 1 -Test "jn (2, 0x2.67a2a5d2e368p+0)": -double: 2 -idouble: 2 -Test "jn (2, 0x2.67a2a8p+0)": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -Test "jn (2, 0x8p+124)": -double: 1 -idouble: 1 -Test "jn (2, 0xf.fffb1p+96)": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -Test "jn (2, 0xf.fffffp+124)": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -Test "jn (3, 0x2.67a2a4p+0)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "jn (3, 0x2.67a2a5d2e3682p+0)": -double: 1 -idouble: 1 -Test "jn (3, 0x2.67a2a5d2e368p+0)": -double: 3 -idouble: 3 -Test "jn (3, 0x2.67a2a8p+0)": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 -Test "jn (3, 0x2p+0)": -float: 1 -ifloat: 1 -Test "jn (3, 0x2p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "jn (3, 0xap+0)": -double: 3 -idouble: 3 -Test "jn (3, 0xcp-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "jn (4, 0x2.67a2a4p+0)": -float: 1 -ifloat: 1 -Test "jn (4, 0x2.67a2a5d2e3682p+0)": -double: 1 -idouble: 1 -Test "jn (4, 0x2.67a2a5d2e368p+0)": -double: 1 -idouble: 1 -Test "jn (4, 0x2.67a2a8p+0)": -float: 1 -ifloat: 1 -Test "jn (5, 0x2.67a2a4p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "jn (5, 0x2.67a2a5d2e3682p+0)": -double: 1 -idouble: 1 -Test "jn (5, 0x2.67a2a5d2e368p+0)": -double: 2 -idouble: 2 -Test "jn (5, 0x2.67a2a8p+0)": -float: 2 -ifloat: 2 -Test "jn (6, 0x2.67a2a4p+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "jn (6, 0x2.67a2a5d2e3682p+0)": -double: 2 -idouble: 2 -Test "jn (6, 0x2.67a2a5d2e368p+0)": -double: 4 -idouble: 4 -Test "jn (6, 0x2.67a2a8p+0)": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -Test "jn (7, 0x2.67a2a4p+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "jn (7, 0x2.67a2a5d2e368p+0)": -double: 3 -idouble: 3 -Test "jn (7, 0x2.67a2a8p+0)": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 -Test "jn (8, 0x2.67a2a4p+0)": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -Test "jn (8, 0x2.67a2a5d2e3682p+0)": -double: 1 -idouble: 1 -Test "jn (8, 0x2.67a2a5d2e368p+0)": -double: 3 -idouble: 3 -Test "jn (8, 0x2.67a2a8p+0)": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -Test "jn (9, 0x2.67a2a4p+0)": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 -Test "jn (9, 0x2.67a2a5d2e3682p+0)": -double: 4 -idouble: 4 -Test "jn (9, 0x2.67a2a5d2e368p+0)": -double: 1 -idouble: 1 -Test "jn (9, 0x2.67a2a8p+0)": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -# lgamma -Test "lgamma (-0x1p-20)": -double: 1 -idouble: 1 -Test "lgamma (-0x2p-16)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "lgamma (-0x4p-12)": -double: 1 -idouble: 1 -Test "lgamma (-0x8p-8)": -double: 1 -idouble: 1 -Test "lgamma (0x4p-12)": -float: 1 -ifloat: 1 -Test "lgamma (0x4p-32)": -double: 1 -idouble: 1 -Test "lgamma (0xb.333333333333p-4)": -double: 1 -idouble: 1 -Test "lgamma (0xb.33333p-4)": -double: 1 -idouble: 1 - -# log -Test "log (0x2.b7e15p+0)": -float: 1 -ifloat: 1 - -# log10 -Test "log10 (0x2.b7e154p+0)": -float: 1 -ifloat: 1 -Test "log10 (0xcp-4)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -# log1p -Test "log1p (-0x4p-4)": -float: 1 -ifloat: 1 -Test "log1p (0x1.b7e15p+0)": -float: 1 -ifloat: 1 - -# pow -Test "pow (0x1.000002p+0, 0x1p+24)": -float: 1 -ifloat: 1 -Test "pow (0xf.fffffp-4, -0x1p+24)": -float: 1 -ifloat: 1 -Test "pow (0xf.fffffp-4, 0x1p+24)": -float: 1 -ifloat: 1 - -# pow10 -Test "pow10 (-0x1.31p+8)": -double: 1 -idouble: 1 -Test "pow10 (-0x1p+0)": -double: 1 -idouble: 1 -Test "pow10 (-0x2.4p+4)": -double: 1 -idouble: 1 -Test "pow10 (0x2.4p+4)": -double: 1 -idouble: 1 -Test "pow10 (0x3p+0)": -double: 1 -idouble: 1 - -# pow_downward -Test "pow_downward (1.5, 1.03125)": -float: 1 -ifloat: 1 - -# pow_tonearest -Test "pow_tonearest (0x1.000002p+0, 0x1p+24)": -float: 1 -ifloat: 1 -Test "pow_tonearest (0xf.fffffp-4, -0x1p+24)": -float: 1 -ifloat: 1 -Test "pow_tonearest (0xf.fffffp-4, 0x1p+24)": -float: 1 -ifloat: 1 - -# pow_towardzero -Test "pow_towardzero (1.5, 1.03125)": -float: 1 -ifloat: 1 - -# pow_upward -Test "pow_upward (1.0625, 1.125)": -float: 1 -ifloat: 1 - -# sin -Test "sin (0x1p+0)": -float: 1 -ifloat: 1 - -# sin_downward -Test "sin_downward (-0x1.921fb4p+0)": -double: 1 -idouble: 1 -Test "sin_downward (-0x1.921fb6p+0)": -double: 1 -idouble: 1 -Test "sin_downward (-0x2p+64)": -double: 1 -idouble: 1 -Test "sin_downward (-0x8.60a91c16b9b3p-4)": -double: 1 -idouble: 1 -Test "sin_downward (-0x8.60a91p-4)": -double: 1 -idouble: 1 -Test "sin_downward (-0x8.60a92p-4)": -double: 1 -idouble: 1 -Test "sin_downward (0x1.921fb54442d18p+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x1.921fb54442d19p+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x1p+120)": -float: 1 -ifloat: 1 -Test "sin_downward (0x1p+28)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_downward (0x2.1e19e0c9bab24p+72)": -double: 1 -idouble: 1 -Test "sin_downward (0x2.1e19ep+72)": -float: 2 -ifloat: 2 -Test "sin_downward (0x2.553534p+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x2.5535376715bap+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x2p+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x3.be735c19be9fep+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x3.be736p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_downward (0x3.ec2a0250032a2p+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x3.ec2a0250032ap+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x3.ec2ap+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_downward (0x3p+0)": -float: 1 -ifloat: 1 -Test "sin_downward (0x4.093388p-4)": -double: 1 -idouble: 1 -Test "sin_downward (0x4.1237e153f7084p+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x4.1237e153f708p+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x4.1237ep+0)": -float: 1 -ifloat: 1 -Test "sin_downward (0x4.c92d08p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_downward (0x4.c92d1p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_downward (0x4p+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x4p+48)": -double: 1 -idouble: 1 -Test "sin_downward (0x5.fbec7477d4a84p+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x5.fbec7477d4a8p+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x5.fbec78p+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x5p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_downward (0x6p+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x8p+0)": -double: 1 -idouble: 1 -Test "sin_downward (0x8p+1020)": -double: 1 -idouble: 1 -Test "sin_downward (0x9p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_downward (0xap+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_downward (0xc.d4966d92d1708p-4)": -double: 1 -idouble: 1 -Test "sin_downward (0xc.d4966p-4)": -double: 1 -idouble: 1 -Test "sin_downward (0xf.ffffcp+124)": -double: 1 -idouble: 1 -Test "sin_downward (0xf.ffffffffffff8p+1020)": -double: 1 -idouble: 1 -Test "sin_downward (0xf.fffffp+124)": -double: 1 -idouble: 1 - -# sin_tonearest -Test "sin_tonearest (0x1p+0)": -float: 1 -ifloat: 1 - -# sin_towardzero -Test "sin_towardzero (-0x1.921fb54442d18p+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (-0x1.921fb54442d19p+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (-0x2p+64)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x1.921fb54442d18p+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x1.921fb54442d19p+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x1p+0)": -float: 1 -ifloat: 1 -Test "sin_towardzero (0x2.1e19e4p+72)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x2.1e19ep+72)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_towardzero (0x2.553534p+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x2.5535376715bap+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x2p+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x2p+64)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x3.be735c19beap+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x3.be735cp+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_towardzero (0x3.ec2a04p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_towardzero (0x4.093388p-4)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x4.1237e8p+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x4.1237ep+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x4.c92d0ffa4bf04p+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x4.c92d0ffa4bfp+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x4p+48)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x5.fbec7p+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x8p+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x8p+1020)": -double: 1 -idouble: 1 -Test "sin_towardzero (0x9p+0)": -double: 1 -idouble: 1 -Test "sin_towardzero (0xb.fa09ap+100)": -double: 1 -idouble: 1 -Test "sin_towardzero (0xc.d4966d92d1708p-4)": -double: 1 -idouble: 1 -Test "sin_towardzero (0xc.d4966p-4)": -double: 1 -idouble: 1 -Test "sin_towardzero (0xc.d4967p-4)": -float: 1 -ifloat: 1 -Test "sin_towardzero (0xe.ef3afp-4)": -float: 1 -ifloat: 1 -Test "sin_towardzero (0xf.ffffcp+124)": -double: 1 -idouble: 1 -Test "sin_towardzero (0xf.ffffffffffff8p+1020)": -double: 1 -idouble: 1 - -# sin_upward -Test "sin_upward (-0x1.921fb4p+0)": -float: 1 -ifloat: 1 -Test "sin_upward (-0x1.921fb54442d18p+0)": -double: 1 -idouble: 1 -Test "sin_upward (-0x1.921fb54442d19p+0)": -double: 1 -idouble: 1 -Test "sin_upward (-0x1.921fb6p+0)": -float: 1 -ifloat: 1 -Test "sin_upward (0x1.921fb4p+0)": -double: 1 -idouble: 1 -Test "sin_upward (0x1.921fb6p+0)": -double: 1 -idouble: 1 -Test "sin_upward (0x1p+0)": -double: 1 -idouble: 1 -Test "sin_upward (0x1p+120)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_upward (0x1p+28)": -float: 1 -ifloat: 1 -Test "sin_upward (0x2.1e19e4p+72)": -double: 1 -idouble: 1 -Test "sin_upward (0x2.1e19ep+72)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_upward (0x2.5535376715b9ep+0)": -double: 1 -idouble: 1 -Test "sin_upward (0x2.553538p+0)": -double: 1 -idouble: 1 -Test "sin_upward (0x2p+0)": -float: 1 -ifloat: 1 -Test "sin_upward (0x2p+64)": -double: 1 -idouble: 1 -Test "sin_upward (0x3.be735c19beap+0)": -double: 1 -idouble: 1 -Test "sin_upward (0x3.be735cp+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_upward (0x3.be736p+0)": -float: 1 -ifloat: 1 -Test "sin_upward (0x3.ec2a04p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_upward (0x3p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_upward (0x4.093385688a2d4p-4)": -double: 1 -idouble: 1 -Test "sin_upward (0x4.093385688a2dp-4)": -double: 1 -idouble: 1 -Test "sin_upward (0x4.09338p-4)": -double: 1 -idouble: 1 -Test "sin_upward (0x4.1237e8p+0)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "sin_upward (0x4.1237ep+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_upward (0x4.c92d08p+0)": -float: 1 -ifloat: 1 -Test "sin_upward (0x4.c92d0ffa4bf04p+0)": -double: 1 -idouble: 1 -Test "sin_upward (0x4.c92d0ffa4bfp+0)": -double: 1 -idouble: 1 -Test "sin_upward (0x4.c92d1p+0)": -float: 1 -ifloat: 1 -Test "sin_upward (0x4p+0)": -float: 2 -ifloat: 2 -Test "sin_upward (0x4p+48)": -float: 1 -ifloat: 1 -Test "sin_upward (0x5.fbec7p+0)": -double: 1 -idouble: 1 -Test "sin_upward (0x5p+0)": -float: 1 -ifloat: 1 -Test "sin_upward (0x7p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "sin_upward (0x8.60a91c16b9b3p-4)": -double: 1 -idouble: 1 -Test "sin_upward (0x8.60a91p-4)": -double: 1 -idouble: 1 -Test "sin_upward (0x8.60a92p-4)": -double: 1 -idouble: 1 -Test "sin_upward (0x8p+0)": -float: 1 -ifloat: 1 -Test "sin_upward (0x8p+124)": -double: 1 -idouble: 1 -Test "sin_upward (0x9p+0)": -float: 1 -ifloat: 1 -Test "sin_upward (0xap+0)": -float: 1 -ifloat: 1 -Test "sin_upward (0xb.fa09ap+100)": -double: 1 -idouble: 1 -Test "sin_upward (0xc.d4966d92d171p-4)": -double: 1 -idouble: 1 -Test "sin_upward (0xc.d4967p-4)": -double: 1 -idouble: 1 -Test "sin_upward (0xcp-4)": -double: 1 -idouble: 1 -Test "sin_upward (0xe.ef3af1b5d8008p-4)": -double: 1 -idouble: 1 -Test "sin_upward (0xe.ef3af1b5d8p-4)": -double: 1 -idouble: 1 -Test "sin_upward (0xe.ef3afp-4)": -double: 1 -idouble: 1 -Test "sin_upward (0xe.ef3bp-4)": -double: 1 -idouble: 1 - -# sincos -Test "sincos (0x1.0c1522p+0) extra output 1": -float: 1 -ifloat: 1 -Test "sincos (0x1p+120) extra output 2": -float: 1 -ifloat: 1 -Test "sincos (0x8.60a92p-4) extra output 2": -float: 1 -ifloat: 1 -Test "sincos (0x8p+124) extra output 2": -float: 1 -ifloat: 1 -Test "sincos (0xc.d4967p-4) extra output 2": -float: 1 -ifloat: 1 - -# sinh_downward -Test "sinh_downward (0x1.6p+4)": -double: 1 -idouble: 1 -Test "sinh_downward (0x1.7p+4)": -double: 1 -idouble: 1 - -# sinh_towardzero -Test "sinh_towardzero (0x1.6p+4)": -double: 1 -idouble: 1 -Test "sinh_towardzero (0x1.7p+4)": -double: 1 -idouble: 1 - -# sinh_upward -Test "sinh_upward (0x1.8p+4)": -double: 1 -idouble: 1 -Test "sinh_upward (0x8p-32)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -# tan_downward -Test "tan_downward (-0x2p+64)": -double: 1 -idouble: 1 -Test "tan_downward (-0xc.908p-4)": -float: 2 -ifloat: 2 -Test "tan_downward (-0xc.90cp-4)": -float: 1 -ifloat: 1 -Test "tan_downward (-0xc.90ep-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_downward (-0xc.90f8p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_downward (-0xc.90fcp-4)": -float: 1 -ifloat: 1 -Test "tan_downward (-0xc.90fd8p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_downward (-0xc.90fdap-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_downward (-0xc.90fdbp-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_downward (-0xc.90fdcp-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_downward (-0xc.90fdp-4)": -float: 1 -ifloat: 1 -Test "tan_downward (-0xc.90fep-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_downward (-0xc.90fp-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_downward (-0xc.91p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_downward (-0xc.92p-4)": -double: 1 -idouble: 1 -Test "tan_downward (-0xc.9p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_downward (-0xc.ap-4)": -double: 1 -idouble: 1 -Test "tan_downward (0x1p+0)": -double: 1 -idouble: 1 -Test "tan_downward (0x2.1e19e0c9bab24p+72)": -double: 1 -idouble: 1 -Test "tan_downward (0x2p+0)": -double: 1 -idouble: 1 -Test "tan_downward (0x3p+0)": -double: 1 -idouble: 1 -Test "tan_downward (0x4p+0)": -float: 1 -ifloat: 1 -Test "tan_downward (0x6p+0)": -double: 1 -idouble: 1 -Test "tan_downward (0x7p+0)": -double: 1 -idouble: 1 -Test "tan_downward (0x8p+1020)": -double: 1 -idouble: 1 -Test "tan_downward (0xc.908p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_downward (0xc.90cp-4)": -double: 1 -idouble: 1 -Test "tan_downward (0xc.90fcp-4)": -double: 1 -idouble: 1 -Test "tan_downward (0xc.90fdaa22168c8p-4)": -double: 1 -idouble: 1 -Test "tan_downward (0xc.90fdp-4)": -double: 1 -idouble: 1 -Test "tan_downward (0xc.92p-4)": -float: 1 -ifloat: 1 -Test "tan_downward (0xc.94p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_downward (0xc.98p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_downward (0xc.ap-4)": -float: 1 -ifloat: 1 -Test "tan_downward (0xcp-4)": -double: 1 -idouble: 1 - -# tan_towardzero -Test "tan_towardzero (-0x2p+64)": -double: 1 -idouble: 1 -Test "tan_towardzero (-0xc.908p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_towardzero (-0xc.90cp-4)": -double: 1 -idouble: 1 -Test "tan_towardzero (-0xc.90fcp-4)": -double: 1 -idouble: 1 -Test "tan_towardzero (-0xc.90fdp-4)": -double: 1 -idouble: 1 -Test "tan_towardzero (-0xc.94p-4)": -double: 1 -idouble: 1 -Test "tan_towardzero (-0xc.98p-4)": -double: 1 -idouble: 1 -Test "tan_towardzero (0x1p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_towardzero (0x2.1e19e4p+72)": -double: 1 -idouble: 1 -Test "tan_towardzero (0x2.1e19ep+72)": -double: 1 -idouble: 1 -Test "tan_towardzero (0x2p+64)": -double: 1 -idouble: 1 -Test "tan_towardzero (0x5p+0)": -double: 1 -idouble: 1 -Test "tan_towardzero (0x7p+0)": -double: 1 -idouble: 1 -Test "tan_towardzero (0x8p+0)": -double: 1 -idouble: 1 -Test "tan_towardzero (0x9p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_towardzero (0xc.908p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_towardzero (0xc.90cp-4)": -double: 1 -idouble: 1 -Test "tan_towardzero (0xc.90fcp-4)": -double: 1 -idouble: 1 -Test "tan_towardzero (0xc.90fdaa22168c8p-4)": -double: 1 -idouble: 1 -Test "tan_towardzero (0xc.90fdp-4)": -double: 1 -idouble: 1 -Test "tan_towardzero (0xc.94p-4)": -double: 1 -idouble: 1 -Test "tan_towardzero (0xc.98p-4)": -double: 1 -idouble: 1 -Test "tan_towardzero (0xcp-4)": -double: 1 -idouble: 1 -Test "tan_towardzero (0xf.ffffffffffff8p+1020)": -double: 1 -idouble: 1 -Test "tan_towardzero (0xf.fffffp+124)": -double: 1 -idouble: 1 - -# tan_upward -Test "tan_upward (-0xc.908p-4)": -double: 1 -idouble: 1 -Test "tan_upward (-0xc.90cp-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_upward (-0xc.90ep-4)": -float: 1 -ifloat: 1 -Test "tan_upward (-0xc.90f8p-4)": -float: 1 -ifloat: 1 -Test "tan_upward (-0xc.90fcp-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_upward (-0xc.90fd8p-4)": -float: 1 -ifloat: 1 -Test "tan_upward (-0xc.90fdap-4)": -float: 1 -ifloat: 1 -Test "tan_upward (-0xc.90fdbp-4)": -float: 1 -ifloat: 1 -Test "tan_upward (-0xc.90fdcp-4)": -float: 1 -ifloat: 1 -Test "tan_upward (-0xc.90fdp-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_upward (-0xc.90fep-4)": -float: 1 -ifloat: 1 -Test "tan_upward (-0xc.90fp-4)": -float: 1 -ifloat: 1 -Test "tan_upward (-0xc.91p-4)": -float: 1 -ifloat: 1 -Test "tan_upward (-0xc.94p-4)": -double: 1 -idouble: 1 -Test "tan_upward (-0xc.98p-4)": -double: 1 -idouble: 1 -Test "tan_upward (-0xc.9p-4)": -float: 1 -ifloat: 1 -Test "tan_upward (0x1p+0)": -float: 1 -ifloat: 1 -Test "tan_upward (0x2.1e19e4p+72)": -double: 1 -idouble: 1 -Test "tan_upward (0x2.1e19ep+72)": -double: 1 -idouble: 1 -Test "tan_upward (0x2p+64)": -double: 1 -idouble: 1 -Test "tan_upward (0x4p+0)": -double: 1 -idouble: 1 -Test "tan_upward (0x5p+0)": -double: 1 -idouble: 1 -Test "tan_upward (0x7p+0)": -float: 1 -ifloat: 1 -Test "tan_upward (0x8p+0)": -double: 1 -idouble: 1 -Test "tan_upward (0x9p+0)": -double: 1 -idouble: 1 -Test "tan_upward (0xap+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_upward (0xc.908p-4)": -float: 1 -ifloat: 1 -Test "tan_upward (0xc.90ep-4)": -double: 1 -idouble: 1 -Test "tan_upward (0xc.90f8p-4)": -double: 1 -idouble: 1 -Test "tan_upward (0xc.90fd8p-4)": -double: 1 -idouble: 1 -Test "tan_upward (0xc.90fdap-4)": -double: 1 -idouble: 1 -Test "tan_upward (0xc.90fdbp-4)": -double: 1 -idouble: 1 -Test "tan_upward (0xc.90fdcp-4)": -double: 1 -idouble: 1 -Test "tan_upward (0xc.90fep-4)": -double: 1 -idouble: 1 -Test "tan_upward (0xc.90fp-4)": -double: 1 -idouble: 1 -Test "tan_upward (0xc.91p-4)": -double: 1 -idouble: 1 -Test "tan_upward (0xc.92p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_upward (0xc.94p-4)": -float: 1 -ifloat: 1 -Test "tan_upward (0xc.98p-4)": -float: 1 -ifloat: 1 -Test "tan_upward (0xc.9p-4)": -double: 1 -idouble: 1 -Test "tan_upward (0xc.ap-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tan_upward (0xcp-4)": -float: 1 -ifloat: 1 -Test "tan_upward (0xf.ffffffffffff8p+1020)": -double: 1 -idouble: 1 -Test "tan_upward (0xf.fffffp+124)": -double: 1 -idouble: 1 - -# tgamma -Test "tgamma (-0x1.000002p+0)": -double: 2 -idouble: 2 -Test "tgamma (-0x1.3ffffep+4)": -float: 2 -ifloat: 2 -Test "tgamma (-0x1.4000000000001p+4)": -double: 1 -idouble: 1 -Test "tgamma (-0x1.400002p+4)": -float: 1 -ifloat: 1 -Test "tgamma (-0x1.dffffep+4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (-0x1.e000000000001p+4)": -double: 3 -idouble: 3 -Test "tgamma (-0x1.e00002p+4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (-0x2.0000000000002p+0)": -double: 1 -idouble: 1 -Test "tgamma (-0x2.000004p+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "tgamma (-0x2.146544p+4)": -float: 2 -ifloat: 2 -Test "tgamma (-0x2.7fffffffffffep+4)": -double: 1 -idouble: 1 -Test "tgamma (-0x2.8000000000002p+4)": -double: 1 -idouble: 1 -Test "tgamma (-0x2.800004p+4)": -double: 2 -idouble: 2 -Test "tgamma (-0x2.8p+0)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "tgamma (-0x2.900004p+4)": -double: 1 -idouble: 1 -Test "tgamma (-0x2.9ffffcp+4)": -double: 1 -idouble: 1 -Test "tgamma (-0x2.fffffcp+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (-0x3.000004p+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "tgamma (-0x3.1ffffcp+4)": -double: 1 -idouble: 1 -Test "tgamma (-0x3.1fffffffffffep+4)": -double: 3 -idouble: 3 -Test "tgamma (-0x3.8p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (-0x3.fffffcp+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (-0x3.ffffffffffffep+0)": -double: 2 -idouble: 2 -Test "tgamma (-0x4.000008p+0)": -float: 1 -ifloat: 1 -Test "tgamma (-0x4.8p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (-0x4.fffff8p+0)": -double: 1 -idouble: 1 -Test "tgamma (-0x4.ffffffffffffcp+0)": -double: 1 -idouble: 1 -Test "tgamma (-0x5.000008p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (-0x5.8p+0)": -double: 1 -idouble: 1 -Test "tgamma (-0x5.ffffffffffffcp+0)": -double: 1 -idouble: 1 -Test "tgamma (-0x6.000008p+0)": -float: 2 -ifloat: 2 -Test "tgamma (-0x6.3fffffffffffcp+4)": -double: 2 -idouble: 2 -Test "tgamma (-0x6.4000000000004p+4)": -double: 1 -idouble: 1 -Test "tgamma (-0x6.400008p+4)": -double: 1 -idouble: 1 -Test "tgamma (-0x6.8p+0)": -float: 1 -ifloat: 1 -Test "tgamma (-0x6.fffff8p+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "tgamma (-0x6.ffffffffffffcp+0)": -double: 4 -idouble: 4 -Test "tgamma (-0x7.0000000000004p+0)": -double: 3 -idouble: 3 -Test "tgamma (-0x7.000008p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (-0x7.8p+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "tgamma (-0x7.fffff8p+0)": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -Test "tgamma (-0x7.ffffffffffffcp+0)": -double: 3 -idouble: 3 -Test "tgamma (-0x8.00001p+0)": -double: 2 -idouble: 2 -Test "tgamma (-0x8.8p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (-0x8p-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (-0x9.6000000000008p+4)": -double: 1 -idouble: 1 -Test "tgamma (-0x9.60001p+4)": -double: 1 -idouble: 1 -Test "tgamma (-0x9.8p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (-0x9.ffffffffffff8p+0)": -double: 1 -idouble: 1 -Test "tgamma (-0x9.fffffp+0)": -float: 1 -ifloat: 1 -Test "tgamma (-0xa.00001p+0)": -double: 1 -idouble: 1 -Test "tgamma (-0xa.c0001p+4)": -double: 1 -idouble: 1 -Test "tgamma (-0xf.ffffffffffff8p-4)": -double: 1 -idouble: 1 -Test "tgamma (-0xf.fffffp-4)": -float: 1 -ifloat: 1 -Test "tgamma (0x1.28p+4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (0x1.38p+4)": -double: 2 -idouble: 2 -Test "tgamma (0x1.78p+4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (0x1.d8p+4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (0x1.e8p+4)": -float: 1 -ifloat: 1 -Test "tgamma (0x1.fffffep+0)": -float: 1 -ifloat: 1 -Test "tgamma (0x1.fffffffffffffp+0)": -double: 1 -idouble: 1 -Test "tgamma (0x1p-24)": -float: 1 -ifloat: 1 -Test "tgamma (0x2.18p+4)": -float: 1 -ifloat: 1 -Test "tgamma (0x2.28p+4)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "tgamma (0x2.30a43cp+4)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "tgamma (0x2.8p+0)": -float: 2 -ifloat: 2 -Test "tgamma (0x2.fffffcp+0)": -float: 3 -ifloat: 3 -Test "tgamma (0x3.8p+0)": -float: 2 -ifloat: 2 -Test "tgamma (0x3.fffffcp+0)": -float: 1 -ifloat: 1 -Test "tgamma (0x3.ffffffffffffep+0)": -double: 1 -idouble: 1 -Test "tgamma (0x3p+0)": -float: 1 -ifloat: 1 -Test "tgamma (0x4.0000000000004p+0)": -double: 1 -idouble: 1 -Test "tgamma (0x4.8p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (0x4.ffffffffffffcp+0)": -double: 1 -idouble: 1 -Test "tgamma (0x4p+0)": -float: 1 -ifloat: 1 -Test "tgamma (0x5.0000000000004p+0)": -double: 1 -idouble: 1 -Test "tgamma (0x5.000008p+0)": -float: 2 -ifloat: 2 -Test "tgamma (0x5.fffff8p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (0x6.0000000000004p+0)": -double: 1 -idouble: 1 -Test "tgamma (0x6.000008p+0)": -float: 2 -ifloat: 2 -Test "tgamma (0x6.8p+0)": -float: 1 -ifloat: 1 -Test "tgamma (0x6.fffff8p+0)": -double: 1 -idouble: 1 -Test "tgamma (0x6.ffffffffffffcp+0)": -double: 4 -idouble: 4 -Test "tgamma (0x6p+0)": -float: 1 -ifloat: 1 -Test "tgamma (0x7.0000000000004p+0)": -double: 4 -idouble: 4 -Test "tgamma (0x7.000008p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (0x7.8p+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "tgamma (0x7.fffff8p+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "tgamma (0x7.ffffffffffffcp+0)": -double: 2 -idouble: 2 -Test "tgamma (0x7p+0)": -double: 1 -idouble: 1 -Test "tgamma (0x8.00001p+0)": -double: 2 -idouble: 2 -Test "tgamma (0x8.8p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "tgamma (0x8p+0)": -double: 1 -idouble: 1 -Test "tgamma (0x8p-4)": -float: 1 -ifloat: 1 -Test "tgamma (0x8p-56)": -double: 1 -idouble: 1 -Test "tgamma (0x9.8p+0)": -double: 1 -idouble: 1 -Test "tgamma (0x9p+0)": -double: 1 -idouble: 1 -Test "tgamma (0xa.b9fd72b0fb238p+4)": -double: 1 -idouble: 1 -Test "tgamma (0xa.b9fd7p+4)": -double: 2 -idouble: 2 -Test "tgamma (0xap+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -# y0 -Test "y0 (0x1.8p+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "y0 (0x1.ff00000000002p+840)": -double: 1 -idouble: 1 -Test "y0 (0x1p+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "y0 (0x1p-20)": -float: 1 -ifloat: 1 -Test "y0 (0x1p-40)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "y0 (0x1p-80)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "y0 (0x4.ffcp+72)": -double: 1 -idouble: 1 -Test "y0 (0x4p-112)": -double: 1 -idouble: 1 -Test "y0 (0x4p-12)": -double: 1 -idouble: 1 -Test "y0 (0x4p-32)": -float: 1 -ifloat: 1 -Test "y0 (0x4p-52)": -float: 1 -ifloat: 1 -Test "y0 (0x4p-72)": -double: 1 -idouble: 1 -Test "y0 (0x8p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "y0 (0xap+0)": -float: 1 -ifloat: 1 -Test "y0 (0xf.ffffffffffff8p+1020)": -double: 1 -idouble: 1 -Test "y0 (0xf.fffffp+124)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -# y1 -Test "y1 (0x1.8p+0)": -float: 1 -ifloat: 1 -Test "y1 (0x2p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "y1 (0x2p-4)": -double: 1 -idouble: 1 -Test "y1 (0x4p-12)": -double: 1 -idouble: 1 -Test "y1 (0x8p+0)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "y1 (0x9.3f102p+96)": -double: 1 -idouble: 1 -Test "y1 (0xap+0)": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -Test "y1 (0xf.fffffp+124)": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -# yn -Test "yn (-10, 0x1p+0)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "yn (0, 0x1.8p+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "yn (0, 0x1p+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "yn (0, 0x8p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "yn (0, 0xap+0)": -float: 1 -ifloat: 1 -Test "yn (1, 0x1.8p+0)": -float: 1 -ifloat: 1 -Test "yn (1, 0x2p+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "yn (1, 0x2p-4)": -double: 1 -idouble: 1 -Test "yn (1, 0x8p+0)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "yn (1, 0xap+0)": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -Test "yn (10, 0x1p+0)": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -Test "yn (10, 0x2p+0)": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -Test "yn (10, 0x2p-4)": -double: 1 -idouble: 1 -Test "yn (10, 0xap+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "yn (10, 0xcp-4)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "yn (2, 0x8p+124)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "yn (2, 0xf.fffb1p+96)": -double: 1 -idouble: 1 -Test "yn (2, 0xf.ffffffffffff8p+1020)": -double: 1 -idouble: 1 -Test "yn (2, 0xf.fffffp+124)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "yn (3, 0x2p+0)": -double: 1 -idouble: 1 -Test "yn (3, 0x2p-4)": -double: 1 -idouble: 1 -Test "yn (3, 0xap+0)": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -Test "yn (3, 0xcp-4)": -double: 1 -idouble: 1 - -# Maximal error of functions: -Function: "acos_downward": -float: 1 -ifloat: 1 - -Function: "acos_towardzero": -float: 1 -ifloat: 1 - -Function: "acos_upward": -double: 1 -idouble: 1 - -Function: "acosh": -double: 1 -idouble: 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 -ifloat: 1 - -Function: "atan2": -float: 1 -ifloat: 1 - -Function: "atanh": -float: 1 -ifloat: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacosh": -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: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "casinh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "casinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catan": -float: 1 -ifloat: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "catanh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "catanh": -float: 1 -ifloat: 1 - -Function: "cbrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "clog": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 - -Function: Real part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "clog10": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cos": -float: 1 -ifloat: 1 - -Function: "cos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "cos_tonearest": -float: 1 -ifloat: 1 - -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_tonearest": -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 "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -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_tonearest": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ctan_tonearest": -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_tonearest": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "ctanh_tonearest": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -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 -idouble: 1 - -Function: "erfc": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp10": -double: 1 -idouble: 1 - -Function: "exp10_downward": -double: 1 -idouble: 1 - -Function: "exp10_tonearest": -double: 1 -idouble: 1 - -Function: "exp10_towardzero": -double: 1 -idouble: 1 - -Function: "exp10_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_tonearest": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "gamma": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "hypot": -double: 1 -idouble: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "jn": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 - -Function: "lgamma": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "log": -float: 1 -ifloat: 1 - -Function: "log10": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "log1p": -float: 1 -ifloat: 1 - -Function: "pow": -float: 1 -ifloat: 1 - -Function: "pow10": -double: 1 -idouble: 1 - -Function: "pow_downward": -float: 1 -ifloat: 1 - -Function: "pow_tonearest": -float: 1 -ifloat: 1 - -Function: "pow_towardzero": -float: 1 -ifloat: 1 - -Function: "pow_upward": -float: 1 -ifloat: 1 - -Function: "sin": -float: 1 -ifloat: 1 - -Function: "sin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sin_tonearest": -float: 1 -ifloat: 1 - -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: "sinh_downward": -double: 1 -idouble: 1 - -Function: "sinh_towardzero": -double: 1 -idouble: 1 - -Function: "sinh_upward": -double: 1 -float: 1 -idouble: 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: "tgamma": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 - -# end of automatic generation diff --git a/ports/sysdeps/arm/machine-gmon.h b/ports/sysdeps/arm/machine-gmon.h deleted file mode 100644 index 43e980148d..0000000000 --- a/ports/sysdeps/arm/machine-gmon.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Machine-dependent definitions for profiling support. ARM EABI version. - Copyright (C) 2008-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/math-tests.h b/ports/sysdeps/arm/math-tests.h deleted file mode 100644 index e65f135e97..0000000000 --- a/ports/sysdeps/arm/math-tests.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Configuration for math tests. ARM version. - Copyright (C) 2013-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 - -#include_next <math-tests.h> diff --git a/ports/sysdeps/arm/memcpy.S b/ports/sysdeps/arm/memcpy.S deleted file mode 100644 index 3e985dad68..0000000000 --- a/ports/sysdeps/arm/memcpy.S +++ /dev/null @@ -1,344 +0,0 @@ -/* Copyright (C) 2006-2014 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( sfi_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( sfi_pld r1, #0 ) -2: PLD( subs r2, r2, #96 ) - PLD( sfi_pld r1, #28 ) - PLD( blt 4f ) - PLD( sfi_pld r1, #60 ) - PLD( sfi_pld r1, #92 ) - -3: PLD( sfi_pld r1, #124 ) -4: sfi_breg r1, \ - ldmia \B!, {r3, r4, r5, r6, r7, r8, ip, lr} - subs r2, r2, #32 - sfi_breg r0, \ - stmia \B!, {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) - add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - bx r10 -#endif - .p2align ARM_BX_ALIGN_LOG2 -6: nop - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr r3, [\B], #4 - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr r4, [\B], #4 - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr r5, [\B], #4 - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr r6, [\B], #4 - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr r7, [\B], #4 - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr r8, [\B], #4 - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr lr, [\B], #4 - -#ifndef ARM_ALWAYS_BX - add pc, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - nop -#else - add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - bx r10 -#endif - .p2align ARM_BX_ALIGN_LOG2 - nop - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str r3, [\B], #4 - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str r4, [\B], #4 - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str r5, [\B], #4 - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str r6, [\B], #4 - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str r7, [\B], #4 - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str r8, [\B], #4 - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str lr, [\B], #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 - sfi_breg r1, \ - ldrbne r3, [\B], #1 - sfi_breg r1, \ - ldrbcs r4, [\B], #1 - sfi_breg r1, \ - ldrbcs ip, [\B] - sfi_breg r0, \ - strbne r3, [\B], #1 - sfi_breg r0, \ - strbcs r4, [\B], #1 - sfi_breg r0, \ - strbcs ip, [\B] - -#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 - sfi_breg r1, \ - ldrbgt r3, [\B], #1 - sfi_breg r1, \ - ldrbge r4, [\B], #1 - sfi_breg r1, \ - ldrb lr, [\B], #1 - sfi_breg r0, \ - strbgt r3, [\B], #1 - sfi_breg r0, \ - strbge r4, [\B], #1 - subs r2, r2, ip - sfi_breg r0, \ - strb lr, [\B], #1 - blt 8b - ands ip, r1, #3 - beq 1b - -10: bic r1, r1, #3 - cmp ip, #2 - sfi_breg r1, \ - ldr lr, [\B], #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( sfi_pld r1, #0 ) - PLD( subs r2, r2, #96 ) - PLD( sfi_pld r1, #28 ) - PLD( blt 13f ) - PLD( sfi_pld r1, #60 ) - PLD( sfi_pld r1, #92 ) - -12: PLD( sfi_pld r1, #124 ) -13: sfi_breg r1, \ - ldmia \B!, {r4, r5, r6, r7} - mov r3, lr, PULL #\pull - subs r2, r2, #32 - sfi_breg r1, \ - ldmia \B!, {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 - sfi_breg r0, \ - stmia \B!, {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 - sfi_breg r1, \ - ldr lr, [\B], #4 - subs ip, ip, #4 - orr r3, r3, lr, PUSH #\push - sfi_breg r0, \ - str r3, [\B], #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/ports/sysdeps/arm/memmove.S b/ports/sysdeps/arm/memmove.S deleted file mode 100644 index 04aa7db7b4..0000000000 --- a/ports/sysdeps/arm/memmove.S +++ /dev/null @@ -1,360 +0,0 @@ -/* Copyright (C) 2006-2014 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 -#ifdef NOT_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( sfi_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( sfi_pld r1, #-4 ) -2: PLD( subs r2, r2, #96 ) - PLD( sfi_pld r1, #-32 ) - PLD( blt 4f ) - PLD( sfi_pld r1, #-64 ) - PLD( sfi_pld r1, #-96 ) - -3: PLD( sfi_pld r1, #-128 ) -4: sfi_breg r1, \ - ldmdb \B!, {r3, r4, r5, r6, r7, r8, ip, lr} - subs r2, r2, #32 - sfi_breg r0, \ - stmdb \B!, {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) - add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - bx r10 -#endif - .p2align ARM_BX_ALIGN_LOG2 -6: nop - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr r3, [\B, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr r4, [\B, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr r5, [\B, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr r6, [\B, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr r7, [\B, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr r8, [\B, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r1, \ - ldr lr, [\B, #-4]! - -#ifndef ARM_ALWAYS_BX - add pc, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - nop -#else - add r10, pc, ip, lsl #(ARM_BX_ALIGN_LOG2 - 2) - bx r10 -#endif - .p2align ARM_BX_ALIGN_LOG2 - nop - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str r3, [\B, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str r4, [\B, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str r5, [\B, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str r6, [\B, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str r7, [\B, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str r8, [\B, #-4]! - .p2align ARM_BX_ALIGN_LOG2 - sfi_breg r0, \ - str lr, [\B, #-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 - sfi_breg r1, \ - ldrbne r3, [\B, #-1]! - sfi_breg r1, \ - ldrbcs r4, [\B, #-1]! - sfi_breg r1, \ - ldrbcs ip, [\B, #-1] - sfi_breg r0, \ - strbne r3, [\B, #-1]! - sfi_breg r0, \ - strbcs r4, [\B, #-1]! - sfi_breg r0, \ - strbcs ip, [\B, #-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 - sfi_breg r1, \ - ldrbgt r3, [\B, #-1]! - sfi_breg r1, \ - ldrbge r4, [\B, #-1]! - sfi_breg r1, \ - ldrb lr, [\B, #-1]! - sfi_breg r0, \ - strbgt r3, [\B, #-1]! - sfi_breg r0, \ - strbge r4, [\B, #-1]! - subs r2, r2, ip - sfi_breg r0, \ - strb lr, [\B, #-1]! - blt 8b - ands ip, r1, #3 - beq 1b - -10: bic r1, r1, #3 - cmp ip, #2 - sfi_breg r1, \ - ldr r3, [\B, #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( sfi_pld r1, #-4 ) - PLD( subs r2, r2, #96 ) - PLD( sfi_pld r1, #-32 ) - PLD( blt 13f ) - PLD( sfi_pld r1, #-64 ) - PLD( sfi_pld r1, #-96 ) - -12: PLD( sfi_pld r1, #-128 ) -13: sfi_breg r1, \ - ldmdb \B!, {r7, r8, r10, ip} - mov lr, r3, PUSH #\push - subs r2, r2, #32 - sfi_breg r1, \ - ldmdb \B!, {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 - sfi_breg r0, \ - stmdb \B!, {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 - sfi_breg r1, \ - ldr r3, [\B, #-4]! - subs ip, ip, #4 - orr lr, lr, r3, PULL #\pull - sfi_breg r0, \ - str lr, [\B, #-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/ports/sysdeps/arm/memset.S b/ports/sysdeps/arm/memset.S deleted file mode 100644 index cf04db4634..0000000000 --- a/ports/sysdeps/arm/memset.S +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 1998-2014 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? - sfi_breg r3, \ - strbne r1, [\B], #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 - sfi_breg r3, \ - stmiacs \B!, {r1, ip} @ store up to 32 bytes per loop iteration - subscs r2, r2, #8 - sfi_breg r3, \ - stmiacs \B!, {r1, ip} - subscs r2, r2, #8 - sfi_breg r3, \ - stmiacs \B!, {r1, ip} - subscs r2, r2, #8 - sfi_breg r3, \ - stmiacs \B!, {r1, ip} - bcs 1b - - and r2, r2, #7 -2: - subs r2, r2, #1 @ store up to 4 bytes per loop iteration - sfi_breg r3, \ - strbcs r1, [\B], #1 - subscs r2, r2, #1 - sfi_breg r3, \ - strbcs r1, [\B], #1 - subscs r2, r2, #1 - sfi_breg r3, \ - strbcs r1, [\B], #1 - subscs r2, r2, #1 - sfi_breg r3, \ - strbcs r1, [\B], #1 - bcs 2b - - DO_RET(lr) -END(memset) -libc_hidden_builtin_def (memset) diff --git a/ports/sysdeps/arm/memusage.h b/ports/sysdeps/arm/memusage.h deleted file mode 100644 index 51f276c200..0000000000 --- a/ports/sysdeps/arm/memusage.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/nptl/Makefile b/ports/sysdeps/arm/nptl/Makefile deleted file mode 100644 index 143850e6c8..0000000000 --- a/ports/sysdeps/arm/nptl/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (C) 2005-2014 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# <http://www.gnu.org/licenses/>. - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif diff --git a/ports/sysdeps/arm/nptl/pthread_spin_lock.c b/ports/sysdeps/arm/nptl/pthread_spin_lock.c deleted file mode 100644 index 7105c73594..0000000000 --- a/ports/sysdeps/arm/nptl/pthread_spin_lock.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 2008-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 SPIN_LOCK_READS_BETWEEN_CMPXCHG 1000 - -/* We can't use the normal "#include <nptl/pthread_spin_lock.c>" because - it will resolve to this very file. Using "sysdeps/.." as reference to the - top level directory does the job. */ -#include <sysdeps/../nptl/pthread_spin_lock.c> diff --git a/ports/sysdeps/arm/nptl/pthreaddef.h b/ports/sysdeps/arm/nptl/pthreaddef.h deleted file mode 100644 index 2488af9828..0000000000 --- a/ports/sysdeps/arm/nptl/pthreaddef.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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) - - -/* XXX Until we have a better place keep the definitions here. */ -#define __exit_thread_inline(val) \ - INLINE_SYSCALL (exit, 1, (val)) diff --git a/ports/sysdeps/arm/nptl/tcb-offsets.sym b/ports/sysdeps/arm/nptl/tcb-offsets.sym deleted file mode 100644 index 92cc441d3d..0000000000 --- a/ports/sysdeps/arm/nptl/tcb-offsets.sym +++ /dev/null @@ -1,11 +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) -PID_OFFSET thread_offsetof (pid) -TID_OFFSET thread_offsetof (tid) diff --git a/ports/sysdeps/arm/nptl/tls.h b/ports/sysdeps/arm/nptl/tls.h deleted file mode 100644 index 8cc0a62173..0000000000 --- a/ports/sysdeps/arm/nptl/tls.h +++ /dev/null @@ -1,147 +0,0 @@ -/* Definition for thread-local data handling. NPTL/ARM version. - Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 _TLS_H -#define _TLS_H 1 - -#include <dl-sysdep.h> - -#ifndef __ASSEMBLER__ -# include <stdbool.h> -# include <stddef.h> -# include <stdint.h> - -/* Type for the dtv. */ -typedef union dtv -{ - size_t counter; - struct - { - void *val; - bool is_static; - } pointer; -} dtv_t; - -#else /* __ASSEMBLER__ */ -# include <tcb-offsets.h> -#endif /* __ASSEMBLER__ */ - - -#ifndef __ASSEMBLER__ - -/* Get system call information. */ -# include <sysdep.h> - -/* The TP points to the start of the thread blocks. */ -# define TLS_DTV_AT_TP 1 - -/* 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) - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(tcbp, secondcall) \ - ({ INTERNAL_SYSCALL_DECL (err); \ - long result_var; \ - result_var = INTERNAL_SYSCALL_ARM (set_tls, err, 1, (tcbp)); \ - INTERNAL_SYSCALL_ERROR_P (result_var, err) \ - ? "unknown error" : NULL; }) - -/* 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/ports/sysdeps/arm/preconfigure b/ports/sysdeps/arm/preconfigure deleted file mode 100644 index b3124edae2..0000000000 --- a/ports/sysdeps/arm/preconfigure +++ /dev/null @@ -1,63 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local preconfigure fragment for sysdeps/arm - -case "$machine" in -arm*) - case $config_os in - linux-gnueabi*) - # 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/unix/sysv/linux/arm/configure.ac after those tests have - # been run. - if test "${CFLAGS+set}" != "set"; then - CFLAGS="-g -O2" - fi - CFLAGS="$CFLAGS -fno-unwind-tables" - ;; - linux*) - as_fn_error $? "Old ABI no longer supported" "$LINENO" 5 - ;; - esac - - 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/ports/sysdeps/arm/preconfigure.ac b/ports/sysdeps/arm/preconfigure.ac deleted file mode 100644 index 39c86218aa..0000000000 --- a/ports/sysdeps/arm/preconfigure.ac +++ /dev/null @@ -1,58 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local preconfigure fragment for sysdeps/arm - -case "$machine" in -arm*) - case $config_os in - linux-gnueabi*) - # 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/unix/sysv/linux/arm/configure.ac after those tests have - # been run. - if test "${CFLAGS+set}" != "set"; then - CFLAGS="-g -O2" - fi - CFLAGS="$CFLAGS -fno-unwind-tables" - ;; - linux*) - AC_MSG_ERROR([Old ABI no longer supported]) - ;; - esac - - 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/ports/sysdeps/arm/rtld-global-offsets.sym b/ports/sysdeps/arm/rtld-global-offsets.sym deleted file mode 100644 index ff4e97f2a6..0000000000 --- a/ports/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/ports/sysdeps/arm/s_fma.c b/ports/sysdeps/arm/s_fma.c deleted file mode 100644 index dc4e27bfc1..0000000000 --- a/ports/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/ports/sysdeps/arm/s_fmaf.c b/ports/sysdeps/arm/s_fmaf.c deleted file mode 100644 index 550d8b85d3..0000000000 --- a/ports/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/ports/sysdeps/arm/setfpucw.c b/ports/sysdeps/arm/setfpucw.c deleted file mode 100644 index 92333eb364..0000000000 --- a/ports/sysdeps/arm/setfpucw.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Set the FPU control word. - Copyright (C) 1996-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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) -{ - if (ARM_HAVE_VFP) - { - fpu_control_t cw; - - /* Fetch the current control word. */ - _FPU_GETCW (cw); - - /* Preserve the reserved bits, and set the rest as the user - specified (or the default, if the user gave zero). */ - cw &= _FPU_RESERVED; - cw |= set & ~_FPU_RESERVED; - - _FPU_SETCW (cw); - } - - /* Do nothing if a VFP unit isn't present. */ -} diff --git a/ports/sysdeps/arm/setjmp.S b/ports/sysdeps/arm/setjmp.S deleted file mode 100644 index b0b45ed8da..0000000000 --- a/ports/sysdeps/arm/setjmp.S +++ /dev/null @@ -1,126 +0,0 @@ -/* setjmp for ARM. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <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 - - /* Save registers */ - sfi_breg ip, \ - stmia \B!, JMP_BUF_REGLIST -#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 - -#if !defined ARM_ASSUME_NO_IWMMXT || defined __SOFTFP__ -# define NEED_HWCAP 1 -#endif - -#ifdef NEED_HWCAP - /* Check if we have a VFP unit. */ -# ifdef IS_IN_rtld - ldr a3, 1f - ldr a4, .Lrtld_local_ro -0: add a3, pc, a3 - add a3, a3, a4 - ldr a3, [a3, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET] -# else -# ifdef PIC - ldr a3, 1f - ldr a4, .Lrtld_global_ro -0: add a3, pc, a3 - ldr a3, [a3, a4] - ldr a3, [a3, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET] -# else - ldr a3, .Lhwcap - ldr a3, [a3, #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}. */ - sfi_breg ip, \ - stc p11, cr8, [\B], #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.) */ - sfi_breg r12, \ - stcl p1, cr10, [\B], #8 - sfi_breg r12, \ - stcl p1, cr11, [\B], #8 - sfi_breg r12, \ - stcl p1, cr12, [\B], #8 - sfi_breg r12, \ - stcl p1, cr13, [\B], #8 - sfi_breg r12, \ - stcl p1, cr14, [\B], #8 - sfi_breg r12, \ - stcl p1, cr15, [\B], #8 -.Lno_iwmmxt: -#endif - - /* Make a tail call to __sigjmp_save; it takes the same args. */ - B PLTJMP(C_SYMBOL_NAME(__sigjmp_save)) - -#ifdef NEED_HWCAP -# ifdef IS_IN_rtld -1: .long _GLOBAL_OFFSET_TABLE_ - 0b - PC_OFS -.Lrtld_local_ro: - .long C_SYMBOL_NAME(_rtld_local_ro)(GOTOFF) -# else -# ifdef PIC -1: .long _GLOBAL_OFFSET_TABLE_ - 0b - PC_OFS -.Lrtld_global_ro: - .long C_SYMBOL_NAME(_rtld_global_ro)(GOT) -# else -.Lhwcap: - .long C_SYMBOL_NAME(_dl_hwcap) -# endif -# endif -#endif - -END (__sigsetjmp) - -hidden_def (__sigsetjmp) diff --git a/ports/sysdeps/arm/shlib-versions b/ports/sysdeps/arm/shlib-versions deleted file mode 100644 index 1ac597abbb..0000000000 --- a/ports/sysdeps/arm/shlib-versions +++ /dev/null @@ -1,9 +0,0 @@ -arm.*-.*-linux-gnueabi.* DEFAULT GLIBC_2.4 - -%ifdef HAVE_ARM_PCS_VFP -# The EABI-derived hard-float ABI uses a new dynamic linker. -arm.*-.*-linux-gnueabi.* ld=ld-linux-armhf.so.3 -%else -# The EABI-derived soft-float ABI continues to use ld-linux.so.3. -arm.*-.*-linux-gnueabi.* ld=ld-linux.so.3 -%endif diff --git a/ports/sysdeps/arm/soft-fp/sfp-machine.h b/ports/sysdeps/arm/soft-fp/sfp-machine.h deleted file mode 100644 index eba6e35ced..0000000000 --- a/ports/sysdeps/arm/soft-fp/sfp-machine.h +++ /dev/null @@ -1,49 +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 << 1) - 1) -#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 -#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 -#define _FP_NANSIGN_S 0 -#define _FP_NANSIGN_D 0 -#define _FP_NANSIGN_Q 0 - -#define _FP_KEEPNANFRACP 1 -#define _FP_QNANNEGATEDP 0 - -/* 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) diff --git a/ports/sysdeps/arm/sotruss-lib.c b/ports/sysdeps/arm/sotruss-lib.c deleted file mode 100644 index 1f5431c36b..0000000000 --- a/ports/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-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/stackinfo.h b/ports/sysdeps/arm/stackinfo.h deleted file mode 100644 index dc08a17894..0000000000 --- a/ports/sysdeps/arm/stackinfo.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2001-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/start.S b/ports/sysdeps/arm/start.S deleted file mode 100644 index adf6531892..0000000000 --- a/ports/sysdeps/arm/start.S +++ /dev/null @@ -1,148 +0,0 @@ -/* Startup code for ARM & ELF - Copyright (C) 1995-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser 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/ports/sysdeps/arm/static-stubs.c b/ports/sysdeps/arm/static-stubs.c deleted file mode 100644 index d90d603a95..0000000000 --- a/ports/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/ports/sysdeps/arm/strlen.S b/ports/sysdeps/arm/strlen.S deleted file mode 100644 index c812202bc3..0000000000 --- a/ports/sysdeps/arm/strlen.S +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 1998-2014 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 - sfi_breg r1, \ - ldr r2, [\B], $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 - sfi_breg r1, \ - ldrne r2, [\B], $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/ports/sysdeps/arm/sub_n.S b/ports/sysdeps/arm/sub_n.S deleted file mode 100644 index 8eafa41e64..0000000000 --- a/ports/sysdeps/arm/sub_n.S +++ /dev/null @@ -1,2 +0,0 @@ -#define USE_AS_SUB_N -#include "add_n.S" diff --git a/ports/sysdeps/arm/submul_1.S b/ports/sysdeps/arm/submul_1.S deleted file mode 100644 index 76b9cda865..0000000000 --- a/ports/sysdeps/arm/submul_1.S +++ /dev/null @@ -1,74 +0,0 @@ -/* mpn_submul_1 -- multiply and subtract bignums. - Copyright (C) 2013-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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) - - sfi_breg r1, \ - ldr r6, [\B], #4 - sfi_breg r0, \ - ldr r7, [\B] - mov r4, #0 /* init carry in */ - b 1f -0: - sfi_breg r1, \ - ldr r6, [\B], #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 */ - sfi_breg r0, \ - ldr r7, [\B, #4] /* load next rl */ - it cc - addcc r4, r4, #1 /* cl += !c */ - sfi_breg r0, \ - str r5, [\B], #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 */ - sfi_breg r0, \ - str r5, [\B], #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/ports/sysdeps/arm/sys/ucontext.h b/ports/sysdeps/arm/sys/ucontext.h deleted file mode 100644 index a913f68884..0000000000 --- a/ports/sysdeps/arm/sys/ucontext.h +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 1998-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <signal.h> - -typedef int greg_t; - -/* Number of general registers. */ -#define NGREG 16 - -/* Container for all general registers. */ -typedef greg_t gregset_t[NGREG]; - -/* 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 -}; - -/* Structure to describe FPU registers. */ -typedef struct fpregset - { - } fpregset_t; - -/* Context to describe whole processor state. */ -typedef struct - { - gregset_t gregs; - fpregset_t fpregs; - } mcontext_t; - -/* 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/ports/sysdeps/arm/sysdep.h b/ports/sysdeps/arm/sysdep.h deleted file mode 100644 index 7f34ab042f..0000000000 --- a/ports/sysdeps/arm/sysdep.h +++ /dev/null @@ -1,288 +0,0 @@ -/* Assembler macros for ARM. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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> - -/* 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 if GCC >= 4.4. */ -#if __GNUC_PREREQ(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 /* else call _mcount */ -#define CALL_MCOUNT \ - push {lr}; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (lr, 0); \ - bl PLTJMP(mcount); \ - pops {lr}; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (lr) -#endif -#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 -#if __GNUC_PREREQ(4,4) -#define mcount __gnu_mcount_nc -#else -#define mcount _mcount -#endif - -/* 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 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] -# 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 or store to/from a global EXPR into/from R, using T. */ -# define LDST_GLOBAL(OP, R, T, EXPR) \ - 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 EXPR##(GOT); \ - .previous; \ - OP R, [T] - -/* 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 */ - -# ifndef ARM_SFI_MACROS -# define ARM_SFI_MACROS 1 -/* This assembly macro is prepended to any load/store instruction, - pulling the base register out of the addressing mode syntax and - making it the first operand of the macro. For example: - ldr r0, [r1] - becomes: - sfi_breg r1, ldr r0, [\B] - The \B stands in for the base register that is the first operand - to the macro, so we can avoid error-prone repetition of the base - register in two places on the line. - - This is used for all memory access through a base register other - than PC or SP. It's intended to support SFI schemes such as - Native Client, where the OS will enforce that all load/store - instructions use a special form. In any such configuration, - another sysdep.h file will have defined ARM_SFI_MACROS and - provided its own assembly macros with the same interface. */ - - .macro sfi_breg basereg, insn, operands:vararg - .macro _sfi_breg_doit B - \insn \operands - .endm - _sfi_breg_doit \basereg - .purgem _sfi_breg_doit - .endm - -/* This assembly macro replaces the "pld" instruction. - The syntax: - sfi_pld REGISTER, #OFFSET - is exactly equivalent to: - sfi_breg REGISTER, pld [\B, #OFFSET] - (and ", #OFFSET" is optional). We have a separate macro - only to work around a bug in GAS versions prior to 2.23.2, - that misparses the sfi_breg macro expansion in this case. */ - - .macro sfi_pld basereg, offset=#0 - pld [\basereg, \offset] - .endm - -/* This macro precedes any instruction that directly changes the SP. - It's not needed for push/pop or for any kind of load or store that - implicitly changes the SP via the ! syntax. */ -# define sfi_sp /* Nothing to do. */ - -# endif - -/* 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 diff --git a/ports/sysdeps/arm/test-fpucw.c b/ports/sysdeps/arm/test-fpucw.c deleted file mode 100644 index 9fc721c7f4..0000000000 --- a/ports/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/ports/sysdeps/arm/tls-macros.h b/ports/sysdeps/arm/tls-macros.h deleted file mode 100644 index e41d3bc5aa..0000000000 --- a/ports/sysdeps/arm/tls-macros.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifdef __thumb2__ -#define ARM_PC_OFFSET "4" -#else -#define ARM_PC_OFFSET "8" -#endif - -#define TLS_LE(x) \ - ({ int *__result; \ - void *tp = __builtin_thread_pointer (); \ - asm ("ldr %0, 1f; " \ - "add %0, %1, %0; " \ - "b 2f; " \ - ".align 2; " \ - "1: .word " #x "(tpoff); " \ - "2: " \ - : "=&r" (__result) : "r" (tp)); \ - __result; }) - -#ifdef __thumb2__ -#define TLS_IE(x) \ - ({ int *__result; \ - void *tp = __builtin_thread_pointer (); \ - asm ("ldr %0, 1f; " \ - "3: add %0, pc, %0;" \ - "ldr %0, [%0];" \ - "add %0, %1, %0; " \ - "b 2f; " \ - ".align 2; " \ - "1: .word " #x "(gottpoff) + (. - 3b - 4); " \ - "2: " \ - : "=&r" (__result) : "r" (tp)); \ - __result; }) -#else -#define TLS_IE(x) \ - ({ int *__result; \ - void *tp = __builtin_thread_pointer (); \ - asm ("ldr %0, 1f; " \ - "3: ldr %0, [pc, %0];" \ - "add %0, %1, %0; " \ - "b 2f; " \ - ".align 2; " \ - "1: .word " #x "(gottpoff) + (. - 3b - 8); " \ - "2: " \ - : "=&r" (__result) : "r" (tp)); \ - __result; }) -#endif - -#define TLS_LD(x) \ - ({ char *__result; \ - int __offset; \ - extern void *__tls_get_addr (void *); \ - asm ("ldr %0, 2f; " \ - "1: add %0, pc, %0; " \ - "b 3f; " \ - ".align 2; " \ - "2: .word " #x "(tlsldm) + (. - 1b - "ARM_PC_OFFSET"); " \ - "3: " \ - : "=r" (__result)); \ - __result = (char *)__tls_get_addr (__result); \ - asm ("ldr %0, 1f; " \ - "b 2f; " \ - ".align 2; " \ - "1: .word " #x "(tlsldo); " \ - "2: " \ - : "=r" (__offset)); \ - (int *) (__result + __offset); }) - -#define TLS_GD(x) \ - ({ int *__result; \ - extern void *__tls_get_addr (void *); \ - asm ("ldr %0, 2f; " \ - "1: add %0, pc, %0; " \ - "b 3f; " \ - ".align 2; " \ - "2: .word " #x "(tlsgd) + (. - 1b - "ARM_PC_OFFSET"); " \ - "3: " \ - : "=r" (__result)); \ - (int *)__tls_get_addr (__result); }) diff --git a/ports/sysdeps/arm/tlsdesc.c b/ports/sysdeps/arm/tlsdesc.c deleted file mode 100644 index fc754d6c42..0000000000 --- a/ports/sysdeps/arm/tlsdesc.c +++ /dev/null @@ -1,160 +0,0 @@ -/* Manage TLS descriptors. ARM version. - Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <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) -{ - __munmap ((void *) (map)->l_map_start, - (map)->l_map_end - (map)->l_map_start); - -#if 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/ports/sysdeps/arm/tlsdesc.sym b/ports/sysdeps/arm/tlsdesc.sym deleted file mode 100644 index 3f3a13e2c4..0000000000 --- a/ports/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/ports/sysdeps/arm/tst-audit.h b/ports/sysdeps/arm/tst-audit.h deleted file mode 100644 index 4f46fa0f23..0000000000 --- a/ports/sysdeps/arm/tst-audit.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. ARM version. - - Copyright (C) 2005-2014 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/unwind-dw2-fde-glibc.c b/ports/sysdeps/arm/unwind-dw2-fde-glibc.c deleted file mode 100644 index 6b2110c2db..0000000000 --- a/ports/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-2014 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/arm/unwind-pe.c b/ports/sysdeps/arm/unwind-pe.c deleted file mode 100644 index 710cecca97..0000000000 --- a/ports/sysdeps/arm/unwind-pe.c +++ /dev/null @@ -1 +0,0 @@ -/* Empty */ diff --git a/ports/sysdeps/unix/arm/sysdep.S b/ports/sysdeps/unix/arm/sysdep.S deleted file mode 100644 index 1a0f093238..0000000000 --- a/ports/sysdeps/unix/arm/sysdep.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 1991-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> -#define _ERRNO_H -#include <bits/errno.h> - -#ifdef IS_IN_rtld -# include <dl-sysdep.h> /* Defines RTLD_PRIVATE_ERRNO. */ -#endif - -#include <tls.h> - -#undef syscall_error -__syscall_error: -#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN - /* We translate the system's EWOULDBLOCK error into EAGAIN. - The GNU C library always defines EWOULDBLOCK==EAGAIN. - EWOULDBLOCK_sys is the original number. */ - cmp r0, $EWOULDBLOCK_sys /* Is it the old EWOULDBLOCK? */ - it eq - moveq r0, $EAGAIN /* Yes; translate it to EAGAIN. */ -#endif - -#ifndef IS_IN_rtld - mov r1, r0 - GET_TLS (r2) - ldr r2, 1f -#ifdef __thumb__ -2: add r2, r2, pc - ldr r2, [r2] -#else -2: ldr r2, [pc, r2] -#endif - str r1, [r0, r2] - mvn r0, #0 - DO_RET(lr) - -1: .word errno(gottpoff) + (. - 2b - PC_OFS) -#elif RTLD_PRIVATE_ERRNO - LDST_PCREL(str, r0, r1, C_SYMBOL_NAME(rtld_errno)) - mvn r0, #0 - DO_RET(r14) -#else -#error "Unsupported non-TLS case" -#endif - -#undef __syscall_error -END (__syscall_error) diff --git a/ports/sysdeps/unix/arm/sysdep.h b/ports/sysdeps/unix/arm/sysdep.h deleted file mode 100644 index ad069c33de..0000000000 --- a/ports/sysdeps/unix/arm/sysdep.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/unix/sysdep.h> -#include <sysdeps/arm/sysdep.h> - -/* Some definitions to allow the assembler in sysdeps/unix/ to build - without needing ARM-specific versions of all the files. */ - -#ifdef __ASSEMBLER__ - -#define ret DO_RET (r14) -#define MOVE(a,b) mov b,a - -#endif diff --git a/ports/sysdeps/unix/sysv/linux/arm/Makefile b/ports/sysdeps/unix/sysv/linux/arm/Makefile deleted file mode 100644 index aa7526a258..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/Makefile +++ /dev/null @@ -1,85 +0,0 @@ -ifeq ($(subdir),csu) -# 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 += aeabi_read_tp libc-aeabi_read_tp -static-only-routines += aeabi_read_tp -shared-only-routines += libc-aeabi_read_tp -endif - -ifeq ($(subdir),elf) -sysdep-rtld-routines += aeabi_read_tp libc-do-syscall -endif - -ifeq ($(subdir),misc) -sysdep_routines += ioperm -sysdep_headers += sys/elf.h sys/io.h -endif - -ifeq ($(subdir),signal) -sysdep_routines += sigrestorer -endif - -ifeq ($(subdir),resource) -sysdep_routines += oldgetrlimit64 -endif - -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext_i.sym -endif - -# Add a syscall function to each library that needs one. - -ifeq ($(subdir),crypt) -libcrypt-sysdep_routines += libc-do-syscall -endif - -ifeq ($(subdir),rt) -librt-sysdep_routines += libc-do-syscall -librt-shared-only-routines += libc-do-syscall -endif - -ifeq ($(subdir),nptl) -libpthread-sysdep_routines += libc-do-syscall -libpthread-shared-only-routines += libc-do-syscall -endif - -ifeq ($(subdir),resolv) -libanl-sysdep_routines += libc-do-syscall -libanl-shared-only-routines += libc-do-syscall -endif - -ifeq ($(subdir),csu) -sysdep_routines += libc-do-syscall -endif - -ifeq ($(subdir),nscd) -nscd-modules += libc-do-syscall -endif - -ifeq ($(subdir),nss) -libnss_db-sysdep_routines += libc-do-syscall -libnss_db-shared-only-routines += libc-do-syscall -endif - -ifeq ($(subdir),posix) -LDFLAGS-tst-rfc3484 += $(common-objpfx)csu/libc-do-syscall.o -LDFLAGS-tst-rfc3484-2 += $(common-objpfx)csu/libc-do-syscall.o -LDFLAGS-tst-rfc3484-3 += $(common-objpfx)csu/libc-do-syscall.o -endif - -abi-variants := soft hard - -ifeq (,$(filter $(default-abi),$(abi-variants))) -Unknown ABI, must be one of $(abi-variants) -endif - -abi-includes := -abi-soft-options := -U__ARM_PCS_VFP -abi-soft-condition := !defined __ARM_PCS_VFP -abi-soft-ld-soname := ld-linux.so.3 -abi-hard-options := -D__ARM_PCS_VFP -abi-hard-condition := defined __ARM_PCS_VFP -abi-hard-ld-soname := ld-linux-armhf.so.3 diff --git a/ports/sysdeps/unix/sysv/linux/arm/Versions b/ports/sysdeps/unix/sysv/linux/arm/Versions deleted file mode 100644 index 1d9e964640..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/Versions +++ /dev/null @@ -1,40 +0,0 @@ -libc { - GLIBC_2.0 { - # Exception handling support functions from libgcc - __register_frame; __register_frame_table; __deregister_frame; - __frame_state_for; __register_frame_info_table; - } - GLIBC_2.1 { - ioperm; iopl; - inb; inw; inl; - outb; outw; outl; - } - GLIBC_2.2 { - # functions used in other libraries - __xstat64; __fxstat64; __lxstat64; - - # a* - alphasort64; - - # g* - glob64; - - # New rlimit interface - getrlimit; setrlimit; getrlimit64; - - # r* - readdir64; readdir64_r; - - # s* - scandir64; - - # v* - versionsort64; - } - GLIBC_2.3.3 { - posix_fadvise64; posix_fallocate64; - } - GLIBC_2.11 { - fallocate64; - } -} diff --git a/ports/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S b/ports/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S deleted file mode 100644 index 96f8b4eb2d..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (C) 2009-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - - .section .rodata.str1.1,"aMS",%progbits,1 - .type longjmp_msg,%object -longjmp_msg: - .string "longjmp causes uninitialized stack frame" - .size longjmp_msg, .-longjmp_msg - .text - -#define __longjmp ____longjmp_chk - -#ifdef PIC -# define CALL_FAIL \ - ldr sl, .L_GOT; \ - cfi_undefined (sl); \ -.L_GOT_OFF: \ - add sl, pc, sl; \ - ldr r0, .Lstr; \ - add r0, sl, r0; \ - B PLTJMP(HIDDEN_JUMPTARGET(__fortify_fail)); \ -.L_GOT: \ - .word _GLOBAL_OFFSET_TABLE_-(.L_GOT_OFF+8); \ -.Lstr: \ - .word longjmp_msg(GOTOFF); -#else -# define CALL_FAIL \ - ldr r0, .Lstr; \ - B HIDDEN_JUMPTARGET(__fortify_fail); \ -.Lstr: \ - .word longjmp_msg; -#endif - -#define CHECK_SP(reg) \ - cfi_remember_state; \ - cmp sp, reg; \ - bls .Lok; \ - push { r7 }; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (r7, 0); \ - mov r5, r0; \ - cfi_undefined (r5); \ - mov r7, #SYS_ify(sigaltstack); \ - mov r0, #0; \ - sub sp, sp, #12; /* == sizeof (stack_t) */ \ - cfi_adjust_cfa_offset (12); \ - cfi_remember_state; \ - mov r1, sp; \ - swi #0; \ - cmp r0, #0; \ - bne .Lok2; \ - ldr r1, [sp, #4]; \ - tst r1, #1; \ - beq .Lfail; \ - ldr r2, [sp, #0]; \ - ldr r3, [sp, #8]; \ - add r2, r2, r3; \ - sub r2, r2, reg; \ - cmp r2, r3; \ - bhi .Lok2; \ -.Lfail: \ - add sp, sp, #12; \ - cfi_adjust_cfa_offset (-12); \ - pop { r7 }; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (r7); \ - CALL_FAIL \ - cfi_restore_state; \ -.Lok2: \ - mov r0, r5; \ - cfi_restore_state; \ -.Lok: - -#include <__longjmp.S> diff --git a/ports/sysdeps/unix/sysv/linux/arm/aeabi_read_tp.S b/ports/sysdeps/unix/sysv/linux/arm/aeabi_read_tp.S deleted file mode 100644 index 9351233873..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/aeabi_read_tp.S +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser 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 <sysdep.h> - -/* GCC will emit calls to this routine under -mtp=soft. Linux has an - equivalent helper function (which clobbers fewer registers than - a normal function call) in a high page of memory; tail call to the - helper. */ - - .hidden __aeabi_read_tp -ENTRY (__aeabi_read_tp) -#ifdef ARCH_HAS_HARD_TP - mrc p15, 0, r0, c13, c0, 3 - bx lr -#elif defined(__thumb2__) - movw r0, #0x0fe0 - movt r0, #0xffff - bx r0 -#else - mov r0, #0xffff0fff - sub pc, r0, #31 -#endif -END (__aeabi_read_tp) diff --git a/ports/sysdeps/unix/sysv/linux/arm/alphasort64.c b/ports/sysdeps/unix/sysv/linux/arm/alphasort64.c deleted file mode 100644 index 0b5ae47d2f..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/alphasort64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/alphasort64.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/arm-features.h b/ports/sysdeps/unix/sysv/linux/arm/arm-features.h deleted file mode 100644 index 5c721ef17d..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/arm-features.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Macros to test for CPU features on ARM. Linux version. - Copyright (C) 2012-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _LINUX_ARM_FEATURES_H -#define _LINUX_ARM_FEATURES_H 1 - -#ifndef __ASSEMBLER__ -# include <ldsodefs.h> - -# define ARM_HAVE_VFP (GLRO (dl_hwcap) & HWCAP_ARM_VFP) -#endif - -#include_next <arm-features.h> - -#endif /* arm-features.h */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/bits/atomic.h b/ports/sysdeps/unix/sysv/linux/arm/bits/atomic.h deleted file mode 100644 index cc73684e8a..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/bits/atomic.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Atomic operations. ARM/Linux version. - Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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> - -/* If the compiler doesn't provide a primitive, we'll use this macro - to get assistance from the kernel. */ -#ifdef __thumb2__ -# define __arm_assisted_full_barrier() \ - __asm__ __volatile__ \ - ("movw\tip, #0x0fa0\n\t" \ - "movt\tip, #0xffff\n\t" \ - "blx\tip" \ - : : : "ip", "lr", "cc", "memory"); -#else -# define __arm_assisted_full_barrier() \ - __asm__ __volatile__ \ - ("mov\tip, #0xffff0fff\n\t" \ - "mov\tlr, pc\n\t" \ - "add\tpc, ip, #(0xffff0fa0 - 0xffff0fff)" \ - : : : "ip", "lr", "cc", "memory"); -#endif - -/* Atomic compare and exchange. This sequence relies on the kernel to - provide a compare and exchange operation which is atomic on the - current architecture, either via cleverness on pre-ARMv6 or via - ldrex / strex on ARMv6. - - It doesn't matter what register is used for a_oldval2, but we must - specify one to work around GCC PR rtl-optimization/21223. Otherwise - it may cause a_oldval or a_tmp to be moved to a different register. - - We use the union trick rather than simply using __typeof (...) in the - declarations of A_OLDVAL et al because when NEWVAL or OLDVAL is of the - form *PTR and PTR has a 'volatile ... *' type, then __typeof (*PTR) has - a 'volatile ...' type and this triggers -Wvolatile-register-var to - complain about 'register volatile ... asm ("reg")'. */ -#ifdef __thumb2__ -/* Thumb-2 has ldrex/strex. However it does not have barrier instructions, - so we still need to use the kernel helper. */ -# define __arm_assisted_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - ({ union { __typeof (oldval) a; uint32_t v; } oldval_arg = { .a = (oldval) };\ - union { __typeof (newval) a; uint32_t v; } newval_arg = { .a = (newval) };\ - register uint32_t a_oldval asm ("r0"); \ - register uint32_t a_newval asm ("r1") = newval_arg.v; \ - register __typeof (mem) a_ptr asm ("r2") = (mem); \ - register uint32_t a_tmp asm ("r3"); \ - register uint32_t a_oldval2 asm ("r4") = oldval_arg.v; \ - __asm__ __volatile__ \ - ("0:\tldr\t%[tmp],[%[ptr]]\n\t" \ - "cmp\t%[tmp], %[old2]\n\t" \ - "bne\t1f\n\t" \ - "mov\t%[old], %[old2]\n\t" \ - "movw\t%[tmp], #0x0fc0\n\t" \ - "movt\t%[tmp], #0xffff\n\t" \ - "blx\t%[tmp]\n\t" \ - "bcc\t0b\n\t" \ - "mov\t%[tmp], %[old2]\n\t" \ - "1:" \ - : [old] "=&r" (a_oldval), [tmp] "=&r" (a_tmp) \ - : [new] "r" (a_newval), [ptr] "r" (a_ptr), \ - [old2] "r" (a_oldval2) \ - : "ip", "lr", "cc", "memory"); \ - (__typeof (oldval)) a_tmp; }) -#else -# define __arm_assisted_compare_and_exchange_val_32_acq(mem, newval, oldval) \ - ({ union { __typeof (oldval) a; uint32_t v; } oldval_arg = { .a = (oldval) };\ - union { __typeof (newval) a; uint32_t v; } newval_arg = { .a = (newval) };\ - register uint32_t a_oldval asm ("r0"); \ - register uint32_t a_newval asm ("r1") = newval_arg.v; \ - register __typeof (mem) a_ptr asm ("r2") = (mem); \ - register uint32_t a_tmp asm ("r3"); \ - register uint32_t a_oldval2 asm ("r4") = oldval_arg.v; \ - __asm__ __volatile__ \ - ("0:\tldr\t%[tmp],[%[ptr]]\n\t" \ - "cmp\t%[tmp], %[old2]\n\t" \ - "bne\t1f\n\t" \ - "mov\t%[old], %[old2]\n\t" \ - "mov\t%[tmp], #0xffff0fff\n\t" \ - "mov\tlr, pc\n\t" \ - "add\tpc, %[tmp], #(0xffff0fc0 - 0xffff0fff)\n\t" \ - "bcc\t0b\n\t" \ - "mov\t%[tmp], %[old2]\n\t" \ - "1:" \ - : [old] "=&r" (a_oldval), [tmp] "=&r" (a_tmp) \ - : [new] "r" (a_newval), [ptr] "r" (a_ptr), \ - [old2] "r" (a_oldval2) \ - : "ip", "lr", "cc", "memory"); \ - (__typeof (oldval)) a_tmp; }) -#endif - -#include <sysdeps/arm/bits/atomic.h> diff --git a/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h deleted file mode 100644 index a5f5f448e8..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h +++ /dev/null @@ -1,54 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 _FCNTL_H -# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead." -#endif - -#define __O_DIRECTORY 040000 /* Must be a directory. */ -#define __O_NOFOLLOW 0100000 /* Do not follow links. */ -#define __O_DIRECT 0200000 /* Direct disk access. */ -#define __O_LARGEFILE 0400000 - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#ifndef __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include <bits/fcntl-linux.h> diff --git a/ports/sysdeps/unix/sysv/linux/arm/bits/hwcap.h b/ports/sysdeps/unix/sysv/linux/arm/bits/hwcap.h deleted file mode 100644 index b438d2a02f..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/bits/hwcap.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Defines for bits in AT_HWCAP. ARM Linux version. - Copyright (C) 2012-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_AUXV_H -# error "Never include <bits/hwcap.h> directly; use <sys/auxv.h> instead." -#endif - -/* The following must match the kernel's <asm/hwcap.h>. */ -#define HWCAP_ARM_SWP 1 -#define HWCAP_ARM_HALF 2 -#define HWCAP_ARM_THUMB 4 -#define HWCAP_ARM_26BIT 8 -#define HWCAP_ARM_FAST_MULT 16 -#define HWCAP_ARM_FPA 32 -#define HWCAP_ARM_VFP 64 -#define HWCAP_ARM_EDSP 128 -#define HWCAP_ARM_JAVA 256 -#define HWCAP_ARM_IWMMXT 512 -#define HWCAP_ARM_CRUNCH 1024 -#define HWCAP_ARM_THUMBEE 2048 -#define HWCAP_ARM_NEON 4096 -#define HWCAP_ARM_VFPv3 8192 -#define HWCAP_ARM_VFPv3D16 16384 -#define HWCAP_ARM_TLS 32768 -#define HWCAP_ARM_VFPv4 65536 -#define HWCAP_ARM_IDIVA 131072 -#define HWCAP_ARM_IDIVT 262144 diff --git a/ports/sysdeps/unix/sysv/linux/arm/bits/mman.h b/ports/sysdeps/unix/sysv/linux/arm/bits/mman.h deleted file mode 100644 index 8259b96894..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/bits/mman.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/ARM version. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_MMAN_H -# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead." -#endif - -/* The following definitions basically come from the kernel headers. - But the kernel header is not namespace clean. */ - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */ -# define MAP_DENYWRITE 0x00800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */ -# define MAP_LOCKED 0x02000 /* Lock the mapping. */ -# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */ -# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ -# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ -# define MAP_STACK 0x20000 /* Allocation is for a stack. */ -# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ -#endif - -/* Include generic Linux declarations. */ -#include <bits/mman-linux.h> diff --git a/ports/sysdeps/unix/sysv/linux/arm/bits/shm.h b/ports/sysdeps/unix/sysv/linux/arm/bits/shm.h deleted file mode 100644 index a479054495..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/bits/shm.h +++ /dev/null @@ -1,103 +0,0 @@ -/* Copyright (C) 1995-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_SHM_H -# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead." -#endif - -#include <bits/types.h> - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from <linux/stat.h> */ -#define SHM_W 0200 /* or S_IWUGO from <linux/stat.h> */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ -#define SHM_EXEC 0100000 /* execution access */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -__BEGIN_DECLS - -/* Segment low boundary address multiple. */ -#define SHMLBA (__getpagesize () << 2) -extern int __getpagesize (void) __THROW __attribute__ ((__const__)); - - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ - size_t shm_segsz; /* size of segment in bytes */ - __time_t shm_atime; /* time of last shmat() */ - unsigned long int __glibc_reserved1; - __time_t shm_dtime; /* time of last shmdt() */ - unsigned long int __glibc_reserved2; - __time_t shm_ctime; /* time of last change by shmctl() */ - unsigned long int __glibc_reserved3; - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long int __glibc_reserved4; - unsigned long int __glibc_reserved5; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long int shmmax; - unsigned long int shmmin; - unsigned long int shmmni; - unsigned long int shmseg; - unsigned long int shmall; - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - unsigned long int __glibc_reserved3; - unsigned long int __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ - -__END_DECLS diff --git a/ports/sysdeps/unix/sysv/linux/arm/brk.c b/ports/sysdeps/unix/sysv/linux/arm/brk.c deleted file mode 100644 index f442b5381d..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/brk.c +++ /dev/null @@ -1,41 +0,0 @@ -/* brk system call for Linux/ARM. - Copyright (C) 1995-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <unistd.h> -#include <sysdep.h> - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -int -__brk (void *addr) -{ - void *newbrk; - - __curbrk = newbrk = (void *) INLINE_SYSCALL (brk, 1, addr); - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/ports/sysdeps/unix/sysv/linux/arm/clone.S b/ports/sysdeps/unix/sysv/linux/arm/clone.S deleted file mode 100644 index 03fe9ab728..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/clone.S +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright (C) 1996-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Pat Beirne <patb@corelcomputer.com> - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include <sysdep.h> -#define _ERRNO_H 1 -#include <bits/errno.h> - -#define CLONE_VM 0x00000100 -#define CLONE_THREAD 0x00010000 - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - pid_t *ptid, struct user_desc *tls, pid_t *ctid); */ - - .text -ENTRY(__clone) - @ sanity check args - cmp r0, #0 - ite ne - cmpne r1, #0 - moveq r0, #-EINVAL - beq PLTJMP(syscall_error) - - @ insert the args onto the new stack - str r3, [r1, #-4]! - str r0, [r1, #-4]! - - @ do the system call - @ get flags - mov r0, r2 -#ifdef RESET_PID - mov ip, r2 -#endif - @ new sp is already in r1 - push {r4, r7} - cfi_adjust_cfa_offset (8) - cfi_rel_offset (r4, 0) - cfi_rel_offset (r7, 4) - ldr r2, [sp, #8] - ldr r3, [sp, #12] - ldr r4, [sp, #16] - ldr r7, =SYS_ify(clone) - swi 0x0 - cfi_endproc - cmp r0, #0 - beq 1f - pop {r4, r7} - blt PLTJMP(C_SYMBOL_NAME(__syscall_error)) - RETINSTR(, lr) - - cfi_startproc -PSEUDO_END (__clone) - -1: - .fnstart - .cantunwind -#ifdef RESET_PID - tst ip, #CLONE_THREAD - bne 3f - GET_TLS (lr) - mov r1, r0 - tst ip, #CLONE_VM - ldr r7, =SYS_ify(getpid) - ite ne - movne r0, #-1 - swieq 0x0 - NEGOFF_ADJ_BASE (r1, TID_OFFSET) - str r0, NEGOFF_OFF1 (r1, TID_OFFSET) - str r0, NEGOFF_OFF2 (r1, PID_OFFSET, TID_OFFSET) -3: -#endif - @ pick the function arg and call address off the stack and execute - ldr r0, [sp, #4] - ldr ip, [sp], #8 - BLX (ip) - - @ and we are done, passing the return value through r0 - b PLTJMP(HIDDEN_JUMPTARGET(_exit)) - - .fnend - -weak_alias (__clone, clone) diff --git a/ports/sysdeps/unix/sysv/linux/arm/configure b/ports/sysdeps/unix/sysv/linux/arm/configure deleted file mode 100644 index 71eb195942..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/configure +++ /dev/null @@ -1,6 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - # Local configure fragment for sysdeps/unix/sysv/linux/arm. - -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/ports/sysdeps/unix/sysv/linux/arm/configure.ac b/ports/sysdeps/unix/sysv/linux/arm/configure.ac deleted file mode 100644 index 8e4e20d2b8..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/configure.ac +++ /dev/null @@ -1,6 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -# Local configure fragment for sysdeps/unix/sysv/linux/arm. - -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/ports/sysdeps/unix/sysv/linux/arm/dl-cache.h b/ports/sysdeps/unix/sysv/linux/arm/dl-cache.h deleted file mode 100644 index 66e6cdbfc6..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/dl-cache.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <ldconfig.h> - -/* In order to support the transition from unmarked objects - to marked objects we must treat unmarked objects as - compatible with either FLAG_ARM_LIBHF or FLAG_ARM_LIBSF. */ -#ifdef __ARM_PCS_VFP -# define _dl_cache_check_flags(flags) \ - ((flags) == (FLAG_ARM_LIBHF | FLAG_ELF_LIBC6) \ - || (flags) == FLAG_ELF_LIBC6) -#else -# define _dl_cache_check_flags(flags) \ - ((flags) == (FLAG_ARM_LIBSF | FLAG_ELF_LIBC6) \ - || (flags) == FLAG_ELF_LIBC6) -#endif - -#include_next <dl-cache.h> diff --git a/ports/sysdeps/unix/sysv/linux/arm/dl-machine.h b/ports/sysdeps/unix/sysv/linux/arm/dl-machine.h deleted file mode 100644 index 9946db8a56..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/dl-machine.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. ARM/Linux version - Copyright (C) 1995-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 - -/* This definition is Linux-specific. */ -#define CLEAR_CACHE(BEG,END) \ - INTERNAL_SYSCALL_ARM (cacheflush, , 3, (BEG), (END), 0) - -#endif - -/* The rest is just machine-specific. - This #include is outside the #ifndef because the parts of - dl-machine.h used only by dynamic-link.h are outside the guard. */ -#include <sysdeps/arm/dl-machine.h> diff --git a/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.c b/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.c deleted file mode 100644 index d304539f0c..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Data for Linux/ARM version of processor capability information. - Copyright (C) 2001-2014 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/>. */ - -/* This information must be kept in sync with the _DL_HWCAP_COUNT and - _DL_PLATFORM_COUNT definitions in procinfo.h. - - If anything should be added here check whether the size of each string - is still ok with the given array size. - - All the #ifdefs in the definitions ar equite irritating but - necessary if we want to avoid duplicating the information. There - are three different modes: - - - PROCINFO_DECL is defined. This means we are only interested in - declarations. - - - PROCINFO_DECL is not defined: - - + if SHARED is defined the file is included in an array - initializer. The .element = { ... } syntax is needed. - - + if SHARED is not defined a normal array initialization is - needed. - */ - -#ifndef PROCINFO_CLASS -#define PROCINFO_CLASS -#endif - -#if !defined PROCINFO_DECL && defined SHARED - ._dl_arm_cap_flags -#else -PROCINFO_CLASS const char _dl_arm_cap_flags[19][10] -#endif -#ifndef PROCINFO_DECL -= { - "swp", "half", "thumb", "26bit", "fastmult", "fpa", "vfp", "edsp", - "java", "iwmmxt", "crunch", "thumbee", "neon", "vfpv3", "vfpv3d16", - "tls", "vfpv4", "idiva", "idivt", - } -#endif -#if !defined SHARED || defined PROCINFO_DECL -; -#else -, -#endif - -#undef PROCINFO_DECL -#undef PROCINFO_CLASS diff --git a/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.h b/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.h deleted file mode 100644 index 2f8f003e9f..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.h +++ /dev/null @@ -1,78 +0,0 @@ -/* Linux/ARM version of processor capability information handling macros. - Copyright (C) 2001-2014 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/>. */ - -#ifndef _DL_PROCINFO_H -#define _DL_PROCINFO_H 1 - -#include <ldsodefs.h> -#include <sysdep.h> - -#define _DL_HWCAP_COUNT 19 - -/* The kernel provides platform data but it is not interesting. */ -#define _DL_HWCAP_PLATFORM 0 - - -static inline int -__attribute__ ((unused)) -_dl_procinfo (unsigned int type, unsigned long int word) -{ - int i; - - /* Fallback to unknown output mechanism. */ - if (type == AT_HWCAP2) - return -1; - - _dl_printf ("AT_HWCAP: "); - - for (i = 0; i < _DL_HWCAP_COUNT; ++i) - if (word & (1 << i)) - _dl_printf (" %s", GLRO(dl_arm_cap_flags)[i]); - - _dl_printf ("\n"); - - return 0; -} - -static inline const char * -__attribute__ ((unused)) -_dl_hwcap_string (int idx) -{ - return GLRO(dl_arm_cap_flags)[idx]; -}; - -#define HWCAP_IMPORTANT (HWCAP_ARM_VFP | HWCAP_ARM_NEON) - -static inline int -__attribute__ ((unused)) -_dl_string_hwcap (const char *str) -{ - int i; - - for (i = 0; i < _DL_HWCAP_COUNT; i++) - { - if (strcmp (str, GLRO(dl_arm_cap_flags)[i]) == 0) - return i; - } - return -1; -}; - -#define _dl_string_platform(str) (-1) - -#endif /* dl-procinfo.h */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/fchown.c b/ports/sysdeps/unix/sysv/linux/arm/fchown.c deleted file mode 100644 index 3a69ecc9e7..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/fchown.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/fchown.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/fcntl.c b/ports/sysdeps/unix/sysv/linux/arm/fcntl.c deleted file mode 100644 index ea951bc4f9..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/fcntl.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/fcntl.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/ftruncate64.c b/ports/sysdeps/unix/sysv/linux/arm/ftruncate64.c deleted file mode 100644 index 49631d4432..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/ftruncate64.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sys/types.h> -#include <errno.h> -#include <endian.h> -#include <unistd.h> - -#include <sysdep.h> -#include <sys/syscall.h> - -/* Truncate the file FD refers to to LENGTH bytes. */ -int -__ftruncate64 (int fd, off64_t length) -{ - unsigned int low = length & 0xffffffff; - unsigned int high = length >> 32; - int result = INLINE_SYSCALL (ftruncate64, 4, fd, 0, - __LONG_LONG_PAIR (high, low)); - return result; -} -weak_alias (__ftruncate64, ftruncate64) diff --git a/ports/sysdeps/unix/sysv/linux/arm/fxstat.c b/ports/sysdeps/unix/sysv/linux/arm/fxstat.c deleted file mode 100644 index 4f219f0b9d..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/fxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/fxstat.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/fxstatat.c b/ports/sysdeps/unix/sysv/linux/arm/fxstatat.c deleted file mode 100644 index 0f8b3135d8..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/fxstatat.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/fxstatat.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/getcontext.S b/ports/sysdeps/unix/sysv/linux/arm/getcontext.S deleted file mode 100644 index b8b7b202b8..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/getcontext.S +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (C) 2012-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <rtld-global-offsets.h> - -#include "ucontext_i.h" - - .syntax unified - .text - -/* int getcontext (ucontext_t *ucp) */ - -ENTRY(__getcontext) - /* No need to save r0-r3, d0-d7, or d16-d31. */ - add r1, r0, #MCONTEXT_ARM_R4 - stmia r1, {r4-r11} - - /* Save R13 separately as Thumb can't STM it. */ - str r13, [r0, #MCONTEXT_ARM_SP] - str r14, [r0, #MCONTEXT_ARM_LR] - /* Return to LR */ - str r14, [r0, #MCONTEXT_ARM_PC] - /* Return zero */ - mov r2, #0 - str r2, [r0, #MCONTEXT_ARM_R0] - - /* Save ucontext_t * across the next call. */ - mov r4, r0 - - /* __sigprocmask(SIG_BLOCK, NULL, &(ucontext->uc_sigmask)) */ - mov r0, #SIG_BLOCK - mov r1, #0 - add r2, r4, #UCONTEXT_SIGMASK - bl PLTJMP(__sigprocmask) - - /* Store FP regs. Much of the FP code is copied from arm/setjmp.S. */ - -#ifdef PIC - ldr r2, 1f - ldr r1, .Lrtld_global_ro -0: add r2, pc, r2 - ldr r2, [r2, r1] - ldr r2, [r2, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET] -#else - ldr r2, .Lhwcap - ldr r2, [r2, #0] -#endif - - add r0, r4, #UCONTEXT_REGSPACE - -#ifdef __SOFTFP__ - tst r2, #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 r0!, {d8-d15}. */ - stc p11, cr8, [r0], #64 - /* Store the floating-point status register. */ - /* Following instruction is vmrs r1, fpscr. */ - mrc p10, 7, r1, cr1, cr0, 0 - str r1, [r0], #4 -.Lno_vfp: - - tst r2, #HWCAP_ARM_IWMMXT - beq .Lno_iwmmxt - - /* Save the call-preserved iWMMXt registers. */ - /* Following instructions are wstrd wr10, [r0], #8 (etc.) */ - stcl p1, cr10, [r0], #8 - stcl p1, cr11, [r0], #8 - stcl p1, cr12, [r0], #8 - stcl p1, cr13, [r0], #8 - stcl p1, cr14, [r0], #8 - stcl p1, cr15, [r0], #8 -.Lno_iwmmxt: - - /* Restore the clobbered R4 and LR. */ - ldr r14, [r4, #MCONTEXT_ARM_LR] - ldr r4, [r4, #MCONTEXT_ARM_R4] - - mov r0, #0 - - DO_RET(r14) - -END(__getcontext) - -#ifdef PIC -1: .long _GLOBAL_OFFSET_TABLE_ - 0b - PC_OFS -.Lrtld_global_ro: - .long C_SYMBOL_NAME(_rtld_global_ro)(GOT) -#else -.Lhwcap: - .long C_SYMBOL_NAME(_dl_hwcap) -#endif - - -weak_alias(__getcontext, getcontext) diff --git a/ports/sysdeps/unix/sysv/linux/arm/getdents64.c b/ports/sysdeps/unix/sysv/linux/arm/getdents64.c deleted file mode 100644 index 0c75fb5a06..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/getdents64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/getdents64.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/getegid.c b/ports/sysdeps/unix/sysv/linux/arm/getegid.c deleted file mode 100644 index 37b4b4a530..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/getegid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/getegid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/geteuid.c b/ports/sysdeps/unix/sysv/linux/arm/geteuid.c deleted file mode 100644 index ebcb555b5e..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/geteuid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/geteuid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/getgid.c b/ports/sysdeps/unix/sysv/linux/arm/getgid.c deleted file mode 100644 index 0a4d6061f0..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/getgid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/getgid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/getgroups.c b/ports/sysdeps/unix/sysv/linux/arm/getgroups.c deleted file mode 100644 index 102ea24e14..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/getgroups.c +++ /dev/null @@ -1,2 +0,0 @@ -/* We also have to rewrite the kernel gid_t to the user land type. */ -#include <sysdeps/unix/sysv/linux/i386/getgroups.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/getresgid.c b/ports/sysdeps/unix/sysv/linux/arm/getresgid.c deleted file mode 100644 index b703a414cc..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/getresgid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/getresgid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/getresuid.c b/ports/sysdeps/unix/sysv/linux/arm/getresuid.c deleted file mode 100644 index 0b14cefe34..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/getresuid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/getresuid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/getrlimit64.c b/ports/sysdeps/unix/sysv/linux/arm/getrlimit64.c deleted file mode 100644 index fef018f471..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/getrlimit64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/getuid.c b/ports/sysdeps/unix/sysv/linux/arm/getuid.c deleted file mode 100644 index d682c79a49..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/getuid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/getuid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/glob64.c b/ports/sysdeps/unix/sysv/linux/arm/glob64.c deleted file mode 100644 index 82a9a296a7..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/glob64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/glob64.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/internal_accept4.S b/ports/sysdeps/unix/sysv/linux/arm/internal_accept4.S deleted file mode 100644 index eeb5f50a26..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/internal_accept4.S +++ /dev/null @@ -1,6 +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 diff --git a/ports/sysdeps/unix/sysv/linux/arm/internal_recvmmsg.S b/ports/sysdeps/unix/sysv/linux/arm/internal_recvmmsg.S deleted file mode 100644 index eeb5f50a26..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/internal_recvmmsg.S +++ /dev/null @@ -1,6 +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 diff --git a/ports/sysdeps/unix/sysv/linux/arm/internal_sendmmsg.S b/ports/sysdeps/unix/sysv/linux/arm/internal_sendmmsg.S deleted file mode 100644 index eeb5f50a26..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/internal_sendmmsg.S +++ /dev/null @@ -1,6 +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 diff --git a/ports/sysdeps/unix/sysv/linux/arm/ioperm.c b/ports/sysdeps/unix/sysv/linux/arm/ioperm.c deleted file mode 100644 index 19b79f4bc6..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/ioperm.c +++ /dev/null @@ -1,279 +0,0 @@ -/* Copyright (C) 1998-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Phil Blundell, based on the Alpha version by - David Mosberger. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/>. */ - -/* I/O port access on the ARM is something of a fiction. What we do is to - map an appropriate area of /dev/mem into user space so that a program - can blast away at the hardware in such a way as to generate I/O cycles - on the bus. To insulate user code from dependencies on particular - hardware we don't allow calls to inb() and friends to be inlined, but - force them to come through code in here every time. Performance-critical - registers tend to be memory mapped these days so this should be no big - problem. */ - -/* Once upon a time this file used mprotect to enable and disable - access to particular areas of I/O space. Unfortunately the - mprotect syscall also has the side effect of enabling caching for - the area affected (this is a kernel limitation). So we now just - enable all the ports all of the time. */ - -#include <errno.h> -#include <fcntl.h> -#include <stdio.h> -#include <ctype.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include <sys/types.h> -#include <sys/mman.h> - -#include <linux/version.h> -#include <sys/sysctl.h> - -#define PATH_ARM_SYSTYPE "/etc/arm_systype" -#define PATH_CPUINFO "/proc/cpuinfo" - -#define MAX_PORT 0x10000 - -static struct { - unsigned long int base; - unsigned long int io_base; - unsigned int shift; - unsigned int initdone; /* since all the above could be 0 */ -} io; - -#define IO_BASE_FOOTBRIDGE 0x7c000000 -#define IO_SHIFT_FOOTBRIDGE 0 - -static struct platform { - const char *name; - unsigned long int io_base; - unsigned int shift; -} platform[] = { - /* All currently supported platforms are in fact the same. :-) */ - {"Chalice-CATS", IO_BASE_FOOTBRIDGE, IO_SHIFT_FOOTBRIDGE}, - {"DEC-EBSA285", IO_BASE_FOOTBRIDGE, IO_SHIFT_FOOTBRIDGE}, - {"Corel-NetWinder", IO_BASE_FOOTBRIDGE, IO_SHIFT_FOOTBRIDGE}, - {"Rebel-NetWinder", IO_BASE_FOOTBRIDGE, IO_SHIFT_FOOTBRIDGE}, -}; - -#define IO_ADDR(port) (io.base + ((port) << io.shift)) - -/* - * Initialize I/O system. There are several ways to get the information - * we need. Each is tried in turn until one succeeds. - * - * 1. Sysctl (CTL_BUS, CTL_BUS_ISA, ISA_*). This is the preferred method - * but not all kernels support it. - * - * 2. Read the value (not the contents) of symlink PATH_ARM_SYSTYPE. - * - If it matches one of the entries in the table above, use the - * corresponding values. - * - If it begins with a number, assume this is a previously - * unsupported system and the values encode, in order, - * "<io_base>,<port_shift>". - * - * 3. Lookup the "system type" field in /proc/cpuinfo. Again, if it - * matches an entry in the platform[] table, use the corresponding - * values. - */ - -/* The Linux kernel headers renamed this constant between 2.5.26 and - 2.5.27. It was backported to 2.4 between 2.4.22 and 2.4.23. */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,23) -# define BUS_ISA CTL_BUS_ISA -#endif - -static int -init_iosys (void) -{ - char systype[256]; - int i, n; - static int iobase_name[] = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_BASE }; - static int ioshift_name[] = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_SHIFT }; - size_t len = sizeof(io.base); - - if (! __sysctl (iobase_name, 3, &io.io_base, &len, NULL, 0) - && ! __sysctl (ioshift_name, 3, &io.shift, &len, NULL, 0)) - { - io.initdone = 1; - return 0; - } - - n = __readlink (PATH_ARM_SYSTYPE, systype, sizeof (systype) - 1); - if (n > 0) - { - systype[n] = '\0'; - if (isdigit (systype[0])) - { - if (sscanf (systype, "%li,%i", &io.io_base, &io.shift) == 2) - { - io.initdone = 1; - return 0; - } - /* else we're likely going to fail with the system match below */ - } - } - else - { - FILE * fp; - - fp = fopen (PATH_CPUINFO, "rce"); - if (! fp) - return -1; - while ((n = fscanf (fp, "Hardware\t: %256[^\n]\n", systype)) - != EOF) - { - if (n == 1) - break; - else - fgets_unlocked (systype, 256, fp); - } - fclose (fp); - - if (n == EOF) - { - /* this can happen if the format of /proc/cpuinfo changes... */ - fprintf (stderr, - "ioperm: Unable to determine system type.\n" - "\t(May need " PATH_ARM_SYSTYPE " symlink?)\n"); - __set_errno (ENODEV); - return -1; - } - } - - /* translate systype name into i/o system: */ - for (i = 0; i < sizeof (platform) / sizeof (platform[0]); ++i) - { - if (strcmp (platform[i].name, systype) == 0) - { - io.shift = platform[i].shift; - io.io_base = platform[i].io_base; - io.initdone = 1; - return 0; - } - } - - /* systype is not a known platform name... */ - __set_errno (ENODEV); - return -1; -} - -int -_ioperm (unsigned long int from, unsigned long int num, int turn_on) -{ - if (! io.initdone && init_iosys () < 0) - return -1; - - /* this test isn't as silly as it may look like; consider overflows! */ - if (from >= MAX_PORT || from + num > MAX_PORT) - { - __set_errno (EINVAL); - return -1; - } - - if (turn_on) - { - if (! io.base) - { - int fd; - - fd = __open ("/dev/mem", O_RDWR); - if (fd < 0) - return -1; - - io.base = - (unsigned long int) __mmap (0, MAX_PORT << io.shift, - PROT_READ | PROT_WRITE, - MAP_SHARED, fd, io.io_base); - __close (fd); - if ((long) io.base == -1) - return -1; - } - } - - return 0; -} - - -int -_iopl (unsigned int level) -{ - if (level > 3) - { - __set_errno (EINVAL); - return -1; - } - if (level) - { - return _ioperm (0, MAX_PORT, 1); - } - return 0; -} - - -void -_outb (unsigned char b, unsigned long int port) -{ - *((volatile unsigned char *)(IO_ADDR (port))) = b; -} - - -void -_outw (unsigned short b, unsigned long int port) -{ - *((volatile unsigned short *)(IO_ADDR (port))) = b; -} - - -void -_outl (unsigned int b, unsigned long int port) -{ - *((volatile unsigned long *)(IO_ADDR (port))) = b; -} - - -unsigned int -_inb (unsigned long int port) -{ - return *((volatile unsigned char *)(IO_ADDR (port))); -} - - -unsigned int -_inw (unsigned long int port) -{ - return *((volatile unsigned short *)(IO_ADDR (port))); -} - - -unsigned int -_inl (unsigned long int port) -{ - return *((volatile unsigned long *)(IO_ADDR (port))); -} - -weak_alias (_ioperm, ioperm); -weak_alias (_iopl, iopl); -weak_alias (_inb, inb); -weak_alias (_inw, inw); -weak_alias (_inl, inl); -weak_alias (_outb, outb); -weak_alias (_outw, outw); -weak_alias (_outl, outl); diff --git a/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h b/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h deleted file mode 100644 index 9d7ef877af..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. - Copyright (C) 2006-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 utimes syscall was added before 2.6.1. */ -#define __ASSUME_UTIMES 1 - -/* The signal frame layout changed in 2.6.18. */ -#if __LINUX_KERNEL_VERSION >= 132626 -# define __ASSUME_SIGFRAME_V2 1 -#endif - -/* Support for the eventfd2 and signalfd4 syscalls was added in 2.6.27. */ -#if __LINUX_KERNEL_VERSION >= 0x02061b -# define __ASSUME_EVENTFD2 1 -# define __ASSUME_SIGNALFD4 1 -#endif - -/* Support for the accept4 syscall was added in 2.6.36. */ -#if __LINUX_KERNEL_VERSION >= 0x020624 -# define __ASSUME_ACCEPT4 1 -#endif - -#include_next <kernel-features.h> - -/* Support for pselect6, ppoll and epoll_pwait was added in 2.6.32. */ -#if __LINUX_KERNEL_VERSION < 0x020620 -# undef __ASSUME_PSELECT -# undef __ASSUME_PPOLL -#endif diff --git a/ports/sysdeps/unix/sysv/linux/arm/lchown.c b/ports/sysdeps/unix/sysv/linux/arm/lchown.c deleted file mode 100644 index c89de99ba2..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/lchown.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/lchown.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/ldconfig.h b/ports/sysdeps/unix/sysv/linux/arm/ldconfig.h deleted file mode 100644 index 316d82bdb3..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/ldconfig.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2001-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ldconfig.h> - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld-linux.so.3", FLAG_ELF_LIBC6 }, \ - { "/lib/ld-linux-armhf.so.3", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/ports/sysdeps/unix/sysv/linux/arm/ldsodefs.h b/ports/sysdeps/unix/sysv/linux/arm/ldsodefs.h deleted file mode 100644 index 32cdfab64c..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/ldsodefs.h +++ /dev/null @@ -1,73 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2010-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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_LINUX_LDSODEFS_H -#define _ARM_LINUX_LDSODEFS_H 1 - -#include_next <ldsodefs.h> - -#undef VALID_ELF_HEADER -#undef VALID_ELF_OSABI -#undef MORE_ELF_HEADER_DATA - -#define EXTRA_OSABI ELFOSABI_ARM_AEABI - -#ifdef __ARM_PCS_VFP -# define VALID_FLOAT_ABI(x) \ - ((EF_ARM_EABI_VERSION ((x)) != EF_ARM_EABI_VER5) \ - || !((x) & EF_ARM_ABI_FLOAT_SOFT)) -#else -# define VALID_FLOAT_ABI(x) \ - ((EF_ARM_EABI_VERSION ((x)) != EF_ARM_EABI_VER5) \ - || !((x) & EF_ARM_ABI_FLOAT_HARD)) -#endif - -#undef VALID_ELF_HEADER -#define VALID_ELF_HEADER(hdr,exp,size) \ - ((memcmp (hdr, exp, size) == 0 \ - || memcmp (hdr, expected2, size) == 0 \ - || memcmp (hdr, expected3, size) == 0) \ - && VALID_FLOAT_ABI (ehdr->e_flags)) -#define VALID_ELF_OSABI(osabi) (osabi == ELFOSABI_SYSV \ - || osabi == ELFOSABI_GNU \ - || osabi == EXTRA_OSABI) -#define MORE_ELF_HEADER_DATA \ - static const unsigned char expected2[EI_PAD] = \ - { \ - [EI_MAG0] = ELFMAG0, \ - [EI_MAG1] = ELFMAG1, \ - [EI_MAG2] = ELFMAG2, \ - [EI_MAG3] = ELFMAG3, \ - [EI_CLASS] = ELFW(CLASS), \ - [EI_DATA] = byteorder, \ - [EI_VERSION] = EV_CURRENT, \ - [EI_OSABI] = ELFOSABI_GNU \ - }; \ - static const unsigned char expected3[EI_PAD] = \ - { \ - [EI_MAG0] = ELFMAG0, \ - [EI_MAG1] = ELFMAG1, \ - [EI_MAG2] = ELFMAG2, \ - [EI_MAG3] = ELFMAG3, \ - [EI_CLASS] = ELFW(CLASS), \ - [EI_DATA] = byteorder, \ - [EI_VERSION] = EV_CURRENT, \ - [EI_OSABI] = EXTRA_OSABI \ - } - -#endif diff --git a/ports/sysdeps/unix/sysv/linux/arm/libc-aeabi_read_tp.S b/ports/sysdeps/unix/sysv/linux/arm/libc-aeabi_read_tp.S deleted file mode 100644 index 6132afc151..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/libc-aeabi_read_tp.S +++ /dev/null @@ -1 +0,0 @@ -#include <aeabi_read_tp.S> diff --git a/ports/sysdeps/unix/sysv/linux/arm/libc-do-syscall.S b/ports/sysdeps/unix/sysv/linux/arm/libc-do-syscall.S deleted file mode 100644 index d42a94a560..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/libc-do-syscall.S +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2010-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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> - -/* Out-of-line syscall stub. We expect the system call number in ip - and return the raw result in r0. No registers are clobbered. - We could avoid using the stack for this, but the goal is accurate - unwind information - and while there is a reserved prefix in the - ARM unwind tables for register to register moves, the actual opcodes - are not defined. */ - -#if defined(__thumb__) - .thumb - .syntax unified - .hidden __libc_do_syscall - -#undef CALL_MCOUNT -#define CALL_MCOUNT - -ENTRY (__libc_do_syscall) - .fnstart - push {r7, lr} - .save {r7, lr} - cfi_adjust_cfa_offset (8) - cfi_rel_offset (r7, 0) - cfi_rel_offset (lr, 4) - mov r7, ip - swi 0x0 - pop {r7, pc} - .fnend -END (__libc_do_syscall) - -#endif /* __thumb__ */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/lockf64.c b/ports/sysdeps/unix/sysv/linux/arm/lockf64.c deleted file mode 100644 index a88f5a784a..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/lockf64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/lockf64.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/lxstat.c b/ports/sysdeps/unix/sysv/linux/arm/lxstat.c deleted file mode 100644 index 2371cd9719..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/lxstat.c +++ /dev/null @@ -1,2 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/lxstat.c> - diff --git a/ports/sysdeps/unix/sysv/linux/arm/makecontext.c b/ports/sysdeps/unix/sysv/linux/arm/makecontext.c deleted file mode 100644 index 73fbe4a329..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/makecontext.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (C) 2012-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <stdarg.h> -#include <ucontext.h> - -/* Number of arguments that go in registers. */ -#define NREG_ARGS 4 - -/* Take a context previously prepared via getcontext() and set to - call func() with the given int only args. */ -void -__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -{ - extern void __startcontext (void); - unsigned long *funcstack; - va_list vl; - unsigned long *regptr; - unsigned int reg; - int misaligned; - - /* Start at the top of stack. */ - funcstack = (unsigned long *) (ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); - - /* Ensure the stack stays eight byte aligned. */ - misaligned = ((unsigned long) funcstack & 4) != 0; - - if ((argc > NREG_ARGS) && (argc & 1) != 0) - misaligned = !misaligned; - - if (misaligned) - funcstack -= 1; - - va_start (vl, argc); - - /* Reserve space for the on-stack arguments. */ - if (argc > NREG_ARGS) - funcstack -= (argc - NREG_ARGS); - - ucp->uc_mcontext.arm_sp = (unsigned long) funcstack; - ucp->uc_mcontext.arm_pc = (unsigned long) func; - - /* Exit to startcontext() with the next context in R4 */ - ucp->uc_mcontext.arm_r4 = (unsigned long) ucp->uc_link; - ucp->uc_mcontext.arm_lr = (unsigned long) __startcontext; - - /* The first four arguments go into registers. */ - regptr = &(ucp->uc_mcontext.arm_r0); - - for (reg = 0; (reg < argc) && (reg < NREG_ARGS); reg++) - *regptr++ = va_arg (vl, unsigned long); - - /* And the remainder on the stack. */ - for (; reg < argc; reg++) - *funcstack++ = va_arg (vl, unsigned long); - - va_end (vl); -} -weak_alias (__makecontext, makecontext) diff --git a/ports/sysdeps/unix/sysv/linux/arm/mmap.S b/ports/sysdeps/unix/sysv/linux/arm/mmap.S deleted file mode 100644 index 0383bb5547..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/mmap.S +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 1998-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -#define EINVAL 22 - - .text - -ENTRY (__mmap) - /* shuffle args */ - push { r5 } - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r5, 0) - ldr r5, [sp, #8] - push { r4 } - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r4, 0) - cfi_remember_state - ldr r4, [sp, #8] - - /* convert offset to pages */ - movs ip, r5, lsl #20 - bne .Linval - mov r5, r5, lsr #12 - - /* do the syscall */ - DO_CALL (mmap2, 0) - - /* restore registers */ -2: - pop { r4 } - cfi_adjust_cfa_offset (-4) - cfi_restore (r4) - pop { r5 } - cfi_adjust_cfa_offset (-4) - cfi_restore (r5) - - cmn r0, $4096 - it cc - RETINSTR(cc, lr) - b PLTJMP(syscall_error) - - cfi_restore_state -.Linval: - mov r0, #-EINVAL - b 2b -PSEUDO_END (__mmap) - -weak_alias (__mmap, mmap) diff --git a/ports/sysdeps/unix/sysv/linux/arm/mmap64.S b/ports/sysdeps/unix/sysv/linux/arm/mmap64.S deleted file mode 100644 index eae522988c..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/mmap64.S +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 - -#define EINVAL 22 - -#ifdef __ARMEB__ -# define LOW_OFFSET 8 + 4 -/* The initial + 4 is for the stack postdecrement. */ -# define HIGH_OFFSET 4 + 8 + 0 -#else -# define LOW_OFFSET 8 + 0 -# define HIGH_OFFSET 4 + 8 + 4 -#endif - - /* The mmap2 system call takes six arguments, all in registers. */ - .text -ENTRY (__mmap64) - ldr ip, [sp, $LOW_OFFSET] - push { r5 } - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r5, 0) - ldr r5, [sp, $HIGH_OFFSET] - push { r4 } - cfi_adjust_cfa_offset (4) - cfi_rel_offset (r4, 0) - cfi_remember_state - movs r4, ip, lsl $20 @ check that offset is page-aligned - mov ip, ip, lsr $12 - it eq - movseq r4, r5, lsr $12 @ check for overflow - bne .Linval - ldr r4, [sp, $8] @ load fd - orr r5, ip, r5, lsl $20 @ compose page offset - DO_CALL (mmap2, 0) - cmn r0, $4096 - pop {r4, r5} - cfi_adjust_cfa_offset (-8) - cfi_restore (r4) - cfi_restore (r5) - it cc - RETINSTR(cc, lr) - b PLTJMP(syscall_error) - - cfi_restore_state -.Linval: - mov r0, $-EINVAL - pop {r4, r5} - cfi_adjust_cfa_offset (-8) - cfi_restore (r4) - cfi_restore (r5) - b PLTJMP(syscall_error) -PSEUDO_END (__mmap64) - -weak_alias (__mmap64, mmap64) diff --git a/ports/sysdeps/unix/sysv/linux/arm/msgctl.c b/ports/sysdeps/unix/sysv/linux/arm/msgctl.c deleted file mode 100644 index a0b6cb4372..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/msgctl.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1995-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <sys/msg.h> -#include <ipc_priv.h> -#include <sysdep.h> -#include <sys/syscall.h> - - -int -__new_msgctl (int msqid, int cmd, struct msqid_ds *buf) -{ - return INLINE_SYSCALL (msgctl, 3, msqid, cmd | __IPC_64, buf); -} - -#include <shlib-compat.h> -versioned_symbol (libc, __new_msgctl, msgctl, GLIBC_2_2); diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/Makefile b/ports/sysdeps/unix/sysv/linux/arm/nptl/Makefile deleted file mode 100644 index ef8076cf3f..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -ifeq ($(subdir),rt) -librt-sysdep_routines += rt-aeabi_unwind_cpp_pr1 -librt-shared-only-routines += rt-aeabi_unwind_cpp_pr1 -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/ports/sysdeps/unix/sysv/linux/arm/nptl/Versions b/ports/sysdeps/unix/sysv/linux/arm/nptl/Versions deleted file mode 100644 index 435c9212c4..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/Versions +++ /dev/null @@ -1,8 +0,0 @@ -libc { - GLIBC_PRIVATE { - # A copy of sigaction lives in NPTL, and needs these. - __default_sa_restorer; __default_rt_sa_restorer; - __default_sa_restorer_v1; __default_rt_sa_restorer_v1; - __default_sa_restorer_v2; __default_rt_sa_restorer_v2; - } -} diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h b/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h deleted file mode 100644 index 26edce54fe..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h +++ /dev/null @@ -1,184 +0,0 @@ -/* Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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_H -#define _BITS_PTHREADTYPES_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_COND_COMPAT_T 12 -#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 - - -/* Thread identifiers. The structure of the attribute type is not - exposed on purpose. */ -typedef unsigned long int pthread_t; - - -union pthread_attr_t -{ - char __size[__SIZEOF_PTHREAD_ATTR_T]; - long int __align; -}; -#ifndef __have_pthread_attr_t -typedef union pthread_attr_t pthread_attr_t; -# define __have_pthread_attr_t 1 -#endif - - -typedef struct __pthread_internal_slist -{ - struct __pthread_internal_slist *__next; -} __pthread_slist_t; - - -/* Data structures for mutex handling. The structure of the attribute - type is not exposed on purpose. */ -typedef union -{ - struct __pthread_mutex_s - { - int __lock; - unsigned int __count; - int __owner; - /* KIND must stay at this position in the structure to maintain - binary compatibility. */ - int __kind; - unsigned int __nusers; - __extension__ union - { - int __spins; - __pthread_slist_t __list; - }; - } __data; - char __size[__SIZEOF_PTHREAD_MUTEX_T]; - long int __align; -} pthread_mutex_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_MUTEXATTR_T]; - long int __align; -} pthread_mutexattr_t; - - -/* Data structure for conditional variable handling. The structure of - the attribute type is not exposed on purpose. */ -typedef union -{ - struct - { - int __lock; - unsigned int __futex; - __extension__ unsigned long long int __total_seq; - __extension__ unsigned long long int __wakeup_seq; - __extension__ unsigned long long int __woken_seq; - void *__mutex; - unsigned int __nwaiters; - unsigned int __broadcast_seq; - } __data; - char __size[__SIZEOF_PTHREAD_COND_T]; - __extension__ long long int __align; -} pthread_cond_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_CONDATTR_T]; - long int __align; -} pthread_condattr_t; - - -/* Keys for thread-specific data */ -typedef unsigned int pthread_key_t; - - -/* Once-only execution */ -typedef int pthread_once_t; - - -#if defined __USE_UNIX98 || defined __USE_XOPEN2K -/* Data structure for read-write lock variable handling. The - structure of the attribute type is not exposed on purpose. */ -typedef union -{ - struct - { - int __lock; - unsigned int __nr_readers; - unsigned int __readers_wakeup; - unsigned int __writer_wakeup; - unsigned int __nr_readers_queued; - unsigned int __nr_writers_queued; -#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 __writer; - } __data; - char __size[__SIZEOF_PTHREAD_RWLOCK_T]; - long int __align; -} pthread_rwlock_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T]; - long int __align; -} pthread_rwlockattr_t; -#endif - - -#ifdef __USE_XOPEN2K -/* POSIX spinlock data type. */ -typedef volatile int pthread_spinlock_t; - - -/* POSIX barriers data type. The structure of the type is - deliberately not exposed. */ -typedef union -{ - char __size[__SIZEOF_PTHREAD_BARRIER_T]; - long int __align; -} pthread_barrier_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_BARRIERATTR_T]; - int __align; -} pthread_barrierattr_t; -#endif - - -#endif /* bits/pthreadtypes.h */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/semaphore.h b/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/semaphore.h deleted file mode 100644 index 50d3a11ebd..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/semaphore.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/ports/sysdeps/unix/sysv/linux/arm/nptl/c++-types.data b/ports/sysdeps/unix/sysv/linux/arm/nptl/c++-types.data deleted file mode 100644 index fde53bf337..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/c++-types.data +++ /dev/null @@ -1,67 +0,0 @@ -blkcnt64_t:x -blkcnt_t:l -blksize_t:l -caddr_t:Pc -clockid_t:i -clock_t:l -daddr_t:i -dev_t:y -fd_mask:l -fsblkcnt64_t:y -fsblkcnt_t:m -fsfilcnt64_t:y -fsfilcnt_t:m -fsid_t:8__fsid_t -gid_t:j -id_t:j -ino64_t:y -ino_t:m -int16_t:s -int32_t:i -int64_t:x -int8_t:a -intptr_t:i -key_t:i -loff_t:x -mode_t:j -nlink_t:j -off64_t:x -off_t:l -pid_t:i -pthread_attr_t:14pthread_attr_t -pthread_barrier_t:17pthread_barrier_t -pthread_barrierattr_t:21pthread_barrierattr_t -pthread_cond_t:14pthread_cond_t -pthread_condattr_t:18pthread_condattr_t -pthread_key_t:j -pthread_mutex_t:15pthread_mutex_t -pthread_mutexattr_t:19pthread_mutexattr_t -pthread_once_t:i -pthread_rwlock_t:16pthread_rwlock_t -pthread_rwlockattr_t:20pthread_rwlockattr_t -pthread_spinlock_t:i -pthread_t:m -quad_t:x -register_t:i -rlim64_t:y -rlim_t:m -sigset_t:10__sigset_t -size_t:j -socklen_t:j -ssize_t:i -suseconds_t:l -time_t:l -u_char:h -uid_t:j -uint:j -u_int:j -u_int16_t:t -u_int32_t:j -u_int64_t:y -u_int8_t:h -ulong:m -u_long:m -u_quad_t:y -useconds_t:j -ushort:t -u_short:t diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/clone.S b/ports/sysdeps/unix/sysv/linux/arm/nptl/clone.S deleted file mode 100644 index 23750b3f88..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/clone.S +++ /dev/null @@ -1,3 +0,0 @@ -#define RESET_PID -#include <tcb-offsets.h> -#include "../clone.S" diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/configure b/ports/sysdeps/unix/sysv/linux/arm/nptl/configure deleted file mode 100644 index a8c34fa3e4..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/configure +++ /dev/null @@ -1,4 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - -libc_cv_gcc_exceptions=yes -exceptions=-fexceptions diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/configure.ac b/ports/sysdeps/unix/sysv/linux/arm/nptl/configure.ac deleted file mode 100644 index 22f6f4b8f2..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/configure.ac +++ /dev/null @@ -1,8 +0,0 @@ -dnl configure fragment for NPTL and ARM/Linux EABI. -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. - -dnl The normal configure check for gcc -fexecptions fails because it can't -dnl find __aeabi_unwind_cpp_pr0. Work around this here; our GCC definitely -dnl has -fexceptions. -libc_cv_gcc_exceptions=yes -exceptions=-fexceptions diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/createthread.c b/ports/sysdeps/unix/sysv/linux/arm/nptl/createthread.c deleted file mode 100644 index 5e96513ca8..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/createthread.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/>. */ - -/* Value passed to 'clone' for initialization of the thread register. */ -#define TLS_VALUE (pd + 1) - -/* Get the real implementation. */ -#include <nptl/sysdeps/pthread/createthread.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/fork.c b/ports/sysdeps/unix/sysv/linux/arm/nptl/fork.c deleted file mode 100644 index 0fbea176c3..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/fork.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Phil Blundell <pb@nexus.co.uk>, 2005 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <sched.h> -#include <signal.h> -#include <sysdep.h> -#include <tls.h> - - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 5, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ - NULL, NULL, NULL, &THREAD_SELF->tid) - -#include <nptl/sysdeps/unix/sysv/linux/fork.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/ld.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/ld.abilist deleted file mode 100644 index 8eac745dd1..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/ld.abilist +++ /dev/null @@ -1,12 +0,0 @@ -GLIBC_2.4 - GLIBC_2.4 A - __libc_memalign F - __libc_stack_end D 0x4 - __stack_chk_guard D 0x4 - __tls_get_addr F - _dl_mcount F - _r_debug D 0x14 - calloc F - free F - malloc F - realloc F diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/libBrokenLocale.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/libBrokenLocale.abilist deleted file mode 100644 index 9c795c6e96..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/libBrokenLocale.abilist +++ /dev/null @@ -1,3 +0,0 @@ -GLIBC_2.4 - GLIBC_2.4 A - __ctype_get_mb_cur_max F diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/libanl.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/libanl.abilist deleted file mode 100644 index e10833ed25..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/libanl.abilist +++ /dev/null @@ -1,6 +0,0 @@ -GLIBC_2.4 - GLIBC_2.4 A - gai_cancel F - gai_error F - gai_suspend F - getaddrinfo_a F diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/libc.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/libc.abilist deleted file mode 100644 index ce45208b5f..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/libc.abilist +++ /dev/null @@ -1,2145 +0,0 @@ -GLIBC_2.10 - GLIBC_2.10 A - __cxa_at_quick_exit F - __posix_getopt F - accept4 F - endsgent F - fallocate F - fgetsgent F - fgetsgent_r F - getsgent F - getsgent_r F - getsgnam F - getsgnam_r F - malloc_info F - preadv F - preadv64 F - psiginfo F - putsgent F - pwritev F - pwritev64 F - quick_exit F - register_printf_modifier F - register_printf_specifier F - register_printf_type F - setsgent F - sgetsgent F - sgetsgent_r F -GLIBC_2.11 - GLIBC_2.11 A - __longjmp_chk F - execvpe F - fallocate64 F - mkostemps F - mkostemps64 F - mkstemps F - mkstemps64 F -GLIBC_2.12 - GLIBC_2.12 A - _sys_errlist D 0x21c - _sys_nerr D 0x4 - ntp_gettimex F - recvmmsg F - sys_errlist D 0x21c - sys_nerr D 0x4 -GLIBC_2.13 - GLIBC_2.13 A - fanotify_init F - fanotify_mark F - prlimit F - prlimit64 F -GLIBC_2.14 - GLIBC_2.14 A - clock_adjtime F - name_to_handle_at F - open_by_handle_at F - sendmmsg F - setns F - syncfs F -GLIBC_2.15 - GLIBC_2.15 A - __fdelt_chk F - __fdelt_warn F - posix_spawn F - posix_spawnp F - process_vm_readv F - process_vm_writev F - scandirat F - scandirat64 F -GLIBC_2.16 - GLIBC_2.16 A - __getauxval F - __poll_chk F - __ppoll_chk F - aligned_alloc F - c16rtomb F - c32rtomb F - getauxval F - mbrtoc16 F - mbrtoc32 F - timespec_get F -GLIBC_2.17 - GLIBC_2.17 A - clock_getcpuclockid F - clock_getres F - clock_gettime F - clock_nanosleep F - clock_settime F - secure_getenv F -GLIBC_2.18 - GLIBC_2.18 A - __cxa_thread_atexit_impl F -GLIBC_2.4 - GLIBC_2.4 A - _Exit F - _IO_2_1_stderr_ D 0xa0 - _IO_2_1_stdin_ D 0xa0 - _IO_2_1_stdout_ D 0xa0 - _IO_adjust_column F - _IO_adjust_wcolumn F - _IO_default_doallocate F - _IO_default_finish F - _IO_default_pbackfail F - _IO_default_uflow F - _IO_default_xsgetn F - _IO_default_xsputn F - _IO_do_write F - _IO_doallocbuf F - _IO_fclose F - _IO_fdopen F - _IO_feof F - _IO_ferror F - _IO_fflush F - _IO_fgetpos F - _IO_fgetpos64 F - _IO_fgets F - _IO_file_attach F - _IO_file_close F - _IO_file_close_it F - _IO_file_doallocate F - _IO_file_finish F - _IO_file_fopen F - _IO_file_init F - _IO_file_jumps D 0x54 - _IO_file_open F - _IO_file_overflow F - _IO_file_read F - _IO_file_seek F - _IO_file_seekoff F - _IO_file_setbuf F - _IO_file_stat F - _IO_file_sync F - _IO_file_underflow F - _IO_file_write F - _IO_file_xsputn F - _IO_flockfile F - _IO_flush_all F - _IO_flush_all_linebuffered F - _IO_fopen F - _IO_fprintf F - _IO_fputs F - _IO_fread F - _IO_free_backup_area F - _IO_free_wbackup_area F - _IO_fsetpos F - _IO_fsetpos64 F - _IO_ftell F - _IO_ftrylockfile F - _IO_funlockfile F - _IO_fwrite F - _IO_getc F - _IO_getline F - _IO_getline_info F - _IO_gets F - _IO_init F - _IO_init_marker F - _IO_init_wmarker F - _IO_iter_begin F - _IO_iter_end F - _IO_iter_file F - _IO_iter_next F - _IO_least_wmarker F - _IO_link_in F - _IO_list_all D 0x4 - _IO_list_lock F - _IO_list_resetlock F - _IO_list_unlock F - _IO_marker_delta F - _IO_marker_difference F - _IO_padn F - _IO_peekc_locked F - _IO_popen F - _IO_printf F - _IO_proc_close F - _IO_proc_open F - _IO_putc F - _IO_puts F - _IO_remove_marker F - _IO_seekmark F - _IO_seekoff F - _IO_seekpos F - _IO_seekwmark F - _IO_setb F - _IO_setbuffer F - _IO_setvbuf F - _IO_sgetn F - _IO_sprintf F - _IO_sputbackc F - _IO_sputbackwc F - _IO_sscanf F - _IO_str_init_readonly F - _IO_str_init_static F - _IO_str_overflow F - _IO_str_pbackfail F - _IO_str_seekoff F - _IO_str_underflow F - _IO_sungetc F - _IO_sungetwc F - _IO_switch_to_get_mode F - _IO_switch_to_main_wget_area F - _IO_switch_to_wbackup_area F - _IO_switch_to_wget_mode F - _IO_un_link F - _IO_ungetc F - _IO_unsave_markers F - _IO_unsave_wmarkers F - _IO_vfprintf F - _IO_vfscanf F - _IO_vsprintf F - _IO_wdefault_doallocate F - _IO_wdefault_finish F - _IO_wdefault_pbackfail F - _IO_wdefault_uflow F - _IO_wdefault_xsgetn F - _IO_wdefault_xsputn F - _IO_wdo_write F - _IO_wdoallocbuf F - _IO_wfile_jumps D 0x54 - _IO_wfile_overflow F - _IO_wfile_seekoff F - _IO_wfile_sync F - _IO_wfile_underflow F - _IO_wfile_xsputn F - _IO_wmarker_delta F - _IO_wsetb F - __adjtimex F - __aeabi_MB_CUR_MAX F - __aeabi_assert F - __aeabi_atexit F - __aeabi_errno_addr F - __aeabi_localeconv F - __aeabi_memclr F - __aeabi_memclr4 F - __aeabi_memclr8 F - __aeabi_memcpy F - __aeabi_memcpy4 F - __aeabi_memcpy8 F - __aeabi_memmove F - __aeabi_memmove4 F - __aeabi_memmove8 F - __aeabi_memset F - __aeabi_memset4 F - __aeabi_memset8 F - __after_morecore_hook D 0x4 - __argz_count F - __argz_next F - __argz_stringify F - __asprintf F - __assert F - __assert_fail F - __assert_perror_fail F - __backtrace F - __backtrace_symbols F - __backtrace_symbols_fd F - __bsd_getpgrp F - __bzero F - __check_rhosts_file D 0x4 - __chk_fail F - __clone F - __close F - __cmsg_nxthdr F - __confstr_chk F - __connect F - __ctype_b_loc F - __ctype_get_mb_cur_max F - __ctype_tolower_loc F - __ctype_toupper_loc F - __curbrk D 0x4 - __cxa_atexit F - __cxa_finalize F - __cyg_profile_func_enter F - __cyg_profile_func_exit F - __daylight D 0x4 - __dcgettext F - __default_morecore F - __dgettext F - __dup2 F - __duplocale F - __endmntent F - __environ D 0x4 - __errno_location F - __fbufsize F - __fcntl F - __ffs F - __fgets_chk F - __fgets_unlocked_chk F - __fgetws_chk F - __fgetws_unlocked_chk F - __finite F - __finitef F - __finitel F - __flbf F - __fork F - __fpending F - __fprintf_chk F - __fpu_control D 0x4 - __fpurge F - __freadable F - __freading F - __free_hook D 0x4 - __freelocale F - __fsetlocking F - __fwprintf_chk F - __fwritable F - __fwriting F - __fxstat F - __fxstat64 F - __fxstatat F - __fxstatat64 F - __getcwd_chk F - __getdelim F - __getdomainname_chk F - __getgroups_chk F - __gethostname_chk F - __getlogin_r_chk F - __getmntent_r F - __getpagesize F - __getpgid F - __getpid F - __gets_chk F - __gettimeofday F - __getwd_chk F - __gmtime_r F - __gnu_Unwind_Find_exidx F - __h_errno_location F - __isalnum_l F - __isalpha_l F - __isascii_l F - __isblank_l F - __iscntrl_l F - __isctype F - __isdigit_l F - __isgraph_l F - __isinf F - __isinff F - __isinfl F - __islower_l F - __isnan F - __isnanf F - __isnanl F - __isprint_l F - __ispunct_l F - __isspace_l F - __isupper_l F - __iswalnum_l F - __iswalpha_l F - __iswblank_l F - __iswcntrl_l F - __iswctype F - __iswctype_l F - __iswdigit_l F - __iswgraph_l F - __iswlower_l F - __iswprint_l F - __iswpunct_l F - __iswspace_l F - __iswupper_l F - __iswxdigit_l F - __isxdigit_l F - __ivaliduser F - __key_decryptsession_pk_LOCAL D 0x4 - __key_encryptsession_pk_LOCAL D 0x4 - __key_gendes_LOCAL D 0x4 - __libc_allocate_rtsig F - __libc_calloc F - __libc_current_sigrtmax F - __libc_current_sigrtmin F - __libc_free F - __libc_freeres F - __libc_init_first F - __libc_mallinfo F - __libc_malloc F - __libc_mallopt F - __libc_memalign F - __libc_pvalloc F - __libc_realloc F - __libc_sa_len F - __libc_start_main F - __libc_valloc F - __lseek F - __lxstat F - __lxstat64 F - __malloc_hook D 0x4 - __malloc_initialize_hook D 0x4 - __mbrlen F - __mbrtowc F - __mbsnrtowcs_chk F - __mbsrtowcs_chk F - __mbstowcs_chk F - __memalign_hook D 0x4 - __memcpy_chk F - __memmove_chk F - __mempcpy F - __mempcpy_chk F - __mempcpy_small F - __memset_chk F - __monstartup F - __morecore D 0x4 - __nanosleep F - __newlocale F - __nl_langinfo_l F - __nss_configure_lookup F - __nss_database_lookup F - __nss_group_lookup F - __nss_hostname_digits_dots F - __nss_hosts_lookup F - __nss_next F - __nss_passwd_lookup F - __open F - __open64 F - __overflow F - __pipe F - __poll F - __pread64 F - __pread64_chk F - __pread_chk F - __printf_chk F - __printf_fp F - __profile_frequency F - __progname D 0x4 - __progname_full D 0x4 - __ptsname_r_chk F - __pwrite64 F - __rawmemchr F - __rcmd_errstr D 0x4 - __read F - __read_chk F - __readlink_chk F - __realloc_hook D 0x4 - __realpath_chk F - __recv_chk F - __recvfrom_chk F - __register_atfork F - __res_init F - __res_nclose F - __res_ninit F - __res_randomid F - __res_state F - __rpc_thread_createerr F - __rpc_thread_svc_fdset F - __rpc_thread_svc_max_pollfd F - __rpc_thread_svc_pollfd F - __sbrk F - __sched_get_priority_max F - __sched_get_priority_min F - __sched_getparam F - __sched_getscheduler F - __sched_setscheduler F - __sched_yield F - __secure_getenv F - __select F - __send F - __setmntent F - __setpgid F - __sigaction F - __sigaddset F - __sigdelset F - __sigismember F - __signbit F - __signbitf F - __sigpause F - __sigsetjmp F - __sigsuspend F - __snprintf_chk F - __sprintf_chk F - __stack_chk_fail F - __statfs F - __stpcpy F - __stpcpy_chk F - __stpcpy_small F - __stpncpy F - __stpncpy_chk F - __strcasecmp F - __strcasecmp_l F - __strcasestr F - __strcat_chk F - __strcoll_l F - __strcpy_chk F - __strcpy_small F - __strcspn_c1 F - __strcspn_c2 F - __strcspn_c3 F - __strdup F - __strerror_r F - __strfmon_l F - __strftime_l F - __strncasecmp_l F - __strncat_chk F - __strncpy_chk F - __strndup F - __strpbrk_c2 F - __strpbrk_c3 F - __strsep_1c F - __strsep_2c F - __strsep_3c F - __strsep_g F - __strspn_c1 F - __strspn_c2 F - __strspn_c3 F - __strtod_internal F - __strtod_l F - __strtof_internal F - __strtof_l F - __strtok_r F - __strtok_r_1c F - __strtol_internal F - __strtol_l F - __strtold_internal F - __strtold_l F - __strtoll_internal F - __strtoll_l F - __strtoul_internal F - __strtoul_l F - __strtoull_internal F - __strtoull_l F - __strverscmp F - __strxfrm_l F - __swprintf_chk F - __sysconf F - __sysctl F - __syslog_chk F - __sysv_signal F - __timezone D 0x4 - __toascii_l F - __tolower_l F - __toupper_l F - __towctrans F - __towctrans_l F - __towlower_l F - __towupper_l F - __ttyname_r_chk F - __tzname D 0x8 - __uflow F - __underflow F - __uselocale F - __vfork F - __vfprintf_chk F - __vfscanf F - __vfwprintf_chk F - __vprintf_chk F - __vsnprintf F - __vsnprintf_chk F - __vsprintf_chk F - __vsscanf F - __vswprintf_chk F - __vsyslog_chk F - __vwprintf_chk F - __wait F - __waitpid F - __wcpcpy_chk F - __wcpncpy_chk F - __wcrtomb_chk F - __wcscasecmp_l F - __wcscat_chk F - __wcscoll_l F - __wcscpy_chk F - __wcsftime_l F - __wcsncasecmp_l F - __wcsncat_chk F - __wcsncpy_chk F - __wcsnrtombs_chk F - __wcsrtombs_chk F - __wcstod_internal F - __wcstod_l F - __wcstof_internal F - __wcstof_l F - __wcstol_internal F - __wcstol_l F - __wcstold_internal F - __wcstold_l F - __wcstoll_internal F - __wcstoll_l F - __wcstombs_chk F - __wcstoul_internal F - __wcstoul_l F - __wcstoull_internal F - __wcstoull_l F - __wcsxfrm_l F - __wctomb_chk F - __wctrans_l F - __wctype_l F - __wmemcpy_chk F - __wmemmove_chk F - __wmempcpy_chk F - __wmemset_chk F - __woverflow F - __wprintf_chk F - __write F - __wuflow F - __wunderflow F - __xmknod F - __xmknodat F - __xpg_basename F - __xpg_sigpause F - __xpg_strerror_r F - __xstat F - __xstat64 F - _authenticate F - _dl_mcount_wrapper F - _dl_mcount_wrapper_check F - _environ D 0x4 - _exit F - _flushlbf F - _libc_intl_domainname D 0x5 - _longjmp F - _mcleanup F - _mcount F - _nl_default_dirname D 0x12 - _nl_domain_bindings D 0x4 - _nl_msg_cat_cntr D 0x4 - _null_auth D 0xc - _obstack_allocated_p F - _obstack_begin F - _obstack_begin_1 F - _obstack_free F - _obstack_memory_used F - _obstack_newchunk F - _res D 0x200 - _res_hconf D 0x30 - _rpc_dtablesize F - _seterr_reply F - _setjmp F - _sys_errlist D 0x210 - _sys_nerr D 0x4 - _sys_siglist D 0x104 - _tolower F - _toupper F - a64l F - abort F - abs F - accept F - access F - acct F - addmntent F - addseverity F - adjtime F - adjtimex F - advance F - alarm F - alphasort F - alphasort64 F - argp_err_exit_status D 0x4 - argp_error F - argp_failure F - argp_help F - argp_parse F - argp_program_bug_address D 0x4 - argp_program_version D 0x4 - argp_program_version_hook D 0x4 - argp_state_help F - argp_usage F - argz_add F - argz_add_sep F - argz_append F - argz_count F - argz_create F - argz_create_sep F - argz_delete F - argz_extract F - argz_insert F - argz_next F - argz_replace F - argz_stringify F - asctime F - asctime_r F - asprintf F - atof F - atoi F - atol F - atoll F - authdes_create F - authdes_getucred F - authdes_pk_create F - authnone_create F - authunix_create F - authunix_create_default F - backtrace F - backtrace_symbols F - backtrace_symbols_fd F - basename F - bcmp F - bcopy F - bdflush F - bind F - bind_textdomain_codeset F - bindresvport F - bindtextdomain F - brk F - bsd_signal F - bsearch F - btowc F - bzero F - calloc F - callrpc F - canonicalize_file_name F - capget F - capset F - catclose F - catgets F - catopen F - cbc_crypt F - cfgetispeed F - cfgetospeed F - cfmakeraw F - cfree F - cfsetispeed F - cfsetospeed F - cfsetspeed F - chdir F - chflags F - chmod F - chown F - chroot F - clearenv F - clearerr F - clearerr_unlocked F - clnt_broadcast F - clnt_create F - clnt_pcreateerror F - clnt_perrno F - clnt_perror F - clnt_spcreateerror F - clnt_sperrno F - clnt_sperror F - clntraw_create F - clnttcp_create F - clntudp_bufcreate F - clntudp_create F - clntunix_create F - clock F - clone F - close F - closedir F - closelog F - confstr F - connect F - copysign F - copysignf F - copysignl F - creat F - creat64 F - create_module F - ctermid F - ctime F - ctime_r F - cuserid F - daemon F - daylight D 0x4 - dcgettext F - dcngettext F - delete_module F - des_setparity F - dgettext F - difftime F - dirfd F - dirname F - div F - dl_iterate_phdr F - dngettext F - dprintf F - drand48 F - drand48_r F - dup F - dup2 F - duplocale F - dysize F - eaccess F - ecb_crypt F - ecvt F - ecvt_r F - endaliasent F - endfsent F - endgrent F - endhostent F - endmntent F - endnetent F - endnetgrent F - endprotoent F - endpwent F - endrpcent F - endservent F - endspent F - endttyent F - endusershell F - endutent F - endutxent F - environ D 0x4 - envz_add F - envz_entry F - envz_get F - envz_merge F - envz_remove F - envz_strip F - epoll_create F - epoll_ctl F - epoll_wait F - erand48 F - erand48_r F - err F - error F - error_at_line F - error_message_count D 0x4 - error_one_per_line D 0x4 - error_print_progname D 0x4 - errx F - ether_aton F - ether_aton_r F - ether_hostton F - ether_line F - ether_ntoa F - ether_ntoa_r F - ether_ntohost F - euidaccess F - execl F - execle F - execlp F - execv F - execve F - execvp F - exit F - faccessat F - fattach F - fchdir F - fchflags F - fchmod F - fchmodat F - fchown F - fchownat F - fclose F - fcloseall F - fcntl F - fcvt F - fcvt_r F - fdatasync F - fdetach F - fdopen F - fdopendir F - feof F - feof_unlocked F - ferror F - ferror_unlocked F - fexecve F - fflush F - fflush_unlocked F - ffs F - ffsl F - ffsll F - fgetc F - fgetc_unlocked F - fgetgrent F - fgetgrent_r F - fgetpos F - fgetpos64 F - fgetpwent F - fgetpwent_r F - fgets F - fgets_unlocked F - fgetspent F - fgetspent_r F - fgetwc F - fgetwc_unlocked F - fgetws F - fgetws_unlocked F - fgetxattr F - fileno F - fileno_unlocked F - finite F - finitef F - finitel F - flistxattr F - flock F - flockfile F - fmemopen F - fmtmsg F - fnmatch F - fopen F - fopen64 F - fopencookie F - fork F - fpathconf F - fprintf F - fputc F - fputc_unlocked F - fputs F - fputs_unlocked F - fputwc F - fputwc_unlocked F - fputws F - fputws_unlocked F - fread F - fread_unlocked F - free F - freeaddrinfo F - freeifaddrs F - freelocale F - fremovexattr F - freopen F - freopen64 F - frexp F - frexpf F - frexpl F - fscanf F - fseek F - fseeko F - fseeko64 F - fsetpos F - fsetpos64 F - fsetxattr F - fstatfs F - fstatfs64 F - fstatvfs F - fstatvfs64 F - fsync F - ftell F - ftello F - ftello64 F - ftime F - ftok F - ftruncate F - ftruncate64 F - ftrylockfile F - fts_children F - fts_close F - fts_open F - fts_read F - fts_set F - ftw F - ftw64 F - funlockfile F - futimes F - futimesat F - fwide F - fwprintf F - fwrite F - fwrite_unlocked F - fwscanf F - gai_strerror F - gcvt F - get_avphys_pages F - get_current_dir_name F - get_kernel_syms F - get_myaddress F - get_nprocs F - get_nprocs_conf F - get_phys_pages F - getaddrinfo F - getaliasbyname F - getaliasbyname_r F - getaliasent F - getaliasent_r F - getc F - getc_unlocked F - getchar F - getchar_unlocked F - getcontext F - getcwd F - getdate F - getdate_err D 0x4 - getdate_r F - getdelim F - getdirentries F - getdirentries64 F - getdomainname F - getdtablesize F - getegid F - getenv F - geteuid F - getfsent F - getfsfile F - getfsspec F - getgid F - getgrent F - getgrent_r F - getgrgid F - getgrgid_r F - getgrnam F - getgrnam_r F - getgrouplist F - getgroups F - gethostbyaddr F - gethostbyaddr_r F - gethostbyname F - gethostbyname2 F - gethostbyname2_r F - gethostbyname_r F - gethostent F - gethostent_r F - gethostid F - gethostname F - getifaddrs F - getipv4sourcefilter F - getitimer F - getline F - getloadavg F - getlogin F - getlogin_r F - getmntent F - getmntent_r F - getmsg F - getnameinfo F - getnetbyaddr F - getnetbyaddr_r F - getnetbyname F - getnetbyname_r F - getnetent F - getnetent_r F - getnetgrent F - getnetgrent_r F - getnetname F - getopt F - getopt_long F - getopt_long_only F - getpagesize F - getpass F - getpeername F - getpgid F - getpgrp F - getpid F - getpmsg F - getppid F - getpriority F - getprotobyname F - getprotobyname_r F - getprotobynumber F - getprotobynumber_r F - getprotoent F - getprotoent_r F - getpt F - getpublickey F - getpw F - getpwent F - getpwent_r F - getpwnam F - getpwnam_r F - getpwuid F - getpwuid_r F - getresgid F - getresuid F - getrlimit F - getrlimit64 F - getrpcbyname F - getrpcbyname_r F - getrpcbynumber F - getrpcbynumber_r F - getrpcent F - getrpcent_r F - getrpcport F - getrusage F - gets F - getsecretkey F - getservbyname F - getservbyname_r F - getservbyport F - getservbyport_r F - getservent F - getservent_r F - getsid F - getsockname F - getsockopt F - getsourcefilter F - getspent F - getspent_r F - getspnam F - getspnam_r F - getsubopt F - gettext F - gettimeofday F - getttyent F - getttynam F - getuid F - getusershell F - getutent F - getutent_r F - getutid F - getutid_r F - getutline F - getutline_r F - getutmp F - getutmpx F - getutxent F - getutxid F - getutxline F - getw F - getwc F - getwc_unlocked F - getwchar F - getwchar_unlocked F - getwd F - getxattr F - glob F - glob64 F - glob_pattern_p F - globfree F - globfree64 F - gmtime F - gmtime_r F - gnu_dev_major F - gnu_dev_makedev F - gnu_dev_minor F - gnu_get_libc_release F - gnu_get_libc_version F - grantpt F - group_member F - gsignal F - gtty F - h_errlist D 0x14 - h_nerr D 0x4 - hasmntopt F - hcreate F - hcreate_r F - hdestroy F - hdestroy_r F - herror F - host2netname F - hsearch F - hsearch_r F - hstrerror F - htonl F - htons F - iconv F - iconv_close F - iconv_open F - if_freenameindex F - if_indextoname F - if_nameindex F - if_nametoindex F - imaxabs F - imaxdiv F - in6addr_any D 0x10 - in6addr_loopback D 0x10 - inb F - index F - inet6_option_alloc F - inet6_option_append F - inet6_option_find F - inet6_option_init F - inet6_option_next F - inet6_option_space F - inet_addr F - inet_aton F - inet_lnaof F - inet_makeaddr F - inet_netof F - inet_network F - inet_nsap_addr F - inet_nsap_ntoa F - inet_ntoa F - inet_ntop F - inet_pton F - init_module F - initgroups F - initstate F - initstate_r F - inl F - innetgr F - inotify_add_watch F - inotify_init F - inotify_rm_watch F - insque F - inw F - ioctl F - ioperm F - iopl F - iruserok F - iruserok_af F - isalnum F - isalnum_l F - isalpha F - isalpha_l F - isascii F - isastream F - isatty F - isblank F - isblank_l F - iscntrl F - iscntrl_l F - isctype F - isdigit F - isdigit_l F - isfdtype F - isgraph F - isgraph_l F - isinf F - isinff F - isinfl F - islower F - islower_l F - isnan F - isnanf F - isnanl F - isprint F - isprint_l F - ispunct F - ispunct_l F - isspace F - isspace_l F - isupper F - isupper_l F - iswalnum F - iswalnum_l F - iswalpha F - iswalpha_l F - iswblank F - iswblank_l F - iswcntrl F - iswcntrl_l F - iswctype F - iswctype_l F - iswdigit F - iswdigit_l F - iswgraph F - iswgraph_l F - iswlower F - iswlower_l F - iswprint F - iswprint_l F - iswpunct F - iswpunct_l F - iswspace F - iswspace_l F - iswupper F - iswupper_l F - iswxdigit F - iswxdigit_l F - isxdigit F - isxdigit_l F - jrand48 F - jrand48_r F - key_decryptsession F - key_decryptsession_pk F - key_encryptsession F - key_encryptsession_pk F - key_gendes F - key_get_conv F - key_secretkey_is_set F - key_setnet F - key_setsecret F - kill F - killpg F - klogctl F - l64a F - labs F - lchmod F - lchown F - lckpwdf F - lcong48 F - lcong48_r F - ldexp F - ldexpf F - ldexpl F - ldiv F - lfind F - lgetxattr F - link F - linkat F - listen F - listxattr F - llabs F - lldiv F - llistxattr F - llseek F - loc1 D 0x4 - loc2 D 0x4 - localeconv F - localtime F - localtime_r F - lockf F - lockf64 F - locs D 0x4 - longjmp F - lrand48 F - lrand48_r F - lremovexattr F - lsearch F - lseek F - lseek64 F - lsetxattr F - lutimes F - madvise F - makecontext F - mallinfo F - malloc F - malloc_get_state F - malloc_set_state F - malloc_stats F - malloc_trim F - malloc_usable_size F - mallopt F - mallwatch D 0x4 - mblen F - mbrlen F - mbrtowc F - mbsinit F - mbsnrtowcs F - mbsrtowcs F - mbstowcs F - mbtowc F - mcheck F - mcheck_check_all F - mcheck_pedantic F - mcount F - memalign F - memccpy F - memchr F - memcmp F - memcpy F - memfrob F - memmem F - memmove F - mempcpy F - memrchr F - memset F - mincore F - mkdir F - mkdirat F - mkdtemp F - mkfifo F - mkfifoat F - mkstemp F - mkstemp64 F - mktemp F - mktime F - mlock F - mlockall F - mmap F - mmap64 F - modf F - modff F - modfl F - moncontrol F - monstartup F - mount F - mprobe F - mprotect F - mrand48 F - mrand48_r F - mremap F - msgctl F - msgget F - msgrcv F - msgsnd F - msync F - mtrace F - munlock F - munlockall F - munmap F - muntrace F - nanosleep F - netname2host F - netname2user F - newlocale F - nfsservctl F - nftw F - nftw64 F - ngettext F - nice F - nl_langinfo F - nl_langinfo_l F - nrand48 F - nrand48_r F - ntohl F - ntohs F - ntp_adjtime F - ntp_gettime F - obstack_alloc_failed_handler D 0x4 - obstack_exit_failure D 0x4 - obstack_free F - obstack_printf F - obstack_vprintf F - on_exit F - open F - open64 F - open_memstream F - open_wmemstream F - openat F - openat64 F - opendir F - openlog F - optarg D 0x4 - opterr D 0x4 - optind D 0x4 - optopt D 0x4 - outb F - outl F - outw F - parse_printf_format F - passwd2des F - pathconf F - pause F - pclose F - perror F - personality F - pipe F - pivot_root F - pmap_getmaps F - pmap_getport F - pmap_rmtcall F - pmap_set F - pmap_unset F - poll F - popen F - posix_fadvise F - posix_fadvise64 F - posix_fallocate F - posix_fallocate64 F - posix_madvise F - posix_memalign F - posix_openpt F - posix_spawn F - posix_spawn_file_actions_addclose F - posix_spawn_file_actions_adddup2 F - posix_spawn_file_actions_addopen F - posix_spawn_file_actions_destroy F - posix_spawn_file_actions_init F - posix_spawnattr_destroy F - posix_spawnattr_getflags F - posix_spawnattr_getpgroup F - posix_spawnattr_getschedparam F - posix_spawnattr_getschedpolicy F - posix_spawnattr_getsigdefault F - posix_spawnattr_getsigmask F - posix_spawnattr_init F - posix_spawnattr_setflags F - posix_spawnattr_setpgroup F - posix_spawnattr_setschedparam F - posix_spawnattr_setschedpolicy F - posix_spawnattr_setsigdefault F - posix_spawnattr_setsigmask F - posix_spawnp F - ppoll F - prctl F - pread F - pread64 F - printf F - printf_size F - printf_size_info F - profil F - profil_counter F - program_invocation_name D 0x4 - program_invocation_short_name D 0x4 - pselect F - psignal F - pthread_attr_destroy F - pthread_attr_getdetachstate F - pthread_attr_getinheritsched F - pthread_attr_getschedparam F - pthread_attr_getschedpolicy F - pthread_attr_getscope F - pthread_attr_init F - pthread_attr_setdetachstate F - pthread_attr_setinheritsched F - pthread_attr_setschedparam F - pthread_attr_setschedpolicy F - pthread_attr_setscope F - pthread_cond_broadcast F - pthread_cond_destroy F - pthread_cond_init F - pthread_cond_signal F - pthread_cond_timedwait F - pthread_cond_wait F - pthread_condattr_destroy F - pthread_condattr_init F - pthread_equal F - pthread_exit F - pthread_getschedparam F - pthread_mutex_destroy F - pthread_mutex_init F - pthread_mutex_lock F - pthread_mutex_unlock F - pthread_self F - pthread_setcancelstate F - pthread_setcanceltype F - pthread_setschedparam F - ptrace F - ptsname F - ptsname_r F - putc F - putc_unlocked F - putchar F - putchar_unlocked F - putenv F - putgrent F - putmsg F - putpmsg F - putpwent F - puts F - putspent F - pututline F - pututxline F - putw F - putwc F - putwc_unlocked F - putwchar F - putwchar_unlocked F - pvalloc F - pwrite F - pwrite64 F - qecvt F - qecvt_r F - qfcvt F - qfcvt_r F - qgcvt F - qsort F - query_module F - quotactl F - raise F - rand F - rand_r F - random F - random_r F - rawmemchr F - rcmd F - rcmd_af F - re_comp F - re_compile_fastmap F - re_compile_pattern F - re_exec F - re_match F - re_match_2 F - re_search F - re_search_2 F - re_set_registers F - re_set_syntax F - re_syntax_options D 0x4 - read F - readahead F - readdir F - readdir64 F - readdir64_r F - readdir_r F - readlink F - readlinkat F - readv F - realloc F - realpath F - reboot F - recv F - recvfrom F - recvmsg F - regcomp F - regerror F - regexec F - regfree F - register_printf_function F - registerrpc F - remap_file_pages F - remove F - removexattr F - remque F - rename F - renameat F - revoke F - rewind F - rewinddir F - rexec F - rexec_af F - rexecoptions D 0x4 - rindex F - rmdir F - rpc_createerr D 0x10 - rpmatch F - rresvport F - rresvport_af F - rtime F - ruserok F - ruserok_af F - ruserpass F - sbrk F - scalbn F - scalbnf F - scalbnl F - scandir F - scandir64 F - scanf F - sched_get_priority_max F - sched_get_priority_min F - sched_getaffinity F - sched_getparam F - sched_getscheduler F - sched_rr_get_interval F - sched_setaffinity F - sched_setparam F - sched_setscheduler F - sched_yield F - seed48 F - seed48_r F - seekdir F - select F - semctl F - semget F - semop F - semtimedop F - send F - sendfile F - sendfile64 F - sendmsg F - sendto F - setaliasent F - setbuf F - setbuffer F - setcontext F - setdomainname F - setegid F - setenv F - seteuid F - setfsent F - setfsgid F - setfsuid F - setgid F - setgrent F - setgroups F - sethostent F - sethostid F - sethostname F - setipv4sourcefilter F - setitimer F - setjmp F - setlinebuf F - setlocale F - setlogin F - setlogmask F - setmntent F - setnetent F - setnetgrent F - setpgid F - setpgrp F - setpriority F - setprotoent F - setpwent F - setregid F - setresgid F - setresuid F - setreuid F - setrlimit F - setrlimit64 F - setrpcent F - setservent F - setsid F - setsockopt F - setsourcefilter F - setspent F - setstate F - setstate_r F - settimeofday F - setttyent F - setuid F - setusershell F - setutent F - setutxent F - setvbuf F - setxattr F - sgetspent F - sgetspent_r F - shmat F - shmctl F - shmdt F - shmget F - shutdown F - sigaction F - sigaddset F - sigaltstack F - sigandset F - sigblock F - sigdelset F - sigemptyset F - sigfillset F - siggetmask F - sighold F - sigignore F - siginterrupt F - sigisemptyset F - sigismember F - siglongjmp F - signal F - sigorset F - sigpause F - sigpending F - sigprocmask F - sigqueue F - sigrelse F - sigreturn F - sigset F - sigsetmask F - sigstack F - sigsuspend F - sigtimedwait F - sigvec F - sigwait F - sigwaitinfo F - sleep F - snprintf F - sockatmark F - socket F - socketpair F - sprintf F - sprofil F - srand F - srand48 F - srand48_r F - srandom F - srandom_r F - sscanf F - ssignal F - sstk F - statfs F - statfs64 F - statvfs F - statvfs64 F - stderr D 0x4 - stdin D 0x4 - stdout D 0x4 - step F - stime F - stpcpy F - stpncpy F - strcasecmp F - strcasecmp_l F - strcasestr F - strcat F - strchr F - strchrnul F - strcmp F - strcoll F - strcoll_l F - strcpy F - strcspn F - strdup F - strerror F - strerror_r F - strfmon F - strfmon_l F - strfry F - strftime F - strftime_l F - strlen F - strncasecmp F - strncasecmp_l F - strncat F - strncmp F - strncpy F - strndup F - strnlen F - strpbrk F - strptime F - strptime_l F - strrchr F - strsep F - strsignal F - strspn F - strstr F - strtod F - strtod_l F - strtof F - strtof_l F - strtoimax F - strtok F - strtok_r F - strtol F - strtol_l F - strtold F - strtold_l F - strtoll F - strtoll_l F - strtoq F - strtoul F - strtoul_l F - strtoull F - strtoull_l F - strtoumax F - strtouq F - strverscmp F - strxfrm F - strxfrm_l F - stty F - svc_exit F - svc_fdset D 0x80 - svc_getreq F - svc_getreq_common F - svc_getreq_poll F - svc_getreqset F - svc_max_pollfd D 0x4 - svc_pollfd D 0x4 - svc_register F - svc_run F - svc_sendreply F - svc_unregister F - svcauthdes_stats D 0xc - svcerr_auth F - svcerr_decode F - svcerr_noproc F - svcerr_noprog F - svcerr_progvers F - svcerr_systemerr F - svcerr_weakauth F - svcfd_create F - svcraw_create F - svctcp_create F - svcudp_bufcreate F - svcudp_create F - svcudp_enablecache F - svcunix_create F - svcunixfd_create F - swab F - swapcontext F - swapoff F - swapon F - swprintf F - swscanf F - symlink F - symlinkat F - sync F - sys_errlist D 0x210 - sys_nerr D 0x4 - sys_sigabbrev D 0x104 - sys_siglist D 0x104 - syscall F - sysconf F - sysctl F - sysinfo F - syslog F - system F - sysv_signal F - tcdrain F - tcflow F - tcflush F - tcgetattr F - tcgetpgrp F - tcgetsid F - tcsendbreak F - tcsetattr F - tcsetpgrp F - tdelete F - tdestroy F - telldir F - tempnam F - textdomain F - tfind F - time F - timegm F - timelocal F - times F - timezone D 0x4 - tmpfile F - tmpfile64 F - tmpnam F - tmpnam_r F - toascii F - tolower F - tolower_l F - toupper F - toupper_l F - towctrans F - towctrans_l F - towlower F - towlower_l F - towupper F - towupper_l F - tr_break F - truncate F - truncate64 F - tsearch F - ttyname F - ttyname_r F - ttyslot F - twalk F - tzname D 0x8 - tzset F - ualarm F - ulckpwdf F - ulimit F - umask F - umount F - umount2 F - uname F - ungetc F - ungetwc F - unlink F - unlinkat F - unlockpt F - unsetenv F - unshare F - updwtmp F - updwtmpx F - uselib F - uselocale F - user2netname F - usleep F - ustat F - utime F - utimes F - utmpname F - utmpxname F - valloc F - vasprintf F - vdprintf F - verr F - verrx F - versionsort F - versionsort64 F - vfork F - vfprintf F - vfscanf F - vfwprintf F - vfwscanf F - vhangup F - vlimit F - vprintf F - vscanf F - vsnprintf F - vsprintf F - vsscanf F - vswprintf F - vswscanf F - vsyslog F - vtimes F - vwarn F - vwarnx F - vwprintf F - vwscanf F - wait F - wait3 F - wait4 F - waitid F - waitpid F - warn F - warnx F - wcpcpy F - wcpncpy F - wcrtomb F - wcscasecmp F - wcscasecmp_l F - wcscat F - wcschr F - wcschrnul F - wcscmp F - wcscoll F - wcscoll_l F - wcscpy F - wcscspn F - wcsdup F - wcsftime F - wcsftime_l F - wcslen F - wcsncasecmp F - wcsncasecmp_l F - wcsncat F - wcsncmp F - wcsncpy F - wcsnlen F - wcsnrtombs F - wcspbrk F - wcsrchr F - wcsrtombs F - wcsspn F - wcsstr F - wcstod F - wcstod_l F - wcstof F - wcstof_l F - wcstoimax F - wcstok F - wcstol F - wcstol_l F - wcstold F - wcstold_l F - wcstoll F - wcstoll_l F - wcstombs F - wcstoq F - wcstoul F - wcstoul_l F - wcstoull F - wcstoull_l F - wcstoumax F - wcstouq F - wcswcs F - wcswidth F - wcsxfrm F - wcsxfrm_l F - wctob F - wctomb F - wctrans F - wctrans_l F - wctype F - wctype_l F - wcwidth F - wmemchr F - wmemcmp F - wmemcpy F - wmemmove F - wmempcpy F - wmemset F - wordexp F - wordfree F - wprintf F - write F - writev F - wscanf F - xdecrypt F - xdr_accepted_reply F - xdr_array F - xdr_authdes_cred F - xdr_authdes_verf F - xdr_authunix_parms F - xdr_bool F - xdr_bytes F - xdr_callhdr F - xdr_callmsg F - xdr_char F - xdr_cryptkeyarg F - xdr_cryptkeyarg2 F - xdr_cryptkeyres F - xdr_des_block F - xdr_double F - xdr_enum F - xdr_float F - xdr_free F - xdr_getcredres F - xdr_hyper F - xdr_int F - xdr_int16_t F - xdr_int32_t F - xdr_int64_t F - xdr_int8_t F - xdr_key_netstarg F - xdr_key_netstres F - xdr_keybuf F - xdr_keystatus F - xdr_long F - xdr_longlong_t F - xdr_netnamestr F - xdr_netobj F - xdr_opaque F - xdr_opaque_auth F - xdr_pmap F - xdr_pmaplist F - xdr_pointer F - xdr_quad_t F - xdr_reference F - xdr_rejected_reply F - xdr_replymsg F - xdr_rmtcall_args F - xdr_rmtcallres F - xdr_short F - xdr_sizeof F - xdr_string F - xdr_u_char F - xdr_u_hyper F - xdr_u_int F - xdr_u_long F - xdr_u_longlong_t F - xdr_u_quad_t F - xdr_u_short F - xdr_uint16_t F - xdr_uint32_t F - xdr_uint64_t F - xdr_uint8_t F - xdr_union F - xdr_unixcred F - xdr_vector F - xdr_void F - xdr_wrapstring F - xdrmem_create F - xdrrec_create F - xdrrec_endofrecord F - xdrrec_eof F - xdrrec_skiprecord F - xdrstdio_create F - xencrypt F - xprt_register F - xprt_unregister F -GLIBC_2.5 - GLIBC_2.5 A - __readlinkat_chk F - inet6_opt_append F - inet6_opt_find F - inet6_opt_finish F - inet6_opt_get_val F - inet6_opt_init F - inet6_opt_next F - inet6_opt_set_val F - inet6_rth_add F - inet6_rth_getaddr F - inet6_rth_init F - inet6_rth_reverse F - inet6_rth_segments F - inet6_rth_space F - splice F - tee F - vmsplice F -GLIBC_2.6 - GLIBC_2.6 A - __sched_cpucount F - epoll_pwait F - futimens F - sched_getcpu F - strerror_l F - sync_file_range F - utimensat F -GLIBC_2.7 - GLIBC_2.7 A - __fread_chk F - __fread_unlocked_chk F - __isoc99_fscanf F - __isoc99_fwscanf F - __isoc99_scanf F - __isoc99_sscanf F - __isoc99_swscanf F - __isoc99_vfscanf F - __isoc99_vfwscanf F - __isoc99_vscanf F - __isoc99_vsscanf F - __isoc99_vswscanf F - __isoc99_vwscanf F - __isoc99_wscanf F - __open64_2 F - __open_2 F - __openat64_2 F - __openat_2 F - __sched_cpualloc F - __sched_cpufree F - eventfd F - eventfd_read F - eventfd_write F - mkostemp F - mkostemp64 F - signalfd F -GLIBC_2.8 - GLIBC_2.8 A - __asprintf_chk F - __dprintf_chk F - __gnu_mcount_nc F - __obstack_printf_chk F - __obstack_vprintf_chk F - __vasprintf_chk F - __vdprintf_chk F - qsort_r F - timerfd_create F - timerfd_gettime F - timerfd_settime F -GLIBC_2.9 - GLIBC_2.9 A - dup3 F - epoll_create1 F - inotify_init1 F - pipe2 F diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/libcrypt.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/libcrypt.abilist deleted file mode 100644 index 8c874edffe..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/libcrypt.abilist +++ /dev/null @@ -1,9 +0,0 @@ -GLIBC_2.4 - GLIBC_2.4 A - crypt F - crypt_r F - encrypt F - encrypt_r F - fcrypt F - setkey F - setkey_r F diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/libdl.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/libdl.abilist deleted file mode 100644 index 7f3ebed31d..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/libdl.abilist +++ /dev/null @@ -1,11 +0,0 @@ -GLIBC_2.4 - GLIBC_2.4 A - dladdr F - dladdr1 F - dlclose F - dlerror F - dlinfo F - dlmopen F - dlopen F - dlsym F - dlvsym F diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/libm.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/libm.abilist deleted file mode 100644 index 614e5ebe5c..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/libm.abilist +++ /dev/null @@ -1,374 +0,0 @@ -GLIBC_2.15 - GLIBC_2.15 A - __acos_finite F - __acosf_finite F - __acosh_finite F - __acoshf_finite F - __asin_finite F - __asinf_finite F - __atan2_finite F - __atan2f_finite F - __atanh_finite F - __atanhf_finite F - __cosh_finite F - __coshf_finite F - __exp10_finite F - __exp10f_finite F - __exp2_finite F - __exp2f_finite F - __exp_finite F - __expf_finite F - __fmod_finite F - __fmodf_finite F - __gamma_r_finite F - __gammaf_r_finite F - __hypot_finite F - __hypotf_finite F - __j0_finite F - __j0f_finite F - __j1_finite F - __j1f_finite F - __jn_finite F - __jnf_finite F - __lgamma_r_finite F - __lgammaf_r_finite F - __log10_finite F - __log10f_finite F - __log2_finite F - __log2f_finite F - __log_finite F - __logf_finite F - __pow_finite F - __powf_finite F - __remainder_finite F - __remainderf_finite F - __scalb_finite F - __scalbf_finite F - __sinh_finite F - __sinhf_finite F - __sqrt_finite F - __sqrtf_finite F - __y0_finite F - __y0f_finite F - __y1_finite F - __y1f_finite F - __yn_finite F - __ynf_finite F -GLIBC_2.18 - GLIBC_2.18 A - __issignaling F - __issignalingf F -GLIBC_2.4 - GLIBC_2.4 A - _LIB_VERSION D 0x4 - __clog10 F - __clog10f F - __clog10l F - __finite F - __finitef F - __finitel F - __fpclassify F - __fpclassifyf F - __signbit F - __signbitf F - acos F - acosf F - acosh F - acoshf F - acoshl F - acosl F - asin F - asinf F - asinh F - asinhf F - asinhl F - asinl F - atan F - atan2 F - atan2f F - atan2l F - atanf F - atanh F - atanhf F - atanhl F - atanl F - cabs F - cabsf F - cabsl F - cacos F - cacosf F - cacosh F - cacoshf F - cacoshl F - cacosl F - carg F - cargf F - cargl F - casin F - casinf F - casinh F - casinhf F - casinhl F - casinl F - catan F - catanf F - catanh F - catanhf F - catanhl F - catanl F - cbrt F - cbrtf F - cbrtl F - ccos F - ccosf F - ccosh F - ccoshf F - ccoshl F - ccosl F - ceil F - ceilf F - ceill F - cexp F - cexpf F - cexpl F - cimag F - cimagf F - cimagl F - clog F - clog10 F - clog10f F - clog10l F - clogf F - clogl F - conj F - conjf F - conjl F - copysign F - copysignf F - copysignl F - cos F - cosf F - cosh F - coshf F - coshl F - cosl F - cpow F - cpowf F - cpowl F - cproj F - cprojf F - cprojl F - creal F - crealf F - creall F - csin F - csinf F - csinh F - csinhf F - csinhl F - csinl F - csqrt F - csqrtf F - csqrtl F - ctan F - ctanf F - ctanh F - ctanhf F - ctanhl F - ctanl F - drem F - dremf F - dreml F - erf F - erfc F - erfcf F - erfcl F - erff F - erfl F - exp F - exp10 F - exp10f F - exp10l F - exp2 F - exp2f F - exp2l F - expf F - expl F - expm1 F - expm1f F - expm1l F - fabs F - fabsf F - fabsl F - fdim F - fdimf F - fdiml F - feclearexcept F - fedisableexcept F - feenableexcept F - fegetenv F - fegetexcept F - fegetexceptflag F - fegetround F - feholdexcept F - feraiseexcept F - fesetenv F - fesetexceptflag F - fesetround F - fetestexcept F - feupdateenv F - finite F - finitef F - finitel F - floor F - floorf F - floorl F - fma F - fmaf F - fmal F - fmax F - fmaxf F - fmaxl F - fmin F - fminf F - fminl F - fmod F - fmodf F - fmodl F - frexp F - frexpf F - frexpl F - gamma F - gammaf F - gammal F - hypot F - hypotf F - hypotl F - ilogb F - ilogbf F - ilogbl F - j0 F - j0f F - j0l F - j1 F - j1f F - j1l F - jn F - jnf F - jnl F - ldexp F - ldexpf F - ldexpl F - lgamma F - lgamma_r F - lgammaf F - lgammaf_r F - lgammal F - lgammal_r F - llrint F - llrintf F - llrintl F - llround F - llroundf F - llroundl F - log F - log10 F - log10f F - log10l F - log1p F - log1pf F - log1pl F - log2 F - log2f F - log2l F - logb F - logbf F - logbl F - logf F - logl F - lrint F - lrintf F - lrintl F - lround F - lroundf F - lroundl F - matherr F - modf F - modff F - modfl F - nan F - nanf F - nanl F - nearbyint F - nearbyintf F - nearbyintl F - nextafter F - nextafterf F - nextafterl F - nexttoward F - nexttowardf F - nexttowardl F - pow F - pow10 F - pow10f F - pow10l F - powf F - powl F - remainder F - remainderf F - remainderl F - remquo F - remquof F - remquol F - rint F - rintf F - rintl F - round F - roundf F - roundl F - scalb F - scalbf F - scalbl F - scalbln F - scalblnf F - scalblnl F - scalbn F - scalbnf F - scalbnl F - signgam D 0x4 - significand F - significandf F - significandl F - sin F - sincos F - sincosf F - sincosl F - sinf F - sinh F - sinhf F - sinhl F - sinl F - sqrt F - sqrtf F - sqrtl F - tan F - tanf F - tanh F - tanhf F - tanhl F - tanl F - tgamma F - tgammaf F - tgammal F - trunc F - truncf F - truncl F - y0 F - y0f F - y0l F - y1 F - y1f F - y1l F - yn F - ynf F - ynl F diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/libnsl.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/libnsl.abilist deleted file mode 100644 index 1d2670c444..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/libnsl.abilist +++ /dev/null @@ -1,123 +0,0 @@ -GLIBC_2.4 - GLIBC_2.4 A - __free_fdresult F - __nis_default_access F - __nis_default_group F - __nis_default_owner F - __nis_default_ttl F - __nis_finddirectory F - __nis_hash F - __nisbind_connect F - __nisbind_create F - __nisbind_destroy F - __nisbind_next F - __yp_check F - nis_add F - nis_add_entry F - nis_addmember F - nis_checkpoint F - nis_clone_directory F - nis_clone_object F - nis_clone_result F - nis_creategroup F - nis_destroy_object F - nis_destroygroup F - nis_dir_cmp F - nis_domain_of F - nis_domain_of_r F - nis_first_entry F - nis_free_directory F - nis_free_object F - nis_free_request F - nis_freenames F - nis_freeresult F - nis_freeservlist F - nis_freetags F - nis_getnames F - nis_getservlist F - nis_ismember F - nis_leaf_of F - nis_leaf_of_r F - nis_lerror F - nis_list F - nis_local_directory F - nis_local_group F - nis_local_host F - nis_local_principal F - nis_lookup F - nis_mkdir F - nis_modify F - nis_modify_entry F - nis_name_of F - nis_name_of_r F - nis_next_entry F - nis_perror F - nis_ping F - nis_print_directory F - nis_print_entry F - nis_print_group F - nis_print_group_entry F - nis_print_link F - nis_print_object F - nis_print_result F - nis_print_rights F - nis_print_table F - nis_read_obj F - nis_remove F - nis_remove_entry F - nis_removemember F - nis_rmdir F - nis_servstate F - nis_sperrno F - nis_sperror F - nis_sperror_r F - nis_stats F - nis_verifygroup F - nis_write_obj F - readColdStartFile F - writeColdStartFile F - xdr_cback_data F - xdr_domainname F - xdr_keydat F - xdr_mapname F - xdr_obj_p F - xdr_peername F - xdr_valdat F - xdr_yp_buf F - xdr_ypall F - xdr_ypbind_binding F - xdr_ypbind_resp F - xdr_ypbind_resptype F - xdr_ypbind_setdom F - xdr_ypdelete_args F - xdr_ypmap_parms F - xdr_ypmaplist F - xdr_yppush_status F - xdr_yppushresp_xfr F - xdr_ypreq_key F - xdr_ypreq_nokey F - xdr_ypreq_xfr F - xdr_ypresp_all F - xdr_ypresp_key_val F - xdr_ypresp_maplist F - xdr_ypresp_master F - xdr_ypresp_order F - xdr_ypresp_val F - xdr_ypresp_xfr F - xdr_ypstat F - xdr_ypupdate_args F - xdr_ypxfrstat F - yp_all F - yp_bind F - yp_first F - yp_get_default_domain F - yp_maplist F - yp_master F - yp_match F - yp_next F - yp_order F - yp_unbind F - yp_update F - ypbinderr_string F - yperr_string F - ypprot_err F diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/libpthread.abilist deleted file mode 100644 index ac46302bc7..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/libpthread.abilist +++ /dev/null @@ -1,232 +0,0 @@ -GLIBC_2.11 - GLIBC_2.11 A - pthread_sigqueue F -GLIBC_2.12 - GLIBC_2.12 A - pthread_getname_np F - pthread_mutex_consistent F - pthread_mutexattr_getrobust F - pthread_mutexattr_setrobust F - pthread_setname_np F -GLIBC_2.18 - GLIBC_2.18 A - pthread_getattr_default_np F - pthread_setattr_default_np F -GLIBC_2.4 - GLIBC_2.4 A - _IO_flockfile F - _IO_ftrylockfile F - _IO_funlockfile F - __close F - __connect F - __errno_location F - __fcntl F - __fork F - __h_errno_location F - __libc_allocate_rtsig F - __libc_current_sigrtmax F - __libc_current_sigrtmin F - __lseek F - __nanosleep F - __open F - __open64 F - __pread64 F - __pthread_cleanup_routine F - __pthread_getspecific F - __pthread_key_create F - __pthread_mutex_destroy F - __pthread_mutex_init F - __pthread_mutex_lock F - __pthread_mutex_trylock F - __pthread_mutex_unlock F - __pthread_mutexattr_destroy F - __pthread_mutexattr_init F - __pthread_mutexattr_settype F - __pthread_once F - __pthread_register_cancel F - __pthread_register_cancel_defer F - __pthread_rwlock_destroy F - __pthread_rwlock_init F - __pthread_rwlock_rdlock F - __pthread_rwlock_tryrdlock F - __pthread_rwlock_trywrlock F - __pthread_rwlock_unlock F - __pthread_rwlock_wrlock F - __pthread_setspecific F - __pthread_unregister_cancel F - __pthread_unregister_cancel_restore F - __pthread_unwind_next F - __pwrite64 F - __read F - __res_state F - __send F - __sigaction F - __vfork F - __wait F - __write F - _pthread_cleanup_pop F - _pthread_cleanup_pop_restore F - _pthread_cleanup_push F - _pthread_cleanup_push_defer F - accept F - close F - connect F - fcntl F - flockfile F - fork F - fsync F - ftrylockfile F - funlockfile F - longjmp F - lseek F - lseek64 F - msync F - nanosleep F - open F - open64 F - pause F - pread F - pread64 F - pthread_attr_destroy F - pthread_attr_getaffinity_np F - pthread_attr_getdetachstate F - pthread_attr_getguardsize F - pthread_attr_getinheritsched F - pthread_attr_getschedparam F - pthread_attr_getschedpolicy F - pthread_attr_getscope F - pthread_attr_getstack F - pthread_attr_getstackaddr F - pthread_attr_getstacksize F - pthread_attr_init F - pthread_attr_setaffinity_np F - pthread_attr_setdetachstate F - pthread_attr_setguardsize F - pthread_attr_setinheritsched F - pthread_attr_setschedparam F - pthread_attr_setschedpolicy F - pthread_attr_setscope F - pthread_attr_setstack F - pthread_attr_setstackaddr F - pthread_attr_setstacksize F - pthread_barrier_destroy F - pthread_barrier_init F - pthread_barrier_wait F - pthread_barrierattr_destroy F - pthread_barrierattr_getpshared F - pthread_barrierattr_init F - pthread_barrierattr_setpshared F - pthread_cancel F - pthread_cond_broadcast F - pthread_cond_destroy F - pthread_cond_init F - pthread_cond_signal F - pthread_cond_timedwait F - pthread_cond_wait F - pthread_condattr_destroy F - pthread_condattr_getclock F - pthread_condattr_getpshared F - pthread_condattr_init F - pthread_condattr_setclock F - pthread_condattr_setpshared F - pthread_create F - pthread_detach F - pthread_equal F - pthread_exit F - pthread_getaffinity_np F - pthread_getattr_np F - pthread_getconcurrency F - pthread_getcpuclockid F - pthread_getschedparam F - pthread_getspecific F - pthread_join F - pthread_key_create F - pthread_key_delete F - pthread_kill F - pthread_kill_other_threads_np F - pthread_mutex_consistent_np F - pthread_mutex_destroy F - pthread_mutex_getprioceiling F - pthread_mutex_init F - pthread_mutex_lock F - pthread_mutex_setprioceiling F - pthread_mutex_timedlock F - pthread_mutex_trylock F - pthread_mutex_unlock F - pthread_mutexattr_destroy F - pthread_mutexattr_getkind_np F - pthread_mutexattr_getprioceiling F - pthread_mutexattr_getprotocol F - pthread_mutexattr_getpshared F - pthread_mutexattr_getrobust_np F - pthread_mutexattr_gettype F - pthread_mutexattr_init F - pthread_mutexattr_setkind_np F - pthread_mutexattr_setprioceiling F - pthread_mutexattr_setprotocol F - pthread_mutexattr_setpshared F - pthread_mutexattr_setrobust_np F - pthread_mutexattr_settype F - pthread_once F - pthread_rwlock_destroy F - pthread_rwlock_init F - pthread_rwlock_rdlock F - pthread_rwlock_timedrdlock F - pthread_rwlock_timedwrlock F - pthread_rwlock_tryrdlock F - pthread_rwlock_trywrlock F - pthread_rwlock_unlock F - pthread_rwlock_wrlock F - pthread_rwlockattr_destroy F - pthread_rwlockattr_getkind_np F - pthread_rwlockattr_getpshared F - pthread_rwlockattr_init F - pthread_rwlockattr_setkind_np F - pthread_rwlockattr_setpshared F - pthread_self F - pthread_setaffinity_np F - pthread_setcancelstate F - pthread_setcanceltype F - pthread_setconcurrency F - pthread_setschedparam F - pthread_setschedprio F - pthread_setspecific F - pthread_sigmask F - pthread_spin_destroy F - pthread_spin_init F - pthread_spin_lock F - pthread_spin_trylock F - pthread_spin_unlock F - pthread_testcancel F - pthread_timedjoin_np F - pthread_tryjoin_np F - pthread_yield F - pwrite F - pwrite64 F - raise F - read F - recv F - recvfrom F - recvmsg F - sem_close F - sem_destroy F - sem_getvalue F - sem_init F - sem_open F - sem_post F - sem_timedwait F - sem_trywait F - sem_unlink F - sem_wait F - send F - sendmsg F - sendto F - sigaction F - siglongjmp F - sigwait F - system F - tcdrain F - vfork F - wait F - waitpid F - write F diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/libresolv.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/libresolv.abilist deleted file mode 100644 index e781f2f822..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/libresolv.abilist +++ /dev/null @@ -1,95 +0,0 @@ -GLIBC_2.4 - GLIBC_2.4 A - __b64_ntop F - __b64_pton F - __dn_comp F - __dn_count_labels F - __dn_expand F - __dn_skipname F - __fp_nquery F - __fp_query F - __fp_resstat F - __hostalias F - __loc_aton F - __loc_ntoa F - __p_cdname F - __p_cdnname F - __p_class F - __p_class_syms D 0x54 - __p_fqname F - __p_fqnname F - __p_option F - __p_query F - __p_rcode F - __p_secstodate F - __p_time F - __p_type F - __p_type_syms D 0x228 - __putlong F - __putshort F - __res_close F - __res_dnok F - __res_hnok F - __res_hostalias F - __res_isourserver F - __res_mailok F - __res_mkquery F - __res_nameinquery F - __res_nmkquery F - __res_nquery F - __res_nquerydomain F - __res_nsearch F - __res_nsend F - __res_ownok F - __res_queriesmatch F - __res_query F - __res_querydomain F - __res_search F - __res_send F - __sym_ntop F - __sym_ntos F - __sym_ston F - _gethtbyaddr F - _gethtbyname F - _gethtbyname2 F - _gethtent F - _getlong F - _getshort F - _res_opcodes D 0x40 - _sethtent F - inet_net_ntop F - inet_net_pton F - inet_neta F - res_gethostbyaddr F - res_gethostbyname F - res_gethostbyname2 F - res_send_setqhook F - res_send_setrhook F -GLIBC_2.9 - GLIBC_2.9 A - ns_datetosecs F - ns_format_ttl F - ns_get16 F - ns_get32 F - ns_initparse F - ns_makecanon F - ns_msg_getflag F - ns_name_compress F - ns_name_ntol F - ns_name_ntop F - ns_name_pack F - ns_name_pton F - ns_name_rollback F - ns_name_skip F - ns_name_uncompress F - ns_name_unpack F - ns_parse_ttl F - ns_parserr F - ns_put16 F - ns_put32 F - ns_samedomain F - ns_samename F - ns_skiprr F - ns_sprintrr F - ns_sprintrrf F - ns_subdomain F diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/librt.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/librt.abilist deleted file mode 100644 index 466df4d93b..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/librt.abilist +++ /dev/null @@ -1,44 +0,0 @@ -GLIBC_2.4 - GLIBC_2.4 A - aio_cancel F - aio_cancel64 F - aio_error F - aio_error64 F - aio_fsync F - aio_fsync64 F - aio_init F - aio_read F - aio_read64 F - aio_return F - aio_return64 F - aio_suspend F - aio_suspend64 F - aio_write F - aio_write64 F - clock_getcpuclockid F - clock_getres F - clock_gettime F - clock_nanosleep F - clock_settime F - lio_listio F - lio_listio64 F - mq_close F - mq_getattr F - mq_notify F - mq_open F - mq_receive F - mq_send F - mq_setattr F - mq_timedreceive F - mq_timedsend F - mq_unlink F - shm_open F - shm_unlink F - timer_create F - timer_delete F - timer_getoverrun F - timer_gettime F - timer_settime F -GLIBC_2.7 - GLIBC_2.7 A - __mq_open_2 F diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/libthread_db.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/libthread_db.abilist deleted file mode 100644 index 523772441b..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/libthread_db.abilist +++ /dev/null @@ -1,42 +0,0 @@ -GLIBC_2.4 - GLIBC_2.4 A - td_init F - td_log F - td_symbol_list F - td_ta_clear_event F - td_ta_delete F - td_ta_enable_stats F - td_ta_event_addr F - td_ta_event_getmsg F - td_ta_get_nthreads F - td_ta_get_ph F - td_ta_get_stats F - td_ta_map_id2thr F - td_ta_map_lwp2thr F - td_ta_new F - td_ta_reset_stats F - td_ta_set_event F - td_ta_setconcurrency F - td_ta_thr_iter F - td_ta_tsd_iter F - td_thr_clear_event F - td_thr_dbresume F - td_thr_dbsuspend F - td_thr_event_enable F - td_thr_event_getmsg F - td_thr_get_info F - td_thr_getfpregs F - td_thr_getgregs F - td_thr_getxregs F - td_thr_getxregsize F - td_thr_set_event F - td_thr_setfpregs F - td_thr_setgregs F - td_thr_setprio F - td_thr_setsigpending F - td_thr_setxregs F - td_thr_sigsetmask F - td_thr_tls_get_addr F - td_thr_tlsbase F - td_thr_tsd F - td_thr_validate F diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/libutil.abilist b/ports/sysdeps/unix/sysv/linux/arm/nptl/libutil.abilist deleted file mode 100644 index 6cb71966a1..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/libutil.abilist +++ /dev/null @@ -1,8 +0,0 @@ -GLIBC_2.4 - GLIBC_2.4 A - forkpty F - login F - login_tty F - logout F - logwtmp F - openpty F diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/localplt.data b/ports/sysdeps/unix/sysv/linux/arm/nptl/localplt.data deleted file mode 100644 index 109522e37e..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/localplt.data +++ /dev/null @@ -1,13 +0,0 @@ -libc.so: __signbit -libc.so: calloc -libc.so: free -libc.so: fscanf -libc.so: malloc -libc.so: memalign -libc.so: raise -libc.so: realloc -libm.so: __signbit -libm.so: __signbitf -libm.so: matherr -libpthread.so: __errno_location -libpthread.so: raise diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c b/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c deleted file mode 100644 index 9603d7b328..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c +++ /dev/null @@ -1,132 +0,0 @@ -/* low level locking for pthread library. Generic futex-using version. - Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <sysdep.h> -#include <lowlevellock.h> -#include <sys/time.h> - -void -__lll_lock_wait_private (int *futex) -{ - do - { - int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); - if (oldval != 0) - lll_futex_wait (futex, 2, LLL_PRIVATE); - } - while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); -} - - -/* These functions don't get included in libc.so */ -#ifdef IS_IN_libpthread -void -__lll_lock_wait (int *futex, int private) -{ - do - { - int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); - if (oldval != 0) - lll_futex_wait (futex, 2, private); - } - while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); -} - - -int -__lll_timedlock_wait (int *futex, const struct timespec *abstime, int private) -{ - struct timespec rt; - - /* Reject invalid timeouts. */ - if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) - return EINVAL; - - /* Upgrade the lock. */ - if (atomic_exchange_acq (futex, 2) == 0) - return 0; - - do - { - struct timeval tv; - - /* Get the current time. */ - (void) __gettimeofday (&tv, NULL); - - /* Compute relative timeout. */ - rt.tv_sec = abstime->tv_sec - tv.tv_sec; - rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000; - if (rt.tv_nsec < 0) - { - rt.tv_nsec += 1000000000; - --rt.tv_sec; - } - - /* Already timed out? */ - if (rt.tv_sec < 0) - return ETIMEDOUT; - - // XYZ: Lost the lock to check whether it was private. - lll_futex_timed_wait (futex, 2, &rt, private); - } - while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); - - return 0; -} - - -int -__lll_timedwait_tid (int *tidp, const struct timespec *abstime) -{ - int tid; - - if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) - return EINVAL; - - /* Repeat until thread terminated. */ - while ((tid = *tidp) != 0) - { - struct timeval tv; - struct timespec rt; - - /* Get the current time. */ - (void) __gettimeofday (&tv, NULL); - - /* Compute relative timeout. */ - rt.tv_sec = abstime->tv_sec - tv.tv_sec; - rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000; - if (rt.tv_nsec < 0) - { - rt.tv_nsec += 1000000000; - --rt.tv_sec; - } - - /* Already timed out? */ - if (rt.tv_sec < 0) - return ETIMEDOUT; - - /* Wait until thread terminates. */ - // XYZ: Lost the lock to check whether it was private. - if (lll_futex_timed_wait (tidp, tid, &rt, LLL_SHARED) == -ETIMEDOUT) - return ETIMEDOUT; - } - - return 0; -} -#endif diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h b/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h deleted file mode 100644 index 5d19434cdc..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h +++ /dev/null @@ -1,321 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 _LOWLEVELLOCK_H -#define _LOWLEVELLOCK_H 1 - -#include <time.h> -#include <sys/param.h> -#include <bits/pthreadtypes.h> -#include <atomic.h> -#include <sysdep.h> -#include <kernel-features.h> - -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_REQUEUE 3 -#define FUTEX_CMP_REQUEUE 4 -#define FUTEX_WAKE_OP 5 -#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) -#define FUTEX_LOCK_PI 6 -#define FUTEX_UNLOCK_PI 7 -#define FUTEX_TRYLOCK_PI 8 -#define FUTEX_WAIT_BITSET 9 -#define FUTEX_WAKE_BITSET 10 -#define FUTEX_WAIT_REQUEUE_PI 11 -#define FUTEX_CMP_REQUEUE_PI 12 -#define FUTEX_PRIVATE_FLAG 128 -#define FUTEX_CLOCK_REALTIME 256 - -#define FUTEX_BITSET_MATCH_ANY 0xffffffff - -/* Values for 'private' parameter of locking macros. Yes, the - definition seems to be backwards. But it is not. The bit will be - reversed before passing to the system call. */ -#define LLL_PRIVATE 0 -#define LLL_SHARED FUTEX_PRIVATE_FLAG - - -#if !defined NOT_IN_libc || defined IS_IN_rtld -/* In libc.so or ld.so all futexes are private. */ -# ifdef __ASSUME_PRIVATE_FUTEX -# define __lll_private_flag(fl, private) \ - ((fl) | FUTEX_PRIVATE_FLAG) -# else -# define __lll_private_flag(fl, private) \ - ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) -# endif -#else -# ifdef __ASSUME_PRIVATE_FUTEX -# define __lll_private_flag(fl, private) \ - (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) -# else -# define __lll_private_flag(fl, private) \ - (__builtin_constant_p (private) \ - ? ((private) == 0 \ - ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ - : (fl)) \ - : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ - & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) -# endif -#endif - - -#define lll_futex_wait(futexp, val, private) \ - lll_futex_timed_wait(futexp, val, NULL, private) - -#define lll_futex_timed_wait(futexp, val, timespec, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ - __lll_private_flag (FUTEX_WAIT, private), \ - (val), (timespec)); \ - __ret; \ - }) - -#define lll_futex_timed_wait_bitset(futexp, val, timespec, clockbit, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - int __op = FUTEX_WAIT_BITSET | clockbit; \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ - __lll_private_flag (__op, private), \ - (val), (timespec), NULL /* Unused. */, \ - FUTEX_BITSET_MATCH_ANY); \ - __ret; \ - }) - -#define lll_futex_wake(futexp, nr, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ - __lll_private_flag (FUTEX_WAKE, private), \ - (nr), 0); \ - __ret; \ - }) - -#define lll_robust_dead(futexv, private) \ - do \ - { \ - int *__futexp = &(futexv); \ - atomic_or (__futexp, FUTEX_OWNER_DIED); \ - lll_futex_wake (__futexp, 1, private); \ - } \ - while (0) - -/* Returns non-zero if error happened, zero if success. */ -#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ - __lll_private_flag (FUTEX_CMP_REQUEUE, private),\ - (nr_wake), (nr_move), (mutex), (val)); \ - INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ - }) - - -/* Returns non-zero if error happened, zero if success. */ -#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ - __lll_private_flag (FUTEX_WAKE_OP, private), \ - (nr_wake), (nr_wake2), (futexp2), \ - FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \ - INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ - }) - -/* Priority Inheritance support. */ -#define lll_futex_wait_requeue_pi(futexp, val, mutex, private) \ - lll_futex_timed_wait_requeue_pi (futexp, val, NULL, 0, mutex, private) - -#define lll_futex_timed_wait_requeue_pi(futexp, val, timespec, clockbit, \ - mutex, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - int __op = FUTEX_WAIT_REQUEUE_PI | clockbit; \ - \ - INTERNAL_SYSCALL (futex, __err, 5, (futexp), \ - __lll_private_flag (__op, private), \ - (val), (timespec), mutex); \ - }) - -#define lll_futex_cmp_requeue_pi(futexp, nr_wake, nr_move, mutex, val, priv) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ - __lll_private_flag (FUTEX_CMP_REQUEUE_PI, priv),\ - (nr_wake), (nr_move), (mutex), (val)); \ - INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ - }) - - -#define lll_trylock(lock) \ - atomic_compare_and_exchange_val_acq(&(lock), 1, 0) - -#define lll_cond_trylock(lock) \ - atomic_compare_and_exchange_val_acq(&(lock), 2, 0) - -#define __lll_robust_trylock(futex, id) \ - (atomic_compare_and_exchange_val_acq (futex, id, 0) != 0) -#define lll_robust_trylock(lock, id) \ - __lll_robust_trylock (&(lock), id) - -extern void __lll_lock_wait_private (int *futex) attribute_hidden; -extern void __lll_lock_wait (int *futex, int private) attribute_hidden; -extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden; - -#define __lll_lock(futex, private) \ - ((void) ({ \ - int *__futex = (futex); \ - if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, \ - 1, 0), 0)) \ - { \ - if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ - __lll_lock_wait_private (__futex); \ - else \ - __lll_lock_wait (__futex, private); \ - } \ - })) -#define lll_lock(futex, private) __lll_lock (&(futex), private) - - -#define __lll_robust_lock(futex, id, private) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - \ - if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ - 0), 0)) \ - __val = __lll_robust_lock_wait (__futex, private); \ - __val; \ - }) -#define lll_robust_lock(futex, id, private) \ - __lll_robust_lock (&(futex), id, private) - - -#define __lll_cond_lock(futex, private) \ - ((void) ({ \ - int *__futex = (futex); \ - if (__builtin_expect (atomic_exchange_acq (__futex, 2), 0)) \ - __lll_lock_wait (__futex, private); \ - })) -#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) - - -#define lll_robust_cond_lock(futex, id, private) \ - __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private) - - -extern int __lll_timedlock_wait (int *futex, const struct timespec *, - int private) attribute_hidden; -extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *, - int private) attribute_hidden; - -#define __lll_timedlock(futex, abstime, private) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - \ - if (__builtin_expect (atomic_exchange_acq (__futex, 1), 0)) \ - __val = __lll_timedlock_wait (__futex, abstime, private); \ - __val; \ - }) -#define lll_timedlock(futex, abstime, private) \ - __lll_timedlock (&(futex), abstime, private) - - -#define __lll_robust_timedlock(futex, abstime, id, private) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - \ - if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ - 0), 0)) \ - __val = __lll_robust_timedlock_wait (__futex, abstime, private); \ - __val; \ - }) -#define lll_robust_timedlock(futex, abstime, id, private) \ - __lll_robust_timedlock (&(futex), abstime, id, private) - - -#define __lll_unlock(futex, private) \ - (void) \ - ({ int *__futex = (futex); \ - int __oldval = atomic_exchange_rel (__futex, 0); \ - if (__builtin_expect (__oldval > 1, 0)) \ - lll_futex_wake (__futex, 1, private); \ - }) -#define lll_unlock(futex, private) __lll_unlock(&(futex), private) - - -#define __lll_robust_unlock(futex, private) \ - (void) \ - ({ int *__futex = (futex); \ - int __oldval = atomic_exchange_rel (__futex, 0); \ - if (__builtin_expect (__oldval & FUTEX_WAITERS, 0)) \ - lll_futex_wake (__futex, 1, private); \ - }) -#define lll_robust_unlock(futex, private) \ - __lll_robust_unlock(&(futex), private) - - -#define lll_islocked(futex) \ - (futex != 0) - - -/* Our internal lock implementation is identical to the binary-compatible - mutex implementation. */ - -/* Initializers for lock. */ -#define LLL_LOCK_INITIALIZER (0) -#define LLL_LOCK_INITIALIZER_LOCKED (1) - -/* The states of a lock are: - 0 - untaken - 1 - taken by one user - >1 - taken by more users */ - -/* The kernel notifies a process which uses CLONE_CHILD_CLEARTID via futex - wakeup when the clone terminates. The memory location contains the - thread ID while the clone is running and is reset to zero - afterwards. */ -#define lll_wait_tid(tid) \ - do { \ - __typeof (tid) __tid; \ - while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid, LLL_SHARED);\ - } while (0) - -extern int __lll_timedwait_tid (int *, const struct timespec *) - attribute_hidden; - -#define lll_timedwait_tid(tid, abstime) \ - ({ \ - int __res = 0; \ - if ((tid) != 0) \ - __res = __lll_timedwait_tid (&(tid), (abstime)); \ - __res; \ - }) - -#endif /* lowlevellock.h */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/nptl-aeabi_unwind_cpp_pr1.c b/ports/sysdeps/unix/sysv/linux/arm/nptl/nptl-aeabi_unwind_cpp_pr1.c deleted file mode 100644 index 7b83522437..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/nptl-aeabi_unwind_cpp_pr1.c +++ /dev/null @@ -1 +0,0 @@ -#include <aeabi_unwind_cpp_pr1.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/pt-vfork.S b/ports/sysdeps/unix/sysv/linux/arm/nptl/pt-vfork.S deleted file mode 100644 index 7eff08e720..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/pt-vfork.S +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <tcb-offsets.h> - -/* Save the PID value. */ -#define SAVE_PID \ - GET_TLS (r2); \ - NEGOFF_ADJ_BASE2 (r2, r0, PID_OFFSET); /* Save the TLS addr in r2. */ \ - ldr r3, NEGOFF_OFF1 (r2, PID_OFFSET); /* Load the saved PID. */ \ - rsb r0, r3, #0; /* Negate it. */ \ - str r0, NEGOFF_OFF1 (r2, PID_OFFSET); /* Store the temp PID. */ - -/* Restore the old PID value in the parent. */ -#define RESTORE_PID \ - cmp r0, #0; /* If we are the parent... */ \ - it ne; \ - strne r3, NEGOFF_OFF1 (r2, PID_OFFSET); /* restore the saved PID. */ - -#include "../vfork.S" diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c b/ports/sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c deleted file mode 100644 index a063149925..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2004-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 "pthreadP.h" -#include <lowlevellock.h> - -unsigned long int __fork_generation attribute_hidden; - -static void -clear_once_control (void *arg) -{ - pthread_once_t *once_control = (pthread_once_t *) arg; - - *once_control = 0; - lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); -} - -int -__pthread_once (pthread_once_t *once_control, void (*init_routine) (void)) -{ - for (;;) - { - int oldval; - int newval; - - /* Pseudo code: - newval = __fork_generation | 1; - oldval = *once_control; - if ((oldval & 2) == 0) - *once_control = newval; - Do this atomically. - */ - do - { - newval = __fork_generation | 1; - oldval = *once_control; - if (oldval & 2) - break; - } while (atomic_compare_and_exchange_val_acq (once_control, newval, oldval) != oldval); - - /* Check if the initializer has already been done. */ - if ((oldval & 2) != 0) - return 0; - - /* Check if another thread already runs the initializer. */ - if ((oldval & 1) == 0) - break; - - /* Check whether the initializer execution was interrupted by a fork. */ - if (oldval != newval) - break; - - /* Same generation, some other thread was faster. Wait. */ - lll_futex_wait (once_control, oldval, LLL_PRIVATE); - } - - /* This thread is the first here. Do the initialization. - Register a cleanup handler so that in case the thread gets - interrupted the initialization can be restarted. */ - pthread_cleanup_push (clear_once_control, once_control); - - init_routine (); - - pthread_cleanup_pop (0); - - /* Say that the initialisation is done. */ - *once_control = __fork_generation | 2; - - /* Wake up all other threads. */ - lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); - - return 0; -} -weak_alias (__pthread_once, pthread_once) -hidden_def (__pthread_once) diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/rt-aeabi_unwind_cpp_pr1.c b/ports/sysdeps/unix/sysv/linux/arm/nptl/rt-aeabi_unwind_cpp_pr1.c deleted file mode 100644 index 7b83522437..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/rt-aeabi_unwind_cpp_pr1.c +++ /dev/null @@ -1 +0,0 @@ -#include <aeabi_unwind_cpp_pr1.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h b/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h deleted file mode 100644 index 118e6c3466..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h +++ /dev/null @@ -1,242 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <tls.h> -#ifndef __ASSEMBLER__ -# include <nptl/pthreadP.h> -#endif - -#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt - -/* NOTE: We do mark syscalls with unwind annotations, for the benefit of - cancellation; but they're really only accurate at the point of the - syscall. The ARM unwind directives are not rich enough without adding - a custom personality function. */ - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (__##syscall_name##_nocancel); \ - CFI_SECTIONS; \ - DO_CALL (syscall_name, args); \ - cmn r0, $4096; \ - PSEUDO_RET; \ - END (__##syscall_name##_nocancel); \ - ENTRY (name); \ - SINGLE_THREAD_P; \ - DOARGS_##args; \ - bne .Lpseudo_cancel; \ - cfi_remember_state; \ - ldr r7, =SYS_ify (syscall_name); \ - swi 0x0; \ - UNDOARGS_##args; \ - cmn r0, $4096; \ - PSEUDO_RET; \ - cfi_restore_state; \ - .Lpseudo_cancel: \ - .fnstart; /* matched by the .fnend in UNDOARGS below. */ \ - DOCARGS_##args; /* save syscall args etc. around CENABLE. */ \ - CENABLE; \ - mov ip, r0; /* put mask in safe place. */ \ - UNDOCARGS_##args; /* restore syscall args. */ \ - ldr r7, =SYS_ify (syscall_name); \ - swi 0x0; /* do the call. */ \ - mov r7, r0; /* save syscall return value. */ \ - mov r0, ip; /* get mask back. */ \ - CDISABLE; \ - mov r0, r7; /* retrieve return value. */ \ - RESTORE_LR_##args; \ - UNDOARGS_##args; \ - cmn r0, $4096 - -/* DOARGS pushes eight bytes on the stack for five arguments, twelve bytes for - six arguments, and four bytes for fewer. In order to preserve doubleword - alignment, sometimes we must save an extra register. */ - -# define RESTART_UNWIND \ - .fnend; \ - .fnstart; \ - .save {r7}; \ - .save {lr} - -# define DOCARGS_0 \ - .save {r7}; \ - push {lr}; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (lr, 0); \ - .save {lr} -# define UNDOCARGS_0 -# define RESTORE_LR_0 \ - pop {lr}; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (lr) - -# define DOCARGS_1 \ - .save {r7}; \ - push {r0, r1, lr}; \ - cfi_adjust_cfa_offset (12); \ - cfi_rel_offset (lr, 8); \ - .save {lr}; \ - .pad #8 -# define UNDOCARGS_1 \ - ldr r0, [sp], #8; \ - cfi_adjust_cfa_offset (-8); \ - RESTART_UNWIND -# define RESTORE_LR_1 \ - RESTORE_LR_0 - -# define DOCARGS_2 \ - .save {r7}; \ - push {r0, r1, lr}; \ - cfi_adjust_cfa_offset (12); \ - cfi_rel_offset (lr, 8); \ - .save {lr}; \ - .pad #8 -# define UNDOCARGS_2 \ - pop {r0, r1}; \ - cfi_adjust_cfa_offset (-8); \ - RESTART_UNWIND -# define RESTORE_LR_2 \ - RESTORE_LR_0 - -# define DOCARGS_3 \ - .save {r7}; \ - push {r0, r1, r2, r3, lr}; \ - cfi_adjust_cfa_offset (20); \ - cfi_rel_offset (lr, 16); \ - .save {lr}; \ - .pad #16 -# define UNDOCARGS_3 \ - pop {r0, r1, r2, r3}; \ - cfi_adjust_cfa_offset (-16); \ - RESTART_UNWIND -# define RESTORE_LR_3 \ - RESTORE_LR_0 - -# define DOCARGS_4 \ - .save {r7}; \ - push {r0, r1, r2, r3, lr}; \ - cfi_adjust_cfa_offset (20); \ - cfi_rel_offset (lr, 16); \ - .save {lr}; \ - .pad #16 -# define UNDOCARGS_4 \ - pop {r0, r1, r2, r3}; \ - cfi_adjust_cfa_offset (-16); \ - RESTART_UNWIND -# define RESTORE_LR_4 \ - RESTORE_LR_0 - -/* r4 is only stmfd'ed for correct stack alignment. */ -# define DOCARGS_5 \ - .save {r4, r7}; \ - push {r0, r1, r2, r3, r4, lr}; \ - cfi_adjust_cfa_offset (24); \ - cfi_rel_offset (lr, 20); \ - .save {lr}; \ - .pad #20 -# define UNDOCARGS_5 \ - pop {r0, r1, r2, r3}; \ - cfi_adjust_cfa_offset (-16); \ - .fnend; \ - .fnstart; \ - .save {r4, r7}; \ - .save {lr}; \ - .pad #4 -# define RESTORE_LR_5 \ - pop {r4, lr}; \ - cfi_adjust_cfa_offset (-8); \ - /* r4 will be marked as restored later. */ \ - cfi_restore (lr) - -# define DOCARGS_6 \ - .save {r4, r5, r7}; \ - push {r0, r1, r2, r3, lr}; \ - cfi_adjust_cfa_offset (20); \ - cfi_rel_offset (lr, 16); \ - .save {lr}; \ - .pad #16 -# define UNDOCARGS_6 \ - pop {r0, r1, r2, r3}; \ - cfi_adjust_cfa_offset (-16); \ - .fnend; \ - .fnstart; \ - .save {r4, r5, r7}; \ - .save {lr}; -# define RESTORE_LR_6 \ - RESTORE_LR_0 - -# ifdef IS_IN_libpthread -# define CENABLE bl PLTJMP(__pthread_enable_asynccancel) -# define CDISABLE bl PLTJMP(__pthread_disable_asynccancel) -# define __local_multiple_threads __pthread_multiple_threads -# elif !defined NOT_IN_libc -# define CENABLE bl PLTJMP(__libc_enable_asynccancel) -# define CDISABLE bl PLTJMP(__libc_disable_asynccancel) -# define __local_multiple_threads __libc_multiple_threads -# elif defined IS_IN_librt -# define CENABLE bl PLTJMP(__librt_enable_asynccancel) -# define CDISABLE bl PLTJMP(__librt_disable_asynccancel) -# else -# error Unsupported library -# endif - -# if defined IS_IN_libpthread || !defined NOT_IN_libc -# ifndef __ASSEMBLER__ -extern int __local_multiple_threads attribute_hidden; -# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1) -# else -# define SINGLE_THREAD_P \ - LDST_PCREL(ldr, ip, ip, __local_multiple_threads); \ - teq ip, #0 -# endif -# else -/* There is no __local_multiple_threads for librt, so use the TCB. */ -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P \ - push {r0, lr}; \ - cfi_adjust_cfa_offset (8); \ - cfi_rel_offset (lr, 4); \ - GET_TLS (lr); \ - NEGOFF_ADJ_BASE (r0, MULTIPLE_THREADS_OFFSET); \ - ldr ip, NEGOFF_OFF1 (r0, MULTIPLE_THREADS_OFFSET); \ - pop {r0, lr}; \ - cfi_adjust_cfa_offset (-8); \ - cfi_restore (lr); \ - teq ip, #0 -# define SINGLE_THREAD_P_PIC(x) SINGLE_THREAD_P -# endif -# endif - -#elif !defined __ASSEMBLER__ - -/* For rtld, et cetera. */ -# define SINGLE_THREAD_P 1 -# define NO_CANCELLATION 1 - -#endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c deleted file mode 100644 index 6ccd9b43a1..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c +++ /dev/null @@ -1,157 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek <jakub@redhat.com>. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <dlfcn.h> -#include <stdio.h> -#include <unwind.h> -#include <pthreadP.h> - -static void *libgcc_s_handle; -static void (*libgcc_s_resume) (struct _Unwind_Exception *exc); -static _Unwind_Reason_Code (*libgcc_s_personality) - (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *); -static _Unwind_Reason_Code (*libgcc_s_forcedunwind) - (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *); -static _Unwind_Word (*libgcc_s_getcfa) (struct _Unwind_Context *); - -void -__attribute_noinline__ -pthread_cancel_init (void) -{ - void *resume, *personality, *forcedunwind, *getcfa; - void *handle; - - if (__builtin_expect (libgcc_s_handle != NULL, 1)) - { - /* Force gcc to reload all values. */ - asm volatile ("" ::: "memory"); - return; - } - - handle = __libc_dlopen ("libgcc_s.so.1"); - - if (handle == NULL - || (resume = __libc_dlsym (handle, "_Unwind_Resume")) == NULL - || (personality = __libc_dlsym (handle, "__gcc_personality_v0")) == NULL - || (forcedunwind = __libc_dlsym (handle, "_Unwind_ForcedUnwind")) - == NULL - || (getcfa = __libc_dlsym (handle, "_Unwind_GetCFA")) == NULL -#ifdef ARCH_CANCEL_INIT - || ARCH_CANCEL_INIT (handle) -#endif - ) - __libc_fatal ("libgcc_s.so.1 must be installed for pthread_cancel to work\n"); - - libgcc_s_resume = resume; - libgcc_s_personality = personality; - libgcc_s_forcedunwind = forcedunwind; - libgcc_s_getcfa = getcfa; - /* Make sure libgcc_s_getcfa is written last. Otherwise, - pthread_cancel_init might return early even when the pointer the - caller is interested in is not initialized yet. */ - atomic_write_barrier (); - libgcc_s_handle = handle; -} - -void -__libc_freeres_fn_section -__unwind_freeres (void) -{ - void *handle = libgcc_s_handle; - if (handle != NULL) - { - libgcc_s_handle = NULL; - __libc_dlclose (handle); - } -} - -/* 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. */ - -#define STR1(S) #S -#define STR(S) STR1(S) - -asm ( -" .globl _Unwind_Resume\n" -" .type _Unwind_Resume, %function\n" -"_Unwind_Resume:\n" -" .cfi_sections .debug_frame\n" -" " CFI_STARTPROC "\n" -" push {r4, r5, r6, lr}\n" -" " CFI_ADJUST_CFA_OFFSET (16)" \n" -" " CFI_REL_OFFSET (r4, 0) "\n" -" " CFI_REL_OFFSET (r5, 4) "\n" -" " CFI_REL_OFFSET (r6, 8) "\n" -" " CFI_REL_OFFSET (lr, 12) "\n" -" " CFI_REMEMBER_STATE "\n" -" ldr r4, 1f\n" -" ldr r5, 2f\n" -"3: add r4, pc, r4\n" -" ldr r3, [r4, r5]\n" -" mov r6, r0\n" -" cmp r3, #0\n" -" beq 4f\n" -"5: mov r0, r6\n" -" pop {r4, r5, r6, lr}\n" -" " CFI_ADJUST_CFA_OFFSET (-16) "\n" -" " CFI_RESTORE (r4) "\n" -" " CFI_RESTORE (r5) "\n" -" " CFI_RESTORE (r6) "\n" -" " CFI_RESTORE (lr) "\n" -" bx r3\n" -" " CFI_RESTORE_STATE "\n" -"4: bl pthread_cancel_init\n" -" ldr r3, [r4, r5]\n" -" b 5b\n" -" " CFI_ENDPROC "\n" -" .align 2\n" -"1: .word _GLOBAL_OFFSET_TABLE_ - 3b - " STR (PC_OFS) "\n" -"2: .word libgcc_s_resume(GOTOFF)\n" -" .size _Unwind_Resume, .-_Unwind_Resume\n" -); - -_Unwind_Reason_Code -__gcc_personality_v0 (_Unwind_State state, - struct _Unwind_Exception *ue_header, - struct _Unwind_Context *context) -{ - if (__builtin_expect (libgcc_s_personality == NULL, 0)) - pthread_cancel_init (); - - return libgcc_s_personality (state, ue_header, context); -} - -_Unwind_Reason_Code -_Unwind_ForcedUnwind (struct _Unwind_Exception *exc, _Unwind_Stop_Fn stop, - void *stop_argument) -{ - if (__builtin_expect (libgcc_s_forcedunwind == NULL, 0)) - pthread_cancel_init (); - - return libgcc_s_forcedunwind (exc, stop, stop_argument); -} - -_Unwind_Word -_Unwind_GetCFA (struct _Unwind_Context *context) -{ - if (__builtin_expect (libgcc_s_getcfa == NULL, 0)) - pthread_cancel_init (); - - return libgcc_s_getcfa (context); -} diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c deleted file mode 100644 index bff3e2b4f1..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek <jakub@redhat.com>. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <dlfcn.h> -#include <stdio.h> -#include <unwind.h> - -static void (*libgcc_s_resume) (struct _Unwind_Exception *exc); -static _Unwind_Reason_Code (*libgcc_s_personality) - (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *); - -static void init (void) __attribute_used__; - -static void -init (void) -{ - void *resume, *personality; - void *handle; - - handle = __libc_dlopen ("libgcc_s.so.1"); - - if (handle == NULL - || (resume = __libc_dlsym (handle, "_Unwind_Resume")) == NULL - || (personality = __libc_dlsym (handle, "__gcc_personality_v0")) == NULL) - __libc_fatal ("libgcc_s.so.1 must be installed for pthread_cancel to work\n"); - - libgcc_s_resume = resume; - libgcc_s_personality = personality; -} - -/* 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. */ - -#define STR1(S) #S -#define STR(S) STR1(S) - -asm ( -" .globl _Unwind_Resume\n" -" .type _Unwind_Resume, %function\n" -"_Unwind_Resume:\n" -" .cfi_sections .debug_frame\n" -" " CFI_STARTPROC "\n" -" push {r4, r5, r6, lr}\n" -" " CFI_ADJUST_CFA_OFFSET (16)" \n" -" " CFI_REL_OFFSET (r4, 0) "\n" -" " CFI_REL_OFFSET (r5, 4) "\n" -" " CFI_REL_OFFSET (r6, 8) "\n" -" " CFI_REL_OFFSET (lr, 12) "\n" -" " CFI_REMEMBER_STATE "\n" -" ldr r4, 1f\n" -" ldr r5, 2f\n" -"3: add r4, pc, r4\n" -" ldr r3, [r4, r5]\n" -" mov r6, r0\n" -" cmp r3, #0\n" -" beq 4f\n" -"5: mov r0, r6\n" -" pop {r4, r5, r6, lr}\n" -" " CFI_ADJUST_CFA_OFFSET (-16) "\n" -" " CFI_RESTORE (r4) "\n" -" " CFI_RESTORE (r5) "\n" -" " CFI_RESTORE (r6) "\n" -" " CFI_RESTORE (lr) "\n" -" bx r3\n" -" " CFI_RESTORE_STATE "\n" -"4: bl init\n" -" ldr r3, [r4, r5]\n" -" b 5b\n" -" " CFI_ENDPROC "\n" -" .align 2\n" -"1: .word _GLOBAL_OFFSET_TABLE_ - 3b - " STR (PC_OFS) "\n" -"2: .word libgcc_s_resume(GOTOFF)\n" -" .size _Unwind_Resume, .-_Unwind_Resume\n" -); - -_Unwind_Reason_Code -__gcc_personality_v0 (_Unwind_State state, - struct _Unwind_Exception *ue_header, - struct _Unwind_Context *context) -{ - if (__builtin_expect (libgcc_s_personality == NULL, 0)) - init (); - return libgcc_s_personality (state, ue_header, context); -} diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind.h b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind.h deleted file mode 100644 index 7b71817e89..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind.h +++ /dev/null @@ -1,278 +0,0 @@ -/* Header file for the ARM EABI unwinder - Copyright (C) 2003-2014 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 */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/vfork.S b/ports/sysdeps/unix/sysv/linux/arm/nptl/vfork.S deleted file mode 100644 index 2e942beba7..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/vfork.S +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <tcb-offsets.h> - -/* Save the PID value. */ -#define SAVE_PID \ - GET_TLS (r2); \ - NEGOFF_ADJ_BASE2 (r2, r0, PID_OFFSET); /* Save the TLS addr in r2. */ \ - ldr r3, NEGOFF_OFF1 (r2, PID_OFFSET); /* Load the saved PID. */ \ - rsbs r0, r3, #0; /* Negate it. */ \ - it eq; \ - moveq r0, #0x80000000; /* Use 0x80000000 if it was 0. */ \ - str r0, NEGOFF_OFF1 (r2, PID_OFFSET); /* Store the temp PID. */ - -/* Restore the old PID value in the parent. */ -#define RESTORE_PID \ - cmp r0, #0; /* If we are the parent... */ \ - it ne; \ - strne r3, NEGOFF_OFF1 (r2, PID_OFFSET); /* restore the saved PID. */ - -#include "../vfork.S" diff --git a/ports/sysdeps/unix/sysv/linux/arm/oldgetrlimit.c b/ports/sysdeps/unix/sysv/linux/arm/oldgetrlimit.c deleted file mode 100644 index 6e25b021ab..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/oldgetrlimit.c +++ /dev/null @@ -1 +0,0 @@ -/* Empty. */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/oldgetrlimit64.c b/ports/sysdeps/unix/sysv/linux/arm/oldgetrlimit64.c deleted file mode 100644 index 4c27e957bf..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/oldgetrlimit64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/oldsetrlimit.c b/ports/sysdeps/unix/sysv/linux/arm/oldsetrlimit.c deleted file mode 100644 index 6e25b021ab..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/oldsetrlimit.c +++ /dev/null @@ -1 +0,0 @@ -/* Empty. */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/posix_fadvise.c b/ports/sysdeps/unix/sysv/linux/arm/posix_fadvise.c deleted file mode 100644 index 281ff5b4ac..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/posix_fadvise.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <fcntl.h> - -int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise); - -/* Advice the system about the expected behaviour of the application with - respect to the file associated with FD. */ - -int -posix_fadvise (int fd, off_t offset, off_t len, int advise) -{ - /* ARM only has a syscall for fadvise64_64. */ - return __posix_fadvise64_l64 (fd, offset, len, advise); -} diff --git a/ports/sysdeps/unix/sysv/linux/arm/posix_fadvise64.c b/ports/sysdeps/unix/sysv/linux/arm/posix_fadvise64.c deleted file mode 100644 index 7c14eec8f8..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/posix_fadvise64.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <fcntl.h> -#include <sysdep.h> - -int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise); -int __posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise); - -/* Advice the system about the expected behaviour of the application with - respect to the file associated with FD. */ - -int -__posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) -{ - INTERNAL_SYSCALL_DECL (err); - int ret = INTERNAL_SYSCALL (arm_fadvise64_64, err, 6, fd, advise, - __LONG_LONG_PAIR ((long)(offset >> 32), (long)offset), - __LONG_LONG_PAIR ((long)(len >> 32), (long)len)); - if (!INTERNAL_SYSCALL_ERROR_P (ret, err)) - return 0; - return INTERNAL_SYSCALL_ERRNO (ret, err); -} - -#include <shlib-compat.h> - -#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) - -int -attribute_compat_text_section -__posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise) -{ - return __posix_fadvise64_l64 (fd, offset, len, advise); -} - -versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3); -compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2); -#else -strong_alias (__posix_fadvise64_l64, posix_fadvise64); -#endif diff --git a/ports/sysdeps/unix/sysv/linux/arm/pread.c b/ports/sysdeps/unix/sysv/linux/arm/pread.c deleted file mode 100644 index 97822ad11f..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/pread.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 1997-2014 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 <errno.h> -#include <endian.h> -#include <unistd.h> - -#include <sysdep-cancel.h> -#include <sys/syscall.h> - -ssize_t -__libc_pread (fd, buf, count, offset) - int fd; - void *buf; - size_t count; - off_t offset; -{ - ssize_t result; - - if (SINGLE_THREAD_P) - { - /* In the ARM EABI, 64-bit values are aligned to even/odd register - pairs for syscalls. */ - result = INLINE_SYSCALL (pread64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - - /* In the ARM EABI, 64-bit values are aligned to even/odd register - pairs for syscalls. */ - result = INLINE_SYSCALL (pread64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} - -strong_alias (__libc_pread, __pread) -weak_alias (__libc_pread, pread) diff --git a/ports/sysdeps/unix/sysv/linux/arm/pread64.c b/ports/sysdeps/unix/sysv/linux/arm/pread64.c deleted file mode 100644 index cc75c9582c..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/pread64.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 1997-2014 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 <errno.h> -#include <endian.h> -#include <unistd.h> - -#include <sysdep-cancel.h> -#include <sys/syscall.h> - -ssize_t -__libc_pread64 (fd, buf, count, offset) - int fd; - void *buf; - size_t count; - off64_t offset; -{ - ssize_t result; - - if (SINGLE_THREAD_P) - { - /* In the ARM EABI, 64-bit values are aligned to even/odd register - pairs for syscalls. */ - result = INLINE_SYSCALL (pread64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - - /* In the ARM EABI, 64-bit values are aligned to even/odd register - pairs for syscalls. */ - result = INLINE_SYSCALL (pread64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} - -weak_alias (__libc_pread64, __pread64) -weak_alias (__libc_pread64, pread64) diff --git a/ports/sysdeps/unix/sysv/linux/arm/profil-counter.h b/ports/sysdeps/unix/sysv/linux/arm/profil-counter.h deleted file mode 100644 index ddf4d41af2..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/profil-counter.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Low-level statistical profiling support function. Linux/ARM version. - Copyright (C) 1996-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <signal.h> -#include <sigcontextinfo.h> - -void -profil_counter (int signo, const SIGCONTEXT scp) -{ - profil_count ((void *) GET_PC (scp)); - - /* This is a hack to prevent the compiler from implementing the - above function call as a sibcall. The sibcall would overwrite - the signal context. */ - asm volatile (""); -} diff --git a/ports/sysdeps/unix/sysv/linux/arm/pwrite.c b/ports/sysdeps/unix/sysv/linux/arm/pwrite.c deleted file mode 100644 index dfbabda82c..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/pwrite.c +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 1997-2014 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 <errno.h> -#include <endian.h> -#include <unistd.h> - -#include <sysdep-cancel.h> -#include <sys/syscall.h> - -ssize_t -__libc_pwrite (fd, buf, count, offset) - int fd; - const void *buf; - size_t count; - off_t offset; -{ - ssize_t result; - - if (SINGLE_THREAD_P) - { - /* In the ARM EABI, 64-bit values are aligned to even/odd register - pairs for syscalls. */ - result = INLINE_SYSCALL (pwrite64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - - /* In the ARM EABI, 64-bit values are aligned to even/odd register - pairs for syscalls. */ - result = INLINE_SYSCALL (pwrite64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR (offset >> 31, offset)); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} - -strong_alias (__libc_pwrite, __pwrite) -weak_alias (__libc_pwrite, pwrite) diff --git a/ports/sysdeps/unix/sysv/linux/arm/pwrite64.c b/ports/sysdeps/unix/sysv/linux/arm/pwrite64.c deleted file mode 100644 index 6d551ecd07..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/pwrite64.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 1997-2014 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 <errno.h> -#include <endian.h> -#include <unistd.h> - -#include <sysdep-cancel.h> -#include <sys/syscall.h> - -ssize_t -__libc_pwrite64 (fd, buf, count, offset) - int fd; - const void *buf; - size_t count; - off64_t offset; -{ - ssize_t result; - - if (SINGLE_THREAD_P) - { - /* In the ARM EABI, 64-bit values are aligned to even/odd register - pairs for syscalls. */ - result = INLINE_SYSCALL (pwrite64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - - return result; - } - - int oldtype = LIBC_CANCEL_ASYNC (); - - /* In the ARM EABI, 64-bit values are aligned to even/odd register - pairs for syscalls. */ - result = INLINE_SYSCALL (pwrite64, 6, fd, buf, count, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff))); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} - -weak_alias (__libc_pwrite64, __pwrite64) -libc_hidden_weak (__pwrite64) -weak_alias (__libc_pwrite64, pwrite64) diff --git a/ports/sysdeps/unix/sysv/linux/arm/readahead.c b/ports/sysdeps/unix/sysv/linux/arm/readahead.c deleted file mode 100644 index cba460c2b5..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/readahead.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Provide kernel hint to read ahead. - Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <fcntl.h> -#include <sys/types.h> -#include <endian.h> - -#include <sysdep.h> -#include <sys/syscall.h> - - -ssize_t -__readahead (int fd, off64_t offset, size_t count) -{ - return INLINE_SYSCALL (readahead, 5, fd, 0, - __LONG_LONG_PAIR ((off_t) (offset >> 32), - (off_t) (offset & 0xffffffff)), - count); -} - -weak_alias (__readahead, readahead) diff --git a/ports/sysdeps/unix/sysv/linux/arm/readdir64.c b/ports/sysdeps/unix/sysv/linux/arm/readdir64.c deleted file mode 100644 index 2ea26dd409..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/readdir64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/readdir64.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/readdir64_r.c b/ports/sysdeps/unix/sysv/linux/arm/readdir64_r.c deleted file mode 100644 index 9f54f897e3..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/readdir64_r.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/readdir64_r.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/readelflib.c b/ports/sysdeps/unix/sysv/linux/arm/readelflib.c deleted file mode 100644 index a15ebe42a6..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/readelflib.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 1999-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger <aj@suse.de>, 1999 and - Jakub Jelinek <jakub@redhat.com>, 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 process_elf32_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); -int process_elf64_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, - void *file_contents, size_t file_length); - -/* Returns 0 if everything is ok, != 0 in case of error. */ -int -process_elf_file (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, void *file_contents, - size_t file_length) -{ - ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; - int ret; - - if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) - { - Elf32_Ehdr *elf32_header = (Elf32_Ehdr *) elf_header; - - ret = process_elf32_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - - if (!ret && EF_ARM_EABI_VERSION (elf32_header->e_flags) == EF_ARM_EABI_VER5) - { - if (elf32_header->e_flags & EF_ARM_ABI_FLOAT_HARD) - *flag = FLAG_ARM_LIBHF|FLAG_ELF_LIBC6; - else if (elf32_header->e_flags & EF_ARM_ABI_FLOAT_SOFT) - *flag = FLAG_ARM_LIBSF|FLAG_ELF_LIBC6; - else - /* We must assume the unmarked objects are compatible - with all ABI variants. Such objects may have been - generated in a transitional period when the ABI - tags were not added to all objects. */ - *flag = FLAG_ELF_LIBC6; - } - } - else - { - ret = process_elf64_file (file_name, lib, flag, osversion, soname, - file_contents, file_length); - /* AArch64 libraries are always libc.so.6+. */ - if (!ret) - *flag = FLAG_AARCH64_LIB64|FLAG_ELF_LIBC6; - } - return ret; -} - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf32_file -#define __ELF_NATIVE_CLASS 32 -#include "elf/readelflib.c" - -#undef __ELF_NATIVE_CLASS -#undef process_elf_file -#define process_elf_file process_elf64_file -#define __ELF_NATIVE_CLASS 64 -#include "elf/readelflib.c" diff --git a/ports/sysdeps/unix/sysv/linux/arm/register-dump.h b/ports/sysdeps/unix/sysv/linux/arm/register-dump.h deleted file mode 100644 index 9714a0d8c7..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/register-dump.h +++ /dev/null @@ -1,136 +0,0 @@ -/* Dump registers. - Copyright (C) 1998-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell <pb@nexus.co.uk>, 1998. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sys/uio.h> -#include <_itoa.h> -#include <sys/ucontext.h> - -/* We will print the register dump in this format: - - R0: XXXXXXXX R1: XXXXXXXX R2: XXXXXXXX R3: XXXXXXXX - R4: XXXXXXXX R5: XXXXXXXX R6: XXXXXXXX R7: XXXXXXXX - R8: XXXXXXXX R9: XXXXXXXX SL: XXXXXXXX FP: XXXXXXXX - IP: XXXXXXXX SP: XXXXXXXX LR: XXXXXXXX PC: XXXXXXXX - - CPSR: XXXXXXXX - - Trap: XXXXXXXX Error: XXXXXXXX OldMask: XXXXXXXX - Addr: XXXXXXXX - - */ - -static void -hexvalue (unsigned long int value, char *buf, size_t len) -{ - char *cp = _itoa_word (value, buf + len, 16, 0); - while (cp > buf) - *--cp = '0'; -} - -static void -register_dump (int fd, const struct ucontext *ctx) -{ - char regs[21][8]; - struct iovec iov[97]; - size_t nr = 0; - -#define ADD_STRING(str) \ - iov[nr].iov_base = (char *) str; \ - iov[nr].iov_len = strlen (str); \ - ++nr -#define ADD_MEM(str, len) \ - iov[nr].iov_base = str; \ - iov[nr].iov_len = len; \ - ++nr - - /* Generate strings of register contents. */ - hexvalue (ctx->uc_mcontext.arm_r0, regs[0], 8); - hexvalue (ctx->uc_mcontext.arm_r1, regs[1], 8); - hexvalue (ctx->uc_mcontext.arm_r2, regs[2], 8); - hexvalue (ctx->uc_mcontext.arm_r3, regs[3], 8); - hexvalue (ctx->uc_mcontext.arm_r4, regs[4], 8); - hexvalue (ctx->uc_mcontext.arm_r5, regs[5], 8); - hexvalue (ctx->uc_mcontext.arm_r6, regs[6], 8); - hexvalue (ctx->uc_mcontext.arm_r7, regs[7], 8); - hexvalue (ctx->uc_mcontext.arm_r8, regs[8], 8); - hexvalue (ctx->uc_mcontext.arm_r9, regs[9], 8); - hexvalue (ctx->uc_mcontext.arm_r10, regs[10], 8); - hexvalue (ctx->uc_mcontext.arm_fp, regs[11], 8); - hexvalue (ctx->uc_mcontext.arm_ip, regs[12], 8); - hexvalue (ctx->uc_mcontext.arm_sp, regs[13], 8); - hexvalue (ctx->uc_mcontext.arm_lr, regs[14], 8); - hexvalue (ctx->uc_mcontext.arm_pc, regs[15], 8); - hexvalue (ctx->uc_mcontext.arm_cpsr, regs[16], 8); - hexvalue (ctx->uc_mcontext.trap_no, regs[17], 8); - hexvalue (ctx->uc_mcontext.error_code, regs[18], 8); - hexvalue (ctx->uc_mcontext.oldmask, regs[19], 8); - hexvalue (ctx->uc_mcontext.fault_address, regs[20], 8); - - /* Generate the output. */ - ADD_STRING ("Register dump:\n\n R0: "); - ADD_MEM (regs[0], 8); - ADD_STRING (" R1: "); - ADD_MEM (regs[1], 8); - ADD_STRING (" R2: "); - ADD_MEM (regs[2], 8); - ADD_STRING (" R3: "); - ADD_MEM (regs[3], 8); - ADD_STRING ("\n R4: "); - ADD_MEM (regs[4], 8); - ADD_STRING (" R5: "); - ADD_MEM (regs[5], 8); - ADD_STRING (" R6: "); - ADD_MEM (regs[6], 8); - ADD_STRING (" R7: "); - ADD_MEM (regs[7], 8); - ADD_STRING ("\n R8: "); - ADD_MEM (regs[8], 8); - ADD_STRING (" R9: "); - ADD_MEM (regs[9], 8); - ADD_STRING (" SL: "); - ADD_MEM (regs[10], 8); - ADD_STRING (" FP: "); - ADD_MEM (regs[11], 8); - ADD_STRING ("\n IP: "); - ADD_MEM (regs[12], 8); - ADD_STRING (" SP: "); - ADD_MEM (regs[13], 8); - ADD_STRING (" LR: "); - ADD_MEM (regs[14], 8); - ADD_STRING (" PC: "); - ADD_MEM (regs[15], 8); - ADD_STRING ("\n\n CPSR: "); - ADD_MEM (regs[16], 8); - ADD_STRING ("\n\n Trap: "); - ADD_MEM (regs[17], 8); - ADD_STRING (" Error: "); - ADD_MEM (regs[18], 8); - ADD_STRING (" OldMask: "); - ADD_MEM (regs[19], 8); - ADD_STRING ("\n Addr: "); - ADD_MEM (regs[20], 8); - - ADD_STRING ("\n"); - - /* Write the stuff out. */ - writev (fd, iov, nr); -} - - -#define REGISTER_DUMP register_dump (fd, ctx) diff --git a/ports/sysdeps/unix/sysv/linux/arm/scandir64.c b/ports/sysdeps/unix/sysv/linux/arm/scandir64.c deleted file mode 100644 index 506fd8877c..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/scandir64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/scandir64.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/semctl.c b/ports/sysdeps/unix/sysv/linux/arm/semctl.c deleted file mode 100644 index a45863bd82..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/semctl.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1995-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <stdarg.h> -#include <sys/sem.h> -#include <ipc_priv.h> -#include <sysdep.h> -#include <sys/syscall.h> - - -/* Define a `union semun' suitable for Linux here. */ -union semun -{ - int val; /* value for SETVAL */ - struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */ - unsigned short int *array; /* array for GETALL & SETALL */ - struct seminfo *__buf; /* buffer for IPC_INFO */ -}; - -int -__new_semctl (int semid, int semnum, int cmd, ...) -{ - union semun arg; - va_list ap; - - va_start (ap, cmd); - - /* Get the argument. */ - arg = va_arg (ap, union semun); - - va_end (ap); - - return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd | __IPC_64, - arg.array); -} - -#include <shlib-compat.h> -versioned_symbol (libc, __new_semctl, semctl, GLIBC_2_2); diff --git a/ports/sysdeps/unix/sysv/linux/arm/setcontext.S b/ports/sysdeps/unix/sysv/linux/arm/setcontext.S deleted file mode 100644 index 7b9b511b80..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/setcontext.S +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (C) 2012-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <rtld-global-offsets.h> - -#include "ucontext_i.h" - - .syntax unified - .text - -/* int setcontext (const ucontext_t *ucp) */ - -ENTRY(__setcontext) - mov r4, r0 - add r0, r0, #UCONTEXT_REGSPACE - - /* Restore the VFP registers. Copied from arm/__longjmp.S. */ -#ifdef PIC - ldr r2, 1f - ldr r1, .Lrtld_global_ro -0: add r2, pc, r2 - ldr r2, [r2, r1] - ldr r2, [r2, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET] -#else - ldr r2, .Lhwcap - ldr r2, [r2, #0] -#endif - -#ifdef __SOFTFP__ - tst r2, #HWCAP_ARM_VFP - beq .Lno_vfp_sc -#endif - - /* Following instruction is vldmia r0!, {d8-d15}. */ - ldc p11, cr8, [r0], #64 - /* Restore the floating-point status register. */ - ldr r1, [r0], #4 - /* Following instruction is fmxr fpscr, r1. */ - mcr p10, 7, r1, cr1, cr0, 0 -.Lno_vfp_sc: - tst r2, #HWCAP_ARM_IWMMXT - beq .Lno_iwmmxt_sc - - /* Restore the call-preserved iWMMXt registers. */ - /* Following instructions are wldrd wr10, [r0], #8 (etc.) */ - ldcl p1, cr10, [r0], #8 - ldcl p1, cr11, [r0], #8 - ldcl p1, cr12, [r0], #8 - ldcl p1, cr13, [r0], #8 - ldcl p1, cr14, [r0], #8 - ldcl p1, cr15, [r0], #8 -.Lno_iwmmxt_sc: - - /* Now bring back the signal status. */ - mov r0, #SIG_SETMASK - add r1, r4, #UCONTEXT_SIGMASK - mov r2, #0 - bl PLTJMP(__sigprocmask) - - /* Loading r0-r3 makes makecontext easier. */ - add r14, r4, #MCONTEXT_ARM_R0 - ldmia r14, {r0-r12} - ldr r13, [r14, #(MCONTEXT_ARM_SP - MCONTEXT_ARM_R0)] - add r14, r14, #(MCONTEXT_ARM_LR - MCONTEXT_ARM_R0) - ldmia r14, {r14, pc} - -END(setcontext) -weak_alias(__setcontext, setcontext) - - /* Called when a makecontext() context returns. Start the - context in R4 or fall through to exit(). */ -ENTRY(__startcontext) - movs r0, r4 - bne PLTJMP(__setcontext) - - @ New context was 0 - exit - b PLTJMP(HIDDEN_JUMPTARGET(_exit)) -END(__startcontext) - -#ifdef PIC -1: .long _GLOBAL_OFFSET_TABLE_ - 0b - PC_OFS -.Lrtld_global_ro: - .long C_SYMBOL_NAME(_rtld_global_ro)(GOT) -#else -.Lhwcap: - .long C_SYMBOL_NAME(_dl_hwcap) -#endif diff --git a/ports/sysdeps/unix/sysv/linux/arm/setegid.c b/ports/sysdeps/unix/sysv/linux/arm/setegid.c deleted file mode 100644 index 2e3a54c893..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/setegid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/setegid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/seteuid.c b/ports/sysdeps/unix/sysv/linux/arm/seteuid.c deleted file mode 100644 index 18e41d08c1..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/seteuid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/seteuid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/setfsgid.c b/ports/sysdeps/unix/sysv/linux/arm/setfsgid.c deleted file mode 100644 index 0886712569..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/setfsgid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/setfsgid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/setfsuid.c b/ports/sysdeps/unix/sysv/linux/arm/setfsuid.c deleted file mode 100644 index a9f22eb8ab..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/setfsuid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/setfsuid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/setgid.c b/ports/sysdeps/unix/sysv/linux/arm/setgid.c deleted file mode 100644 index 377021d9ec..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/setgid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/setgid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/setgroups.c b/ports/sysdeps/unix/sysv/linux/arm/setgroups.c deleted file mode 100644 index 0e7086278f..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/setgroups.c +++ /dev/null @@ -1,2 +0,0 @@ -/* We also have to rewrite the kernel gid_t to the user land type. */ -#include <sysdeps/unix/sysv/linux/i386/setgroups.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/setregid.c b/ports/sysdeps/unix/sysv/linux/arm/setregid.c deleted file mode 100644 index 99c57ad20f..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/setregid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/setregid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/setresgid.c b/ports/sysdeps/unix/sysv/linux/arm/setresgid.c deleted file mode 100644 index daca1a4833..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/setresgid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/setresgid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/setresuid.c b/ports/sysdeps/unix/sysv/linux/arm/setresuid.c deleted file mode 100644 index 3aeabe9ad7..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/setresuid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/setresuid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/setreuid.c b/ports/sysdeps/unix/sysv/linux/arm/setreuid.c deleted file mode 100644 index 8ad61226e9..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/setreuid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/setreuid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/setrlimit.c b/ports/sysdeps/unix/sysv/linux/arm/setrlimit.c deleted file mode 100644 index bfaef74c38..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/setrlimit.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/setrlimit.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/setuid.c b/ports/sysdeps/unix/sysv/linux/arm/setuid.c deleted file mode 100644 index de394379be..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/setuid.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/setuid.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/shmctl.c b/ports/sysdeps/unix/sysv/linux/arm/shmctl.c deleted file mode 100644 index eed4c8dcef..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/shmctl.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1995-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <sys/shm.h> -#include <ipc_priv.h> -#include <sysdep.h> -#include <sys/syscall.h> -#include <bits/wordsize.h> - - -int -__new_shmctl (int shmid, int cmd, struct shmid_ds *buf) -{ - return INLINE_SYSCALL (shmctl, 3, shmid, cmd | __IPC_64, buf); -} - -#include <shlib-compat.h> -versioned_symbol (libc, __new_shmctl, shmctl, GLIBC_2_2); diff --git a/ports/sysdeps/unix/sysv/linux/arm/sigaction.c b/ports/sysdeps/unix/sysv/linux/arm/sigaction.c deleted file mode 100644 index 21df885a7a..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/sigaction.c +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <signal.h> -#include <string.h> - -#include <sysdep.h> -#include <sys/syscall.h> -#include <kernel-features.h> - -/* The difference here is that the sigaction structure used in the - kernel is not the same as we use in the libc. Therefore we must - translate it here. */ -#include <kernel_sigaction.h> - -#define SA_RESTORER 0x04000000 - -extern void __default_sa_restorer_v1(void); -extern void __default_sa_restorer_v2(void); -extern void __default_rt_sa_restorer_v1(void); -extern void __default_rt_sa_restorer_v2(void); -#ifdef __ASSUME_SIGFRAME_V2 -# define __default_sa_restorer __default_sa_restorer_v2 -# define __default_rt_sa_restorer __default_rt_sa_restorer_v2 -#else -# include <ldsodefs.h> -# define __default_sa_restorer (GLRO(dl_osversion) >= 0x020612 \ - ? __default_sa_restorer_v2 \ - : __default_sa_restorer_v1) -# define __default_rt_sa_restorer (GLRO(dl_osversion) >= 0x020612 \ - ? __default_rt_sa_restorer_v2 \ - : __default_rt_sa_restorer_v1) -#endif - -/* When RT signals are in use we need to use a different return stub. */ -#define choose_restorer(flags) \ - (flags & SA_SIGINFO) ? __default_rt_sa_restorer \ - : __default_sa_restorer - -/* If ACT is not NULL, change the action for SIG to *ACT. - If OACT is not NULL, put the old action for SIG in *OACT. */ -int -__libc_sigaction (sig, act, oact) - int sig; - const struct sigaction *act; - struct sigaction *oact; -{ - int result; - - struct kernel_sigaction kact, koact; - - if (act) - { - kact.k_sa_handler = act->sa_handler; - memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); - kact.sa_flags = act->sa_flags; -#ifdef HAVE_SA_RESTORER - if (kact.sa_flags & SA_RESTORER) - kact.sa_restorer = act->sa_restorer; - else - { - kact.sa_restorer = choose_restorer (kact.sa_flags); - kact.sa_flags |= SA_RESTORER; - } -#endif - } - - /* XXX The size argument hopefully will have to be changed to the - real size of the user-level sigset_t. */ - result = INLINE_SYSCALL (rt_sigaction, 4, sig, - act ? &kact : NULL, - oact ? &koact : NULL, _NSIG / 8); - - if (oact && result >= 0) - { - oact->sa_handler = koact.k_sa_handler; - memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t)); - oact->sa_flags = koact.sa_flags; -#ifdef HAVE_SA_RESTORER - oact->sa_restorer = koact.sa_restorer; -#endif - } - return result; -} -libc_hidden_def (__libc_sigaction) - -#ifdef WRAPPER_INCLUDE -# include WRAPPER_INCLUDE -#endif - -#ifndef LIBC_SIGACTION -weak_alias (__libc_sigaction, __sigaction) -libc_hidden_weak (__sigaction) -weak_alias (__libc_sigaction, sigaction) -#endif diff --git a/ports/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h b/ports/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h deleted file mode 100644 index 258703dc88..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/sigcontextinfo.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 1999-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell <philb@gnu.org>, 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sys/ucontext.h> -#include "kernel-features.h" - -#define SIGCONTEXT siginfo_t *_si, struct ucontext * -#define SIGCONTEXT_EXTRA_ARGS _si, - -/* The sigcontext structure changed between 2.0 and 2.1 kernels. On any - modern system we should be able to assume that the "new" format will be - in use. */ - -#define GET_PC(ctx) ((void *) (ctx)->uc_mcontext.arm_pc) -#define GET_FRAME(ctx) ADVANCE_STACK_FRAME ((void *) ctx->uc_mcontext.arm_fp) -#define GET_STACK(ctx) ((void *) (ctx)->uc_mcontext.arm_sp) - -#define ADVANCE_STACK_FRAME(frm) \ - ((struct layout *)frm - 1) - -#define CALL_SIGHANDLER(handler, signo, ctx) \ - (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) - -/* There is no reliable way to get the sigcontext unless we use a - three-argument signal handler. */ -#define __sigaction(sig, act, oact) ({ \ - (act)->sa_flags |= SA_SIGINFO; \ - (__sigaction) (sig, act, oact); \ -}) - -#define sigaction(sig, act, oact) ({ \ - (act)->sa_flags |= SA_SIGINFO; \ - (sigaction) (sig, act, oact); \ -}) diff --git a/ports/sysdeps/unix/sysv/linux/arm/sigrestorer.S b/ports/sysdeps/unix/sysv/linux/arm/sigrestorer.S deleted file mode 100644 index 566c04aed0..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/sigrestorer.S +++ /dev/null @@ -1,117 +0,0 @@ -/* Copyright (C) 1999-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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> - -/* If no SA_RESTORER function was specified by the application we use - one of these. This avoids the need for the kernel to synthesise a return - instruction on the stack, which would involve expensive cache flushes. - - Nowadays (2.6 series, and somewhat earlier) the kernel uses a high page - for signal trampolines, so the cache flushes are not an issue. But since - we do not have a vDSO, continue to use these so that we can provide - unwind information. - - Start the unwind tables at least one instruction before the signal - trampoline, because the unwinder will assume we are returning after - a call site. - - Because the signal frame layout changed in 2.6.18, we provide two - copies of these functions with different unwind information. */ - -/* Used in ENTRY. */ -#undef cfi_startproc -#define cfi_startproc \ - .cfi_startproc simple; \ - .cfi_signal_frame - -/* The CFA is not computed / used correctly here; this is neither trivial to - do, nor is it needed. */ -#define CFI \ - cfi_def_cfa (sp, 0); \ - cfi_offset (r0, OFFSET + 0 * 4); \ - cfi_offset (r1, OFFSET + 1 * 4); \ - cfi_offset (r2, OFFSET + 2 * 4); \ - cfi_offset (r3, OFFSET + 3 * 4); \ - cfi_offset (r4, OFFSET + 4 * 4); \ - cfi_offset (r5, OFFSET + 5 * 4); \ - cfi_offset (r6, OFFSET + 6 * 4); \ - cfi_offset (r7, OFFSET + 7 * 4); \ - cfi_offset (r8, OFFSET + 8 * 4); \ - cfi_offset (r9, OFFSET + 9 * 4); \ - cfi_offset (r10, OFFSET + 10 * 4); \ - cfi_offset (r11, OFFSET + 11 * 4); \ - cfi_offset (r12, OFFSET + 12 * 4); \ - cfi_offset (r13, OFFSET + 13 * 4); \ - cfi_offset (r14, OFFSET + 14 * 4); \ - cfi_offset (r15, OFFSET + 15 * 4) - -#ifndef __ASSUME_SIGFRAME_V2 -#define OFFSET 12 - .fnstart - .save {r0-r15} - .pad #OFFSET - nop -ENTRY(__default_sa_restorer_v1) - CFI - mov r7, $SYS_ify(sigreturn) - swi 0x0 - .fnend -END(__default_sa_restorer_v1) -#undef OFFSET -#endif /* __ASSUME_SIGFRAME_V2 */ - -#define OFFSET 32 - .fnstart - .save {r0-r15} - .pad #OFFSET - nop -ENTRY(__default_sa_restorer_v2) - CFI - mov r7, $SYS_ify(sigreturn) - swi 0x0 - .fnend -END(__default_sa_restorer_v2) -#undef OFFSET - -#ifndef __ASSUME_SIGFRAME_V2 -#define OFFSET 168 - .fnstart - .save {r0-r15} - .pad #OFFSET - nop -ENTRY(__default_rt_sa_restorer_v1) - CFI - mov r7, $SYS_ify(rt_sigreturn) - swi 0x0 - .fnend -END(__default_rt_sa_restorer_v1) -#undef OFFSET -#endif /* __ASSUME_SIGFRAME_V2 */ - -#define OFFSET 160 - .fnstart - .save {r0-r15} - .pad #OFFSET - nop -ENTRY(__default_rt_sa_restorer_v2) - CFI - mov r7, $SYS_ify(rt_sigreturn) - swi 0x0 - .fnend -END(__default_rt_sa_restorer_v2) -#undef OFFSET diff --git a/ports/sysdeps/unix/sysv/linux/arm/swapcontext.S b/ports/sysdeps/unix/sysv/linux/arm/swapcontext.S deleted file mode 100644 index 65a36d2a4c..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/swapcontext.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2012-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -#include "ucontext_i.h" - - .syntax unified - .text - -/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */ - -ENTRY(swapcontext) - - /* Have getcontext() do most of the work then fix up - LR afterwards. Save R3 to keep the stack aligned. */ - push {r0,r1,r3,r14} - cfi_adjust_cfa_offset (16) - cfi_rel_offset (r0,0) - cfi_rel_offset (r1,4) - cfi_rel_offset (r3,8) - cfi_rel_offset (r14,12) - - bl __getcontext - mov r4, r0 - - pop {r0,r1,r3,r14} - cfi_adjust_cfa_offset (-16) - cfi_restore (r0) - cfi_restore (r1) - cfi_restore (r3) - cfi_restore (r14) - - /* Exit if getcontext() failed. */ - cmp r4, #0 - itt ne - movne r0, r4 - RETINSTR(ne, r14) - - /* Fix up LR and the PC. */ - str r13,[r0, #MCONTEXT_ARM_SP] - str r14,[r0, #MCONTEXT_ARM_LR] - str r14,[r0, #MCONTEXT_ARM_PC] - - /* And swap using swapcontext(). */ - mov r0, r1 - b __setcontext - -END(swapcontext) diff --git a/ports/sysdeps/unix/sysv/linux/arm/sys/elf.h b/ports/sysdeps/unix/sysv/linux/arm/sys/elf.h deleted file mode 100644 index a03b1ad6ff..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/sys/elf.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 1996-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_ELF_H -#define _SYS_ELF_H 1 - -#warning "This header is obsolete; use <sys/procfs.h> instead." - -#include <sys/procfs.h> - -#endif /* sys/elf.h */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/sys/io.h b/ports/sysdeps/unix/sysv/linux/arm/sys/io.h deleted file mode 100644 index 59d4bbcc4d..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/sys/io.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 1996-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_IO_H - -#define _SYS_IO_H 1 -#include <features.h> - -__BEGIN_DECLS - -/* If TURN_ON is TRUE, request for permission to do direct i/o on the - port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O - permission off for that range. This call requires root privileges. */ -extern int ioperm (unsigned long int __from, unsigned long int __num, - int __turn_on) __THROW; - -/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero, - permission to access any I/O port is granted. This call requires - root privileges. */ -extern int iopl (int __level) __THROW; - -/* The functions that actually perform reads and writes. */ -extern unsigned char inb (unsigned long int __port) __THROW; -extern unsigned short int inw (unsigned long int __port) __THROW; -extern unsigned long int inl (unsigned long int __port) __THROW; - -extern void outb (unsigned char __value, unsigned long int __port) __THROW; -extern void outw (unsigned short __value, unsigned long int __port) __THROW; -extern void outl (unsigned long __value, unsigned long int __port) __THROW; - -__END_DECLS - -#endif /* _SYS_IO_H */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/sys/procfs.h b/ports/sysdeps/unix/sysv/linux/arm/sys/procfs.h deleted file mode 100644 index 415cf8dd49..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/sys/procfs.h +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright (C) 1996-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somewhat modelled after the file of the same name on SVR4 - systems. It provides a definition of the core file format for ELF - used on Linux. It doesn't have anything to do with the /proc file - system, even though Linux has one. - - Anyway, the whole purpose of this file is for GDB and GDB only. - Don't read too much into it. Don't use it for anything other than - GDB unless you know what you are doing. */ - -#include <features.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/user.h> - -__BEGIN_DECLS - -/* Type for a general-purpose register. */ -typedef unsigned long elf_greg_t; - -/* And the whole bunch of them. We could have used `struct - user_regs' directly in the typedef, but tradition says that - the register set is an array, which does have some peculiar - semantics, so leave it that way. */ -#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t)) -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -/* Register set for the floating-point registers. */ -typedef struct user_fpregs elf_fpregset_t; - -/* Signal info. */ -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with Linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - GDB doesn't really use excluded. */ - -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args. */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned short int pr_uid; - unsigned short int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - -/* The rest of this file provides the types for emulation of the - Solaris <proc_service.h> interfaces that should be implemented by - users of libthread_db. */ - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore have only one PID type. */ -typedef __pid_t lwpid_t; - -/* Process status and info. In the end we do provide typedefs for them. */ -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/sys/ucontext.h b/ports/sysdeps/unix/sysv/linux/arm/sys/ucontext.h deleted file mode 100644 index dbda8303cb..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/sys/ucontext.h +++ /dev/null @@ -1,112 +0,0 @@ -/* Copyright (C) 1998-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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 <signal.h> - -/* We need the signal context definitions even if they are not used - included in <signal.h>. */ -#include <bits/sigcontext.h> - -typedef int greg_t; - -/* Number of general registers. */ -#define NGREG 18 - -/* Container for all general registers. */ -typedef greg_t gregset_t[NGREG]; - -/* Number of each register is the `gregset_t' array. */ -enum -{ - REG_R0 = 0, -#define REG_R0 REG_R0 - REG_R1 = 1, -#define REG_R1 REG_R1 - REG_R2 = 2, -#define REG_R2 REG_R2 - REG_R3 = 3, -#define REG_R3 REG_R3 - REG_R4 = 4, -#define REG_R4 REG_R4 - REG_R5 = 5, -#define REG_R5 REG_R5 - REG_R6 = 6, -#define REG_R6 REG_R6 - REG_R7 = 7, -#define REG_R7 REG_R7 - REG_R8 = 8, -#define REG_R8 REG_R8 - REG_R9 = 9, -#define REG_R9 REG_R9 - REG_R10 = 10, -#define REG_R10 REG_R10 - REG_R11 = 11, -#define REG_R11 REG_R11 - REG_R12 = 12, -#define REG_R12 REG_R12 - REG_R13 = 13, -#define REG_R13 REG_R13 - REG_R14 = 14, -#define REG_R14 REG_R14 - REG_R15 = 15 -#define REG_R15 REG_R15 -}; - -struct _libc_fpstate -{ - struct - { - unsigned int sign1:1; - unsigned int unused:15; - unsigned int sign2:1; - unsigned int exponent:14; - unsigned int j:1; - unsigned int mantissa1:31; - unsigned int mantissa0:32; - } fpregs[8]; - unsigned int fpsr:32; - unsigned int fpcr:32; - unsigned char ftype[8]; - unsigned int init_flag; -}; -/* Structure to describe FPU registers. */ -typedef struct _libc_fpstate fpregset_t; - -/* Context to describe whole processor state. This only describes - the core registers; coprocessor registers get saved elsewhere - (e.g. in uc_regspace, or somewhere unspecified on the stack - during non-RT signal handlers). */ -typedef struct sigcontext mcontext_t; - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - __sigset_t uc_sigmask; - unsigned long uc_regspace[128] __attribute__((__aligned__(8))); - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/sys/user.h b/ports/sysdeps/unix/sysv/linux/arm/sys/user.h deleted file mode 100644 index 37fc08b0a7..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/sys/user.h +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright (C) 1998-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_USER_H -#define _SYS_USER_H 1 - -/* The whole purpose of this file is for GDB and GDB only. Don't read - too much into it. Don't use it for anything other than GDB unless - you know what you are doing. */ - -struct user_fpregs -{ - struct fp_reg - { - unsigned int sign1:1; - unsigned int unused:15; - unsigned int sign2:1; - unsigned int exponent:14; - unsigned int j:1; - unsigned int mantissa1:31; - unsigned int mantissa0:32; - } fpregs[8]; - unsigned int fpsr:32; - unsigned int fpcr:32; - unsigned char ftype[8]; - unsigned int init_flag; -}; - -struct user_regs -{ - unsigned long int uregs[18]; -}; - -struct user -{ - struct user_regs regs; /* General registers */ - int u_fpvalid; /* True if math co-processor being used. */ - - unsigned long int u_tsize; /* Text segment size (pages). */ - unsigned long int u_dsize; /* Data segment size (pages). */ - unsigned long int u_ssize; /* Stack segment size (pages). */ - - unsigned long start_code; /* Starting virtual address of text. */ - unsigned long start_stack; /* Starting virtual address of stack. */ - - long int signal; /* Signal that caused the core dump. */ - int reserved; /* No longer used */ - struct user_regs *u_ar0; /* help gdb to find the general registers. */ - - unsigned long magic; /* uniquely identify a core file */ - char u_comm[32]; /* User command that was responsible */ - int u_debugreg[8]; - struct user_fpregs u_fp; /* Floating point registers */ - struct user_fpregs *u_fp0; /* help gdb to find the FP registers. */ -}; - -#endif /* sys/user.h */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/syscall.S b/ports/sysdeps/unix/sysv/linux/arm/syscall.S deleted file mode 100644 index c5582f82fd..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/syscall.S +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2005-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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> - -/* In the EABI syscall interface, we don't need a special syscall to - implement syscall(). It won't work reliably with 64-bit arguments - (but that is true on many modern platforms). */ - -ENTRY (syscall) - mov ip, sp - 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) - mov r7, r0 - mov r0, r1 - mov r1, r2 - mov r2, r3 - ldmfd ip, {r3, r4, r5, r6} - swi 0x0 - pop {r4, r5, r6, r7} - cfi_adjust_cfa_offset (-16) - cfi_restore (r4) - cfi_restore (r5) - cfi_restore (r6) - cfi_restore (r7) - cmn r0, #4096 - it cc - RETINSTR(cc, lr) - b PLTJMP(syscall_error) -PSEUDO_END (syscall) diff --git a/ports/sysdeps/unix/sysv/linux/arm/syscalls.list b/ports/sysdeps/unix/sysv/linux/arm/syscalls.list deleted file mode 100644 index ba8cdd7e65..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/syscalls.list +++ /dev/null @@ -1,38 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -chown - chown32 i:sii __chown chown - -prlimit64 EXTRA prlimit64 i:iipp prlimit64 - -fanotify_mark EXTRA fanotify_mark i:iiiiis fanotify_mark - -# Semaphore and shm system calls. msgctl, shmctl, and semctl have C -# wrappers (to set __IPC_64). -msgget - msgget i:ii __msgget msgget -msgrcv - msgrcv Ci:ibnii __msgrcv msgrcv -msgsnd - msgsnd Ci:ibni __msgsnd msgsnd -shmat - shmat i:ipi __shmat shmat -shmdt - shmdt i:s __shmdt shmdt -shmget - shmget i:iii __shmget shmget -semop - semop i:ipi __semop semop -semtimedop - semtimedop i:ipip semtimedop -semget - semget i:iii __semget semget - -# proper socket implementations: -accept - accept Ci:iBN __libc_accept __accept accept -bind - bind i:ipi __bind bind -connect - connect Ci:ipi __libc_connect __connect connect -getpeername - getpeername i:ipp __getpeername getpeername -getsockname - getsockname i:ipp __getsockname getsockname -getsockopt - getsockopt i:iiiBN __getsockopt getsockopt -listen - listen i:ii __listen listen -recv - recv Ci:ibni __libc_recv __recv recv -recvfrom - recvfrom Ci:ibniBN __libc_recvfrom __recvfrom recvfrom -recvmsg - recvmsg Ci:ipi __libc_recvmsg __recvmsg recvmsg -send - send Ci:ibni __libc_send __send send -sendmsg - sendmsg Ci:ipi __libc_sendmsg __sendmsg sendmsg -sendto - sendto Ci:ibnibn __libc_sendto __sendto sendto -setsockopt - setsockopt i:iiibn __setsockopt setsockopt -shutdown - shutdown i:ii __shutdown shutdown -socket - socket i:iii __socket socket -socketpair - socketpair i:iiif __socketpair socketpair diff --git a/ports/sysdeps/unix/sysv/linux/arm/sysdep.S b/ports/sysdeps/unix/sysv/linux/arm/sysdep.S deleted file mode 100644 index 936de45533..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/sysdep.S +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1995-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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> - - .text - -/* The syscall stubs jump here when they detect an error. - The code for Linux is almost identical to the canonical Unix - code, except that the error number in R0 is negated. */ - -#undef CALL_MCOUNT -#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers R0. */ - -ENTRY (__syscall_error) - rsb r0, r0, $0 - -#define __syscall_error __syscall_error_1 -#include <sysdeps/unix/arm/sysdep.S> diff --git a/ports/sysdeps/unix/sysv/linux/arm/sysdep.h b/ports/sysdeps/unix/sysv/linux/arm/sysdep.h deleted file mode 100644 index dcd99198cc..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/sysdep.h +++ /dev/null @@ -1,482 +0,0 @@ -/* Copyright (C) 1992-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995. - ARM changes by Philip Blundell, <pjb27@cam.ac.uk>, May 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/>. */ - -#ifndef _LINUX_ARM_SYSDEP_H -#define _LINUX_ARM_SYSDEP_H 1 - -/* There is some commonality. */ -#include <sysdeps/unix/arm/sysdep.h> - -/* Defines RTLD_PRIVATE_ERRNO and USE_DL_SYSINFO. */ -#include <dl-sysdep.h> - -#include <tls.h> - -/* In order to get __set_errno() definition in INLINE_SYSCALL. */ -#ifndef __ASSEMBLER__ -#include <errno.h> -#endif - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) (__NR_##syscall_name) - -#define _SYS_AUXV_H 1 -#include <bits/hwcap.h> - -#ifdef __ASSEMBLER__ - -#ifndef ARCH_HAS_HARD_TP -/* Internal macro calling the linux kernel kuser_get_tls helper. - Note that in thumb mode, a constant pool break is often out of range, so - we always expand the constant inline. */ -# ifdef __thumb2__ -# define GET_TLS_BODY \ - movw r0, #0x0fe0; \ - movt r0, #0xffff; \ - blx r0 -# else -# define GET_TLS_BODY \ - mov r0, #0xffff0fff; /* Point to the high page. */ \ - mov lr, pc; /* Save our return address. */ \ - sub pc, r0, #31 /* Jump to the TLS entry. */ -# endif - -/* Helper to get the TLS base pointer. Save LR in TMP, return in R0, - and no other registers clobbered. TMP may be LR itself to indicate - that no save is necessary. */ -# undef GET_TLS -# define GET_TLS(TMP) \ - .ifnc TMP, lr; \ - mov TMP, lr; \ - cfi_register (lr, TMP); \ - GET_TLS_BODY; \ - mov lr, TMP; \ - cfi_restore (lr); \ - .else; \ - GET_TLS_BODY; \ - .endif -#endif /* ARCH_HAS_HARD_TP */ - -/* Linux uses a negative return value to indicate syscall errors, - unlike most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be - negative even if the call succeeded. E.g., the `lseek' system call - might return a large offset. Therefore we must not anymore test - for < 0, but test for a real error by making sure the value in R0 - is a real error number. Linus said he will make sure the no syscall - returns a value in -1 .. -4095 as a valid result so we can safely - test with -4095. */ - -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ - .text; \ - ENTRY (name); \ - DO_CALL (syscall_name, args); \ - cmn r0, $4096; - -#define PSEUDO_RET \ - it cc; \ - RETINSTR(cc, lr); \ - b PLTJMP(SYSCALL_ERROR) -#undef ret -#define ret PSEUDO_RET - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - SYSCALL_ERROR_HANDLER; \ - END (name) - -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - .text; \ - ENTRY (name); \ - DO_CALL (syscall_name, args); - -#define PSEUDO_RET_NOERRNO \ - DO_RET (lr); - -#undef ret_NOERRNO -#define ret_NOERRNO PSEUDO_RET_NOERRNO - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - END (name) - -/* The function has to return the error code. */ -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - .text; \ - ENTRY (name) \ - DO_CALL (syscall_name, args); \ - rsb r0, r0, #0 - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ - END (name) - -#define ret_ERRVAL PSEUDO_RET_NOERRNO - -#if NOT_IN_libc -# define SYSCALL_ERROR __local_syscall_error -# if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_HANDLER \ -__local_syscall_error: \ - rsb r0, r0, #0; \ - LDST_PCREL(str, r0, r1, C_SYMBOL_NAME(rtld_errno)); \ - mvn r0, #0; \ - DO_RET(lr) -# else -# if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) -# define POP_PC \ - pop { lr }; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (lr); \ - bx lr -# else -# define POP_PC pop { pc } -# endif -# define SYSCALL_ERROR_HANDLER \ -__local_syscall_error: \ - push { lr }; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (lr, 0); \ - push { r0 }; \ - cfi_adjust_cfa_offset (4); \ - bl PLTJMP(C_SYMBOL_NAME(__errno_location)); \ - pop { r1 }; \ - cfi_adjust_cfa_offset (-4); \ - rsb r1, r1, #0; \ - str r1, [r0]; \ - mvn r0, #0; \ - POP_PC; -# endif -#else -# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ -# define SYSCALL_ERROR __syscall_error -#endif - -/* The ARM EABI user interface passes the syscall number in r7, instead - of in the swi. This is more efficient, because the kernel does not need - to fetch the swi from memory to find out the number; which can be painful - with separate I-cache and D-cache. Make sure to use 0 for the SWI - argument; otherwise the (optional) compatibility code for APCS binaries - may be invoked. */ - -/* Linux takes system call args in registers: - arg 1 r0 - arg 2 r1 - arg 3 r2 - arg 4 r3 - arg 5 r4 (this is different from the APCS convention) - arg 6 r5 - arg 7 r6 - - The compiler is going to form a call by coming here, through PSEUDO, with - arguments - syscall number in the DO_CALL macro - arg 1 r0 - arg 2 r1 - arg 3 r2 - arg 4 r3 - arg 5 [sp] - arg 6 [sp+4] - arg 7 [sp+8] - - We need to shuffle values between R4..R6 and the stack so that the - caller's v1..v3 and stack frame are not corrupted, and the kernel - sees the right arguments. - -*/ - -/* We must save and restore r7 (call-saved) for the syscall number. - We never make function calls from inside here (only potentially - signal handlers), so we do not bother with doubleword alignment. - - Just like the APCS syscall convention, the EABI syscall convention uses - r0 through r6 for up to seven syscall arguments. None are ever passed to - the kernel on the stack, although incoming arguments are on the stack for - syscalls with five or more arguments. - - The assembler will convert the literal pool load to a move for most - syscalls. */ - -#undef DO_CALL -#define DO_CALL(syscall_name, args) \ - DOARGS_##args; \ - ldr r7, =SYS_ify (syscall_name); \ - swi 0x0; \ - UNDOARGS_##args - -#undef DOARGS_0 -#define DOARGS_0 \ - .fnstart; \ - push { r7 }; \ - cfi_adjust_cfa_offset (4); \ - cfi_rel_offset (r7, 0); \ - .save { r7 } -#undef DOARGS_1 -#define DOARGS_1 DOARGS_0 -#undef DOARGS_2 -#define DOARGS_2 DOARGS_0 -#undef DOARGS_3 -#define DOARGS_3 DOARGS_0 -#undef DOARGS_4 -#define DOARGS_4 DOARGS_0 -#undef DOARGS_5 -#define DOARGS_5 \ - .fnstart; \ - push {r4, r7}; \ - cfi_adjust_cfa_offset (8); \ - cfi_rel_offset (r4, 0); \ - cfi_rel_offset (r7, 4); \ - .save { r4, r7 }; \ - ldr r4, [sp, #8] -#undef DOARGS_6 -#define DOARGS_6 \ - .fnstart; \ - mov ip, sp; \ - push {r4, r5, r7}; \ - cfi_adjust_cfa_offset (12); \ - cfi_rel_offset (r4, 0); \ - cfi_rel_offset (r5, 4); \ - cfi_rel_offset (r7, 8); \ - .save { r4, r5, r7 }; \ - ldmia ip, {r4, r5} -#undef DOARGS_7 -#define DOARGS_7 \ - .fnstart; \ - mov ip, sp; \ - 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); \ - .save { r4, r5, r6, r7 }; \ - ldmia ip, {r4, r5, r6} - -#undef UNDOARGS_0 -#define UNDOARGS_0 \ - pop {r7}; \ - cfi_adjust_cfa_offset (-4); \ - cfi_restore (r7); \ - .fnend -#undef UNDOARGS_1 -#define UNDOARGS_1 UNDOARGS_0 -#undef UNDOARGS_2 -#define UNDOARGS_2 UNDOARGS_0 -#undef UNDOARGS_3 -#define UNDOARGS_3 UNDOARGS_0 -#undef UNDOARGS_4 -#define UNDOARGS_4 UNDOARGS_0 -#undef UNDOARGS_5 -#define UNDOARGS_5 \ - pop {r4, r7}; \ - cfi_adjust_cfa_offset (-8); \ - cfi_restore (r4); \ - cfi_restore (r7); \ - .fnend -#undef UNDOARGS_6 -#define UNDOARGS_6 \ - pop {r4, r5, r7}; \ - cfi_adjust_cfa_offset (-12); \ - cfi_restore (r4); \ - cfi_restore (r5); \ - cfi_restore (r7); \ - .fnend -#undef UNDOARGS_7 -#define UNDOARGS_7 \ - pop {r4, r5, r6, r7}; \ - cfi_adjust_cfa_offset (-16); \ - cfi_restore (r4); \ - cfi_restore (r5); \ - cfi_restore (r6); \ - cfi_restore (r7); \ - .fnend - -#else /* not __ASSEMBLER__ */ - -/* Define a macro which expands into the inline wrapper code for a system - call. */ -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ unsigned int _sys_result = INTERNAL_SYSCALL (name, , nr, args); \ - if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_sys_result, ), 0)) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (_sys_result, )); \ - _sys_result = (unsigned int) -1; \ - } \ - (int) _sys_result; }) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) do { } while (0) - -#if defined(__thumb__) -/* We can not expose the use of r7 to the compiler. GCC (as - of 4.5) uses r7 as the hard frame pointer for Thumb - although - for Thumb-2 it isn't obviously a better choice than r11. - And GCC does not support asms that conflict with the frame - pointer. - - This would be easier if syscall numbers never exceeded 255, - but they do. For the moment the LOAD_ARGS_7 is sacrificed. - We can't use push/pop inside the asm because that breaks - unwinding (i.e. thread cancellation) for this frame. We can't - locally save and restore r7, because we do not know if this - function uses r7 or if it is our caller's r7; if it is our caller's, - then unwinding will fail higher up the stack. So we move the - syscall out of line and provide its own unwind information. */ -# undef INTERNAL_SYSCALL_RAW -# define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ - ({ \ - register int _a1 asm ("a1"); \ - int _nametmp = name; \ - LOAD_ARGS_##nr (args) \ - register int _name asm ("ip") = _nametmp; \ - asm volatile ("bl __libc_do_syscall" \ - : "=r" (_a1) \ - : "r" (_name) ASM_ARGS_##nr \ - : "memory", "lr"); \ - _a1; }) -#else /* ARM */ -# undef INTERNAL_SYSCALL_RAW -# define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ - ({ \ - register int _a1 asm ("r0"), _nr asm ("r7"); \ - LOAD_ARGS_##nr (args) \ - _nr = name; \ - asm volatile ("swi 0x0 @ syscall " #name \ - : "=r" (_a1) \ - : "r" (_nr) ASM_ARGS_##nr \ - : "memory"); \ - _a1; }) -#endif - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args) - -#undef INTERNAL_SYSCALL_ARM -#define INTERNAL_SYSCALL_ARM(name, err, nr, args...) \ - INTERNAL_SYSCALL_RAW(__ARM_NR_##name, err, nr, args) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((unsigned int) (val) >= 0xfffff001u) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - -#define LOAD_ARGS_0() -#define ASM_ARGS_0 -#define LOAD_ARGS_1(a1) \ - int _a1tmp = (int) (a1); \ - LOAD_ARGS_0 () \ - _a1 = _a1tmp; -#define ASM_ARGS_1 ASM_ARGS_0, "r" (_a1) -#define LOAD_ARGS_2(a1, a2) \ - int _a2tmp = (int) (a2); \ - LOAD_ARGS_1 (a1) \ - register int _a2 asm ("a2") = _a2tmp; -#define ASM_ARGS_2 ASM_ARGS_1, "r" (_a2) -#define LOAD_ARGS_3(a1, a2, a3) \ - int _a3tmp = (int) (a3); \ - LOAD_ARGS_2 (a1, a2) \ - register int _a3 asm ("a3") = _a3tmp; -#define ASM_ARGS_3 ASM_ARGS_2, "r" (_a3) -#define LOAD_ARGS_4(a1, a2, a3, a4) \ - int _a4tmp = (int) (a4); \ - LOAD_ARGS_3 (a1, a2, a3) \ - register int _a4 asm ("a4") = _a4tmp; -#define ASM_ARGS_4 ASM_ARGS_3, "r" (_a4) -#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ - int _v1tmp = (int) (a5); \ - LOAD_ARGS_4 (a1, a2, a3, a4) \ - register int _v1 asm ("v1") = _v1tmp; -#define ASM_ARGS_5 ASM_ARGS_4, "r" (_v1) -#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ - int _v2tmp = (int) (a6); \ - LOAD_ARGS_5 (a1, a2, a3, a4, a5) \ - register int _v2 asm ("v2") = _v2tmp; -#define ASM_ARGS_6 ASM_ARGS_5, "r" (_v2) -#ifndef __thumb__ -# define LOAD_ARGS_7(a1, a2, a3, a4, a5, a6, a7) \ - int _v3tmp = (int) (a7); \ - LOAD_ARGS_6 (a1, a2, a3, a4, a5, a6) \ - register int _v3 asm ("v3") = _v3tmp; -# define ASM_ARGS_7 ASM_ARGS_6, "r" (_v3) -#endif - -/* For EABI, non-constant syscalls are actually pretty easy... */ -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ - INTERNAL_SYSCALL_RAW (number, err, nr, args) - -#endif /* __ASSEMBLER__ */ - -/* Pointer mangling support. */ -#if (defined NOT_IN_libc && defined IS_IN_rtld) || \ - (!defined SHARED && (!defined NOT_IN_libc || defined IS_IN_libpthread)) -# ifdef __ASSEMBLER__ -# define PTR_MANGLE_LOAD(guard, tmp) \ - LDST_PCREL(ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard_local)); -# 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) \ - LDST_GLOBAL(ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard)); -# 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 - -#endif /* linux/arm/sysdep.h */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/truncate64.c b/ports/sysdeps/unix/sysv/linux/arm/truncate64.c deleted file mode 100644 index dbbb5fcb44..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/truncate64.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sys/types.h> -#include <endian.h> -#include <errno.h> -#include <unistd.h> - -#include <sysdep.h> -#include <sys/syscall.h> - -/* Truncate the file FD refers to to LENGTH bytes. */ -int -truncate64 (const char *path, off64_t length) -{ - unsigned int low = length & 0xffffffff; - unsigned int high = length >> 32; - int result = INLINE_SYSCALL (truncate64, 4, path, 0, - __LONG_LONG_PAIR (high, low)); - return result; -} diff --git a/ports/sysdeps/unix/sysv/linux/arm/ucontext_i.sym b/ports/sysdeps/unix/sysv/linux/arm/ucontext_i.sym deleted file mode 100644 index 306292f1f8..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/ucontext_i.sym +++ /dev/null @@ -1,30 +0,0 @@ -#include <inttypes.h> -#include <signal.h> -#include <stddef.h> -#include <sys/ucontext.h> - -SIG_BLOCK -SIG_SETMASK - --- Offsets of the fields in the ucontext_t structure. -#define ucontext(member) offsetof (ucontext_t, member) -#define mcontext(member) ucontext (uc_mcontext.member) - -UCONTEXT_FLAGS ucontext (uc_flags) -UCONTEXT_LINK ucontext (uc_link) -UCONTEXT_STACK ucontext (uc_stack) -UCONTEXT_MCONTEXT ucontext (uc_mcontext) -UCONTEXT_SIGMASK ucontext (uc_sigmask) - -UCONTEXT_REGSPACE ucontext (uc_regspace) - -MCONTEXT_TRAP_NO mcontext (trap_no) -MCONTEXT_ERROR_CODE mcontext (error_code) -MCONTEXT_OLDMASK mcontext (oldmask) -MCONTEXT_ARM_R0 mcontext (arm_r0) -MCONTEXT_ARM_R4 mcontext (arm_r4) -MCONTEXT_ARM_SP mcontext (arm_sp) -MCONTEXT_ARM_LR mcontext (arm_lr) -MCONTEXT_ARM_PC mcontext (arm_pc) -MCONTEXT_ARM_CPSR mcontext (arm_cpsr) -MCONTEXT_FAULT_ADDRESS mcontext (fault_address) diff --git a/ports/sysdeps/unix/sysv/linux/arm/umount.c b/ports/sysdeps/unix/sysv/linux/arm/umount.c deleted file mode 100644 index b8e499d8c4..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/umount.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for 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/>. */ - -/* Since we don't have an oldumount system call, do what the kernel - does down here. */ - -extern long int __umount2 (const char *name, int flags); - -long int -__umount (const char *name) -{ - return __umount2 (name, 0); -} - -weak_alias (__umount, umount); diff --git a/ports/sysdeps/unix/sysv/linux/arm/versionsort64.c b/ports/sysdeps/unix/sysv/linux/arm/versionsort64.c deleted file mode 100644 index 144b691e56..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/versionsort64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/versionsort64.c> diff --git a/ports/sysdeps/unix/sysv/linux/arm/vfork.S b/ports/sysdeps/unix/sysv/linux/arm/vfork.S deleted file mode 100644 index 1ac67881c9..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/vfork.S +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 1999-2014 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/>. */ - -#include <sysdep.h> -#define _ERRNO_H 1 -#include <bits/errno.h> - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__vfork) -#ifdef SAVE_PID - SAVE_PID -#endif - /* The DO_CALL macro saves r7 on the stack, to enable generation - of ARM unwind info. Since the stack is initially shared between - parent and child of vfork, that saved value could be corrupted. - To avoid this problem, we save r7 into ip as well, and restore - from there. */ - mov ip, r7 - cfi_register (r7, ip) - .fnstart - push { r7 } - cfi_adjust_cfa_offset (4) - .save { r7 } - ldr r7, =SYS_ify (vfork) - swi 0x0 - .fnend - add sp, sp, #4 - cfi_adjust_cfa_offset (-4) - mov r7, ip - cfi_restore (r7); -#ifdef RESTORE_PID - RESTORE_PID -#endif - cmn a1, #4096 - it cc - RETINSTR(cc, lr) - - b PLTJMP(SYSCALL_ERROR) -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) - -weak_alias (__vfork, vfork) diff --git a/ports/sysdeps/unix/sysv/linux/arm/xstat.c b/ports/sysdeps/unix/sysv/linux/arm/xstat.c deleted file mode 100644 index e9869f5508..0000000000 --- a/ports/sysdeps/unix/sysv/linux/arm/xstat.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/xstat.c> |