From 04161d094e82a46469f1939c7e4a2886081d24dd Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Thu, 29 Nov 2012 13:00:24 +0100 Subject: eglibc: update patches for AArch64 Signed-off-by: Marcin Juszkiewicz --- .../aarch64-0001-glibc-fsf-v1-eaf6f205.patch | 15456 +++++++++++++++++++ ...aarch64-0002-Synchronize-with-linux-elf.h.patch | 40 + ...-0003-Adding-AArch64-support-to-elf-elf.h.patch | 62 + .../aarch64-glibc-fsf-v1-eaf6f205.patch | 15455 ------------------ .../eglibc/eglibc-2.16/aarch64-glibc-v3-elf.patch | 47 - meta/recipes-core/eglibc/eglibc_2.16.bb | 5 +- 6 files changed, 15561 insertions(+), 15504 deletions(-) create mode 100644 meta/recipes-core/eglibc/eglibc-2.16/aarch64-0001-glibc-fsf-v1-eaf6f205.patch create mode 100644 meta/recipes-core/eglibc/eglibc-2.16/aarch64-0002-Synchronize-with-linux-elf.h.patch create mode 100644 meta/recipes-core/eglibc/eglibc-2.16/aarch64-0003-Adding-AArch64-support-to-elf-elf.h.patch delete mode 100644 meta/recipes-core/eglibc/eglibc-2.16/aarch64-glibc-fsf-v1-eaf6f205.patch delete mode 100644 meta/recipes-core/eglibc/eglibc-2.16/aarch64-glibc-v3-elf.patch diff --git a/meta/recipes-core/eglibc/eglibc-2.16/aarch64-0001-glibc-fsf-v1-eaf6f205.patch b/meta/recipes-core/eglibc/eglibc-2.16/aarch64-0001-glibc-fsf-v1-eaf6f205.patch new file mode 100644 index 0000000000..7738a953e9 --- /dev/null +++ b/meta/recipes-core/eglibc/eglibc-2.16/aarch64-0001-glibc-fsf-v1-eaf6f205.patch @@ -0,0 +1,15456 @@ +import http://sourceware.org/ml/libc-alpha/2012-10/msg00008.html + +Upstream-Status: merged into trunk + +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/Implies glibc/ports/sysdeps/aarch64/Implies +--- glibc.orig/ports/sysdeps/aarch64/Implies 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/Implies 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,6 @@ ++wordsize-64 ++ieee754/ldbl-128 ++ieee754/dbl-64/wordsize-64 ++ieee754/dbl-64 ++ieee754/flt-32 ++aarch64/soft-fp +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/Makefile glibc/ports/sysdeps/aarch64/Makefile +--- glibc.orig/ports/sysdeps/aarch64/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/Makefile 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,21 @@ ++long-double-fcts = yes ++ ++ifeq ($(subdir),debug) ++CFLAGS-backtrace.c += -funwind-tables ++CFLAGS-tst-backtrace2.c += -funwind-tables ++CFLAGS-tst-backtrace3.c += -funwind-tables ++CFLAGS-tst-backtrace4.c += -funwind-tables ++CFLAGS-tst-backtrace5.c += -funwind-tables ++CFLAGS-tst-backtrace6.c += -funwind-tables ++endif ++ ++ifeq ($(subdir),elf) ++sysdep-dl-routines += tlsdesc dl-tlsdesc ++sysdep_routines += tlsdesc dl-tlsdesc ++sysdep-rtld-routines += tlsdesc dl-tlsdesc ++gen-as-const-headers += dl-link.sym ++endif ++ ++ifeq ($(subdir),csu) ++gen-as-const-headers += tlsdesc.sym ++endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/__longjmp.S glibc/ports/sysdeps/aarch64/__longjmp.S +--- glibc.orig/ports/sysdeps/aarch64/__longjmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/__longjmp.S 2012-09-24 13:01:47.000000000 +0100 +@@ -0,0 +1,102 @@ ++/* Copyright (C) 1997, 1998, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library. If not, see ++ . */ ++ ++#include ++#include ++ ++/* __longjmp(jmpbuf, val) */ ++ ++ENTRY (__longjmp) ++#ifdef CHECK_SP ++ ldr x5, [x0, #JB_SP<<3] ++ CHECK_SP (x5) ++#endif ++ cfi_def_cfa(x0, 0) ++ cfi_offset(x19, JB_X19<<3) ++ cfi_offset(x20, JB_X20<<3) ++ cfi_offset(x21, JB_X21<<3) ++ cfi_offset(x22, JB_X22<<3) ++ cfi_offset(x23, JB_X23<<3) ++ cfi_offset(x24, JB_X24<<3) ++ cfi_offset(x25, JB_X25<<3) ++ cfi_offset(x26, JB_X26<<3) ++ cfi_offset(x27, JB_X27<<3) ++ cfi_offset(x28, JB_X28<<3) ++ cfi_offset(x29, JB_X29<<3) ++ cfi_offset(x30, JB_LR<<3) ++ ++ cfi_offset( d8, JB_D8<<3) ++ cfi_offset( d9, JB_D9<<3) ++ cfi_offset(d10, JB_D10<<3) ++ cfi_offset(d11, JB_D11<<3) ++ cfi_offset(d12, JB_D12<<3) ++ cfi_offset(d13, JB_D13<<3) ++ cfi_offset(d14, JB_D14<<3) ++ cfi_offset(d15, JB_D15<<3) ++ ++ ldp x19, x20, [x0, #JB_X19<<3] ++ ldp x21, x22, [x0, #JB_X21<<3] ++ ldp x23, x24, [x0, #JB_X23<<3] ++ ldp x25, x26, [x0, #JB_X25<<3] ++ ldp x27, x28, [x0, #JB_X27<<3] ++ ldp x29, x30, [x0, #JB_X29<<3] ++ ++ ldp d8, d9, [x0, #JB_D8<<3] ++ ldp d10, d11, [x0, #JB_D10<<3] ++ ldp d12, d13, [x0, #JB_D12<<3] ++ ldp d14, d15, [x0, #JB_D14<<3] ++ ++ /* Originally this was implemented with a series of ++ .cfi_restore() directives. ++ ++ The theory was that cfi_restore should revert to previous ++ frame value is the same as the current value. In practice ++ this doesn't work, even after cfi_restore() gdb continues ++ to try to recover a previous frame value offset from x0, ++ which gets stuffed after a few more instructions. The ++ cfi_same_value() mechanism appears to work fine. */ ++ ++ cfi_same_value(x19) ++ cfi_same_value(x20) ++ cfi_same_value(x21) ++ cfi_same_value(x22) ++ cfi_same_value(x23) ++ cfi_same_value(x24) ++ cfi_same_value(x25) ++ cfi_same_value(x26) ++ cfi_same_value(x27) ++ cfi_same_value(x28) ++ cfi_same_value(x29) ++ cfi_same_value(x30) ++ cfi_same_value(d8) ++ cfi_same_value(d9) ++ cfi_same_value(d10) ++ cfi_same_value(d11) ++ cfi_same_value(d12) ++ cfi_same_value(d13) ++ cfi_same_value(d14) ++ cfi_same_value(d15) ++ ++ ldr x5, [x0, #JB_SP<<3] ++ mov sp, x5 ++ cmp x1, #0 ++ mov x0, #1 ++ csel x0, x1, x0, ne ++ /* Use br instead of ret because ret is guaranteed to mispredict */ ++ br x30 ++END (__longjmp) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/backtrace.c glibc/ports/sysdeps/aarch64/backtrace.c +--- glibc.orig/ports/sysdeps/aarch64/backtrace.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/backtrace.c 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1 @@ ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/atomic.h glibc/ports/sysdeps/aarch64/bits/atomic.h +--- glibc.orig/ports/sysdeps/aarch64/bits/atomic.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/bits/atomic.h 2012-09-24 13:02:01.000000000 +0100 +@@ -0,0 +1,109 @@ ++/* Copyright (C) 2003, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library. If not, see ++ . */ ++ ++#ifndef _AARCH64_BITS_ATOMIC_H ++#define _AARCH64_BITS_ATOMIC_H 1 ++ ++#include ++ ++typedef int8_t atomic8_t; ++typedef int16_t atomic16_t; ++typedef int32_t atomic32_t; ++typedef int64_t atomic64_t; ++ ++typedef uint8_t uatomic8_t; ++typedef uint16_t uatomic16_t; ++typedef uint32_t uatomic32_t; ++typedef uint64_t uatomic64_t; ++ ++typedef intptr_t atomicptr_t; ++typedef uintptr_t uatomicptr_t; ++typedef intmax_t atomic_max_t; ++typedef uintmax_t uatomic_max_t; ++ ++#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \ ++ (!__sync_bool_compare_and_swap ((mem), (oldval), (newval))) ++ ++#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval) \ ++ (!__sync_bool_compare_and_swap ((mem), (oldval), (newval))) ++ ++#define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \ ++ (!__sync_bool_compare_and_swap ((mem), (oldval), (newval))) ++ ++#define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \ ++ (!__sync_bool_compare_and_swap ((mem), (oldval), (newval))) ++ ++#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \ ++ __sync_val_compare_and_swap ((mem), (oldval), (newval)) ++ ++#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \ ++ __sync_val_compare_and_swap ((mem), (oldval), (newval)) ++ ++#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ ++ __sync_val_compare_and_swap ((mem), (oldval), (newval)) ++ ++#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ ++ __sync_val_compare_and_swap ((mem), (oldval), (newval)) ++ ++/* Atomically store newval and return the old value. */ ++#define atomic_exchange_acq(mem, value) \ ++ __sync_lock_test_and_set (mem, value) ++ ++#define atomic_exchange_rel(mem, value) \ ++ (__sync_synchronize (), __sync_lock_test_and_set (mem, value)) ++ ++#define atomic_exchange_and_add(mem, value) \ ++ ({ __typeof (*mem) __result; \ ++ __result = __sync_fetch_and_add ((mem), (int) (value)); \ ++ __result; }) ++ ++#define atomic_decrement_if_positive(mem) \ ++ ({ __typeof (*mem) __oldval, __val; \ ++ __typeof (mem) __memp = (mem); \ ++ \ ++ __val = (*__memp); \ ++ do \ ++ { \ ++ __oldval = __val; \ ++ if (__builtin_expect (__val <= 0, 0)) \ ++ break; \ ++ __val = atomic_compare_and_exchange_val_acq (__memp, __oldval - 1, \ ++ __oldval); \ ++ } \ ++ while (__builtin_expect (__val != __oldval, 0)); \ ++ __oldval; }) ++ ++#define atomic_bit_test_set(mem, bit) \ ++ ({ __typeof (*mem) __oldval, __val; \ ++ __typeof (mem) __memp = (mem); \ ++ __typeof (*mem) __mask = ((__typeof (*mem)) 1 << (bit)); \ ++ \ ++ __val = (*__memp); \ ++ do \ ++ { \ ++ __oldval = __val; \ ++ __val = atomic_compare_and_exchange_val_acq (__memp, \ ++ __oldval | __mask, \ ++ __oldval); \ ++ } \ ++ while (__builtin_expect (__val != __oldval, 0)); \ ++ __oldval & __mask; }) ++ ++#define atomic_full_barrier() __sync_synchronize () ++ ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/endian.h glibc/ports/sysdeps/aarch64/bits/endian.h +--- glibc.orig/ports/sysdeps/aarch64/bits/endian.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/bits/endian.h 2012-09-24 13:02:10.000000000 +0100 +@@ -0,0 +1,30 @@ ++/* Copyright (C) 1997, 1998, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library. If not, see ++ . */ ++ ++#ifndef _ENDIAN_H ++# error "Never use directly; include instead." ++#endif ++ ++/* AArch64 can be either big or little endian. */ ++#ifdef __AARCH64EB__ ++#define __BYTE_ORDER __BIG_ENDIAN ++#else ++#define __BYTE_ORDER __LITTLE_ENDIAN ++#endif ++ ++#define __FLOAT_WORD_ORDER __BYTE_ORDER +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/fenv.h glibc/ports/sysdeps/aarch64/bits/fenv.h +--- glibc.orig/ports/sysdeps/aarch64/bits/fenv.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/bits/fenv.h 2012-09-24 13:02:18.000000000 +0100 +@@ -0,0 +1,61 @@ ++/* Copyright (C) 2004, 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _FENV_H ++# error "Never use directly; include instead." ++#endif ++ ++/* Define bits representing exceptions in the FPSR status word. */ ++#define FE_INVALID 1 ++#define FE_DIVBYZERO 2 ++#define FE_OVERFLOW 4 ++#define FE_UNDERFLOW 8 ++#define FE_INEXACT 16 ++ ++/* Amount to shift by to convert an exception bit in FPSR to a an ++ exception bit mask in FPCR. */ ++#define FE_EXCEPT_SHIFT 8 ++ ++/* All supported exceptions. */ ++#define FE_ALL_EXCEPT \ ++ (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) ++ ++/* Define bits representing rounding modes in the FPCR Rmode field. */ ++#define FE_TONEAREST 0x000000 ++#define FE_UPWARD 0x400000 ++#define FE_DOWNWARD 0x800000 ++#define FE_TOWARDZERO 0xc00000 ++ ++/* Type representing exception flags. */ ++typedef unsigned int fexcept_t; ++ ++/* Type representing floating-point environment. */ ++typedef struct ++ { ++ unsigned int fpcr; ++ unsigned int fpsr; ++ } ++fenv_t; ++ ++/* If the default argument is used we use this value. */ ++#define FE_DFL_ENV ((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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/link.h glibc/ports/sysdeps/aarch64/bits/link.h +--- glibc.orig/ports/sysdeps/aarch64/bits/link.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/bits/link.h 2012-09-24 13:02:25.000000000 +0100 +@@ -0,0 +1,60 @@ ++/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _LINK_H ++# error "Never include directly; use instead." ++#endif ++ ++/* Registers for entry into PLT on AArch64. */ ++typedef struct La_aarch64_regs ++{ ++ uint64_t lr_xreg[8]; ++ uint64_t lr_dreg[8]; ++ uint64_t lr_sp; ++ uint64_t lr_lr; ++} La_aarch64_regs; ++ ++/* Return values for calls from PLT on AArch64. */ ++typedef struct La_aarch64_retval ++{ ++ /* Up to two integer registers can be used for a return value. */ ++ uint64_t lrv_xreg[2]; ++ /* Up to four D registers can be used for a return value. */ ++ uint64_t lrv_dreg[4]; ++ ++} La_aarch64_retval; ++__BEGIN_DECLS ++ ++extern Elf64_Addr ++la_aarch64_gnu_pltenter (Elf64_Sym *__sym, unsigned int __ndx, ++ uintptr_t *__refcook, ++ uintptr_t *__defcook, ++ La_aarch64_regs *__regs, ++ unsigned int *__flags, ++ const char *__symname, ++ long int *__framesizep); ++ ++extern unsigned int ++la_aarch64_gnu_pltexit (Elf64_Sym *__sym, unsigned int __ndx, ++ uintptr_t *__refcook, ++ uintptr_t *__defcook, ++ const La_aarch64_regs *__inregs, ++ La_aarch64_retval *__outregs, ++ const char *__symname); ++ ++__END_DECLS +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/linkmap.h glibc/ports/sysdeps/aarch64/bits/linkmap.h +--- glibc.orig/ports/sysdeps/aarch64/bits/linkmap.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/bits/linkmap.h 2012-09-24 13:02:41.000000000 +0100 +@@ -0,0 +1,23 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++struct link_map_machine ++{ ++ ElfW(Addr) plt; /* Address of .plt */ ++ void *tlsdesc_table; /* Address of TLS descriptor hash table. */ ++}; +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/mathdef.h glibc/ports/sysdeps/aarch64/bits/mathdef.h +--- glibc.orig/ports/sysdeps/aarch64/bits/mathdef.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/bits/mathdef.h 2012-09-24 13:02:49.000000000 +0100 +@@ -0,0 +1,51 @@ ++/* Copyright (C) 1999, 2000, 2004, 2006, 2007, 2010-2012 ++ Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#if !defined _MATH_H && !defined _COMPLEX_H ++# error "Never use directly; include 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 */ +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/setjmp.h glibc/ports/sysdeps/aarch64/bits/setjmp.h +--- glibc.orig/ports/sysdeps/aarch64/bits/setjmp.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/bits/setjmp.h 2012-09-24 13:03:03.000000000 +0100 +@@ -0,0 +1,34 @@ ++/* Copyright (C) 1997, 1998, 2005, 2006, 2009-2012 ++ Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _BITS_SETJMP_H ++#define _BITS_SETJMP_H 1 ++ ++#if !defined _SETJMP_H && !defined _PTHREAD_H ++# error "Never include directly; use instead." ++#endif ++ ++#ifndef _ASM ++/* Jump buffer contains: ++ x19-x28, x29(fp), x30(lr), (x31)sp, d8-d15. Other registers are not ++ saved. */ ++typedef unsigned long long __jmp_buf [22]; ++ ++#endif ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bsd-_setjmp.S glibc/ports/sysdeps/aarch64/bsd-_setjmp.S +--- glibc.orig/ports/sysdeps/aarch64/bsd-_setjmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/bsd-_setjmp.S 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1 @@ ++/* _setjmp is in setjmp.S */ +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bsd-setjmp.S glibc/ports/sysdeps/aarch64/bsd-setjmp.S +--- glibc.orig/ports/sysdeps/aarch64/bsd-setjmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/bsd-setjmp.S 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1 @@ ++/* setjmp is in setjmp.S */ +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/crti.S glibc/ports/sysdeps/aarch64/crti.S +--- glibc.orig/ports/sysdeps/aarch64/crti.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/crti.S 2012-09-24 13:03:14.000000000 +0100 +@@ -0,0 +1,90 @@ ++/* Special .init and .fini section support for AArch64. ++ Copyright (C) 1995-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser 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 ++ . */ ++ ++/* 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. */ ++ ++#include ++ ++#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 ++ .align 2 ++ .type call_weak_fn, %function ++call_weak_fn: ++ adrp x0, :got:PREINIT_FUNCTION ++ ldr x0, [x0, #:got_lo12:PREINIT_FUNCTION] ++ cbz x0, 1f ++ b PREINIT_FUNCTION ++1: ++ RET ++ .size call_weak_fn, .-call_weak_fn ++#endif ++ ++ .section .init,"ax",%progbits ++ .align 2 ++ .global _init ++ .type _init, %function ++_init: ++ stp x29, x30, [sp, -16]! ++ mov x29, sp ++#if PREINIT_FUNCTION_WEAK ++ bl call_weak_fn ++#else ++ bl PREINIT_FUNCTION ++#endif ++ ++ .section .fini,"ax",%progbits ++ .align 2 ++ .global _fini ++ .type _fini, %function ++_fini: ++ stp x29, x30, [sp, -16]! ++ mov x29, sp +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/crtn.S glibc/ports/sysdeps/aarch64/crtn.S +--- glibc.orig/ports/sysdeps/aarch64/crtn.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/crtn.S 2012-09-24 13:03:18.000000000 +0100 +@@ -0,0 +1,46 @@ ++/* Special .init and .fini section support for AArch64. ++ Copyright (C) 1995-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser 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 ++ . */ ++ ++/* crtn.S puts function epilogues in the .init and .fini sections ++ corresponding to the prologues in crti.S. */ ++ ++ .section .init,"ax",%progbits ++ ldp x29, x30, [sp], 16 ++ RET ++ ++ .section .fini,"ax",%progbits ++ ldp x29, x30, [sp], 16 ++ RET +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-irel.h glibc/ports/sysdeps/aarch64/dl-irel.h +--- glibc.orig/ports/sysdeps/aarch64/dl-irel.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/dl-irel.h 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,36 @@ ++/* Machine-dependent ELF indirect relocation inline functions. ++ AArch64 version. ++ Copyright (C) 2012 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _DL_IREL_H ++#define _DL_IREL_H ++ ++#include ++#include ++ ++/* AArch64 does not yet implement IFUNC support. However since ++ 2011-06-20 provision of a elf_ifunc_invoke has been mandatory. */ ++ ++static inline ElfW(Addr) ++__attribute ((always_inline)) ++elf_ifunc_invoke (ElfW(Addr) addr) ++{ ++ return ((ElfW(Addr) (*) (void)) (addr)) (); ++} ++ ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-link.sym glibc/ports/sysdeps/aarch64/dl-link.sym +--- glibc.orig/ports/sysdeps/aarch64/dl-link.sym 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/dl-link.sym 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,15 @@ ++#include ++#include ++#include ++#include ++ ++DL_SIZEOF_RG sizeof(struct La_aarch64_regs) ++DL_SIZEOF_RV sizeof(struct La_aarch64_retval) ++ ++DL_OFFSET_RG_X0 offsetof(struct La_aarch64_regs, lr_xreg) ++DL_OFFSET_RG_D0 offsetof(struct La_aarch64_regs, lr_dreg) ++DL_OFFSET_RG_SP offsetof(struct La_aarch64_regs, lr_sp) ++DL_OFFSET_RG_LR offsetof(struct La_aarch64_regs, lr_lr) ++ ++DL_OFFSET_RV_X0 offsetof(struct La_aarch64_retval, lrv_xreg) ++DL_OFFSET_RV_D0 offsetof(struct La_aarch64_retval, lrv_dreg) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-machine.h glibc/ports/sysdeps/aarch64/dl-machine.h +--- glibc.orig/ports/sysdeps/aarch64/dl-machine.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/dl-machine.h 2012-09-24 13:04:02.000000000 +0100 +@@ -0,0 +1,388 @@ ++/* Copyright (C) 1995-2006, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef dl_machine_h ++#define dl_machine_h ++ ++#define ELF_MACHINE_NAME "aarch64" ++ ++#include ++#include ++ ++/* Return nonzero iff ELF header is compatible with the running host. */ ++static inline int __attribute__ ((unused)) ++elf_machine_matches_host (const ElfW(Ehdr) *ehdr) ++{ ++ return ehdr->e_machine == EM_AARCH64; ++} ++ ++/* Return the link-time address of _DYNAMIC. Conveniently, this is the ++ first element of the GOT. */ ++static inline ElfW(Addr) __attribute__ ((unused)) ++elf_machine_dynamic (void) ++{ ++ ElfW(Addr) addr = (ElfW(Addr)) &_DYNAMIC; ++ return addr; ++} ++ ++/* Return the run-time load address of the shared object. */ ++ ++static inline ElfW(Addr) __attribute__ ((unused)) ++elf_machine_load_address (void) ++{ ++ /* To figure out the load address we use the definition that for any symbol: ++ dynamic_addr(symbol) = static_addr(symbol) + load_addr ++ ++ The choice of symbol is arbitrary. The static address we obtain ++ by constructing a non GOT reference to the symbol, the dynamic ++ address of the symbol we compute using adrp/add to compute the ++ symbol's address relative to the PC. */ ++ ++ ElfW(Addr) static_addr; ++ ElfW(Addr) dynamic_addr; ++ ++ asm (" \n\ ++ adrp %1, _dl_start; \n\ ++ add %1, %1, #:lo12:_dl_start \n\ ++ ldr %w0, 1f \n\ ++ b 2f \n\ ++1: .word _dl_start \n\ ++2: \n\ ++ " : "=r" (static_addr), "=r" (dynamic_addr)); ++ return dynamic_addr - static_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) ++{ ++ if (l->l_info[DT_JMPREL] && lazy) ++ { ++ ElfW(Addr) *got; ++ extern void _dl_runtime_resolve (ElfW(Word)); ++ extern void _dl_runtime_profile (ElfW(Word)); ++ ++ got = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]); ++ if (got[1]) ++ { ++ l->l_mach.plt = got[1] + l->l_addr; ++ } ++ got[1] = (ElfW(Addr)) l; ++ ++ /* 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] = (ElfW(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] = (ElfW(Addr)) &_dl_runtime_resolve; ++ } ++ } ++ ++ if (l->l_info[ADDRIDX (DT_TLSDESC_GOT)] && lazy) ++ *(Elf64_Addr*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_GOT)]) + l->l_addr) ++ = (Elf64_Addr) &_dl_tlsdesc_resolve_rela; ++ ++ return lazy; ++} ++ ++/* Initial entry point 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\ ++ mov x0, sp \n\ ++ bl _dl_start \n\ ++ // returns user entry point in x0 \n\ ++ mov x21, x0 \n\ ++_dl_start_user: \n\ ++ // get the original arg count \n\ ++ ldr x1, [sp] \n\ ++ // get the argv address \n\ ++ add x2, sp, #8 \n\ ++ // get _dl_skip_args to see if we were \n\ ++ // invoked as an executable \n\ ++ adrp x4, _dl_skip_args \n\ ++ ldr w4, [x4, #:lo12:_dl_skip_args] \n\ ++ // do we need to adjust argc/argv \n\ ++ cmp w4, 0 \n\ ++ beq .L_done_stack_adjust \n\ ++ // subtract _dl_skip_args from original arg count \n\ ++ sub x1, x1, x4 \n\ ++ // store adjusted argc back to stack \n\ ++ str x1, [sp] \n\ ++ // find the first unskipped argument \n\ ++ mov x3, x2 \n\ ++ add x4, x2, x4, lsl #3 \n\ ++ // shuffle argv down \n\ ++1: ldr x5, [x4], #8 \n\ ++ str x5, [x3], #8 \n\ ++ cmp x5, #0 \n\ ++ bne 1b \n\ ++ // shuffle envp down \n\ ++1: ldr x5, [x4], #8 \n\ ++ str x5, [x3], #8 \n\ ++ cmp x5, #0 \n\ ++ bne 1b \n\ ++ // shuffle auxv down \n\ ++1: ldp x0, x5, [x4, #16]! \n\ ++ stp x0, x5, [x3], #16 \n\ ++ cmp x0, #0 \n\ ++ bne 1b \n\ ++ // Update _dl_argv \n\ ++ adrp x3, _dl_argv \n\ ++ str x2, [x3, #:lo12:_dl_argv] \n\ ++.L_done_stack_adjust: \n\ ++ // compute envp \n\ ++ add x3, x2, x1, lsl #3 \n\ ++ add x3, x3, #8 \n\ ++ adrp x16, _rtld_local \n\ ++ add x16, x16, #:lo12:_rtld_local \n\ ++ ldr x0, [x16] \n\ ++ bl _dl_init_internal \n\ ++ // load the finalizer function \n\ ++ adrp x0, _dl_fini \n\ ++ add x0, x0, #:lo12:_dl_fini \n\ ++ // jump to the user_s entry point \n\ ++ br x21 \n\ ++"); ++ ++#define elf_machine_type_class(type) \ ++ ((((type) == R_AARCH64_JUMP_SLOT || \ ++ (type) == R_AARCH64_TLS_DTPMOD64 || \ ++ (type) == R_AARCH64_TLS_DTPREL64 || \ ++ (type) == R_AARCH64_TLS_TPREL64 || \ ++ (type) == R_AARCH64_TLSDESC) * ELF_RTYPE_CLASS_PLT) \ ++ | (((type) == R_AARCH64_COPY) * ELF_RTYPE_CLASS_COPY)) ++ ++#define ELF_MACHINE_JMP_SLOT R_AARCH64_JUMP_SLOT ++ ++/* AArch64 uses RELA not REL */ ++#define ELF_MACHINE_NO_REL 1 ++ ++static inline ElfW(Addr) ++elf_machine_fixup_plt (struct link_map *map, lookup_t t, ++ const ElfW(Rela) *reloc, ++ ElfW(Addr) *reloc_addr, ++ ElfW(Addr) value) ++{ ++ return *reloc_addr = value; ++} ++ ++/* Return the final value of a plt relocation. */ ++static inline ElfW(Addr) ++elf_machine_plt_value (struct link_map *map, ++ const ElfW(Rela) *reloc, ++ ElfW(Addr) value) ++{ ++ return value; ++} ++ ++#endif ++ ++/* Names of the architecture-specific auditing callback functions. */ ++#define ARCH_LA_PLTENTER aarch64_gnu_pltenter ++#define ARCH_LA_PLTEXIT aarch64_gnu_pltexit ++ ++#ifdef RESOLVE_MAP ++ ++auto inline void ++__attribute__ ((always_inline)) ++elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, ++ const ElfW(Sym) *sym, const struct r_found_version *version, ++ void *const reloc_addr_arg, int skip_ifunc) ++{ ++ ElfW(Addr) *const reloc_addr = reloc_addr_arg; ++ const unsigned int r_type = ELF64_R_TYPE (reloc->r_info); ++ ++ if (__builtin_expect (r_type == R_AARCH64_RELATIVE, 0)) ++ *reloc_addr = map->l_addr + reloc->r_addend; ++ else if (__builtin_expect (r_type == R_AARCH64_NONE, 0)) ++ return; ++ else ++ { ++ const ElfW(Sym) *const refsym = sym; ++ struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); ++ ElfW(Addr) value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; ++ ++ switch (r_type) ++ { ++ case R_AARCH64_COPY: ++ if (sym == NULL) ++ 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_AARCH64_RELATIVE: ++ case R_AARCH64_GLOB_DAT: ++ case R_AARCH64_JUMP_SLOT: ++ case R_AARCH64_ABS32: ++ case R_AARCH64_ABS64: ++ *reloc_addr = value + reloc->r_addend; ++ break; ++ ++ case R_AARCH64_TLSDESC: ++ { ++ struct tlsdesc volatile *td = ++ (struct tlsdesc volatile *)reloc_addr; ++# ifndef RTLD_BOOTSTRAP ++ if (! sym) ++ { ++ td->arg = (void*)reloc->r_addend; ++ td->entry = _dl_tlsdesc_undefweak; ++ } ++ else ++#endif ++ { ++#ifndef RTLD_BOOTSTRAP ++#ifndef SHARED ++ CHECK_STATIC_TLS (map, sym_map); ++#else ++ if (!TRY_STATIC_TLS (map, sym_map)) ++ { ++ td->arg = _dl_make_tlsdesc_dynamic ++ (sym_map, sym->st_value + reloc->r_addend); ++ td->entry = _dl_tlsdesc_dynamic; ++ } ++ else ++#endif ++#endif ++ { ++ td->arg = (void*)(sym->st_value + sym_map->l_tls_offset ++ + reloc->r_addend); ++ td->entry = _dl_tlsdesc_return; ++ } ++ } ++ break; ++ } ++ ++ case R_AARCH64_TLS_DTPMOD64: ++#ifdef RTLD_BOOTSTRAP ++ *reloc_addr = 1; ++#else ++ if (sym_map != NULL) ++ { ++ *reloc_addr = sym_map->l_tls_modid; ++ } ++#endif ++ break; ++ ++ case R_AARCH64_TLS_DTPREL64: ++ if (sym) ++ { ++ const char *strtab; ++ strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); ++ *reloc_addr = sym->st_value + reloc->r_addend; ++ } ++ break; ++ ++ case R_AARCH64_TLS_TPREL64: ++ if (sym) ++ { ++ const char *strtab; ++ strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); ++ CHECK_STATIC_TLS (map, sym_map); ++ *reloc_addr = ++ sym->st_value + reloc->r_addend + sym_map->l_tls_offset; ++ } ++ break; ++ ++ default: ++ _dl_reloc_bad_type (map, r_type, 0); ++ break; ++ } ++ } ++} ++ ++inline void ++__attribute__ ((always_inline)) ++elf_machine_rela_relative (ElfW(Addr) l_addr, ++ const ElfW(Rela) *reloc, ++ void *const reloc_addr_arg) ++{ ++ ElfW(Addr) *const reloc_addr = reloc_addr_arg; ++ *reloc_addr = l_addr + reloc->r_addend; ++} ++ ++inline void ++__attribute__ ((always_inline)) ++elf_machine_lazy_rel (struct link_map *map, ++ ElfW(Addr) l_addr, ++ const ElfW(Rela) *reloc, ++ int skip_ifunc) ++{ ++ ElfW(Addr) *const reloc_addr = (void *) (l_addr + reloc->r_offset); ++ const unsigned int r_type = ELF64_R_TYPE (reloc->r_info); ++ /* Check for unexpected PLT reloc type. */ ++ if (__builtin_expect (r_type == R_AARCH64_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_AARCH64_TLSDESC, 1)) ++ { ++ struct tlsdesc volatile *td = ++ (struct tlsdesc volatile *)reloc_addr; ++ ++ td->arg = (void*)reloc; ++ 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 +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-sysdep.h glibc/ports/sysdeps/aarch64/dl-sysdep.h +--- glibc.orig/ports/sysdeps/aarch64/dl-sysdep.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/dl-sysdep.h 2012-09-24 13:04:19.000000000 +0100 +@@ -0,0 +1,23 @@ ++/* Copyright (C) 2002-2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include_next ++ ++/* _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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-tls.h glibc/ports/sysdeps/aarch64/dl-tls.h +--- glibc.orig/ports/sysdeps/aarch64/dl-tls.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/dl-tls.h 2012-09-24 13:04:28.000000000 +0100 +@@ -0,0 +1,30 @@ ++/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++/* Type used for the representation of TLS information in the GOT. */ ++typedef struct ++{ ++ unsigned long int ti_module; ++ unsigned long int ti_offset; ++} tls_index; ++ ++ ++extern void *__tls_get_addr (tls_index *ti); ++ ++/* Value used for dtv entries for which the allocation is delayed. */ ++#define TLS_DTV_UNALLOCATED ((void *) -1l) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-tlsdesc.S glibc/ports/sysdeps/aarch64/dl-tlsdesc.S +--- glibc.orig/ports/sysdeps/aarch64/dl-tlsdesc.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/dl-tlsdesc.S 2012-09-24 13:04:40.000000000 +0100 +@@ -0,0 +1,329 @@ ++/* Thread-local storage handling in the ELF dynamic linker. ++ AArch64 version. ++ Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include "tlsdesc.h" ++ ++#define NSAVEDQREGPAIRS 16 ++#define SAVE_Q_REGISTERS \ ++ stp q0, q1, [sp, #-32*NSAVEDQREGPAIRS]!; \ ++ cfi_adjust_cfa_offset (32*NSAVEDQREGPAIRS); \ ++ stp q2, q3, [sp, #32*1]; \ ++ stp q4, q5, [sp, #32*2]; \ ++ stp q6, q7, [sp, #32*3]; \ ++ stp q8, q9, [sp, #32*4]; \ ++ stp q10, q11, [sp, #32*5]; \ ++ stp q12, q13, [sp, #32*6]; \ ++ stp q14, q15, [sp, #32*7]; \ ++ stp q16, q17, [sp, #32*8]; \ ++ stp q18, q19, [sp, #32*9]; \ ++ stp q20, q21, [sp, #32*10]; \ ++ stp q22, q23, [sp, #32*11]; \ ++ stp q24, q25, [sp, #32*12]; \ ++ stp q26, q27, [sp, #32*13]; \ ++ stp q28, q29, [sp, #32*14]; \ ++ stp q30, q31, [sp, #32*15]; ++ ++#define RESTORE_Q_REGISTERS \ ++ ldp q2, q3, [sp, #32*1]; \ ++ ldp q4, q5, [sp, #32*2]; \ ++ ldp q6, q7, [sp, #32*3]; \ ++ ldp q8, q9, [sp, #32*4]; \ ++ ldp q10, q11, [sp, #32*5]; \ ++ ldp q12, q13, [sp, #32*6]; \ ++ ldp q14, q15, [sp, #32*7]; \ ++ ldp q16, q17, [sp, #32*8]; \ ++ ldp q18, q19, [sp, #32*9]; \ ++ ldp q20, q21, [sp, #32*10]; \ ++ ldp q22, q23, [sp, #32*11]; \ ++ ldp q24, q25, [sp, #32*12]; \ ++ ldp q26, q27, [sp, #32*13]; \ ++ ldp q28, q29, [sp, #32*14]; \ ++ ldp q30, q31, [sp, #32*15]; \ ++ ldp q0, q1, [sp], #32*NSAVEDQREGPAIRS; \ ++ cfi_adjust_cfa_offset (-32*NSAVEDQREGPAIRS); ++ ++ .text ++ ++ /* Compute the thread pointer offset for symbols in the static ++ TLS block. The offset is the same for all threads. ++ Prototype: ++ _dl_tlsdesc_return (tlsdesc *) ; ++ */ ++ .hidden _dl_tlsdesc_return ++ .global _dl_tlsdesc_return ++ .type _dl_tlsdesc_return,%function ++ cfi_startproc ++ .align 2 ++_dl_tlsdesc_return: ++ ldr x0, [x0, #8] ++ RET ++ cfi_endproc ++ .size _dl_tlsdesc_return, .-_dl_tlsdesc_return ++ ++ /* Handler for undefined weak TLS symbols. ++ Prototype: ++ _dl_tlsdesc_undefweak (tlsdesc *); ++ ++ The second word of the descriptor contains the addend. ++ Return the addend minus the thread pointer. This ensures ++ that when the caller adds on the thread pointer it gets back ++ the addend. */ ++ ++ .hidden _dl_tlsdesc_undefweak ++ .global _dl_tlsdesc_undefweak ++ .type _dl_tlsdesc_undefweak,%function ++ cfi_startproc ++ .align 2 ++_dl_tlsdesc_undefweak: ++ str x1, [sp, #-16]! ++ cfi_adjust_cfa_offset(16) ++ ldr x0, [x0, #8] ++ mrs x1, tpidr_el0 ++ sub x0, x0, x1 ++ ldr x1, [sp], #16 ++ cfi_adjust_cfa_offset(16) ++ RET ++ cfi_endproc ++ .size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak ++ ++#ifdef SHARED ++ /* Handler for dynamic TLS symbols. ++ Prototype: ++ _dl_tlsdesc_dynamic (tlsdesc *) ; ++ ++ The second word of the descriptor points to a ++ tlsdesc_dynamic_arg structure. ++ ++ Returns the offset between the thread pointer and the ++ object referenced by the argument. ++ ++ ptrdiff_t ++ __attribute__ ((__regparm__ (1))) ++ _dl_tlsdesc_dynamic (struct tlsdesc *tdp) ++ { ++ struct tlsdesc_dynamic_arg *td = tdp->arg; ++ dtv_t *dtv = *(dtv_t **)((char *)__thread_pointer + DTV_OFFSET); ++ 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 ++ - __thread_pointer; ++ ++ return ___tls_get_addr (&td->tlsinfo) - __thread_pointer; ++ } ++ */ ++ ++ .hidden _dl_tlsdesc_dynamic ++ .global _dl_tlsdesc_dynamic ++ .type _dl_tlsdesc_dynamic,%function ++ cfi_startproc ++ .align 2 ++_dl_tlsdesc_dynamic: ++#define NSAVEXREGPAIRS 2 ++ stp x29, x30, [sp,#-(32+16*NSAVEXREGPAIRS)]! ++ cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) ++ mov x29, sp ++ ++ /* Save just enough registers to support fast path, if we fall ++ into slow path we will save additional registers. */ ++ ++ stp x1, x2, [sp, #32+16*0] ++ stp x3, x4, [sp, #32+16*1] ++ ++ mrs x4, tpidr_el0 ++ ldr x1, [x0,#8] ++ ldr x0, [x4] ++ ldr x3, [x1,#16] ++ ldr x2, [x0] ++ cmp x3, x2 ++ b.hi 2f ++ ldr x2, [x1] ++ add x0, x0, x2, lsl #4 ++ ldr x0, [x0] ++ cmn x0, #0x1 ++ b.eq 2f ++ ldr x1, [x1,#8] ++ add x0, x0, x1 ++ sub x0, x0, x4 ++1: ++ ldp x1, x2, [sp, #32+16*0] ++ ldp x3, x4, [sp, #32+16*1] ++ ++ ldp x29, x30, [sp], #(32+16*NSAVEXREGPAIRS) ++ cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) ++#undef NSAVEXREGPAIRS ++ RET ++2: ++ /* This is the slow path. We need to call __tls_get_addr() which ++ means we need to save and restore all the register that the ++ callee will trash. */ ++ ++ /* Save the remaining registers that we must treat as caller save. */ ++#define NSAVEXREGPAIRS 7 ++ stp x5, x6, [sp, #-16*NSAVEXREGPAIRS]! ++ cfi_adjust_cfa_offset (16*NSAVEXREGPAIRS) ++ stp x7, x8, [sp, #16*1] ++ stp x9, x10, [sp, #16*2] ++ stp x11, x12, [sp, #16*3] ++ stp x13, x14, [sp, #16*4] ++ stp x15, x16, [sp, #16*5] ++ stp x17, x18, [sp, #16*6] ++ ++ SAVE_Q_REGISTERS ++ ++ mov x0, x1 ++ bl __tls_get_addr ++ ++ mrs x1, tpidr_el0 ++ sub x0, x0, x1 ++ ++ RESTORE_Q_REGISTERS ++ ++ ldp x7, x8, [sp, #16*1] ++ ldp x9, x10, [sp, #16*2] ++ ldp x11, x12, [sp, #16*3] ++ ldp x13, x14, [sp, #16*4] ++ ldp x15, x16, [sp, #16*5] ++ ldp x17, x18, [sp, #16*6] ++ ldp x5, x6, [sp], #16*NSAVEXREGPAIRS ++ cfi_adjust_cfa_offset (-16*NSAVEXREGPAIRS) ++ b 1b ++ cfi_endproc ++ .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic ++#undef NSAVEXREGPAIRS ++#endif ++ ++ /* This function is a wrapper for a lazy resolver for TLS_DESC ++ RELA relocations. ++ When the actual resolver returns, it will have adjusted the ++ TLS descriptor such that we can tail-call it for it to return ++ the TP offset of the symbol. */ ++ ++ .hidden _dl_tlsdesc_resolve_rela ++ .global _dl_tlsdesc_resolve_rela ++ .type _dl_tlsdesc_resolve_rela,%function ++ cfi_startproc ++ .align 2 ++_dl_tlsdesc_resolve_rela: ++#define NSAVEXREGPAIRS 9 ++ stp x29, x30, [sp, #-(32+16*NSAVEXREGPAIRS)]! ++ cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) ++ mov x29, sp ++ stp x1, x4, [sp, #32+16*0] ++ stp x5, x6, [sp, #32+16*1] ++ stp x7, x8, [sp, #32+16*2] ++ stp x9, x10, [sp, #32+16*3] ++ stp x11, x12, [sp, #32+16*4] ++ stp x13, x14, [sp, #32+16*5] ++ stp x15, x16, [sp, #32+16*6] ++ stp x17, x18, [sp, #32+16*7] ++ str x0, [sp, #32+16*8] ++ ++ SAVE_Q_REGISTERS ++ ++ ldr x1, [x3, #8] ++ bl _dl_tlsdesc_resolve_rela_fixup ++ ++ RESTORE_Q_REGISTERS ++ ++ ldr x0, [sp, #32+16*8] ++ ldr x1, [x0] ++ blr x1 ++ ++ ldp x1, x4, [sp, #32+16*0] ++ ldp x5, x6, [sp, #32+16*1] ++ ldp x7, x8, [sp, #32+16*2] ++ ldp x9, x10, [sp, #32+16*3] ++ ldp x11, x12, [sp, #32+16*4] ++ ldp x13, x14, [sp, #32+16*5] ++ ldp x15, x16, [sp, #32+16*6] ++ ldp x17, x18, [sp, #32+16*7] ++ ldp x29, x30, [sp], #(32+16*NSAVEXREGPAIRS) ++ cfi_adjust_cfa_offset (-32+16*NSAVEXREGPAIRS) ++ ldp x2, x3, [sp], #16 ++ cfi_adjust_cfa_offset (-16) ++ RET ++#undef NSAVEXREGPAIRS ++ cfi_endproc ++ .size _dl_tlsdesc_resolve_rela, .-_dl_tlsdesc_resolve_rela ++ ++ /* This function is a placeholder for lazy resolving of TLS ++ relocations. Once some thread starts resolving a TLS ++ relocation, it sets up the TLS descriptor to use this ++ resolver, such that other threads that would attempt to ++ resolve it concurrently may skip the call to the original lazy ++ resolver and go straight to a condition wait. ++ ++ When the actual resolver returns, it will have adjusted the ++ TLS descriptor such that we can tail-call it for it to return ++ the TP offset of the symbol. */ ++ ++ .hidden _dl_tlsdesc_resolve_hold ++ .global _dl_tlsdesc_resolve_hold ++ .type _dl_tlsdesc_resolve_hold,%function ++ cfi_startproc ++ .align 2 ++_dl_tlsdesc_resolve_hold: ++#define NSAVEXREGPAIRS 10 ++1: ++ stp x29, x30, [sp, #-(32+16*NSAVEXREGPAIRS)]! ++ cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) ++ mov x29, sp ++ stp x1, x2, [sp, #32+16*0] ++ stp x3, x4, [sp, #32+16*1] ++ stp x5, x6, [sp, #32+16*2] ++ stp x7, x8, [sp, #32+16*3] ++ stp x9, x10, [sp, #32+16*4] ++ stp x11, x12, [sp, #32+16*5] ++ stp x13, x14, [sp, #32+16*6] ++ stp x15, x16, [sp, #32+16*7] ++ stp x17, x18, [sp, #32+16*8] ++ str x0, [sp, #32+16*9] ++ ++ SAVE_Q_REGISTERS ++ ++ adr x1, 1b ++ bl _dl_tlsdesc_resolve_hold_fixup ++ ++ RESTORE_Q_REGISTERS ++ ++ ldr x0, [sp, #32+16*9] ++ ldr x1, [x0] ++ blr x1 ++ ++ ldp x1, x2, [sp, #32+16*0] ++ ldp x3, x4, [sp, #32+16*1] ++ ldp x5, x6, [sp, #32+16*2] ++ ldp x7, x8, [sp, #32+16*3] ++ ldp x9, x10, [sp, #32+16*4] ++ ldp x11, x12, [sp, #32+16*5] ++ ldp x13, x14, [sp, #32+16*6] ++ ldp x15, x16, [sp, #32+16*7] ++ ldp x17, x18, [sp, #32+16*8] ++ ldp x29, x30, [sp], #(32+16*NSAVEXREGPAIRS) ++ cfi_adjust_cfa_offset (-32+16*NSAVEXREGPAIRS) ++ RET ++ cfi_endproc ++ .size _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold ++#undef NSAVEXREGPAIRS +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-tlsdesc.h glibc/ports/sysdeps/aarch64/dl-tlsdesc.h +--- glibc.orig/ports/sysdeps/aarch64/dl-tlsdesc.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/dl-tlsdesc.h 2012-09-24 13:04:47.000000000 +0100 +@@ -0,0 +1,71 @@ ++/* Thread-local storage descriptor handling in the ELF dynamic linker. ++ AArch64 version. ++ Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _AARCH64_DL_TLSDESC_H ++#define _AARCH64_DL_TLSDESC_H 1 ++ ++/* Use this to access DT_TLSDESC_PLT and DT_TLSDESC_GOT. */ ++#ifndef ADDRIDX ++#define ADDRIDX(tag) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGNUM \ ++ + DT_EXTRANUM + DT_VALNUM + DT_ADDRTAGIDX (tag)) ++#endif ++ ++/* Type used to represent a TLS descriptor in the GOT. */ ++struct tlsdesc ++{ ++ ptrdiff_t (*entry) (struct tlsdesc *); ++ void *arg; ++}; ++ ++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 *); ++ ++extern ptrdiff_t attribute_hidden ++_dl_tlsdesc_undefweak (struct tlsdesc *); ++ ++extern ptrdiff_t attribute_hidden ++_dl_tlsdesc_resolve_rela (struct tlsdesc *); ++ ++extern ptrdiff_t attribute_hidden ++_dl_tlsdesc_resolve_hold (struct tlsdesc *); ++ ++# ifdef SHARED ++extern void *internal_function _dl_make_tlsdesc_dynamic (struct link_map *, ++ size_t); ++ ++extern ptrdiff_t attribute_hidden ++_dl_tlsdesc_dynamic (struct tlsdesc *); ++#endif ++ ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-trampoline.S glibc/ports/sysdeps/aarch64/dl-trampoline.S +--- glibc.orig/ports/sysdeps/aarch64/dl-trampoline.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/dl-trampoline.S 2012-09-24 13:05:02.000000000 +0100 +@@ -0,0 +1,276 @@ ++/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library. If not, see ++ . */ ++ ++#include ++#include ++ ++#include "dl-link.h" ++ ++#define ip0 x16 ++#define ip1 x17 ++#define lr x30 ++ ++ .text ++ .globl _dl_runtime_resolve ++ .type _dl_runtime_resolve, #function ++ cfi_startproc ++ .align 2 ++_dl_runtime_resolve: ++ /* AArch64 we get called with: ++ ip0 &PLTGOT[2] ++ ip1 temp(dl resolver entry point) ++ [sp, #8] lr ++ [sp, #0] &PLTGOT[n] ++ */ ++ ++ cfi_rel_offset (lr, 8) ++ ++ /* Save arguments. */ ++ stp x8, x9, [sp, #-80]! ++ cfi_adjust_cfa_offset (80) ++ cfi_rel_offset (x8, 0) ++ cfi_rel_offset (x9, 8) ++ ++ stp x6, x7, [sp, #16] ++ cfi_rel_offset (x6, 16) ++ cfi_rel_offset (x7, 24) ++ ++ stp x4, x5, [sp, #32] ++ cfi_rel_offset (x4, 32) ++ cfi_rel_offset (x5, 40) ++ ++ stp x2, x3, [sp, #48] ++ cfi_rel_offset (x2, 48) ++ cfi_rel_offset (x3, 56) ++ ++ stp x0, x1, [sp, #64] ++ cfi_rel_offset (x0, 64) ++ cfi_rel_offset (x1, 72) ++ ++ /* Get pointer to linker struct. */ ++ ldr x0, [ip0, #-8] ++ ++ /* Prepare to call _dl_fixup(). */ ++ ldr x1, [sp, 80] /* Recover &PLTGOT[n] */ ++ ++ sub x1, x1, ip0 ++ add x1, x1, x1, lsl #1 ++ lsl x1, x1, #3 ++ sub x1, x1, #192 ++ lsr x1, x1, #3 ++ ++ /* Call fixup routine. */ ++ bl _dl_fixup ++ ++ /* Save the return. */ ++ mov ip0, x0 ++ ++ /* Get arguments and return address back. */ ++ ldp x0, x1, [sp, #64] ++ ldp x2, x3, [sp, #48] ++ ldp x4, x5, [sp, #32] ++ ldp x6, x7, [sp, #16] ++ ldp x8, x9, [sp], #80 ++ cfi_adjust_cfa_offset (-80) ++ ++ ldp ip1, lr, [sp], #16 ++ cfi_adjust_cfa_offset (-16) ++ ++ /* Jump to the newly found address. */ ++ br ip0 ++ ++ cfi_endproc ++ .size _dl_runtime_resolve, .-_dl_runtime_resolve ++#ifndef PROF ++ .globl _dl_runtime_profile ++ .type _dl_runtime_profile, #function ++ cfi_startproc ++ .align 2 ++_dl_runtime_profile: ++ /* AArch64 we get called with: ++ ip0 &PLTGOT[2] ++ ip1 temp(dl resolver entry point) ++ [sp, #8] lr ++ [sp, #0] &PLTGOT[n] ++ ++ Stack frame layout: ++ [sp, #...] lr ++ [sp, #...] &PLTGOT[n] ++ [sp, #96] La_aarch64_regs ++ [sp, #48] La_aarch64_retval ++ [sp, #40] frame size return from pltenter ++ [sp, #32] dl_profile_call saved x1 ++ [sp, #24] dl_profile_call saved x0 ++ [sp, #16] t1 ++ [sp, #0] x29, lr <- x29 ++ */ ++ ++#define OFFSET_T1 16 ++#define OFFSET_SAVED_CALL_X0 OFFSET_T1 + 8 ++#define OFFSET_FS OFFSET_SAVED_CALL_X0 + 16 ++#define OFFSET_RV OFFSET_FS + 8 ++#define OFFSET_RG OFFSET_RV + DL_SIZEOF_RV ++ ++#define SF_SIZE OFFSET_RG + DL_SIZEOF_RG ++ ++#define OFFSET_PLTGOTN SF_SIZE ++#define OFFSET_LR OFFSET_PLTGOTN + 8 ++ ++ /* Save arguments. */ ++ sub sp, sp, #SF_SIZE ++ cfi_adjust_cfa_offset (SF_SIZE) ++ stp x29, x30, [SP, #0] ++ mov x29, sp ++ cfi_def_cfa_register (x29) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (lr, 8) ++ ++ stp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*0] ++ cfi_rel_offset (x0, OFFSET_RG + DL_OFFSET_RG_X0 + 16*0 + 0) ++ cfi_rel_offset (x1, OFFSET_RG + DL_OFFSET_RG_X0 + 16*0 + 8) ++ stp x2, x3, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*1] ++ cfi_rel_offset (x2, OFFSET_RG + DL_OFFSET_RG_X0 + 16*1 + 0) ++ cfi_rel_offset (x3, OFFSET_RG + DL_OFFSET_RG_X0 + 16*1 + 8) ++ stp x4, x5, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*2] ++ cfi_rel_offset (x4, OFFSET_RG + DL_OFFSET_RG_X0 + 16*2 + 0) ++ cfi_rel_offset (x5, OFFSET_RG + DL_OFFSET_RG_X0 + 16*2 + 8) ++ stp x6, x7, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*3] ++ cfi_rel_offset (x6, OFFSET_RG + DL_OFFSET_RG_X0 + 16*3 + 0) ++ cfi_rel_offset (x7, OFFSET_RG + DL_OFFSET_RG_X0 + 16*3 + 8) ++ ++ stp d0, d1, [X29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*0] ++ cfi_rel_offset (d0, OFFSET_RG + DL_OFFSET_RG_D0 + 16*0) ++ cfi_rel_offset (d1, OFFSET_RG + DL_OFFSET_RG_D0 + 16*0 + 8) ++ stp d2, d3, [X29, #OFFSET_RG+ DL_OFFSET_RG_D0 + 16*1] ++ cfi_rel_offset (d2, OFFSET_RG + DL_OFFSET_RG_D0 + 16*1 + 0) ++ cfi_rel_offset (d3, OFFSET_RG + DL_OFFSET_RG_D0 + 16*1 + 8) ++ stp d4, d5, [X29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*2] ++ cfi_rel_offset (d4, OFFSET_RG + DL_OFFSET_RG_D0 + 16*2 + 0) ++ cfi_rel_offset (d5, OFFSET_RG + DL_OFFSET_RG_D0 + 16*2 + 8) ++ stp d6, d7, [X29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*3] ++ cfi_rel_offset (d6, OFFSET_RG + DL_OFFSET_RG_D0 + 16*3 + 0) ++ cfi_rel_offset (d7, OFFSET_RG + DL_OFFSET_RG_D0 + 16*3 + 8) ++ ++ add x0, x29, #SF_SIZE + 16 ++ ldr x1, [x29, #OFFSET_LR] ++ stp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_SP] ++ ++ /* Get pointer to linker struct. */ ++ ldr x0, [ip0, #-8] ++ ++ /* Prepare to call _dl_profile_fixup(). */ ++ ldr x1, [x29, OFFSET_PLTGOTN] /* Recover &PLTGOT[n] */ ++ ++ sub x1, x1, ip0 ++ add x1, x1, x1, lsl #1 ++ lsl x1, x1, #3 ++ sub x1, x1, #192 ++ lsr x1, x1, #3 ++ ++ stp x0, x1, [x29, #OFFSET_SAVED_CALL_X0] ++ ++ /* Set up extra args for _dl_profile_fixup */ ++ ldr x2, [x29, #OFFSET_LR] /* load saved LR */ ++ add x3, x29, #OFFSET_RG /* address of La_aarch64_reg */ ++ add x4, x29, #OFFSET_FS /* address of framesize */ ++ bl _dl_profile_fixup ++ ++ ldr ip0, [x29, #OFFSET_FS] /* framesize == 0 */ ++ cmp ip0, #0 ++ bge 1f ++ cfi_remember_state ++ ++ /* Save the return. */ ++ mov ip0, x0 ++ ++ /* Get arguments and return address back. */ ++ ldp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*0] ++ ldp x2, x3, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*1] ++ ldp x4, x5, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*2] ++ ldp x6, x7, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*3] ++ ldp d0, d1, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*0] ++ ldp d2, d3, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*1] ++ ldp d4, d5, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*2] ++ ldp d6, d7, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*3] ++ ++ cfi_def_cfa_register (sp) ++ ldp x29, x30, [x29, #0] ++ cfi_restore(x29) ++ cfi_restore(x30) ++ ++ add sp, sp, SF_SIZE + 16 ++ cfi_adjust_cfa_offset (- SF_SIZE - 16) ++ ++ /* Jump to the newly found address. */ ++ br ip0 ++ ++ cfi_restore_state ++1: ++ /* The new frame size is in ip0. */ ++ ++ sub x1, x29, ip0 ++ and sp, x1, #0xfffffffffffffff0 ++ ++ str x0, [x29, #OFFSET_T1] ++ ++ mov x0, sp ++ add x1, x29, #SF_SIZE + 16 ++ mov x2, ip0 ++ bl memcpy ++ ++ ldr ip0, [x29, #OFFSET_T1] ++ ++ /* Call the function. */ ++ ldp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*0] ++ ldp x2, x3, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*1] ++ ldp x4, x5, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*2] ++ ldp x6, x7, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*3] ++ ldp d0, d1, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*0] ++ ldp d2, d3, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*1] ++ ldp d4, d5, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*2] ++ ldp d6, d7, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*3] ++ blr ip0 ++ stp x0, x1, [x29, #OFFSET_RV + DL_OFFSET_RV_X0] ++ stp d0, d1, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*0] ++ stp d2, d3, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*1] ++ ++ /* Setup call to pltexit */ ++ ldp x0, x1, [x29, #OFFSET_SAVED_CALL_X0] ++ add x2, x29, #OFFSET_RG ++ add x3, x29, #OFFSET_RV ++ bl _dl_call_pltexit ++ ++ ldp x0, x1, [x29, #OFFSET_RV + DL_OFFSET_RV_X0] ++ ldp d0, d1, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*0] ++ ldp d2, d3, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*1] ++ /* LR from within La_aarch64_reg */ ++ ldr lr, [x29, #OFFSET_RG + DL_OFFSET_RG_LR] ++ cfi_restore(lr) ++ mov sp, x29 ++ cfi_def_cfa_register (sp) ++ ldr x29, [x29, #0] ++ cfi_restore(x29) ++ add sp, sp, SF_SIZE + 16 ++ cfi_adjust_cfa_offset (- SF_SIZE - 16) ++ ++ br lr ++ ++ cfi_endproc ++ .size _dl_runtime_profile, .-_dl_runtime_profile ++#endif ++ .previous +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fclrexcpt.c glibc/ports/sysdeps/aarch64/fclrexcpt.c +--- glibc.orig/ports/sysdeps/aarch64/fclrexcpt.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fclrexcpt.c 2012-09-24 13:05:16.000000000 +0100 +@@ -0,0 +1,35 @@ ++/* Copyright (C) 1997-2001, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++int ++feclearexcept (int excepts) ++{ ++ fpu_fpsr_t fpsr; ++ ++ excepts &= FE_ALL_EXCEPT; ++ ++ _FPU_GETFPSR (fpsr); ++ fpsr = (fpsr & ~FE_ALL_EXCEPT) | (fpsr & FE_ALL_EXCEPT & ~excepts); ++ ++ _FPU_SETFPSR (fpsr); ++ ++ return 0; ++} +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fedisblxcpt.c glibc/ports/sysdeps/aarch64/fedisblxcpt.c +--- glibc.orig/ports/sysdeps/aarch64/fedisblxcpt.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fedisblxcpt.c 2012-09-24 13:05:24.000000000 +0100 +@@ -0,0 +1,40 @@ ++/* Copyright (C) 2001, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++int ++fedisableexcept (int excepts) ++{ ++ fpu_fpcr_t fpcr; ++ int original_excepts; ++ ++ _FPU_GETFPCR(fpcr); ++ ++ original_excepts = (fpcr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; ++ ++ excepts &= FE_ALL_EXCEPT; ++ ++ fpcr &= ~(excepts << FE_EXCEPT_SHIFT); ++ ++ _FPU_SETFPCR(fpcr); ++ _ISB (); ++ ++ return original_excepts; ++} +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/feenablxcpt.c glibc/ports/sysdeps/aarch64/feenablxcpt.c +--- glibc.orig/ports/sysdeps/aarch64/feenablxcpt.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/feenablxcpt.c 2012-09-24 13:05:35.000000000 +0100 +@@ -0,0 +1,40 @@ ++/* Copyright (C) 2001, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++int ++feenableexcept (int excepts) ++{ ++ fpu_fpcr_t fpcr; ++ int original_excepts; ++ ++ _FPU_GETFPCR(fpcr); ++ ++ original_excepts = (fpcr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; ++ ++ excepts &= FE_ALL_EXCEPT; ++ ++ fpcr |= (excepts << FE_EXCEPT_SHIFT); ++ ++ _FPU_SETFPCR(fpcr); ++ _ISB (); ++ ++ return original_excepts; ++} +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fegetenv.c glibc/ports/sysdeps/aarch64/fegetenv.c +--- glibc.orig/ports/sysdeps/aarch64/fegetenv.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fegetenv.c 2012-09-24 13:05:53.000000000 +0100 +@@ -0,0 +1,33 @@ ++/* Copyright (C) 1997-2001, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++int ++fegetenv (fenv_t *envp) ++{ ++ fpu_fpcr_t fpcr; ++ fpu_fpsr_t fpsr; ++ _FPU_GETFPCR (fpcr); ++ _FPU_GETFPSR (fpsr); ++ envp->fpcr = fpcr; ++ envp->fpsr = fpsr; ++ return 0; ++} ++libm_hidden_def (fegetenv) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fegetexcept.c glibc/ports/sysdeps/aarch64/fegetexcept.c +--- glibc.orig/ports/sysdeps/aarch64/fegetexcept.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fegetexcept.c 2012-09-24 13:06:02.000000000 +0100 +@@ -0,0 +1,28 @@ ++/* Copyright (C) 2001, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++int ++fegetexcept (void) ++{ ++ fpu_fpcr_t fpcr; ++ _FPU_GETFPCR (fpcr); ++ return (fpcr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; ++} +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fegetround.c glibc/ports/sysdeps/aarch64/fegetround.c +--- glibc.orig/ports/sysdeps/aarch64/fegetround.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fegetround.c 2012-09-24 13:06:11.000000000 +0100 +@@ -0,0 +1,28 @@ ++/* Copyright (C) 1997, 1998, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++int ++fegetround (void) ++{ ++ fpu_fpcr_t fpcr; ++ _FPU_GETFPCR (fpcr); ++ return fpcr & FE_TOWARDZERO; ++} +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/feholdexcpt.c glibc/ports/sysdeps/aarch64/feholdexcpt.c +--- glibc.orig/ports/sysdeps/aarch64/feholdexcpt.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/feholdexcpt.c 2012-09-24 15:07:31.000000000 +0100 +@@ -0,0 +1,48 @@ ++/* Copyright (C) 1997-1999, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++int ++feholdexcept (fenv_t *envp) ++{ ++ fpu_fpsr_t fpsr; ++ fpu_fpcr_t fpcr; ++ ++ _FPU_GETFPCR (fpcr); ++ envp->fpcr = fpcr; ++ ++ _FPU_GETFPSR (fpsr); ++ envp->fpsr = fpsr; ++ ++ /* Now set all exceptions to non-stop. */ ++ fpcr &= ~(FE_ALL_EXCEPT << FE_EXCEPT_SHIFT); ++ ++ /* And clear all exception flags. */ ++ fpsr &= ~FE_ALL_EXCEPT; ++ ++ _FPU_SETFPSR(fpsr); ++ ++ _FPU_SETFPCR(fpcr); ++ _ISB (); ++ ++ return 0; ++} ++ ++libm_hidden_def (feholdexcept) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fesetenv.c glibc/ports/sysdeps/aarch64/fesetenv.c +--- glibc.orig/ports/sysdeps/aarch64/fesetenv.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fesetenv.c 2012-09-24 13:06:37.000000000 +0100 +@@ -0,0 +1,61 @@ ++/* Copyright (C) 1997-2002, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++int ++fesetenv (const fenv_t *envp) ++{ ++ fpu_fpcr_t fpcr; ++ fpu_fpsr_t fpsr; ++ ++ _FPU_GETFPCR (fpcr); ++ _FPU_GETFPSR (fpsr); ++ ++ fpcr &= _FPU_FPCR_RESERVED; ++ fpsr &= _FPU_FPSR_RESERVED; ++ ++ if (envp == FE_DFL_ENV) ++ { ++ fpcr |= _FPU_FPCR_DEFAULT; ++ fpsr |= _FPU_FPSR_DEFAULT; ++ } ++ else if (envp == FE_NOMASK_ENV) ++ { ++ fpcr |= _FPU_FPCR_IEEE; ++ fpsr |= _FPU_FPSR_IEEE; ++ } ++ else ++ { ++ fpcr |= envp->fpcr & ~_FPU_FPCR_RESERVED; ++ fpsr |= envp->fpsr & ~_FPU_FPSR_RESERVED; ++ } ++ ++ _FPU_SETFPSR (fpsr); ++ ++ _FPU_SETFPCR (fpcr); ++ ++ /* The instruction stream must be syncrnonized after any write to ++ FPCR */ ++ _ISB (); ++ ++ return 0; ++} ++ ++libm_hidden_def (fesetenv) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fesetround.c glibc/ports/sysdeps/aarch64/fesetround.c +--- glibc.orig/ports/sysdeps/aarch64/fesetround.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fesetround.c 2012-09-24 13:06:46.000000000 +0100 +@@ -0,0 +1,47 @@ ++/* Copyright (C) 1997, 1998, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++int ++fesetround (int round) ++{ ++ fpu_fpcr_t fpcr; ++ ++ switch (round) ++ { ++ case FE_TONEAREST: ++ case FE_UPWARD: ++ case FE_DOWNWARD: ++ case FE_TOWARDZERO: ++ _FPU_GETFPCR (fpcr); ++ fpcr = (fpcr & ~FE_TOWARDZERO) | round; ++ ++ _FPU_SETFPCR (fpcr); ++ _ISB (); ++ return 0; ++ ++ default: ++ return 1; ++ } ++ ++ return 1; ++} ++ ++libm_hidden_def (fesetround) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/feupdateenv.c glibc/ports/sysdeps/aarch64/feupdateenv.c +--- glibc.orig/ports/sysdeps/aarch64/feupdateenv.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/feupdateenv.c 2012-09-24 13:07:01.000000000 +0100 +@@ -0,0 +1,38 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++int ++feupdateenv (const fenv_t *envp) ++{ ++ fpu_fpsr_t fpsr; ++ ++ /* Get the current exception state. */ ++ _FPU_GETFPSR (fpsr); ++ ++ /* Install new environment. */ ++ fesetenv (envp); ++ ++ /* Raise the saved exceptions. */ ++ feraiseexcept (fpsr & FE_ALL_EXCEPT); ++ ++ return 0; ++} ++libm_hidden_def (feupdateenv) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fgetexcptflg.c glibc/ports/sysdeps/aarch64/fgetexcptflg.c +--- glibc.orig/ports/sysdeps/aarch64/fgetexcptflg.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fgetexcptflg.c 2012-09-24 13:07:10.000000000 +0100 +@@ -0,0 +1,33 @@ ++/* Copyright (C) 2001, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++int ++fegetexceptflag (fexcept_t *flagp, int excepts) ++{ ++ fpu_fpsr_t fpsr; ++ ++ /* Get the current exceptions. */ ++ _FPU_GETFPSR (fpsr); ++ ++ *flagp = fpsr & excepts & FE_ALL_EXCEPT; ++ ++ return 0; ++} +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_ceil.c glibc/ports/sysdeps/aarch64/fpu/s_ceil.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_ceil.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_ceil.c 2012-09-24 13:08:06.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC ceil ++#define INSN "frintp" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_ceilf.c glibc/ports/sysdeps/aarch64/fpu/s_ceilf.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_ceilf.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_ceilf.c 2012-09-24 13:08:17.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC ceilf ++#define INSN "frintp" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_floor.c glibc/ports/sysdeps/aarch64/fpu/s_floor.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_floor.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_floor.c 2012-09-24 13:08:20.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC floor ++#define INSN "frintm" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_floorf.c glibc/ports/sysdeps/aarch64/fpu/s_floorf.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_floorf.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_floorf.c 2012-09-24 13:08:23.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC floorf ++#define INSN "frintm" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_fma.c glibc/ports/sysdeps/aarch64/fpu/s_fma.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_fma.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_fma.c 2012-09-24 13:08:33.000000000 +0100 +@@ -0,0 +1,54 @@ ++/* Copyright (C) 1996, 1997, 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++#ifndef FUNC ++#define FUNC fma ++#endif ++ ++#ifndef TYPE ++#define TYPE double ++#define REGS "d" ++#else ++#ifndef REGS ++#error REGS not defined ++#endif ++#endif ++ ++#define __CONCATX(a,b) __CONCAT(a,b) ++ ++TYPE ++__CONCATX(__,FUNC) (x, y, z) ++ TYPE x; ++ TYPE y; ++ TYPE z; ++{ ++ TYPE result; ++ asm ( "fmadd" "\t%" REGS "0, %" REGS "1, %" REGS "2, %" REGS "3" ++ : "=w" (result) : "w" (x), "w" (y), "w" (z) ); ++ return result; ++} ++ ++#define weak_aliasx(a,b) weak_alias(a,b) ++weak_aliasx (__CONCATX(__,FUNC), FUNC) ++#define strong_aliasx(a,b) strong_alias(a,b) ++#ifdef NO_LONG_DOUBLE ++strong_aliasx (__CONCATX(__,FUNC), __CONCATX(__,__CONCATX(FUNC,l))) ++weak_aliasx (__CONCATX(__,FUNC), __CONCATX(FUNC,l)) ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_fmaf.c glibc/ports/sysdeps/aarch64/fpu/s_fmaf.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_fmaf.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_fmaf.c 2012-09-24 13:08:39.000000000 +0100 +@@ -0,0 +1,22 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC fmaf ++#define TYPE float ++#define REGS "s" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_fmax.c glibc/ports/sysdeps/aarch64/fpu/s_fmax.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_fmax.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_fmax.c 2012-09-24 13:08:43.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC fmax ++#define INSN "fmaxnm" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_fmaxf.c glibc/ports/sysdeps/aarch64/fpu/s_fmaxf.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_fmaxf.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_fmaxf.c 2012-09-24 13:08:48.000000000 +0100 +@@ -0,0 +1,23 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC fmaxf ++#define INSN "fmaxnm" ++#define TYPE float ++#define REGS "s" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_fmin.c glibc/ports/sysdeps/aarch64/fpu/s_fmin.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_fmin.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_fmin.c 2012-09-24 13:08:56.000000000 +0100 +@@ -0,0 +1,57 @@ ++/* Copyright (C) 1996, 1997, 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++#ifndef FUNC ++#define FUNC fmin ++#endif ++ ++#ifndef INSN ++#define INSN "fminnm" ++#endif ++ ++#ifndef TYPE ++#define TYPE double ++#define REGS "d" ++#else ++#ifndef REGS ++#error REGS not defined ++#endif ++#endif ++ ++#define __CONCATX(a,b) __CONCAT(a,b) ++ ++TYPE ++__CONCATX(__,FUNC) (x, y) ++ TYPE x; ++ TYPE y; ++{ ++ TYPE result; ++ asm ( INSN "\t%" REGS "0, %" REGS "1, %" REGS "2" ++ : "=w" (result) : "w" (x), "w" (y) ); ++ return result; ++} ++ ++#define weak_aliasx(a,b) weak_alias(a,b) ++weak_aliasx (__CONCATX(__,FUNC), FUNC) ++#define strong_aliasx(a,b) strong_alias(a,b) ++#ifdef NO_LONG_DOUBLE ++strong_aliasx (__CONCATX(__,FUNC), __CONCATX(__,__CONCATX(FUNC,l))) ++weak_aliasx (__CONCATX(__,FUNC), __CONCATX(FUNC,l)) ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_fminf.c glibc/ports/sysdeps/aarch64/fpu/s_fminf.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_fminf.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_fminf.c 2012-09-24 13:09:02.000000000 +0100 +@@ -0,0 +1,22 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC fminf ++#define TYPE float ++#define REGS "s" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_frint.x glibc/ports/sysdeps/aarch64/fpu/s_frint.x +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_frint.x 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_frint.x 2012-09-24 13:09:09.000000000 +0100 +@@ -0,0 +1,56 @@ ++/* Copyright (C) 1996, 1997, 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++#ifndef FUNC ++#error FUNC not defined ++#endif ++ ++#ifndef TYPE ++#define TYPE double ++#define REGS "d" ++#else ++#ifndef REGS ++#error REGS not defined ++#endif ++#endif ++ ++#ifndef INSN ++#error INSN not defined ++#endif ++ ++#define __CONCATX(a,b) __CONCAT(a,b) ++ ++TYPE ++__CONCATX(__,FUNC) (x) ++ TYPE x; ++{ ++ TYPE result; ++ asm ( INSN "\t%" REGS "0, %" REGS "1" : ++ "=w" (result) : "w" (x) ); ++ return result; ++} ++ ++#define weak_aliasx(a,b) weak_alias(a,b) ++weak_aliasx (__CONCATX(__,FUNC), FUNC) ++#define strong_aliasx(a,b) strong_alias(a,b) ++#ifdef NO_LONG_DOUBLE ++strong_aliasx (__CONCATX(__,FUNC), __CONCATX(__,__CONCATX(FUNC,l))) ++weak_aliasx (__CONCATX(__,FUNC), __CONCATX(FUNC,l)) ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_frintf.x glibc/ports/sysdeps/aarch64/fpu/s_frintf.x +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_frintf.x 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_frintf.x 2012-09-24 13:09:15.000000000 +0100 +@@ -0,0 +1,24 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef FUNC ++#error FUNC not defined ++#endif ++#define TYPE float ++#define REGS "s" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_llrint.c glibc/ports/sysdeps/aarch64/fpu/s_llrint.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_llrint.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_llrint.c 2012-09-24 13:09:19.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC llrint ++#define OTYPE long long int ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_llrintf.c glibc/ports/sysdeps/aarch64/fpu/s_llrintf.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_llrintf.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_llrintf.c 2012-09-24 13:09:23.000000000 +0100 +@@ -0,0 +1,23 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC llrintf ++#define ITYPE float ++#define IREGS "s" ++#define OTYPE long long int ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_llround.c glibc/ports/sysdeps/aarch64/fpu/s_llround.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_llround.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_llround.c 2012-09-24 13:09:26.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC llround ++#define OTYPE long long int ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_llroundf.c glibc/ports/sysdeps/aarch64/fpu/s_llroundf.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_llroundf.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_llroundf.c 2012-09-24 13:09:29.000000000 +0100 +@@ -0,0 +1,23 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC llroundf ++#define ITYPE float ++#define IREGS "s" ++#define OTYPE long long int ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_lrint.c glibc/ports/sysdeps/aarch64/fpu/s_lrint.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_lrint.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_lrint.c 2012-09-24 13:09:37.000000000 +0100 +@@ -0,0 +1,60 @@ ++/* Copyright (C) 1996, 1997, 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++#ifndef FUNC ++#define FUNC lrint ++#endif ++ ++#ifndef ITYPE ++#define ITYPE double ++#define IREGS "d" ++#else ++#ifndef IREGS ++#error IREGS not defined ++#endif ++#endif ++ ++#ifndef OTYPE ++#define OTYPE long int ++#endif ++ ++#define OREGS "x" ++ ++#define __CONCATX(a,b) __CONCAT(a,b) ++ ++OTYPE ++__CONCATX(__,FUNC) (x) ++ ITYPE x; ++{ ++ OTYPE result; ++ ITYPE temp; ++ asm ( "frintx" "\t%" IREGS "1, %" IREGS "2\n\t" ++ "fcvtzs" "\t%" OREGS "0, %" IREGS "1" ++ : "=r" (result), "=w" (temp) : "w" (x) ); ++ return result; ++} ++ ++#define weak_aliasx(a,b) weak_alias(a,b) ++weak_aliasx (__CONCATX(__,FUNC), FUNC) ++#define strong_aliasx(a,b) strong_alias(a,b) ++#ifdef NO_LONG_DOUBLE ++strong_aliasx (__CONCATX(__,FUNC), __CONCATX(__,__CONCATX(FUNC,l))) ++weak_aliasx (__CONCATX(__,FUNC), __CONCATX(FUNC,l)) ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_lrintf.c glibc/ports/sysdeps/aarch64/fpu/s_lrintf.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_lrintf.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_lrintf.c 2012-09-24 13:09:43.000000000 +0100 +@@ -0,0 +1,22 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC lrintf ++#define ITYPE float ++#define IREGS "s" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_lround.c glibc/ports/sysdeps/aarch64/fpu/s_lround.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_lround.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_lround.c 2012-09-24 13:09:50.000000000 +0100 +@@ -0,0 +1,58 @@ ++/* Copyright (C) 1996, 1997, 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++#ifndef FUNC ++#define FUNC lround ++#endif ++ ++#ifndef ITYPE ++#define ITYPE double ++#define IREGS "d" ++#else ++#ifndef IREGS ++#error IREGS not defined ++#endif ++#endif ++ ++#ifndef OTYPE ++#define OTYPE long int ++#endif ++ ++#define OREGS "x" ++ ++#define __CONCATX(a,b) __CONCAT(a,b) ++ ++OTYPE ++__CONCATX(__,FUNC) (x) ++ ITYPE x; ++{ ++ OTYPE result; ++ asm ( "fcvtas" "\t%" OREGS "0, %" IREGS "1" ++ : "=r" (result) : "w" (x) ); ++ return result; ++} ++ ++#define weak_aliasx(a,b) weak_alias(a,b) ++weak_aliasx (__CONCATX(__,FUNC), FUNC) ++#define strong_aliasx(a,b) strong_alias(a,b) ++#ifdef NO_LONG_DOUBLE ++strong_aliasx (__CONCATX(__,FUNC), __CONCATX(__,__CONCATX(FUNC,l))) ++weak_aliasx (__CONCATX(__,FUNC), __CONCATX(FUNC,l)) ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_lroundf.c glibc/ports/sysdeps/aarch64/fpu/s_lroundf.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_lroundf.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_lroundf.c 2012-09-24 13:09:56.000000000 +0100 +@@ -0,0 +1,22 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC lroundf ++#define ITYPE float ++#define IREGS "s" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_nearbyint.c glibc/ports/sysdeps/aarch64/fpu/s_nearbyint.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_nearbyint.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_nearbyint.c 2012-09-24 13:09:59.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC nearbyint ++#define INSN "frinti" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_nearbyintf.c glibc/ports/sysdeps/aarch64/fpu/s_nearbyintf.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_nearbyintf.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_nearbyintf.c 2012-09-24 13:10:01.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC nearbyintf ++#define INSN "frinti" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_rint.c glibc/ports/sysdeps/aarch64/fpu/s_rint.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_rint.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_rint.c 2012-09-24 13:10:04.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC rint ++#define INSN "frintx" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_rintf.c glibc/ports/sysdeps/aarch64/fpu/s_rintf.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_rintf.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_rintf.c 2012-09-24 13:10:07.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC rintf ++#define INSN "frintx" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_round.c glibc/ports/sysdeps/aarch64/fpu/s_round.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_round.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_round.c 2012-09-24 13:10:11.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC round ++#define INSN "frinta" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_roundf.c glibc/ports/sysdeps/aarch64/fpu/s_roundf.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_roundf.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_roundf.c 2012-09-24 13:10:14.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC roundf ++#define INSN "frinta" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_trunc.c glibc/ports/sysdeps/aarch64/fpu/s_trunc.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_trunc.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_trunc.c 2012-09-24 13:10:17.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC trunc ++#define INSN "frintz" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_truncf.c glibc/ports/sysdeps/aarch64/fpu/s_truncf.c +--- glibc.orig/ports/sysdeps/aarch64/fpu/s_truncf.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu/s_truncf.c 2012-09-24 13:10:20.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define FUNC truncf ++#define INSN "frintz" ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu-control.h glibc/ports/sysdeps/aarch64/fpu-control.h +--- glibc.orig/ports/sysdeps/aarch64/fpu-control.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fpu-control.h 2012-09-24 13:10:39.000000000 +0100 +@@ -0,0 +1,78 @@ ++/* Copyright (C) 1996-1998, 2000, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _FPU_CONTROL_H ++#define _FPU_CONTROL_H ++ ++/* Macros for accessing the FPCR and FPSR. */ ++ ++#define _FPU_GETFPCR(fpcr) \ ++ __asm__ __volatile__ ("mrs %0, fpcr" : "=r" (fpcr)) ++ ++#define _FPU_SETFPCR(fpcr) \ ++ __asm__ __volatile__ ("msr fpcr, %0" : : "r" (fpcr)) ++ ++#define _FPU_GETFPSR(fpsr) \ ++ __asm__ __volatile__ ("mrs %0, fpsr" : "=r" (fpsr)) ++ ++#define _FPU_SETFPSR(fpsr) \ ++ __asm__ __volatile__ ("msr fpsr, %0" : : "r" (fpsr)) ++ ++#define _ISB() \ ++ __asm__ __volatile__ ("isb") ++ ++/* Reserved bits should be preserved when modifying register ++ contents. These two masks indicate which bits in each of FPCR and ++ FPSR should not be changed. */ ++ ++#define _FPU_FPCR_RESERVED 0xfe0fe0ff ++#define _FPU_FPSR_RESERVED 0x0fffffe0 ++ ++#define _FPU_FPCR_DEFAULT 0x00000000 ++#define _FPU_FPSR_DEFAULT 0x00000000 ++ ++/* Layout of FPCR and FPSR: ++ ++ | | | | | | | | ++ 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 ++ s s s s s s s s s s s ++ c c c c c c c c c c c c ++ N Z C V Q A D F R R S S S L L L I U U I U O D I I U U I U O D I ++ C H N Z M M T T B E E E D N N X F F Z O D N N X F F Z O ++ P O O R R Z N N N E K K E E E E E C K K C C C C C ++ D D I I P ++ E E D D ++ E E ++ */ ++#define _FPU_FPCR_MASK_IXE 0x1000 ++#define _FPU_FPCR_MASK_UFE 0x0800 ++#define _FPU_FPCR_MASK_OFE 0x0400 ++#define _FPU_FPCR_MASK_DZE 0x0200 ++#define _FPU_FPCR_MASK_IOE 0x0100 ++ ++#define _FPU_FPCR_IEEE \ ++ (_FPU_FPCR_DEFAULT | _FPU_FPCR_MASK_IXE | \ ++ _FPU_FPCR_MASK_UFE | _FPU_FPCR_MASK_OFE | \ ++ _FPU_FPCR_MASK_DZE | _FPU_FPCR_MASK_IOE) ++ ++#define _FPU_FPSR_IEEE 0 ++ ++typedef unsigned int fpu_fpcr_t; ++typedef unsigned int fpu_fpsr_t; ++ ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fraiseexcpt.c glibc/ports/sysdeps/aarch64/fraiseexcpt.c +--- glibc.orig/ports/sysdeps/aarch64/fraiseexcpt.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fraiseexcpt.c 2012-09-24 13:10:52.000000000 +0100 +@@ -0,0 +1,92 @@ ++/* Copyright (C) 1997-2002, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++ ++int ++feraiseexcept (int excepts) ++{ ++ int fpsr; ++ const float fp_zero = 0.0; ++ const float fp_one = 1.0; ++ const float fp_max = FLT_MAX; ++ const float fp_min = FLT_MIN; ++ const float fp_1e32 = 1.0e32f; ++ const float fp_two = 2.0; ++ const float fp_three = 3.0; ++ ++ /* Raise exceptions represented by EXCEPTS. But we must raise only ++ one signal at a time. It is important that if the OVERFLOW or ++ UNDERFLOW exception and the inexact exception are given at the ++ same time, the OVERFLOW or UNDERFLOW exception precedes the ++ INEXACT exception. ++ ++ After each exception we read from the FPSR, to force the ++ exception to be raised immediately. */ ++ ++ if (FE_INVALID & excepts) ++ __asm__ __volatile__ ( ++ "ldr s0, %1\n\t" ++ "fdiv s0, s0, s0\n\t" ++ "mrs %0, fpsr" : "=r" (fpsr) ++ : "m" (fp_zero) ++ : "d0"); ++ ++ if (FE_DIVBYZERO & excepts) ++ __asm__ __volatile__ ( ++ "ldr s0, %1\n\t" ++ "ldr s1, %2\n\t" ++ "fdiv s0, s0, s1\n\t" ++ "mrs %0, fpsr" : "=r" (fpsr) ++ : "m" (fp_one), "m" (fp_zero) ++ : "d0", "d1"); ++ ++ if (FE_OVERFLOW & excepts) ++ /* There's no way to raise overflow without also raising inexact. */ ++ __asm__ __volatile__ ( ++ "ldr s0, %1\n\t" ++ "ldr s1, %2\n\t" ++ "fadd s0, s0, s1\n\t" ++ "mrs %0, fpsr" : "=r" (fpsr) ++ : "m" (fp_max), "m" (fp_1e32) ++ : "d0", "d1"); ++ ++ if (FE_UNDERFLOW & excepts) ++ __asm__ __volatile__ ( ++ "ldr s0, %1\n\t" ++ "ldr s1, %2\n\t" ++ "fdiv s0, s0, s1\n\t" ++ "mrs %0, fpsr" : "=r" (fpsr) ++ : "m" (fp_min), "m" (fp_three) ++ : "d0", "d1"); ++ ++ if (FE_INEXACT & excepts) ++ __asm__ __volatile__ ( ++ "ldr s0, %1\n\t" ++ "ldr s1, %2\n\t" ++ "fdiv s0, s0, s1\n\t" ++ "mrs %0, fpsr" : "=r" (fpsr) ++ : "m" (fp_two), "m" (fp_three) ++ : "d0", "d1"); ++ ++ return 0; ++} ++ ++libm_hidden_def (feraiseexcept) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fsetexcptflg.c glibc/ports/sysdeps/aarch64/fsetexcptflg.c +--- glibc.orig/ports/sysdeps/aarch64/fsetexcptflg.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/fsetexcptflg.c 2012-09-24 13:11:07.000000000 +0100 +@@ -0,0 +1,39 @@ ++/* Copyright (C) 1997-2001, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++ ++int ++fesetexceptflag (const fexcept_t *flagp, int excepts) ++{ ++ fpu_fpsr_t fpsr; ++ ++ /* Get the current environment. */ ++ _FPU_GETFPSR (fpsr); ++ ++ /* Set the desired exception mask. */ ++ fpsr &= ~(excepts & FE_ALL_EXCEPT); ++ fpsr |= (*flagp & excepts & FE_ALL_EXCEPT); ++ ++ /* Save state back to the FPU. */ ++ _FPU_SETFPSR (fpsr); ++ ++ return 0; ++} +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/ftestexcept.c glibc/ports/sysdeps/aarch64/ftestexcept.c +--- glibc.orig/ports/sysdeps/aarch64/ftestexcept.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/ftestexcept.c 2012-09-24 13:11:16.000000000 +0100 +@@ -0,0 +1,32 @@ ++/* Copyright (C) 1997, 1998, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++int ++fetestexcept (int excepts) ++{ ++ fpu_fpsr_t fpsr; ++ ++ /* Get current exceptions. */ ++ _FPU_GETFPSR(fpsr); ++ ++ return fpsr & excepts & FE_ALL_EXCEPT; ++} ++libm_hidden_def (fetestexcept) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/jmpbuf-offsets.h glibc/ports/sysdeps/aarch64/jmpbuf-offsets.h +--- glibc.orig/ports/sysdeps/aarch64/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/jmpbuf-offsets.h 2012-09-24 13:11:26.000000000 +0100 +@@ -0,0 +1,44 @@ ++/* Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library. If not, see ++ . */ ++ ++#define JB_X19 0 ++#define JB_X20 1 ++#define JB_X21 2 ++#define JB_X22 3 ++#define JB_X23 4 ++#define JB_X24 5 ++#define JB_X25 6 ++#define JB_X26 7 ++#define JB_X27 8 ++#define JB_X28 9 ++#define JB_X29 10 ++#define JB_LR 11 ++#define JB_SP 13 ++ ++#define JB_D8 14 ++#define JB_D9 15 ++#define JB_D10 16 ++#define JB_D11 17 ++#define JB_D12 18 ++#define JB_D13 19 ++#define JB_D14 20 ++#define JB_D15 21 ++ ++/* Helper for generic ____longjmp_chk(). */ ++#define JB_FRAME_ADDRESS(buf) \ ++ ((void *) (unsigned long) (buf[JB_SP])) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/jmpbuf-unwind.h glibc/ports/sysdeps/aarch64/jmpbuf-unwind.h +--- glibc.orig/ports/sysdeps/aarch64/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/jmpbuf-unwind.h 2012-09-24 13:11:36.000000000 +0100 +@@ -0,0 +1,46 @@ ++/* Copyright (C) 2005, 2006, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++#include ++ ++/* Test if longjmp to JMPBUF would unwind the frame ++ containing a local variable at ADDRESS. */ ++#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ ++ ((void *) (address) < (void *) demangle (jmpbuf[JB_SP])) ++ ++#define _JMPBUF_CFA_UNWINDS_ADJ(jmpbuf, context, adj) \ ++ _JMPBUF_UNWINDS_ADJ (jmpbuf, (void *) _Unwind_GetCFA (context), adj) ++ ++static inline uintptr_t __attribute__ ((unused)) ++_jmpbuf_sp (__jmp_buf jmpbuf) ++{ ++ uintptr_t sp = jmpbuf[JB_SP]; ++#ifdef PTR_DEMANGLE ++ PTR_DEMANGLE (sp); ++#endif ++ return sp; ++} ++ ++#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ ++ ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) ++ ++/* We use the normal longjmp for unwinding. */ ++#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/ldsodefs.h glibc/ports/sysdeps/aarch64/ldsodefs.h +--- glibc.orig/ports/sysdeps/aarch64/ldsodefs.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/ldsodefs.h 2012-09-24 13:11:46.000000000 +0100 +@@ -0,0 +1,48 @@ ++/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _AARCH64_LDSODEFS_H ++#define _AARCH64_LDSODEFS_H 1 ++ ++#include ++ ++struct La_aarch64_regs; ++struct La_aarch64_retval; ++ ++#define ARCH_PLTENTER_MEMBERS \ ++ ElfW(Addr) (*aarch64_gnu_pltenter) (ElfW(Sym) *, \ ++ unsigned int, \ ++ uintptr_t *, \ ++ uintptr_t *, \ ++ struct La_aarch64_regs *, \ ++ unsigned int *, \ ++ const char *, \ ++ long int *) ++ ++#define ARCH_PLTEXIT_MEMBERS \ ++ ElfW(Addr) (*aarch64_gnu_pltexit) (ElfW(Sym) *, \ ++ unsigned int, \ ++ uintptr_t *, \ ++ uintptr_t *, \ ++ struct La_aarch64_regs *, \ ++ struct La_aarch64_retval *, \ ++ const char *) ++ ++#include_next ++ ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/libc-tls.c glibc/ports/sysdeps/aarch64/libc-tls.c +--- glibc.orig/ports/sysdeps/aarch64/libc-tls.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/libc-tls.c 2012-09-24 13:11:55.000000000 +0100 +@@ -0,0 +1,32 @@ ++/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++/* On AArch64, 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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/libm-test-ulps glibc/ports/sysdeps/aarch64/libm-test-ulps +--- glibc.orig/ports/sysdeps/aarch64/libm-test-ulps 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/libm-test-ulps 2012-09-28 12:55:43.000000000 +0100 +@@ -0,0 +1,3726 @@ ++# Begin of automatic generation ++ ++# acos_downward ++Test "acos_downward (-0) == pi/2": ++float: 1 ++ifloat: 1 ++Test "acos_downward (-0.5) == M_PI_6l*4.0": ++double: 1 ++idouble: 1 ++Test "acos_downward (-1) == pi": ++float: 1 ++ifloat: 1 ++Test "acos_downward (0) == pi/2": ++float: 1 ++ifloat: 1 ++Test "acos_downward (0.5) == M_PI_6l*2.0": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# acos_towardzero ++Test "acos_towardzero (-0) == pi/2": ++float: 1 ++ifloat: 1 ++Test "acos_towardzero (-0.5) == M_PI_6l*4.0": ++double: 1 ++idouble: 1 ++Test "acos_towardzero (-1) == pi": ++float: 1 ++ifloat: 1 ++Test "acos_towardzero (0) == pi/2": ++float: 1 ++ifloat: 1 ++Test "acos_towardzero (0.5) == M_PI_6l*2.0": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# acos_upward ++Test "acos_upward (-0) == pi/2": ++ildouble: 1 ++ldouble: 1 ++Test "acos_upward (-1) == pi": ++ildouble: 1 ++ldouble: 1 ++Test "acos_upward (0) == pi/2": ++ildouble: 1 ++ldouble: 1 ++ ++# asin_downward ++Test "asin_downward (-0.5) == -pi/6": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "asin_downward (-1.0) == -pi/2": ++ildouble: 1 ++ldouble: 1 ++Test "asin_downward (0.5) == pi/6": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "asin_downward (1.0) == pi/2": ++float: 1 ++ifloat: 1 ++ ++# asin_towardzero ++Test "asin_towardzero (-0.5) == -pi/6": ++double: 1 ++idouble: 1 ++Test "asin_towardzero (-1.0) == -pi/2": ++float: 1 ++ifloat: 1 ++Test "asin_towardzero (0.5) == pi/6": ++double: 1 ++idouble: 1 ++Test "asin_towardzero (1.0) == pi/2": ++float: 1 ++ifloat: 1 ++ ++# asin_upward ++Test "asin_upward (-1.0) == -pi/2": ++float: 1 ++ifloat: 1 ++Test "asin_upward (1.0) == pi/2": ++ildouble: 1 ++ldouble: 1 ++ ++# atan2 ++Test "atan2 (-0.00756827042671106339, -.001792735857538728036) == -1.80338464113663849327153994379639112": ++ildouble: 1 ++ldouble: 1 ++Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# atanh ++Test "atanh (0.75) == 0.972955074527656652552676371721589865": ++float: 1 ++ifloat: 1 ++ ++# cacos ++Test "Imaginary part of: cacos (+0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (+0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++Test "Imaginary part of: cacos (+0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: cacos (+0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (+0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (+0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++Test "Imaginary part of: cacos (-0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: cacos (-0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (-1.5 + +0 i) == pi - 0.9624236501192068949955178268487368462704 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0.5 + +0 i) == 1.047197551196597746154214461093167628066 - 0 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacos (0.5 - 0 i) == 1.047197551196597746154214461093167628066 + +0 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacos (1.5 + +0 i) == +0 - 0.9624236501192068949955178268487368462704 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# cacosh ++Test "Real part of: cacosh (+0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (+0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (+0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (+0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (+0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (+0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-0.5 + +0 i) == +0 + 2.094395102393195492308428922186335256131 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cacosh (-0.5 - 0 i) == +0 - 2.094395102393195492308428922186335256131 i": ++double: 1 ++idouble: 1 ++Test "Real part of: cacosh (-1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + pi i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (-1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - pi i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + +0 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cacosh (1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - 0 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# casin ++Test "Imaginary part of: casin (+0 + 0.5 i) == +0 + 0.4812118250596034474977589134243684231352 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (+0 + 1.0 i) == +0 + 0.8813735870195430252326093249797923090282 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++Test "Imaginary part of: casin (+0 + 1.5 i) == +0 + 1.194763217287109304111930828519090523536 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casin (+0 - 0.5 i) == +0 - 0.4812118250596034474977589134243684231352 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (+0 - 1.0 i) == +0 - 0.8813735870195430252326093249797923090282 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (+0 - 1.5 i) == +0 - 1.194763217287109304111930828519090523536 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0 + 0.5 i) == -0 + 0.4812118250596034474977589134243684231352 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0 + 1.0 i) == -0 + 0.8813735870195430252326093249797923090282 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++Test "Imaginary part of: casin (-0 + 1.5 i) == -0 + 1.194763217287109304111930828519090523536 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: casin (-0 - 0.5 i) == -0 - 0.4812118250596034474977589134243684231352 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0 - 1.0 i) == -0 - 0.8813735870195430252326093249797923090282 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-0 - 1.5 i) == -0 - 1.194763217287109304111930828519090523536 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (-1.5 + +0 i) == -pi/2 + 0.9624236501192068949955178268487368462704 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casin (1.5 + +0 i) == pi/2 + 0.9624236501192068949955178268487368462704 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# casinh ++Test "Real part of: casinh (-0 + 1.5 i) == -0.9624236501192068949955178268487368462704 + pi/2 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0 - 1.5 i) == -0.9624236501192068949955178268487368462704 - pi/2 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.5 + +0 i) == -0.4812118250596034474977589134243684231352 + +0 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-0.5 - 0 i) == -0.4812118250596034474977589134243684231352 - 0 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (-1.0 + +0 i) == -0.8813735870195430252326093249797923090282 + +0 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++Test "Real part of: casinh (-1.0 - 0 i) == -0.8813735870195430252326093249797923090282 - 0 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++Test "Real part of: casinh (-1.5 + +0 i) == -1.194763217287109304111930828519090523536 + +0 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: casinh (-1.5 - 0 i) == -1.194763217287109304111930828519090523536 - 0 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": ++double: 5 ++float: 1 ++idouble: 5 ++ifloat: 1 ++ildouble: 4 ++ldouble: 4 ++Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": ++double: 3 ++float: 6 ++idouble: 3 ++ifloat: 6 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: casinh (0.5 + +0 i) == 0.4812118250596034474977589134243684231352 + +0 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.5 - 0 i) == 0.4812118250596034474977589134243684231352 - 0 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 + +0 i) == 0.8813735870195430252326093249797923090282 + +0 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.0 - 0 i) == 0.8813735870195430252326093249797923090282 - 0 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.5 + +0 i) == 1.194763217287109304111930828519090523536 + +0 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: casinh (1.5 - 0 i) == 1.194763217287109304111930828519090523536 - 0 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# catan ++Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i": ++ildouble: 1 ++ldouble: 1 ++ ++# catanh ++Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": ++double: 4 ++idouble: 4 ++Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i": ++ildouble: 1 ++ldouble: 1 ++ ++# cbrt ++Test "cbrt (-0.001) == -0.1": ++ildouble: 1 ++ldouble: 1 ++Test "cbrt (-27.0) == -3.0": ++double: 1 ++idouble: 1 ++Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217": ++double: 1 ++idouble: 1 ++ ++# ccos ++Test "Imaginary part of: ccos (-0.75 + 11357.25 i) == 9.001213196851067077465606717616495588201e4931 + 8.385498349388321535962327491346664141020e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (-0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccos (-0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (-0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (-0.75 - 11357.25 i) == 9.001213196851067077465606717616495588201e4931 - 8.385498349388321535962327491346664141020e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (-0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccos (-0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (-0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccos (0.75 + 11357.25 i) == 9.001213196851067077465606717616495588201e4931 - 8.385498349388321535962327491346664141020e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccos (0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (0.75 - 11357.25 i) == 9.001213196851067077465606717616495588201e4931 + 8.385498349388321535962327491346664141020e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccos (0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccos (0x1p-1074 + 1440 i) == inf - 5.981479269486130556466515778180916082415e301 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccos (0x1p-16434 + 22730 i) == inf - 1.217853148905605987081057582351152052687e4924 i": ++ildouble: 1 ++ldouble: 1 ++ ++# ccosh ++Test "Imaginary part of: ccosh (-11357.25 + 0.75 i) == 9.001213196851067077465606717616495588201e4931 - 8.385498349388321535962327491346664141020e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (-11357.25 - 0.75 i) == 9.001213196851067077465606717616495588201e4931 + 8.385498349388321535962327491346664141020e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (-710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (-710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccosh (-89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (-89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccosh (-89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (-89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ccosh (11357.25 + 0.75 i) == 9.001213196851067077465606717616495588201e4931 + 8.385498349388321535962327491346664141020e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (11357.25 - 0.75 i) == 9.001213196851067077465606717616495588201e4931 - 8.385498349388321535962327491346664141020e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ccosh (22730 + 0x1p-16434 i) == inf + 1.217853148905605987081057582351152052687e4924 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccosh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ccosh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ccosh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# cexp ++Test "Imaginary part of: cexp (-10000 + 0x1p16383 i) == 1.045876464564882298442774542991176546722e-4343 + 4.421154026488516836023811173959413420548e-4344 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cexp (-720 + 0.75 i) == 1.486960657116368433685753325516638551722e-313 + 1.385247284245720590980701226843815229385e-313 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cexp (-95 + 0.75 i) == 4.039714446238306526889476684000081624047e-42 + 3.763383677300535390271646960780570275931e-42 i": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cexp (1440 + 0x1p-1074 i) == inf + 1.196295853897226111293303155636183216483e302 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cexp (1440 + 0x1p-1074 i) == inf + 1.196295853897226111293303155636183216483e302 i plus overflow exception": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cexp (22730 + 0x1p-16434 i) == inf + 2.435706297811211974162115164702304105374e4924 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cexp (22730 + 0x1p-16434 i) == inf + 2.435706297811211974162115164702304105374e4924 i plus overflow exception": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (500 + 0x1p1023 i) == -1.159886268932754433233243794561351783426e217 + 7.904017694554466595359379965081774849708e216 i": ++double: 1 ++idouble: 1 ++Test "Real part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++# clog ++Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 2.649094276923003995420209214900915462737e-10 + 3.141592653589793238462643383279502884197 i": ++double: 1 ++idouble: 1 ++Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 2.649094282537168795982991778475646793277e-10 + 3.141592652530155111500161671113150737892 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i) == 5.354083939753840089583620652120903838944e-25 - 1.570796326795931422008642456283782656359 i": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + pi i": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - pi i": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1.fp+16383 + 0x1p-16445 i) == 11356.49165759582936919077408168801636572 + pi i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1.fp+16383 + 0x1p-16494 i) == 11356.49165759582936919077408168801636572 + pi i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1.fp+16383 - 0x1p-16445 i) == 11356.49165759582936919077408168801636572 - pi i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1.fp+16383 - 0x1p-16494 i) == 11356.49165759582936919077408168801636572 - pi i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (-0x1p-16445 + 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 + pi/2 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1p-16445 - 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 - pi/2 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1p-16494 + 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 + pi/2 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (-0x1p-16494 - 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 - pi/2 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i) == 8.298731898331237038231468223024422855654e-5 + 1.110938609507128729312743251313024793990e-3 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog (0x1.000566p0 + 0x1.234p-10 i) == 8.298731898331237038231468223024422855654e-5 + 1.110938609507128729312743251313024793990e-3 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 709.8942846690411016323109979483151967689 + 0.4636476090008061606231772164674799632783 i": ++double: 1 ++idouble: 1 ++Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + +0 i": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - 0 i": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1.fp+16383 + 0x1.fp+16383 i) == 11356.83823118610934184548269774874545400 + pi/4 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1.fp+16383 + 0x1p-16445 i) == 11356.49165759582936919077408168801636572 + +0 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1.fp+16383 + 0x1p-16494 i) == 11356.49165759582936919077408168801636572 + +0 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1.fp+16383 - 0x1p-16445 i) == 11356.49165759582936919077408168801636572 - 0 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1.fp+16383 - 0x1p-16494 i) == 11356.49165759582936919077408168801636572 - 0 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i) == -744.0934983311012896593986823853525458290 + pi/4 i": ++double: 1 ++idouble: 1 ++Test "Real part of: clog (0x1p-147 + 0x1p-147 i) == -101.5460619520319878296245057936228672231 + pi/4 i": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog (0x1p-16445 + 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 + pi/2 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1p-16445 - 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 - pi/2 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1p-16494 + 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 + pi/2 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (0x1p-16494 - 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 - pi/2 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog (1.0 + 0x1.234566p-10 i) == 6.172834701221959432440126967147726538097e-7 + 1.111110564353742042376451655136933182201e-3 i": ++float: 1 ++ifloat: 1 ++ ++# clog10 ++Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i": ++double: 2 ++idouble: 2 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i": ++double: 2 ++idouble: 2 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+1023 + 0x1p-1074 i) == 308.2409272754311106024666378243768099991 + 1.364376353841841347485783625431355770210 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+1023 - 0x1p-1074 i) == 308.2409272754311106024666378243768099991 - 1.364376353841841347485783625431355770210 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+127 + 0x1p-149 i) == 38.51805116050395969095658815123105801479 + 1.364376353841841347485783625431355770210 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-0x1.fp+127 - 0x1p-149 i) == 38.51805116050395969095658815123105801479 - 1.364376353841841347485783625431355770210 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i) == 2.556638434669064077889576526006849923281e-13 + 1.364375882602207106407956770293808181427 i": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf + inf i) == inf + 3/4 pi*log10(e) i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x1.00000000000000123456789abcp0 + 0x1.23456789p-1000 i) == 4.285899851347756186652871946325962330640e-19 + 4.611541215247321502041995872887317363241e-302 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1.00000000000000123456789abcp0 + 0x1.23456789p-1000 i) == 4.285899851347756186652871946325962330640e-19 + 4.611541215247321502041995872887317363241e-302 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1.00000000000000123456789abcp0 + 0x1.23456789p-60 i) == 4.285899851347756188767674032946882584784e-19 + 4.285899850759344225805480528847018395861e-19 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i": ++double: 1 ++idouble: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-100 i) == 3.577293486783822178310971763308187385546e-5 + 3.897399639875661463735636919790792140598e-31 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-100 i) == 3.577293486783822178310971763308187385546e-5 + 3.897399639875661463735636919790792140598e-31 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1.234566p-30 + 1.0 i) == 2.438200411482400072282924063740535840474e-19 + 6.821881764607257184291586401763604544928e-1 i": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x1.234566p-50 + 1.0 i) == 2.217530356103816369479108963807448194409e-31 + 6.821881769209202348667823902864283966959e-1 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i) == 2.217530356103816369479108963807448194409e-31 + 6.821881769209202348667823902864283966959e-1 i": ++float: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x1.234566p-60 + 1.0 i) == 2.114801746467415208319767917450504756866e-37 + 6.821881769209206733143018621078368211515e-1 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1.234566p-60 + 1.0 i) == 2.114801746467415208319767917450504756866e-37 + 6.821881769209206733143018621078368211515e-1 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i) == 38.68235441693561449174780668781319348761 + pi/4*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i) == 38.53183941910362389414093724045094697423 + 1.276276851248440096917018665609900318458e-39 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 308.4052305577487344482591243175787477115 + pi/4*log10(e) i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 308.3031705664207720674749211936626341569 + 0.2013595981366865903254995612594728746470 i": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x1.fp+16383 + 0x1.fp+16383 i) == 4932.212175672014259683102930239951947672 + pi/4*log10(e) i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: clog10 (0x1.fp+16383 + 0x1p+16383 i) == 4932.112944269463028900262609694408579449 + 0.2069271710841128115912940666587802677383 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1073 + 0x1p-1073 i) == -322.8546703496198318667349645920187712089 + pi/4*log10(e) i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i": ++double: 1 ++idouble: 1 ++Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i) == -44.10089436477324509881274807713822842154 + pi/4*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i) == -44.70295435610120748924022586658721447508 + pi/4*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-509 + 1.0 i) == 7.730698388614835910296270976605350994446e-308 + 6.821881769209206737428918127156778851051e-1 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-510 + 1.0 i) == 1.932674597153708977574067744151337748612e-308 + 6.821881769209206737428918127156778851051e-1 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-511 + 1.0 i) == 4.831686492884272443935169360378344371529e-309 + 6.821881769209206737428918127156778851051e-1 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (0x1p-61 + 1.0 i) == 4.084085680564517578238994467153626207224e-38 + 6.821881769209206735545466044044889962925e-1 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-62 + 1.0 i) == 1.021021420141129394559748616788406551878e-38 + 6.821881769209206736487192085600834406988e-1 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (0x1p-63 + 1.0 i) == 2.552553550352823486399371541971016379740e-39 + 6.821881769209206736958055106378806629019e-1 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i) == 2.680828048441605163181684680300513080769e-7 + 4.825491868832381486767558728169977751564e-4 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++# cos ++Test "cos (0x1p+120) == -9.25879022854837867303861764107414946730833e-01": ++float: 1 ++ifloat: 1 ++Test "cos (0x1p+127) == 7.81914638714960072263910298466369236613162e-01": ++float: 1 ++ifloat: 1 ++Test "cos (M_PI_6l * 2.0) == 0.5": ++double: 1 ++idouble: 1 ++Test "cos (M_PI_6l * 4.0) == -0.5": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# cos_downward ++Test "cos_downward (1) == 0.5403023058681397174009366074429766037323": ++float: 1 ++ifloat: 1 ++Test "cos_downward (10) == -0.8390715290764524522588639478240648345199": ++ildouble: 1 ++ldouble: 1 ++Test "cos_downward (2) == -0.4161468365471423869975682295007621897660": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "cos_downward (3) == -0.9899924966004454572715727947312613023937": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "cos_downward (4) == -0.6536436208636119146391681830977503814241": ++float: 1 ++ifloat: 1 ++Test "cos_downward (5) == 0.2836621854632262644666391715135573083344": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "cos_downward (6) == 0.9601702866503660205456522979229244054519": ++ildouble: 1 ++ldouble: 1 ++Test "cos_downward (7) == 0.7539022543433046381411975217191820122183": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "cos_downward (8) == -0.1455000338086135258688413818311946826093": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++# cos_tonearest ++Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183": ++float: 1 ++ifloat: 1 ++ ++# cos_towardzero ++Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199": ++ildouble: 1 ++ldouble: 1 ++Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "cos_towardzero (6) == 0.9601702866503660205456522979229244054519": ++ildouble: 1 ++ldouble: 1 ++Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++# cos_upward ++Test "cos_upward (1) == 0.5403023058681397174009366074429766037323": ++ildouble: 1 ++ldouble: 1 ++Test "cos_upward (10) == -0.8390715290764524522588639478240648345199": ++float: 1 ++ifloat: 1 ++Test "cos_upward (4) == -0.6536436208636119146391681830977503814241": ++ildouble: 1 ++ldouble: 1 ++Test "cos_upward (6) == 0.9601702866503660205456522979229244054519": ++float: 1 ++ifloat: 1 ++Test "cos_upward (7) == 0.7539022543433046381411975217191820122183": ++float: 1 ++ifloat: 1 ++Test "cos_upward (9) == -0.9111302618846769883682947111811653112463": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++# cosh_downward ++Test "cosh_downward (22) == 1792456423.065795780980053377632656584997": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "cosh_downward (23) == 4872401723.124451300068625740569997090344": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "cosh_downward (24) == 13244561064.92173614708845674912733665919": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# cosh_tonearest ++Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997": ++ildouble: 1 ++ldouble: 1 ++ ++# cosh_towardzero ++Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# cosh_upward ++Test "cosh_upward (22) == 1792456423.065795780980053377632656584997": ++ildouble: 1 ++ldouble: 1 ++Test "cosh_upward (23) == 4872401723.124451300068625740569997090344": ++ildouble: 1 ++ldouble: 1 ++Test "cosh_upward (24) == 13244561064.92173614708845674912733665919": ++ildouble: 1 ++ldouble: 1 ++ ++# cpow ++Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i": ++double: 1 ++float: 4 ++idouble: 1 ++ifloat: 4 ++ildouble: 4 ++ldouble: 4 ++Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i": ++double: 2 ++float: 3 ++idouble: 2 ++ifloat: 3 ++ildouble: 11 ++ldouble: 11 ++Test "Real part of: cpow (2 + 0 i, 10 + 0 i) == 1024.0 + 0.0 i": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": ++double: 1 ++float: 5 ++idouble: 1 ++ifloat: 5 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": ++float: 2 ++ifloat: 2 ++Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i": ++double: 2 ++float: 2 ++idouble: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++# csin ++Test "Real part of: csin (-0.75 + 11357.25 i) == -8.385498349388321535962327491346664141020e4931 + 9.001213196851067077465606717616495588201e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (-0.75 + 710.5 i) == -1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (-0.75 + 89.5 i) == -2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csin (-0.75 + 89.5 i) == -2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (-0.75 - 11357.25 i) == -8.385498349388321535962327491346664141020e4931 - 9.001213196851067077465606717616495588201e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (-0.75 - 710.5 i) == -1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (-0.75 - 89.5 i) == -2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csin (-0.75 - 89.5 i) == -2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 + 11357.25 i) == 8.385498349388321535962327491346664141020e4931 + 9.001213196851067077465606717616495588201e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 + 710.5 i) == 1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 + 89.5 i) == 2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csin (0.75 + 89.5 i) == 2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 - 11357.25 i) == 8.385498349388321535962327491346664141020e4931 - 9.001213196851067077465606717616495588201e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 - 710.5 i) == 1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0.75 - 89.5 i) == 2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csin (0.75 - 89.5 i) == 2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csin (0x1p-1074 + 1440 i) == 5.981479269486130556466515778180916082415e301 + inf i": ++double: 1 ++idouble: 1 ++Test "Real part of: csin (0x1p-16434 + 22730 i) == 1.217853148905605987081057582351152052687e4924 + inf i": ++ildouble: 1 ++ldouble: 1 ++ ++# csinh ++Test "Imaginary part of: csinh (-11357.25 + 0.75 i) == -9.001213196851067077465606717616495588201e4931 + 8.385498349388321535962327491346664141020e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (-11357.25 - 0.75 i) == -9.001213196851067077465606717616495588201e4931 - 8.385498349388321535962327491346664141020e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (-710.5 + 0.75 i) == -1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (-710.5 - 0.75 i) == -1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csinh (-89.5 + 0.75 i) == -2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (-89.5 + 0.75 i) == -2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csinh (-89.5 - 0.75 i) == -2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (-89.5 - 0.75 i) == -2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: csinh (11357.25 + 0.75 i) == 9.001213196851067077465606717616495588201e4931 + 8.385498349388321535962327491346664141020e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (11357.25 - 0.75 i) == 9.001213196851067077465606717616495588201e4931 - 8.385498349388321535962327491346664141020e4931 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csinh (22730 + 0x1p-16434 i) == inf + 1.217853148905605987081057582351152052687e4924 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csinh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csinh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csinh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# csqrt ++Test "Real part of: csqrt (-0x1.0000000000000000000000000001p-16382 - 0x1.0000000000000000000000000001p-16382 i) == 8.344545284118961663847948339519226074126e-2467 - 2.014551439675644900022606748976158925145e-2466 i": ++ldouble: 1 ++Test "Real part of: csqrt (-0x1.0000000000000002p-16382 - 0x1.0000000000000002p-16382 i) == 8.344545284118961664300307045791497724440e-2467 - 2.014551439675644900131815801350165472778e-2466 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (-0x1.0000000000000002p-16382 - 0x1.0000000000000002p-16382 i) == 8.344545284118961664300307045791497724440e-2467 - 2.014551439675644900131815801350165472778e-2466 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csqrt (-0x1.0000000000001p-1022 - 0x1.0000000000001p-1022 i) == 6.788430486774966350907249113759995429568e-155 - 1.638872094839911521020410942677082920935e-154 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i) == 4.934094449071842328766868579214125217132e-20 - 1.191195773697904627170323731331667740087e-19 i": ++double: 1 ++idouble: 1 ++Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0.75 + 1.25 i) == 1.05065169626078392338656675760808326 + 0.594868882070379067881984030639932657 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.0000000000000000000000000001p-16382 + 0x1.0000000000000000000000000001p-16382 i) == 2.014551439675644900022606748976158925145e-2466 + 8.344545284118961663847948339519226074126e-2467 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csqrt (0x1.0000000000000002p-16382 + 0x1.0000000000000002p-16382 i) == 2.014551439675644900131815801350165472778e-2466 + 8.344545284118961664300307045791497724440e-2467 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.0000000000000002p-16382 + 0x1.0000000000000002p-16382 i) == 2.014551439675644900131815801350165472778e-2466 + 8.344545284118961664300307045791497724440e-2467 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.0000000000001p-1022 + 0x1.0000000000001p-1022 i) == 1.638872094839911521020410942677082920935e-154 + 6.788430486774966350907249113759995429568e-155 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i) == 1.191195773697904627170323731331667740087e-19 + 4.934094449071842328766868579214125217132e-20 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i) == 1.844674352395372953599975585936590505260e+19 + 2.710505511993121390769065968615872097053e-20 i": ++float: 1 ++ifloat: 1 ++Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 1.379778091031440685006200821918878702861e+154 + 3.257214233483129514781233066898042490248e+153 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i) == 1.179514222452201722651836720466795901016e+2466 + 4.885707879516577666702435054303191575148e+2465 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i) == 1.179514222452201722651836720466795901016e+2466 + 4.885707879516577666702435054303191575148e+2465 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1p+16383 i) == 1.106698967236475180613254276996359485630e+2466 + 2.687568007603946993388538156299100955642e+2465 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: csqrt (0x1p-16440 + 0x1p-16441 i) == 3.514690655930285351254618340783294558136e-2475 + 8.297059146828716918029689466551384219370e-2476 i": ++ildouble: 1 ++ldouble: 1 ++ ++# ctan ++Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctan (0x1p1023 + 1 i) == -0.2254627924997545057926782581695274244229 + 0.8786063118883068695462540226219865087189 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ctan (0x1p1023 + 1 i) == -0.2254627924997545057926782581695274244229 + 0.8786063118883068695462540226219865087189 i": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctan (0x1p127 + 1 i) == 0.2446359391192790896381501310437708987204 + 0.9101334047676183761532873794426475906201 i": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctan (0x1p127 + 1 i) == 0.2446359391192790896381501310437708987204 + 0.9101334047676183761532873794426475906201 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctan (0x1p16383 + 1 i) == 0.1608598776370396607204448234354670036772 + 0.8133818522051542536316746743877629761488 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctan (0x1p16383 + 1 i) == 0.1608598776370396607204448234354670036772 + 0.8133818522051542536316746743877629761488 i": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctan (0x3.243f6cp-1 + 0 i) == -2.287733242885645987394874673945769518150e7 + 0.0 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctan (1 + 355 i) == 8.140551093483276762350406321792653551513e-309 + 1.0 i": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctan (1 + 365 i) == 1.677892637497921890115075995898773550884e-317 + 1.0 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctan (1 + 45 i) == 1.490158918874345552942703234806348520895e-39 + 1.000000000000000000000000000000000000001 i": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctan (1 + 47 i) == 2.729321264492904590777293425576722354636e-41 + 1.0 i": ++ildouble: 1 ++ldouble: 1 ++ ++# ctan_downward ++Test "Real part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i) == -3.986797629811710706723242948653362815645e19 + 5.793882568875674066286163141055208625180e-4912 i": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": ++ildouble: 4 ++ldouble: 4 ++Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": ++ildouble: 3 ++ldouble: 3 ++Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": ++float: 1 ++ifloat: 1 ++ildouble: 5 ++ldouble: 5 ++ ++# ctan_tonearest ++Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x1p-16445 i) == -3.986797629811710706723242948653362815645e19 + 5.793882568875674066286163141055208625180e-4912 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": ++ildouble: 3 ++ldouble: 3 ++Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": ++ildouble: 3 ++ldouble: 3 ++Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++# ctan_towardzero ++Test "Real part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x1p-16445 i) == -3.986797629811710706723242948653362815645e19 + 5.793882568875674066286163141055208625180e-4912 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": ++float: 1 ++ifloat: 1 ++ildouble: 5 ++ldouble: 5 ++ ++# ctan_upward ++Test "Real part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i) == -3.986797629811710706723242948653362815645e19 + 5.793882568875674066286163141055208625180e-4912 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i) == -3.986797629811710706723242948653362815645e19 + 5.793882568875674066286163141055208625180e-4912 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": ++double: 1 ++idouble: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": ++ildouble: 3 ++ldouble: 3 ++Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ ++# ctanh ++Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i) == 0.0 - 2.287733242885645987394874673945769518150e7 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i": ++double: 1 ++idouble: 1 ++Test "Imaginary part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i": ++float: 1 ++ifloat: 1 ++Test "Real part of: ctanh (1 + 0x1p1023 i) == 0.8786063118883068695462540226219865087189 - 0.2254627924997545057926782581695274244229 i": ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctanh (1 + 0x1p1023 i) == 0.8786063118883068695462540226219865087189 - 0.2254627924997545057926782581695274244229 i": ++double: 1 ++idouble: 1 ++Test "Real part of: ctanh (1 + 0x1p127 i) == 0.9101334047676183761532873794426475906201 + 0.2446359391192790896381501310437708987204 i": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctanh (1 + 0x1p127 i) == 0.9101334047676183761532873794426475906201 + 0.2446359391192790896381501310437708987204 i": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctanh (1 + 0x1p16383 i) == 0.8133818522051542536316746743877629761488 + 0.1608598776370396607204448234354670036772 i": ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctanh (1 + 0x1p16383 i) == 0.8133818522051542536316746743877629761488 + 0.1608598776370396607204448234354670036772 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctanh (355 + 1 i) == 1.0 + 8.140551093483276762350406321792653551513e-309 i": ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctanh (365 + 1 i) == 1.0 + 1.677892637497921890115075995898773550884e-317 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctanh (45 + 1 i) == 1.000000000000000000000000000000000000001 + 1.490158918874345552942703234806348520895e-39 i": ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctanh (47 + 1 i) == 1.0 + 2.729321264492904590777293425576722354636e-41 i": ++ildouble: 1 ++ldouble: 1 ++ ++# ctanh_downward ++Test "Real part of: ctanh_downward (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": ++ildouble: 3 ++ldouble: 3 ++Test "Imaginary part of: ctanh_downward (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": ++ildouble: 4 ++ldouble: 4 ++Test "Real part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": ++float: 1 ++ifloat: 1 ++ildouble: 5 ++ldouble: 5 ++Test "Imaginary part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctanh_downward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i) == 5.793882568875674066286163141055208625180e-4912 - 3.986797629811710706723242948653362815645e19 i": ++ildouble: 2 ++ldouble: 2 ++ ++# ctanh_tonearest ++Test "Real part of: ctanh_tonearest (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": ++ildouble: 3 ++ldouble: 3 ++Test "Imaginary part of: ctanh_tonearest (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": ++ildouble: 3 ++ldouble: 3 ++Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctanh_tonearest (0x1p-16445 + 0x1.921fb54442d1846ap+0 i) == 5.793882568875674066286163141055208625180e-4912 - 3.986797629811710706723242948653362815645e19 i": ++ildouble: 1 ++ldouble: 1 ++ ++# ctanh_towardzero ++Test "Real part of: ctanh_towardzero (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": ++ildouble: 2 ++ldouble: 2 ++Test "Imaginary part of: ctanh_towardzero (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": ++ildouble: 1 ++ldouble: 1 ++Test "Real part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": ++float: 1 ++ifloat: 1 ++ildouble: 5 ++ldouble: 5 ++Test "Imaginary part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": ++float: 1 ++ifloat: 1 ++Test "Imaginary part of: ctanh_towardzero (0x1p-16445 + 0x1.921fb54442d1846ap+0 i) == 5.793882568875674066286163141055208625180e-4912 - 3.986797629811710706723242948653362815645e19 i": ++ildouble: 1 ++ldouble: 1 ++ ++# ctanh_upward ++Test "Real part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": ++ildouble: 3 ++ldouble: 3 ++Test "Imaginary part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": ++double: 1 ++idouble: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "Imaginary part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "Real part of: ctanh_upward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i) == 5.793882568875674066286163141055208625180e-4912 - 3.986797629811710706723242948653362815645e19 i": ++ildouble: 1 ++ldouble: 1 ++Test "Imaginary part of: ctanh_upward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i) == 5.793882568875674066286163141055208625180e-4912 - 3.986797629811710706723242948653362815645e19 i": ++ildouble: 1 ++ldouble: 1 ++ ++# erf ++Test "erf (1.25) == 0.922900128256458230136523481197281140": ++double: 1 ++idouble: 1 ++ ++# erfc ++Test "erfc (0.75) == 0.288844366346484868401062165408589223": ++float: 1 ++ifloat: 1 ++Test "erfc (0x1.f7303cp+1) == 2.705500297238986897105236321218861842255e-8": ++double: 1 ++idouble: 1 ++Test "erfc (0x1.ffa002p+2) == 1.233585992097580296336099501489175967033e-29": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "erfc (0x1.ffffc8p+2) == 1.122671365033056305522366683719541099329e-29": ++ildouble: 1 ++ldouble: 1 ++Test "erfc (2.0) == 0.00467773498104726583793074363274707139": ++double: 1 ++idouble: 1 ++Test "erfc (27.0) == 0.523704892378925568501606768284954709e-318": ++ildouble: 1 ++ldouble: 1 ++Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8": ++double: 1 ++idouble: 1 ++ ++# errno ++Test "errno for pow(0,-odd) == ERANGE": ++float: -34 ++ ++# exp10 ++Test "exp10 (-1) == 0.1": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "exp10 (-305) == 1.0e-305": ++double: 1 ++idouble: 1 ++Test "exp10 (-36) == 1.0e-36": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "exp10 (0.75) == 5.62341325190349080394951039776481231": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "exp10 (3) == 1000": ++double: 6 ++float: 2 ++idouble: 6 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "exp10 (36) == 1.0e36": ++double: 1 ++idouble: 1 ++Test "exp10 (4932) == 1.0e4932": ++ildouble: 1 ++ldouble: 1 ++ ++# exp2 ++Test "exp2 (100.5) == 1.792728671193156477399422023278661496394e+30": ++ildouble: 1 ++ldouble: 1 ++ ++# exp_downward ++Test "exp_downward (2) == e^2": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "exp_downward (3) == e^3": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# exp_towardzero ++Test "exp_towardzero (2) == e^2": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "exp_towardzero (3) == e^3": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# exp_upward ++Test "exp_upward (1) == e": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# expm1 ++Test "expm1 (-79.0) == -0.9999999999999999999999999999999999509391": ++ildouble: 1 ++ldouble: 1 ++Test "expm1 (0.75) == 1.11700001661267466854536981983709561": ++double: 1 ++idouble: 1 ++Test "expm1 (1) == M_El - 1.0": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "expm1 (500.0) == 1.4035922178528374107397703328409120821806e+217": ++double: 1 ++idouble: 1 ++ ++# gamma ++Test "gamma (-0.5) == log(2*sqrt(pi))": ++ildouble: 1 ++ldouble: 1 ++ ++# hypot ++Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271": ++float: 1 ++ifloat: 1 ++Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271": ++float: 1 ++ifloat: 1 ++Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271": ++float: 1 ++ifloat: 1 ++Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271": ++float: 1 ++ifloat: 1 ++Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271": ++float: 1 ++ifloat: 1 ++Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271": ++float: 1 ++ifloat: 1 ++Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271": ++float: 1 ++ifloat: 1 ++Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271": ++float: 1 ++ifloat: 1 ++ ++# j0 ++Test "j0 (-0x1.001000001p+593) == -3.927269966354206207832593635798954916263e-90": ++ildouble: 1 ++ldouble: 1 ++Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "j0 (0x1.d7ce3ap+107) == 2.775523647291230802651040996274861694514e-17": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "j0 (10.0) == -0.245935764451348335197760862485328754": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "j0 (2.0) == 0.223890779141235668051827454649948626": ++ildouble: 2 ++ldouble: 2 ++Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "j0 (8.0) == 0.171650807137553906090869407851972001": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# j1 ++Test "j1 (-1.0) == -0.440050585744933515959682203718914913": ++ildouble: 1 ++ldouble: 1 ++Test "j1 (0.75) == 0.349243602174862192523281016426251335": ++ildouble: 1 ++ldouble: 1 ++Test "j1 (0x1.3ffp+74) == 1.818984347516051243459364437186082741567e-12": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "j1 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "j1 (1.0) == 0.440050585744933515959682203718914913": ++ildouble: 1 ++ldouble: 1 ++Test "j1 (10.0) == 0.0434727461688614366697487680258592883": ++float: 2 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++Test "j1 (2.0) == 0.576724807756873387202448242269137087": ++double: 1 ++idouble: 1 ++Test "j1 (8.0) == 0.234636346853914624381276651590454612": ++double: 1 ++idouble: 1 ++ildouble: 4 ++ldouble: 4 ++ ++# jn ++Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (0, 10.0) == -0.245935764451348335197760862485328754": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "jn (0, 2.0) == 0.223890779141235668051827454649948626": ++ildouble: 2 ++ldouble: 2 ++Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (0, 8.0) == 0.171650807137553906090869407851972001": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "jn (1, -1.0) == -0.440050585744933515959682203718914913": ++ildouble: 1 ++ldouble: 1 ++Test "jn (1, 0.75) == 0.349243602174862192523281016426251335": ++ildouble: 1 ++ldouble: 1 ++Test "jn (1, 1.0) == 0.440050585744933515959682203718914913": ++ildouble: 1 ++ldouble: 1 ++Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883": ++float: 2 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++Test "jn (1, 2.0) == 0.576724807756873387202448242269137087": ++double: 1 ++idouble: 1 ++Test "jn (1, 8.0) == 0.234636346853914624381276651590454612": ++double: 1 ++idouble: 1 ++ildouble: 4 ++ldouble: 4 ++Test "jn (10, -1.0) == 0.263061512368745320699785368779050294e-9": ++ildouble: 1 ++ldouble: 1 ++Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "jn (10, 1.0) == 0.263061512368745320699785368779050294e-9": ++ildouble: 1 ++ldouble: 1 ++Test "jn (10, 10.0) == 0.207486106633358857697278723518753428": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "jn (2, 0x1.ffff62p+99) == -4.43860668048170034334926693188979974489e-16": ++double: 2 ++float: 2 ++idouble: 2 ++ifloat: 2 ++Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2": ++double: 1 ++idouble: 1 ++Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "jn (3, 2.0) == 0.128943249474402051098793332969239835": ++float: 1 ++ifloat: 1 ++Test "jn (3, 2.4048255576957729) == 0.19899990535769083404042146764530813": ++double: 3 ++float: 2 ++idouble: 3 ++ildouble: 1 ++ldouble: 1 ++Test "jn (4, 2.4048255576957729) == 0.647466661641779720084932282551219891E-1": ++double: 1 ++float: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "jn (5, 2.4048255576957729) == 0.163892432048058525099230549946147698E-1": ++double: 3 ++float: 2 ++idouble: 3 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "jn (6, 2.4048255576957729) == 0.34048184720278336646673682895929161E-2": ++double: 4 ++float: 4 ++idouble: 4 ++ifloat: 3 ++ildouble: 5 ++ldouble: 5 ++Test "jn (7, 2.4048255576957729) == 0.60068836573295394221291569249883076E-3": ++double: 3 ++float: 5 ++idouble: 3 ++ifloat: 5 ++ildouble: 3 ++ldouble: 3 ++Test "jn (8, 2.4048255576957729) == 0.92165786705344923232879022467054148E-4": ++double: 3 ++float: 4 ++idouble: 3 ++ifloat: 2 ++ildouble: 8 ++ldouble: 8 ++Test "jn (9, 2.4048255576957729) == 0.12517270977961513005428966643852564E-4": ++double: 1 ++float: 5 ++idouble: 1 ++ifloat: 2 ++ildouble: 3 ++ldouble: 3 ++ ++# lgamma ++Test "lgamma (-0.5) == log(2*sqrt(pi))": ++ildouble: 1 ++ldouble: 1 ++Test "lgamma (0.7) == 0.260867246531666514385732417016759578": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++# llrint_downward ++Test "llrint_downward (-0.2) == -1": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-1.4) == -2": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-4503599627370495.4999999999999) == -4503599627370496LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-4503599627370496.25) == -4503599627370497LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-4503599627370496.4999999999999) == -4503599627370497LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-4503599627370496.5) == -4503599627370497LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-4503599627370497.4999999999999) == -4503599627370498LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-72057594037927936.25) == -72057594037927937LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-72057594037927936.5) == -72057594037927937LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-8388600.3) == -8388601": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-9007199254740991.4999999999999) == -9007199254740992LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-9007199254740992.25) == -9007199254740993LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-9007199254740992.4999999999999) == -9007199254740993LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-9007199254740992.5) == -9007199254740993LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-9007199254740993.4999999999999) == -9007199254740994LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-9223372036854775806.25) == -9223372036854775807LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (-9223372036854775806.5) == -9223372036854775807LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (4503599627370494.5000000000001) == 4503599627370494LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (4503599627370495.5) == 4503599627370495LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (4503599627370495.5000000000001) == 4503599627370495LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (4503599627370496.5000000000001) == 4503599627370496LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (4503599627370496.75) == 4503599627370496LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (4503599627370497.5) == 4503599627370497LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (72057594037927935.5) == 72057594037927935LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (72057594037927936.75) == 72057594037927936LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (72057594037927937.5) == 72057594037927937LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (9007199254740991.5) == 9007199254740991LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (9007199254740991.5000000000001) == 9007199254740991LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (9007199254740992.5000000000001) == 9007199254740992LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (9007199254740992.75) == 9007199254740992LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (9007199254740993.5) == 9007199254740993LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (9007199254740993.5000000000001) == 9007199254740993LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (9223372036854775805.5) == 9223372036854775805LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_downward (9223372036854775806.75) == 9223372036854775806LL": ++ildouble: 1 ++ldouble: 1 ++ ++# llrint_towardzero ++Test "llrint_towardzero (4503599627370494.5000000000001) == 4503599627370494LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (4503599627370495.5) == 4503599627370495LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (4503599627370495.5000000000001) == 4503599627370495LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (4503599627370496.5000000000001) == 4503599627370496LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (4503599627370496.75) == 4503599627370496LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (4503599627370497.5) == 4503599627370497LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (72057594037927935.5) == 72057594037927935LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (72057594037927936.75) == 72057594037927936LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (72057594037927937.5) == 72057594037927937LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (9007199254740991.5) == 9007199254740991LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (9007199254740991.5000000000001) == 9007199254740991LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (9007199254740992.5000000000001) == 9007199254740992LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (9007199254740992.75) == 9007199254740992LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (9007199254740993.5) == 9007199254740993LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (9007199254740993.5000000000001) == 9007199254740993LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (9223372036854775805.5) == 9223372036854775805LL": ++ildouble: 1 ++ldouble: 1 ++Test "llrint_towardzero (9223372036854775806.75) == 9223372036854775806LL": ++ildouble: 1 ++ldouble: 1 ++ ++# log10 ++Test "log10 (0.75) == -0.124938736608299953132449886193870744": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++Test "log10 (e) == log10(e)": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# log2 ++Test "log2 (0.75) == -.415037499278843818546261056052183492": ++ildouble: 1 ++ldouble: 1 ++ ++# lrint_downward ++Test "lrint_downward (-0.2) == -1": ++ildouble: 1 ++ldouble: 1 ++Test "lrint_downward (-0.5) == -1": ++ildouble: 1 ++ldouble: 1 ++Test "lrint_downward (-1.4) == -2": ++ildouble: 1 ++ldouble: 1 ++Test "lrint_downward (-8388600.3) == -8388601": ++ildouble: 1 ++ldouble: 1 ++Test "lrint_downward (0.8) == 0": ++ildouble: 1 ++ldouble: 1 ++ ++# pow ++Test "pow (0x0.ffffffp0, 0x1p24) == 0.3678794302077803437135155590023422899744": ++float: 1 ++ifloat: 1 ++ ++# pow_downward ++Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948": ++float: 1 ++ifloat: 1 ++ ++# pow_towardzero ++Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948": ++float: 1 ++ifloat: 1 ++ ++# pow_upward ++Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# sin_downward ++Test "sin_downward (10) == -0.5440211108893698134047476618513772816836": ++float: 1 ++ifloat: 1 ++Test "sin_downward (2) == 0.9092974268256816953960198659117448427023": ++ildouble: 1 ++ldouble: 1 ++Test "sin_downward (3) == 0.1411200080598672221007448028081102798469": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "sin_downward (4) == -0.7568024953079282513726390945118290941359": ++ildouble: 1 ++ldouble: 1 ++Test "sin_downward (5) == -0.9589242746631384688931544061559939733525": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "sin_downward (6) == -0.2794154981989258728115554466118947596280": ++float: 1 ++ifloat: 1 ++Test "sin_downward (8) == 0.9893582466233817778081235982452886721164": ++ildouble: 1 ++ldouble: 1 ++Test "sin_downward (9) == 0.4121184852417565697562725663524351793439": ++ildouble: 1 ++ldouble: 1 ++ ++# sin_tonearest ++Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226": ++float: 1 ++ifloat: 1 ++Test "sin_tonearest (3) == 0.1411200080598672221007448028081102798469": ++ildouble: 1 ++ldouble: 1 ++ ++# sin_towardzero ++Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836": ++float: 1 ++ifloat: 1 ++Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023": ++ildouble: 1 ++ldouble: 1 ++Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469": ++ildouble: 1 ++ldouble: 1 ++Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164": ++ildouble: 1 ++ldouble: 1 ++Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# sin_upward ++Test "sin_upward (1) == 0.8414709848078965066525023216302989996226": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "sin_upward (10) == -0.5440211108893698134047476618513772816836": ++ildouble: 1 ++ldouble: 1 ++Test "sin_upward (2) == 0.9092974268256816953960198659117448427023": ++float: 2 ++ifloat: 2 ++Test "sin_upward (3) == 0.1411200080598672221007448028081102798469": ++ildouble: 1 ++ldouble: 1 ++Test "sin_upward (4) == -0.7568024953079282513726390945118290941359": ++float: 1 ++ifloat: 1 ++Test "sin_upward (6) == -0.2794154981989258728115554466118947596280": ++ildouble: 1 ++ldouble: 1 ++Test "sin_upward (7) == 0.6569865987187890903969990915936351779369": ++ildouble: 1 ++ldouble: 1 ++Test "sin_upward (9) == 0.4121184852417565697562725663524351793439": ++float: 1 ++ifloat: 1 ++ ++# sincos ++Test "sincos (0x1p+120, &sin_res, &cos_res) puts -9.25879022854837867303861764107414946730833e-01 in cos_res": ++float: 1 ++ifloat: 1 ++Test "sincos (0x1p+127, &sin_res, &cos_res) puts 7.81914638714960072263910298466369236613162e-01 in cos_res": ++float: 1 ++ifloat: 1 ++Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res": ++double: 1 ++idouble: 1 ++Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res": ++float: 1 ++ifloat: 1 ++ ++# sinh_downward ++Test "sinh_downward (22) == 1792456423.065795780701106568345764104225": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "sinh_downward (23) == 4872401723.124451299966006944252978187305": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "sinh_downward (24) == 13244561064.92173614705070540368454568168": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# sinh_towardzero ++Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168": ++float: 1 ++ifloat: 1 ++ ++# sinh_upward ++Test "sinh_upward (22) == 1792456423.065795780701106568345764104225": ++ildouble: 1 ++ldouble: 1 ++Test "sinh_upward (23) == 4872401723.124451299966006944252978187305": ++ildouble: 1 ++ldouble: 1 ++Test "sinh_upward (24) == 13244561064.92173614705070540368454568168": ++ildouble: 1 ++ldouble: 1 ++ ++# sqrt ++Test "sqrt (2) == M_SQRT2l": ++ildouble: 1 ++ldouble: 1 ++ ++# tan_downward ++Test "tan_downward (1) == 1.5574077246549022305069748074583601730873": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tan_downward (10) == 0.6483608274590866712591249330098086768169": ++float: 1 ++ifloat: 1 ++Test "tan_downward (2) == -2.1850398632615189916433061023136825434320": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tan_downward (6) == -0.2910061913847491570536995888681755428312": ++float: 1 ++ifloat: 1 ++Test "tan_downward (8) == -6.7997114552203786999252627596086333648814": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tan_downward (9) == -0.4523156594418098405903708757987855343087": ++float: 1 ++ifloat: 1 ++ ++# tan_towardzero ++Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169": ++float: 1 ++ifloat: 1 ++Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312": ++ildouble: 1 ++ldouble: 1 ++Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++# tan_upward ++Test "tan_upward (10) == 0.6483608274590866712591249330098086768169": ++ildouble: 1 ++ldouble: 1 ++Test "tan_upward (2) == -2.1850398632615189916433061023136825434320": ++ildouble: 1 ++ldouble: 1 ++Test "tan_upward (3) == -0.1425465430742778052956354105339134932261": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tan_upward (4) == 1.1578212823495775831373424182673239231198": ++ildouble: 1 ++ldouble: 1 ++Test "tan_upward (5) == -3.3805150062465856369827058794473439087096": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tan_upward (6) == -0.2910061913847491570536995888681755428312": ++ildouble: 1 ++ldouble: 1 ++Test "tan_upward (9) == -0.4523156594418098405903708757987855343087": ++ildouble: 1 ++ldouble: 1 ++ ++# tanh ++Test "tanh (-0.75) == -0.635148952387287319214434357312496495": ++ildouble: 1 ++ldouble: 1 ++Test "tanh (-1.0) == -0.7615941559557648881194582826047935904": ++ildouble: 1 ++ldouble: 1 ++Test "tanh (0.75) == 0.635148952387287319214434357312496495": ++ildouble: 1 ++ldouble: 1 ++Test "tanh (1.0) == 0.7615941559557648881194582826047935904": ++ildouble: 1 ++ldouble: 1 ++ ++# tgamma ++Test "tgamma (-0.5) == -2 sqrt (pi)": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "tgamma (0.5) == sqrt (pi)": ++float: 1 ++ifloat: 1 ++Test "tgamma (0.7) == 1.29805533264755778568117117915281162": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++Test "tgamma (4) == 6": ++ildouble: 1 ++ldouble: 1 ++ ++# y0 ++Test "y0 (0x1.3ffp+74) == 1.818984347516051243459467456433028748678e-12": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "y0 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++Test "y0 (1.0) == 0.0882569642156769579829267660235151628": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "y0 (1.5) == 0.382448923797758843955068554978089862": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "y0 (10.0) == 0.0556711672835993914244598774101900481": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++Test "y0 (2.0) == 0.510375672649745119596606592727157873": ++double: 1 ++idouble: 1 ++Test "y0 (8.0) == 0.223521489387566220527323400498620359": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++# y1 ++Test "y1 (0.125) == -5.19993611253477499595928744876579921": ++double: 1 ++idouble: 1 ++Test "y1 (0.75) == -1.03759455076928541973767132140642198": ++ildouble: 1 ++ldouble: 1 ++Test "y1 (0x1.001000001p+593) == 3.927269966354206207832593635798954916263e-90": ++ildouble: 1 ++ldouble: 1 ++Test "y1 (0x1.27e204p+99) == -8.881610148467797208469612080785210013461e-16": ++double: 1 ++idouble: 1 ++Test "y1 (1.5) == -0.412308626973911295952829820633445323": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "y1 (10.0) == 0.249015424206953883923283474663222803": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "y1 (2.0) == -0.107032431540937546888370772277476637": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "y1 (8.0) == -0.158060461731247494255555266187483550": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++# yn ++Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "yn (0, 1.5) == 0.382448923797758843955068554978089862": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++Test "yn (0, 2.0) == 0.510375672649745119596606592727157873": ++double: 1 ++idouble: 1 ++Test "yn (0, 8.0) == 0.223521489387566220527323400498620359": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++Test "yn (1, 0.125) == -5.19993611253477499595928744876579921": ++double: 1 ++idouble: 1 ++Test "yn (1, 0.75) == -1.03759455076928541973767132140642198": ++ildouble: 1 ++ldouble: 1 ++Test "yn (1, 1.5) == -0.412308626973911295952829820633445323": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "yn (1, 10.0) == 0.249015424206953883923283474663222803": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++Test "yn (1, 2.0) == -0.107032431540937546888370772277476637": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "yn (1, 8.0) == -0.158060461731247494255555266187483550": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "yn (10, 0.125) == -127057845771019398.252538486899753195": ++double: 1 ++idouble: 1 ++ildouble: 2 ++ldouble: 2 ++Test "yn (10, 0.75) == -2133501638.90573424452445412893839236": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 5 ++ldouble: 5 ++Test "yn (10, 1.0) == -121618014.278689189288130426667971145": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++Test "yn (10, 10.0) == -0.359814152183402722051986577343560609": ++double: 2 ++idouble: 2 ++ildouble: 2 ++ldouble: 2 ++Test "yn (10, 2.0) == -129184.542208039282635913145923304214": ++double: 3 ++float: 1 ++idouble: 3 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "yn (3, 0.125) == -2612.69757350066712600220955744091741": ++double: 1 ++idouble: 1 ++Test "yn (3, 0.75) == -12.9877176234475433186319774484809207": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++Test "yn (3, 10.0) == -0.251362657183837329779204747654240998": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++Test "yn (3, 2.0) == -1.12778377684042778608158395773179238": ++double: 1 ++idouble: 1 ++ ++# Maximal error of functions: ++Function: "acos_downward": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "acos_towardzero": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "acos_upward": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "asin_downward": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "asin_towardzero": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: "asin_upward": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "atan2": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "atanh": ++float: 1 ++ifloat: 1 ++ ++Function: Real part of "cacos": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "cacos": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++Function: Real part of "cacosh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "cacosh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "casin": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ ++Function: Imaginary part of "casin": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++Function: Real part of "casinh": ++double: 5 ++float: 1 ++idouble: 5 ++ifloat: 1 ++ildouble: 4 ++ldouble: 4 ++ ++Function: Imaginary part of "casinh": ++double: 3 ++float: 6 ++idouble: 3 ++ifloat: 6 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Imaginary part of "catan": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "catanh": ++double: 4 ++idouble: 4 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "catanh": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "cbrt": ++double: 1 ++idouble: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "ccos": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "ccos": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "ccosh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "ccosh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "cexp": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "cexp": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "clog": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "clog": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "clog10": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "clog10": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: "cos": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "cos_downward": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: "cos_tonearest": ++float: 1 ++ifloat: 1 ++ ++Function: "cos_towardzero": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: "cos_upward": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "cosh_downward": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "cosh_tonearest": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "cosh_towardzero": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "cosh_upward": ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "cpow": ++double: 2 ++float: 5 ++idouble: 2 ++ifloat: 5 ++ildouble: 11 ++ldouble: 11 ++ ++Function: Imaginary part of "cpow": ++double: 2 ++float: 2 ++idouble: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "csin": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "csin": ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "csinh": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "csinh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "csqrt": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "csqrt": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "ctan": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Imaginary part of "ctan": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Real part of "ctan_downward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 4 ++ldouble: 4 ++ ++Function: Imaginary part of "ctan_downward": ++float: 1 ++ifloat: 1 ++ildouble: 5 ++ldouble: 5 ++ ++Function: Real part of "ctan_tonearest": ++float: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++Function: Imaginary part of "ctan_tonearest": ++float: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++Function: Real part of "ctan_towardzero": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Imaginary part of "ctan_towardzero": ++float: 1 ++ifloat: 1 ++ildouble: 5 ++ldouble: 5 ++ ++Function: Real part of "ctan_upward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Imaginary part of "ctan_upward": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 3 ++ldouble: 3 ++ ++Function: Real part of "ctanh": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Imaginary part of "ctanh": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: Real part of "ctanh_downward": ++float: 1 ++ifloat: 1 ++ildouble: 5 ++ldouble: 5 ++ ++Function: Imaginary part of "ctanh_downward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 4 ++ldouble: 4 ++ ++Function: Real part of "ctanh_tonearest": ++float: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++Function: Imaginary part of "ctanh_tonearest": ++float: 1 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++Function: Real part of "ctanh_towardzero": ++float: 1 ++ifloat: 1 ++ildouble: 5 ++ldouble: 5 ++ ++Function: Imaginary part of "ctanh_towardzero": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: Real part of "ctanh_upward": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 3 ++ldouble: 3 ++ ++Function: Imaginary part of "ctanh_upward": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: "erf": ++double: 1 ++idouble: 1 ++ ++Function: "erfc": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "exp10": ++double: 6 ++float: 2 ++idouble: 6 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "exp2": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "exp_downward": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "exp_towardzero": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "exp_upward": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "expm1": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "gamma": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "hypot": ++float: 1 ++ifloat: 1 ++ ++Function: "j0": ++double: 2 ++float: 2 ++idouble: 2 ++ifloat: 2 ++ildouble: 2 ++ldouble: 2 ++ ++Function: "j1": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 4 ++ldouble: 4 ++ ++Function: "jn": ++double: 4 ++float: 5 ++idouble: 4 ++ifloat: 5 ++ildouble: 8 ++ldouble: 8 ++ ++Function: "lgamma": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "log": ++float: 1 ++ ++Function: "log10": ++double: 1 ++float: 2 ++idouble: 1 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "log1p": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "log2": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "pow": ++float: 1 ++ifloat: 1 ++ ++Function: "pow_downward": ++float: 1 ++ifloat: 1 ++ ++Function: "pow_towardzero": ++float: 1 ++ifloat: 1 ++ ++Function: "pow_upward": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "sin_downward": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "sin_tonearest": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "sin_towardzero": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "sin_upward": ++float: 2 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "sincos": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "sinh_downward": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: "sinh_towardzero": ++float: 1 ++ifloat: 1 ++ildouble: 2 ++ldouble: 2 ++ ++Function: "sinh_upward": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "sqrt": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "tan": ++double: 1 ++idouble: 1 ++ ++Function: "tan_downward": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "tan_towardzero": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "tan_upward": ++float: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "tanh": ++ildouble: 1 ++ldouble: 1 ++ ++Function: "tgamma": ++double: 1 ++float: 1 ++idouble: 1 ++ifloat: 1 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "y0": ++double: 2 ++float: 1 ++idouble: 2 ++ifloat: 1 ++ildouble: 3 ++ldouble: 3 ++ ++Function: "y1": ++double: 3 ++float: 2 ++idouble: 3 ++ifloat: 2 ++ildouble: 1 ++ldouble: 1 ++ ++Function: "yn": ++double: 3 ++float: 2 ++idouble: 3 ++ifloat: 2 ++ildouble: 5 ++ldouble: 5 ++ ++# end of automatic generation +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/memusage.h glibc/ports/sysdeps/aarch64/memusage.h +--- glibc.orig/ports/sysdeps/aarch64/memusage.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/memusage.h 2012-09-24 13:12:05.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; }) ++ ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/nptl/Makefile glibc/ports/sysdeps/aarch64/nptl/Makefile +--- glibc.orig/ports/sysdeps/aarch64/nptl/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/nptl/Makefile 2012-09-28 12:54:07.000000000 +0100 +@@ -0,0 +1,21 @@ ++# Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. ++# ++# This file is part of the GNU C Library. ++# ++# The GNU C Library is free software; you can redistribute it and/or ++# modify it under the terms of the GNU Lesser General Public ++# License as published by the Free Software Foundation; either ++# version 2.1 of the License, or (at your option) any later version. ++# ++# The GNU C Library is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++# Lesser General Public License for more details. ++# ++# You should have received a copy of the GNU Lesser General Public ++# License along with the GNU C Library. If not, see ++# . ++ ++ifeq ($(subdir),csu) ++gen-as-const-headers += tcb-offsets.sym ++endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/nptl/pthread_spin_lock.c glibc/ports/sysdeps/aarch64/nptl/pthread_spin_lock.c +--- glibc.orig/ports/sysdeps/aarch64/nptl/pthread_spin_lock.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/nptl/pthread_spin_lock.c 2012-09-24 13:12:34.000000000 +0100 +@@ -0,0 +1,29 @@ ++/* Copyright (C) 2008-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include "pthreadP.h" ++ ++int ++pthread_spin_lock (pthread_spinlock_t *lock) ++{ ++ while (atomic_compare_and_exchange_val_acq (lock, 1, 0) != 0) ++ while (*lock != 0) ++ ; ++ return 0; ++} +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/nptl/pthread_spin_trylock.c glibc/ports/sysdeps/aarch64/nptl/pthread_spin_trylock.c +--- glibc.orig/ports/sysdeps/aarch64/nptl/pthread_spin_trylock.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/nptl/pthread_spin_trylock.c 2012-09-24 13:12:43.000000000 +0100 +@@ -0,0 +1,27 @@ ++/* Copyright (C) 2008-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include "pthreadP.h" ++ ++int ++pthread_spin_trylock (pthread_spinlock_t *lock) ++{ ++ return atomic_compare_and_exchange_val_acq (lock, 1, 0) ? EBUSY : 0; ++} +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/nptl/pthreaddef.h glibc/ports/sysdeps/aarch64/nptl/pthreaddef.h +--- glibc.orig/ports/sysdeps/aarch64/nptl/pthreaddef.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/nptl/pthreaddef.h 2012-09-24 13:12:54.000000000 +0100 +@@ -0,0 +1,46 @@ ++/* Copyright (C) 2002, 2003, 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++/* 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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/nptl/tcb-offsets.sym glibc/ports/sysdeps/aarch64/nptl/tcb-offsets.sym +--- glibc.orig/ports/sysdeps/aarch64/nptl/tcb-offsets.sym 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/nptl/tcb-offsets.sym 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,7 @@ ++#include ++#include ++ ++PTHREAD_MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) ++PTHREAD_PID_OFFSET offsetof (struct pthread, pid) ++PTHREAD_TID_OFFSET offsetof (struct pthread, tid) ++PTHREAD_SIZEOF sizeof (struct pthread) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/nptl/tls.h glibc/ports/sysdeps/aarch64/nptl/tls.h +--- glibc.orig/ports/sysdeps/aarch64/nptl/tls.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/nptl/tls.h 2012-09-24 13:13:31.000000000 +0100 +@@ -0,0 +1,142 @@ ++/* Copyright (C) 2005, 2007, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _TLS_H ++#define _TLS_H 1 ++ ++#include ++ ++#ifndef __ASSEMBLER__ ++# include ++# include ++# include ++ ++/* Type for the dtv. */ ++typedef union dtv ++{ ++ size_t counter; ++ struct ++ { ++ void *val; ++ bool is_static; ++ } pointer; ++} dtv_t; ++ ++#else /* __ASSEMBLER__ */ ++# include ++#endif /* __ASSEMBLER__ */ ++ ++#ifndef __ASSEMBLER__ ++ ++/* Get system call information. */ ++# include ++ ++/* The TP points to the start of the thread blocks. */ ++# define TLS_DTV_AT_TP 1 ++ ++/* Get the thread descriptor definition. */ ++# include ++ ++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 __alignof__ (tcbhead_t) ++ ++/* 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 __alignof__ (tcbhead_t) ++ ++/* 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) \ ++ ({ __asm __volatile ("msr tpidr_el0, %0" : : "r" (tcbp)); 0; }) ++ ++/* 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 (64, 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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/preconfigure glibc/ports/sysdeps/aarch64/preconfigure +--- glibc.orig/ports/sysdeps/aarch64/preconfigure 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/preconfigure 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,14 @@ ++case "$machine" in ++aarch64*) ++ base_machine=aarch64 ++ machine=aarch64 ++ ;; ++esac ++ ++case "$machine" in ++aarch64*) ++ # Parameters to allow auto-detection of -z relro. ++ libc_commonpagesize=0x1000 ++ libc_relro_required=yes ++ ;; ++esac +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/setjmp.S glibc/ports/sysdeps/aarch64/setjmp.S +--- glibc.orig/ports/sysdeps/aarch64/setjmp.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/setjmp.S 2012-09-24 13:13:45.000000000 +0100 +@@ -0,0 +1,51 @@ ++/* Copyright (C) 1997, 1998, 2008-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library. If not, see ++ . */ ++ ++#include ++#include ++ ++ /* Keep traditional entry points in with sigsetjmp(). */ ++ENTRY (setjmp) ++ mov x1, #1 ++ b 1f ++END (setjmp) ++ ++ENTRY (_setjmp) ++ mov x1, #0 ++ b 1f ++END (_setjmp) ++libc_hidden_def (_setjmp) ++ ++ENTRY (__sigsetjmp) ++ ++1: ++ stp x19, x20, [x0, #JB_X19<<3] ++ stp x21, x22, [x0, #JB_X21<<3] ++ stp x23, x24, [x0, #JB_X23<<3] ++ stp x25, x26, [x0, #JB_X25<<3] ++ stp x27, x28, [x0, #JB_X27<<3] ++ stp x29, x30, [x0, #JB_X29<<3] ++ stp d8, d9, [x0, #JB_D8<<3] ++ stp d10, d11, [x0, #JB_D10<<3] ++ stp d12, d13, [x0, #JB_D12<<3] ++ stp d14, d15, [x0, #JB_D14<<3] ++ mov x1, sp ++ str x1, [x0, #JB_SP<<3] ++ b PLTJMP(C_SYMBOL_NAME(__sigjmp_save)) ++END (__sigsetjmp) ++hidden_def (__sigsetjmp) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/shlib-versions glibc/ports/sysdeps/aarch64/shlib-versions +--- glibc.orig/ports/sysdeps/aarch64/shlib-versions 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/shlib-versions 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,2 @@ ++aarch64.*-.*-linux.* DEFAULT GLIBC_2.16 ++aarch64.*-.*-linux.* ld=ld-linux-aarch64.so.1 +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/soft-fp/Makefile glibc/ports/sysdeps/aarch64/soft-fp/Makefile +--- glibc.orig/ports/sysdeps/aarch64/soft-fp/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/soft-fp/Makefile 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,3 @@ ++ifeq ($(subdir),math) ++CPPFLAGS += -I../soft-fp ++endif +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/soft-fp/e_sqrtl.c glibc/ports/sysdeps/aarch64/soft-fp/e_sqrtl.c +--- glibc.orig/ports/sysdeps/aarch64/soft-fp/e_sqrtl.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/soft-fp/e_sqrtl.c 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,38 @@ ++/* long double square root in software floating-point emulation. ++ Copyright (C) 1997, 1999, 2006 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Richard Henderson (rth@cygnus.com) and ++ Jakub Jelinek (jj@ultra.linux.cz). ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++ ++long double ++__ieee754_sqrtl (const long double a) ++{ ++ FP_DECL_EX; ++ FP_DECL_Q(A); FP_DECL_Q(C); ++ long double c; ++ ++ FP_INIT_ROUNDMODE; ++ FP_UNPACK_Q(A, a); ++ FP_SQRT_Q(C, A); ++ FP_PACK_Q(c, C); ++ FP_HANDLE_EXCEPTIONS; ++ return c; ++} +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/soft-fp/sfp-machine.h glibc/ports/sysdeps/aarch64/soft-fp/sfp-machine.h +--- glibc.orig/ports/sysdeps/aarch64/soft-fp/sfp-machine.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/soft-fp/sfp-machine.h 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,70 @@ ++#include ++#include ++ ++#define _FP_W_TYPE_SIZE 64 ++#define _FP_W_TYPE unsigned long long ++#define _FP_WS_TYPE signed long long ++#define _FP_I_TYPE long long ++ ++#define _FP_MUL_MEAT_S(R,X,Y) \ ++ _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y) ++#define _FP_MUL_MEAT_D(R,X,Y) \ ++ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) ++#define _FP_MUL_MEAT_Q(R,X,Y) \ ++ _FP_MUL_MEAT_2_wide_3mul(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) ++ ++#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm) ++#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y) ++#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) ++ ++#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) ++#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1) ++#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1 ++#define _FP_NANSIGN_S 0 ++#define _FP_NANSIGN_D 0 ++#define _FP_NANSIGN_Q 0 ++ ++#define _FP_KEEPNANFRACP 1 ++/* From my experiments it seems X is chosen unless one of the ++ NaNs is sNaN, in which case the result is NANSIGN/NANFRAC. */ ++#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ ++ do { \ ++ if ((_FP_FRAC_HIGH_RAW_##fs(X) | \ ++ _FP_FRAC_HIGH_RAW_##fs(Y)) & _FP_QNANBIT_##fs) \ ++ { \ ++ R##_s = _FP_NANSIGN_##fs; \ ++ _FP_FRAC_SET_##wc(R,_FP_NANFRAC_##fs); \ ++ } \ ++ else \ ++ { \ ++ R##_s = X##_s; \ ++ _FP_FRAC_COPY_##wc(R,X); \ ++ } \ ++ R##_c = FP_CLS_NAN; \ ++ } while (0) ++ ++#define _FP_DECL_EX fpu_control_t _fcw ++ ++#define FP_ROUNDMODE (_fcw & 0x3) ++ ++#define FP_RND_NEAREST FE_TONEAREST ++#define FP_RND_ZERO FE_TOWARDZERO ++#define FP_RND_PINF FE_UPWARD ++#define FP_RND_MINF FE_DOWNWARD ++ ++#define FP_EX_INVALID FE_INVALID ++#define FP_EX_OVERFLOW FE_OVERFLOW ++#define FP_EX_UNDERFLOW FE_UNDERFLOW ++#define FP_EX_DIVZERO FE_DIVBYZERO ++#define FP_EX_INEXACT FE_INEXACT ++ ++#define FP_INIT_ROUNDMODE \ ++do { \ ++ _FPU_GETCW (_fcw); \ ++} while (0) ++ ++#define FP_HANDLE_EXCEPTIONS \ ++do { \ ++ if (__builtin_expect (_fex, 0)) \ ++ _FPU_SETCW (_fcw | _fex | (_fex << 10)); \ ++} while (0) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/stackinfo.h glibc/ports/sysdeps/aarch64/stackinfo.h +--- glibc.orig/ports/sysdeps/aarch64/stackinfo.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/stackinfo.h 2012-09-24 13:14:11.000000000 +0100 +@@ -0,0 +1,33 @@ ++/* Copyright (C) 2001, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++/* This file contains a bit of information about the stack allocation ++ of the processor. */ ++ ++#ifndef _STACKINFO_H ++#define _STACKINFO_H 1 ++ ++#include ++ ++/* On AArch64 the stack grows down. */ ++#define _STACK_GROWS_DOWN 1 ++ ++/* Default to a non-executable stack. */ ++#define DEFAULT_STACK_PERMS (PF_R|PF_W) ++ ++#endif /* stackinfo.h */ +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/start.S glibc/ports/sysdeps/aarch64/start.S +--- glibc.orig/ports/sysdeps/aarch64/start.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/start.S 2012-09-24 13:14:30.000000000 +0100 +@@ -0,0 +1,94 @@ ++/* Copyright (C) 1995-1998, 2001, 2002, 2005, 2008-2012 ++ Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library. If not, see ++ . */ ++ ++/* 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: ++ ++ x1 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 ++ 8(sp) argv[0] ++ ... ++ (8*argc)(sp) NULL ++ (8*(argc+1))(sp) envp[0] ++ ... ++ NULL ++ */ ++ ++ .text ++ .globl _start ++ .type _start,#function ++_start: ++ /* Create an initial frame with 0 LR and FP */ ++ mov x29, #0 ++ mov x30, #0 ++ mov x29, sp ++ ++ /* Setup rtld_fini in argument register */ ++ mov x5, x0 ++ ++ /* Load argc and a pointer to argv */ ++ ldr x1, [sp, #0] ++ add x2, sp, #8 ++ ++ /* Setup stack limit in argument register */ ++ mov x6, sp ++ ++#ifdef SHARED ++ adrp x0, :got:main ++ ldr x0, [x0, #:got_lo12:main] ++ ++ adrp x3, :got:__libc_csu_init ++ ldr x3, [x3, #:got_lo12:__libc_csu_init] ++ ++ adrp x4, :got:__libc_csu_fini ++ ldr x4, [x4, #:got_lo12:__libc_csu_fini] ++#else ++ /* Set up the other arguments in registers */ ++ ldr x0, =main ++ ldr x3, =__libc_csu_init ++ ldr x4, =__libc_csu_fini ++#endif ++ ++ /* __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 ++ ++ /* should never get here....*/ ++ bl abort ++ ++ /* 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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/sysdep.h glibc/ports/sysdeps/aarch64/sysdep.h +--- glibc.orig/ports/sysdeps/aarch64/sysdep.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/sysdep.h 2012-09-24 13:14:42.000000000 +0100 +@@ -0,0 +1,65 @@ ++/* Copyright (C) 1997, 1998, 2003, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++#ifdef __ASSEMBLER__ ++ ++/* Syntactic details of assembler. */ ++ ++#define ALIGNARG(log2) log2 ++#define ASM_SIZE_DIRECTIVE(name) .size name,.-name ++ ++#define PLTJMP(_x) _x ++ ++/* 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_startproc; \ ++ CALL_MCOUNT ++ ++#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 ++#define CALL_MCOUNT \ ++ str x30, [sp, #-16]!; \ ++ bl PLTJMP(mcount) ; \ ++ ldr x30, [sp], #16 ; ++#else ++#define CALL_MCOUNT /* Do nothing. */ ++#endif ++ ++/* Local label name for asm code. */ ++#ifndef L ++#define L(name) .L##name ++#endif ++ ++/* Since C identifiers are not normally prefixed with an underscore ++ on this system, the asm identifier `syscall_error' intrudes on the ++ C name space. Make sure we use an innocuous name. */ ++#define syscall_error __syscall_error ++#define mcount _mcount ++ ++#endif /* __ASSEMBLER__ */ +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/tls-macros.h glibc/ports/sysdeps/aarch64/tls-macros.h +--- glibc.orig/ports/sysdeps/aarch64/tls-macros.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/tls-macros.h 2012-09-24 13:15:11.000000000 +0100 +@@ -0,0 +1,51 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define TLS_LD(x) TLS_GD(x) ++ ++#define TLS_GD(x) \ ++ ({ register unsigned long __result asm ("x0"); \ ++ asm ("adrp %0, :tlsgd:" #x "; " \ ++ "add %0, %0, #:tlsgd_lo12:" #x "; " \ ++ "bl __tls_get_addr;" \ ++ "nop" \ ++ : "=r" (__result) \ ++ : \ ++ : "x1", "x2", "x3", "x4", "x5", "x6", \ ++ "x7", "x8", "x9", "x10", "x11", "x12", \ ++ "x13", "x14", "x15", "x16", "x17", "x18", \ ++ "x30", "memory"); \ ++ (int *) (__result); }) ++ ++#define TLS_IE(x) \ ++ ({ register unsigned long __result asm ("x0"); \ ++ register unsigned long __t; \ ++ asm ("mrs %1, tpidr_el0; " \ ++ "adrp %0, :gottprel:" #x "; " \ ++ "ldr %0, [%0, #:gottprel_lo12:" #x "]; " \ ++ "add %0, %0, %1" \ ++ : "=r" (__result), "=r" (__t)); \ ++ (int *) (__result); }) ++ ++#define TLS_LE(x) \ ++ ({ register unsigned long __result asm ("x0"); \ ++ asm ("mrs %0, tpidr_el0; " \ ++ "add %0, %0, :tprel_hi12:" #x "; " \ ++ "add %0, %0, :tprel_lo12_nc:" #x \ ++ : "=r" (__result)); \ ++ (int *) (__result); }) +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/tlsdesc.c glibc/ports/sysdeps/aarch64/tlsdesc.c +--- glibc.orig/ports/sysdeps/aarch64/tlsdesc.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/tlsdesc.c 2012-09-24 13:15:42.000000000 +0100 +@@ -0,0 +1,154 @@ ++/* Manage TLS descriptors. ++ AArch64 version. ++ Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* The following functions take an entry_check_offset argument. It's ++ computed by the caller as an offset between its entry point and the ++ call site, such that by adding the built-in return address that is ++ implicitly passed to the function with this offset, we can easily ++ obtain the caller's entry point to compare with the entry point ++ given in the TLS descriptor. If it's changed, we want to return ++ immediately. */ ++ ++/* This function is used to lazily resolve TLS_DESC RELA relocations. ++ The argument location is used to hold a pointer to the relocation. */ ++ ++void ++attribute_hidden ++_dl_tlsdesc_resolve_rela_fixup (struct tlsdesc volatile *td, ++ struct link_map *l) ++{ ++ const ElfW(Rela) *reloc = td->arg; ++ ++ if (_dl_tlsdesc_resolve_early_return_p ++ (td, (void*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_PLT)]) + l->l_addr))) ++ return; ++ ++ /* The code below was borrowed from _dl_fixup(), ++ except for checking for STB_LOCAL. */ ++ 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[ELFW(R_SYM) (reloc->r_info)]; ++ lookup_t result; ++ ++ /* 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[ELFW(R_SYM) (reloc->r_info)] & 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); ++ } ++ else ++ { ++ /* We already found the symbol. The module (and therefore its load ++ address) is also known. */ ++ result = l; ++ } ++ ++ if (!sym) ++ { ++ td->arg = (void*) reloc->r_addend; ++ td->entry = _dl_tlsdesc_undefweak; ++ } ++ else ++ { ++# ifndef SHARED ++ CHECK_STATIC_TLS (l, result); ++# else ++ if (!TRY_STATIC_TLS (l, result)) ++ { ++ td->arg = _dl_make_tlsdesc_dynamic (result, sym->st_value ++ + reloc->r_addend); ++ td->entry = _dl_tlsdesc_dynamic; ++ } ++ else ++# endif ++ { ++ td->arg = (void*) (sym->st_value + result->l_tls_offset ++ + reloc->r_addend); ++ td->entry = _dl_tlsdesc_return; ++ } ++ } ++ ++ _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 ++ if (map->l_mach.tlsdesc_table) ++ htab_delete (map->l_mach.tlsdesc_table); ++#endif ++} +diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/tlsdesc.sym glibc/ports/sysdeps/aarch64/tlsdesc.sym +--- glibc.orig/ports/sysdeps/aarch64/tlsdesc.sym 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/tlsdesc.sym 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,15 @@ ++#include ++#include ++#include ++#include ++#include ++ ++-- ++ ++-- Abuse tls.h macros to derive offsets relative to the thread register. ++ ++TLSDESC_ARG offsetof(struct tlsdesc, arg) ++ ++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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/tst-audit.h glibc/ports/sysdeps/aarch64/tst-audit.h +--- glibc.orig/ports/sysdeps/aarch64/tst-audit.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/aarch64/tst-audit.h 2012-09-24 13:15:59.000000000 +0100 +@@ -0,0 +1,25 @@ ++/* Definitions for testing PLT entry/exit auditing. AArch64 version. ++ ++ Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define pltenter la_aarch64_gnu_pltenter ++#define pltexit la_aarch64_gnu_pltexit ++#define La_regs La_aarch64_regs ++#define La_retval La_aarch64_retval ++#define int_retval lrv_xreg[0] +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/Implies glibc/ports/sysdeps/unix/sysv/linux/aarch64/Implies +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/Implies 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/Implies 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,2 @@ ++unix/sysv/linux/generic ++unix/sysv/linux/wordsize-64 +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/Makefile glibc/ports/sysdeps/unix/sysv/linux/aarch64/Makefile +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/Makefile 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,41 @@ ++ifeq ($(subdir),csu) ++sysdep_routines += __read_tp libc-__read_tp ++static-only-routines += __read_tp ++shared-only-routines += libc-__read_tp ++ ++# In order for unwinding to fail when it falls out of main, we need a ++# cantunwind marker. There's one in start.S. To make sure we reach it, add ++# unwind tables for __libc_start_main. ++CFLAGS-libc-start.c += -fexceptions ++endif ++ ++ifeq ($(subdir),io) ++CFLAGS-creat.c += -fexceptions ++CFLAGS-open.c += -fexceptions ++CFLAGS-open64.c += -fexceptions ++endif ++ ++ifeq ($(subdir),elf) ++sysdep_routines += dl-vdso ++sysdep-rtld-routines += __read_tp ++endif ++ ++ifeq ($(subdir),misc) ++sysdep_routines += epoll_create epoll_wait inotify_init ++sysdep_headers += sys/elf.h ++CFLAGS-select.c += -fexceptions ++endif ++ ++ifeq ($(subdir),nptl) ++CFLAGS-open.c += -fexceptions ++CFLAGS-open64.c += -fexceptions ++CFLAGS-pause.c += -fexceptions ++CFLAGS-send.c += -fexceptions ++CFLAGS-recv.c += -fexceptions ++endif ++ ++ifeq ($(subdir),stdlib) ++ ++gen-as-const-headers += ucontext_i.sym ++ ++endif +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/Versions glibc/ports/sysdeps/unix/sysv/linux/aarch64/Versions +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/Versions 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/Versions 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,6 @@ ++libc { ++ GLIBC_PRIVATE { ++ __vdso_clock_gettime; ++ __vdso_clock_getres; ++ } ++} +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/__read_tp.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/__read_tp.S +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/__read_tp.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/__read_tp.S 2012-09-24 12:42:40.000000000 +0100 +@@ -0,0 +1,25 @@ ++/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++ .hidden __read_tp ++ENTRY (__read_tp) ++ mrs x0, tpidr_el0 ++ RET ++END (__read_tp) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h 2012-09-24 12:43:27.000000000 +0100 +@@ -0,0 +1,339 @@ ++/* O_*, F_*, FD_* bit values for the AArch64 Linux ABI. ++ Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library. If not, see ++ . */ ++ ++#ifndef _FCNTL_H ++# error "Never use directly; include instead." ++#endif ++ ++#include ++#include ++#ifdef __USE_GNU ++# include ++#endif ++ ++ ++/* open/fcntl - O_SYNC is only implemented on blocks devices and on files ++ located on a few file systems. */ ++#define O_ACCMODE 0003 ++#define O_RDONLY 00 ++#define O_WRONLY 01 ++#define O_RDWR 02 ++#define O_CREAT 0100 /* not fcntl */ ++#define O_EXCL 0200 /* not fcntl */ ++#define O_NOCTTY 0400 /* not fcntl */ ++#define O_TRUNC 01000 /* not fcntl */ ++#define O_APPEND 02000 ++#define O_NONBLOCK 04000 ++#define O_NDELAY O_NONBLOCK ++#define O_SYNC 04010000 ++#define O_FSYNC O_SYNC ++#define O_ASYNC 020000 ++ ++#ifdef __USE_XOPEN2K8 ++# define O_DIRECTORY 040000 /* Must be a directory. */ ++# define O_NOFOLLOW 0100000 /* Do not follow links. */ ++# define O_CLOEXEC 02000000 /* Set close_on_exec. */ ++#endif ++#ifdef __USE_GNU ++# define O_DIRECT 0200000 /* Direct disk access. */ ++# define O_NOATIME 01000000 /* Do not set atime. */ ++# define O_PATH 010000000 /* Resolve pathname but do not open file. */ ++#endif ++ ++/* For now Linux has synchronisity options for data and read operations. ++ We define the symbols here but let them do the same as O_SYNC since ++ this is a superset. */ ++#if defined __USE_POSIX199309 || defined __USE_UNIX98 ++# define O_DSYNC 010000 /* Synchronize data. */ ++# define O_RSYNC O_SYNC /* Synchronize read operations. */ ++#endif ++ ++#ifdef __USE_LARGEFILE64 ++# if __WORDSIZE == 64 ++# define O_LARGEFILE 0 ++# else ++# define O_LARGEFILE 0400000 ++# endif ++#endif ++ ++/* Values for the second argument to `fcntl'. */ ++#define F_DUPFD 0 /* Duplicate file descriptor. */ ++#define F_GETFD 1 /* Get file descriptor flags. */ ++#define F_SETFD 2 /* Set file descriptor flags. */ ++#define F_GETFL 3 /* Get file status flags. */ ++#define F_SETFL 4 /* Set file status flags. */ ++#if __WORDSIZE == 64 ++# define F_GETLK 5 /* Get record locking info. */ ++# define F_SETLK 6 /* Set record locking info (non-blocking). */ ++# define F_SETLKW 7 /* Set record locking info (blocking). */ ++/* Not necessary, we always have 64-bit offsets. */ ++# define F_GETLK64 5 /* Get record locking info. */ ++# define F_SETLK64 6 /* Set record locking info (non-blocking). */ ++# define F_SETLKW64 7 /* Set record locking info (blocking). */ ++#else ++# ifndef __USE_FILE_OFFSET64 ++# define F_GETLK 5 /* Get record locking info. */ ++# define F_SETLK 6 /* Set record locking info (non-blocking). */ ++# define F_SETLKW 7 /* Set record locking info (blocking). */ ++# else ++# define F_GETLK F_GETLK64 /* Get record locking info. */ ++# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/ ++# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */ ++# endif ++# define F_GETLK64 12 /* Get record locking info. */ ++# define F_SETLK64 13 /* Set record locking info (non-blocking). */ ++# define F_SETLKW64 14 /* Set record locking info (blocking). */ ++#endif ++ ++#if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K8 ++# define F_SETOWN 8 /* Get owner (process receiving SIGIO). */ ++# define F_GETOWN 9 /* Set owner (process receiving SIGIO). */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETSIG 10 /* Set number of signal to be sent. */ ++# define F_GETSIG 11 /* Get number of signal to be sent. */ ++# define F_SETOWN_EX 15 /* Get owner (thread receiving SIGIO). */ ++# define F_GETOWN_EX 16 /* Set owner (thread receiving SIGIO). */ ++#endif ++ ++#ifdef __USE_GNU ++# define F_SETLEASE 1024 /* Set a lease. */ ++# define F_GETLEASE 1025 /* Enquire what lease is active. */ ++# define F_NOTIFY 1026 /* Request notfications on a directory. */ ++# define F_SETPIPE_SZ 1031 /* Set pipe page size array. */ ++# define F_GETPIPE_SZ 1032 /* Set pipe page size array. */ ++#endif ++#ifdef __USE_XOPEN2K8 ++# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with ++ close-on-exit set. */ ++#endif ++ ++/* For F_[GET|SET]FD. */ ++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ ++ ++/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ ++#define F_RDLCK 0 /* Read lock. */ ++#define F_WRLCK 1 /* Write lock. */ ++#define F_UNLCK 2 /* Remove lock. */ ++ ++/* For old implementation of bsd flock(). */ ++#define F_EXLCK 4 /* or 3 */ ++#define F_SHLCK 8 /* or 4 */ ++ ++#ifdef __USE_BSD ++/* Operations for bsd flock(), also used by the kernel implementation. */ ++# define LOCK_SH 1 /* shared lock */ ++# define LOCK_EX 2 /* exclusive lock */ ++# define LOCK_NB 4 /* or'd with one of the above to prevent ++ blocking */ ++# define LOCK_UN 8 /* remove lock */ ++#endif ++ ++#ifdef __USE_GNU ++# define LOCK_MAND 32 /* This is a mandatory flock: */ ++# define LOCK_READ 64 /* ... which allows concurrent read operations. */ ++# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */ ++# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */ ++#endif ++ ++#ifdef __USE_GNU ++/* Types of directory notifications that may be requested with F_NOTIFY. */ ++# define DN_ACCESS 0x00000001 /* File accessed. */ ++# define DN_MODIFY 0x00000002 /* File modified. */ ++# define DN_CREATE 0x00000004 /* File created. */ ++# define DN_DELETE 0x00000008 /* File removed. */ ++# define DN_RENAME 0x00000010 /* File renamed. */ ++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ ++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ ++#endif ++ ++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 ++ ++#ifdef __USE_GNU ++/* Owner types. */ ++enum __pid_type ++ { ++ F_OWNER_TID = 0, /* Kernel thread. */ ++ F_OWNER_PID, /* Process. */ ++ F_OWNER_PGRP, /* Process group. */ ++ F_OWNER_GID = F_OWNER_PGRP /* Alternative, obsolete name. */ ++ }; ++ ++/* Structure to use with F_GETOWN_EX and F_SETOWN_EX. */ ++struct f_owner_ex ++ { ++ enum __pid_type type; /* Owner type of ID. */ ++ __pid_t pid; /* ID of owner. */ ++ }; ++#endif ++ ++/* Define some more compatibility macros to be backward compatible with ++ BSD systems which did not managed to hide these kernel macros. */ ++#ifdef __USE_BSD ++# define FAPPEND O_APPEND ++# define FFSYNC O_FSYNC ++# define FASYNC O_ASYNC ++# define FNONBLOCK O_NONBLOCK ++# define FNDELAY O_NDELAY ++#endif /* Use BSD. */ ++ ++/* Advise to `posix_fadvise'. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ ++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ ++#endif ++ ++ ++#ifdef __USE_GNU ++/* Flags for SYNC_FILE_RANGE. */ ++# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages ++ in the range before performing the ++ write. */ ++# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those ++ dirty pages in the range which are ++ not presently under writeback. */ ++# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in ++ the range after performing the ++ write. */ ++ ++/* Flags for SPLICE and VMSPLICE. */ ++# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */ ++# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing ++ (but we may still block on the fd ++ we splice from/to). */ ++# define SPLICE_F_MORE 4 /* Expect more data. */ ++# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ ++ ++ ++/* File handle structure. */ ++struct file_handle ++{ ++ unsigned int handle_bytes; ++ int handle_type; ++ /* File identifier. */ ++ unsigned char f_handle[0]; ++}; ++ ++/* Maximum handle size (for now). */ ++# define MAX_HANDLE_SZ 128 ++#endif ++ ++__BEGIN_DECLS ++ ++#ifdef __USE_GNU ++ ++/* Provide kernel hint to read ahead. */ ++extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) ++ __THROW; ++ ++ ++/* Selective file content synch'ing. ++ ++ This function is a possible cancellation point and therefore not ++ marked with __THROW. */ ++extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, ++ unsigned int __flags); ++ ++ ++/* Splice address range into a pipe. ++ ++ This function is a possible cancellation point and therefore not ++ marked with __THROW. */ ++extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, ++ size_t __count, unsigned int __flags); ++ ++/* Splice two files together. ++ ++ This function is a possible cancellation point and therefore not ++ marked with __THROW. */ ++extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, ++ __off64_t *__offout, size_t __len, ++ unsigned int __flags); ++ ++/* In-kernel implementation of tee for pipe buffers. ++ ++ This function is a possible cancellation point and therefore not ++ marked with __THROW. */ ++extern ssize_t tee (int __fdin, int __fdout, size_t __len, ++ unsigned int __flags); ++ ++/* Reserve storage for the data of the file associated with FD. ++ ++ This function is a possible cancellation point and therefore not ++ marked with __THROW. */ ++# ifndef __USE_FILE_OFFSET64 ++extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); ++# else ++# ifdef __REDIRECT ++extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset, ++ __off64_t __len), ++ fallocate64); ++# else ++# define fallocate fallocate64 ++# endif ++# endif ++# ifdef __USE_LARGEFILE64 ++extern int fallocate64 (int __fd, int __mode, __off64_t __offset, ++ __off64_t __len); ++# endif ++ ++ ++/* Map file name to file handle. */ ++extern int name_to_handle_at (int __dfd, const char *__name, ++ struct file_handle *__handle, int *__mnt_id, ++ int __flags) __THROW; ++ ++/* Open file using the file handle. ++ ++ This function is a possible cancellation point and therefore not ++ marked with __THROW. */ ++extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, ++ int __flags); ++ ++#endif /* use GNU */ ++ ++__END_DECLS +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/bits/libc-vdso.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/bits/libc-vdso.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/bits/libc-vdso.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/bits/libc-vdso.h 2012-09-24 12:43:51.000000000 +0100 +@@ -0,0 +1,31 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library. If not, see ++ . */ ++ ++#ifndef _LIBC_VDSO_H ++#define _LIBC_VDSO_H ++ ++#ifdef SHARED ++ ++extern void (*__vdso_gettimeofday) (struct timeval *, void *) ++ attribute_hidden; ++extern void (*__vdso_clock_gettime) (clockid_t, struct timespec *); ++extern void (*__vdso_clock_getres) (clockid_t, struct timespec *); ++ ++#endif ++ ++#endif /* _LIBC_VDSO_H */ +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/bits/mman.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/bits/mman.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/bits/mman.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/bits/mman.h 2012-09-24 12:44:12.000000000 +0100 +@@ -0,0 +1,114 @@ ++/* Definitions for POSIX memory map interface. Linux/AArch64 version. ++ Copyright (C) 1997, 2000, 2003, 2005, 2006, 2009-2012 ++ Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library. If not, see ++ . */ ++ ++#ifndef _SYS_MMAN_H ++# error "Never use directly; include instead." ++#endif ++ ++/* The following definitions basically come from the kernel headers. ++ But the kernel header is not namespace clean. */ ++ ++ ++/* Protections are chosen from these bits, OR'd together. The ++ implementation does not necessarily support PROT_EXEC or PROT_WRITE ++ without PROT_READ. The only guarantees are that no writing will be ++ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ ++ ++#define PROT_READ 0x1 /* Page can be read. */ ++#define PROT_WRITE 0x2 /* Page can be written. */ ++#define PROT_EXEC 0x4 /* Page can be executed. */ ++#define PROT_NONE 0x0 /* Page can not be accessed. */ ++#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of ++ growsdown vma (mprotect only). */ ++#define PROT_GROWSUP 0x02000000 /* Extend change to start of ++ growsup vma (mprotect only). */ ++ ++/* Sharing types (must choose one and only one of these). */ ++#define MAP_SHARED 0x01 /* Share changes. */ ++#define MAP_PRIVATE 0x02 /* Changes are private. */ ++#ifdef __USE_MISC ++# define MAP_TYPE 0x0f /* Mask for type of mapping. */ ++#endif ++ ++/* Other flags. */ ++#define MAP_FIXED 0x10 /* Interpret addr exactly. */ ++#ifdef __USE_MISC ++# define MAP_FILE 0 ++# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ ++# define MAP_ANON MAP_ANONYMOUS ++#endif ++ ++#ifdef __USE_MISC ++/* These are Linux-specific. */ ++# 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 ++ ++/* Flags to `msync'. */ ++#define MS_ASYNC 1 /* Sync memory asynchronously. */ ++#define MS_SYNC 4 /* Synchronous memory sync. */ ++#define MS_INVALIDATE 2 /* Invalidate the caches. */ ++ ++/* Flags for `mlockall'. */ ++#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ ++#define MCL_FUTURE 2 /* Lock all additions to address ++ space. */ ++ ++/* Flags for `mremap'. */ ++#ifdef __USE_GNU ++# define MREMAP_MAYMOVE 1 ++# define MREMAP_FIXED 2 ++#endif ++ ++/* Advice to `madvise'. */ ++#ifdef __USE_BSD ++# define MADV_NORMAL 0 /* No further special treatment. */ ++# define MADV_RANDOM 1 /* Expect random page references. */ ++# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define MADV_WILLNEED 3 /* Will need these pages. */ ++# define MADV_DONTNEED 4 /* Don't need these pages. */ ++# define MADV_REMOVE 9 /* Remove these pages and resources. */ ++# define MADV_DONTFORK 10 /* Do not inherit across fork. */ ++# define MADV_DOFORK 11 /* Do inherit across fork. */ ++# define MADV_MERGEABLE 12 /* KSM may merge identical pages. */ ++# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages. */ ++# define MADV_HUGEPAGE 14 /* Worth backing with hugepages. */ ++# define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages. */ ++# define MADV_DONTDUMP 16 /* Explicity exclude from the core dump, ++ overrides the coredump filter bits. */ ++# define MADV_DODUMP 17 /* Clear the MADV_DONTDUMP flag. */ ++# define MADV_HWPOISON 100 /* Poison a page for testing. */ ++#endif ++ ++/* The POSIX people had to invent similar names for the same things. */ ++#ifdef __USE_XOPEN2K ++# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ ++# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ ++# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ ++# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ ++# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/clone.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/clone.S +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/clone.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/clone.S 2012-09-24 12:44:25.000000000 +0100 +@@ -0,0 +1,99 @@ ++/* Copyright (C) 1996, 1997, 1998, 1999, 2002, 2005, 2008, 2009-2012 ++ Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Pat Beirne ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++/* 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 ++#define _ERRNO_H 1 ++#include ++ ++#define CLONE_VM_BIT 8 ++#define CLONE_VM (1 << CLONE_VM_BIT) ++ ++#define CLONE_THREAD_BIT 16 ++#define CLONE_THREAD (1 << CLONE_THREAD_BIT) ++ ++/* int clone(int (*fn)(void *arg), x0 ++ void *child_stack, x1 ++ int flags, x2 ++ void *arg, x3 ++ pid_t *ptid, x4 ++ struct user_desc *tls, x5 ++ pid_t *ctid); x6 ++ */ ++ .text ++ENTRY(__clone) ++ /* Sanity check args. */ ++ cbz x0, 1f ++ cbz x1, 1f ++ /* Insert the args onto the new stack. */ ++ stp x0, x3, [x1, #-16]! /* Fn, arg. */ ++ ++ /* Do the system call. */ ++ mov x0, x2 /* flags */ ++ ++ /* New sp is already in x1. */ ++ mov x2, x4 /* ptid */ ++ mov x3, x5 /* tls */ ++ mov x4, x6 /* ctid */ ++ ++#ifdef RESET_PID ++ /* We rely on the kernel preserving the argument regsiters across a ++ each system call so that we can inspect the flags against after ++ the clone call. */ ++ mov x5, x0 ++#endif ++ ++ mov x8, #SYS_ify(clone) ++ /* X0:flags, x1:newsp, x2:parenttidptr, x3:newtls, x4:childtid. */ ++ svc 0x0 ++ cmp x0, #0 ++ beq 2f ++ blt PLTJMP(C_SYMBOL_NAME(__syscall_error)) ++ RET ++1: mov x0, #-EINVAL ++ b PLTJMP(syscall_error) ++ ++2: ++#ifdef RESET_PID ++ tbnz x5, #CLONE_THREAD_BIT, 3f ++ mov x0, #-1 ++ tbnz x5, #CLONE_VM_BIT, 2f ++ mov x8, #SYS_ify(getpid) ++ svc 0x0 ++2: ++ mrs x1, tpidr_el0 ++ sub x1, x1, #PTHREAD_SIZEOF ++ str w0, [x1, #PTHREAD_PID_OFFSET] ++ str w0, [x1, #PTHREAD_TID_OFFSET] ++ ++3: ++#endif ++ /* Pick the function arg and call address from the stack and ++ execute. */ ++ ldp x1, x0, [sp], #16 ++ blr x1 ++ ++ /* We are done, pass the return value through x0. */ ++ b PLTJMP(HIDDEN_JUMPTARGET(_exit)) ++ ++PSEUDO_END (__clone) ++ ++weak_alias (__clone, clone) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/configure glibc/ports/sysdeps/unix/sysv/linux/aarch64/configure +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/configure 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/configure 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,3 @@ ++# This file is generated from configure.in by Autoconf. DO NOT EDIT! ++ ++arch_minimum_kernel=2.6.39 +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/configure.in glibc/ports/sysdeps/unix/sysv/linux/aarch64/configure.in +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/configure.in 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/configure.in 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,4 @@ ++GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. ++# Local configure fragment for sysdeps/unix/sysv/linux/aarch64. ++ ++arch_minimum_kernel=2.6.39 +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S 2012-09-24 12:44:46.000000000 +0100 +@@ -0,0 +1,105 @@ ++/* Save current context. ++ ++ Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include "ucontext_i.h" ++#include "ucontext-internal.h" ++ ++/* int getcontext (ucontext_t *ucp) ++ ++ Returns 0 on success -1 and errno on failure. ++ */ ++ ++ .text ++ ++ENTRY(__getcontext) ++ /* The saved context will return to the getcontext() call point ++ with a return value of 0 */ ++ str xzr, [x0, oX0 + 0 * SZREG] ++ ++ stp x18, x19, [x0, oX0 + 18 * SZREG] ++ stp x20, x21, [x0, oX0 + 20 * SZREG] ++ stp x22, x23, [x0, oX0 + 22 * SZREG] ++ stp x24, x25, [x0, oX0 + 24 * SZREG] ++ stp x26, x27, [x0, oX0 + 26 * SZREG] ++ stp x28, x29, [x0, oX0 + 28 * SZREG] ++ str x30, [x0, oX0 + 30 * SZREG] ++ ++ /* Place LR into the saved PC, this will ensure that when ++ switching to this saved context with setcontext() control ++ will pass back to the caller of getcontext(), we have ++ already arrange to return the appropriate return value in x0 ++ above. */ ++ str x30, [x0, oPC] ++ ++ /* Save the current SP */ ++ mov x2, sp ++ str x2, [x0, oSP] ++ ++ /* Figure out where to place the first context extension ++ block. */ ++ add x2, x0, #oEXTENSION ++ ++ /* Write the context extension fpsimd header. */ ++ mov w3, #(FPSIMD_MAGIC & 0xffff) ++ movk w3, #(FPSIMD_MAGIC >> 16), lsl #16 ++ str w3, [x2, #oHEAD + oMAGIC] ++ mov w3, #FPSIMD_CONTEXT_SIZE ++ str w3, [x2, #oHEAD + oSIZE] ++ ++ /* Fill in the FP SIMD context. */ ++ add x3, x2, #oV0 + 8 * SZVREG ++ stp d8, d9, [x3], # 2 * SZVREG ++ stp d10, d11, [x3], # 2 * SZVREG ++ stp d12, d13, [x3], # 2 * SZVREG ++ stp d14, d15, [x3], # 2 * SZVREG ++ ++ add x3, x2, oFPSR ++ ++ mrs x4, fpsr ++ str w4, [x3] ++ ++ mrs x4, fpcr ++ str w4, [x3, oFPCR - oFPSR] ++ ++ /* Write the termination context extension header. */ ++ add x2, x2, #FPSIMD_CONTEXT_SIZE ++ ++ str xzr, [x2, #oHEAD + oMAGIC] ++ str xzr, [x2, #oHEAD + oSIZE] ++ ++ /* Grab the signal mask */ ++ /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ ++ add x2, x0, #UCONTEXT_SIGMASK ++ mov x0, SIG_BLOCK ++ mov x1, 0 ++ mov x3, _NSIG8 ++ mov x8, SYS_ify (rt_sigprocmask) ++ svc 0 ++ cbnz x0, 1f ++ ++ /* Return 0 for success */ ++ mov x0, 0 ++ RET ++1: ++ b PLTJMP(C_SYMBOL_NAME(__syscall_error)) ++ ++ PSEUDO_END (__getcontext) ++weak_alias (__getcontext, getcontext) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c 2012-09-24 12:44:55.000000000 +0100 +@@ -0,0 +1,39 @@ ++/* Copyright (C) 2005-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++#undef __gettimeofday ++ ++#include ++#include ++ ++/* Get the current time of day and timezone information, ++ putting it into *tv and *tz. If tz is null, *tz is not filled. ++ Returns 0 on success, -1 on errors. */ ++int ++__gettimeofday (tv, tz) ++ struct timeval *tv; ++ struct timezone *tz; ++{ ++ return INLINE_VSYSCALL (gettimeofday, 2, CHECK_1 (tv), CHECK_1 (tz)); ++} ++libc_hidden_def (__gettimeofday) ++weak_alias (__gettimeofday, gettimeofday) ++libc_hidden_weak (gettimeofday) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/init-first.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/init-first.c +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/init-first.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/init-first.c 2012-09-24 12:45:16.000000000 +0100 +@@ -0,0 +1,43 @@ ++/* Copyright (C) 2007, 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifdef SHARED ++# include ++# undef __gettimeofday ++# undef __clock_gettime ++# undef __clock_getres ++# include ++ ++void (*__vdso_gettimeofday) (struct timeval *, void *) attribute_hidden; ++void (*__vdso_clock_gettime) (clockid_t, struct timespec *); ++void (*__vdso_clock_getres) (clockid_t, struct timespec *); ++ ++static inline void ++_libc_vdso_platform_setup (void) ++{ ++ PREPARE_VERSION (linux2639, "LINUX_2.6.39", 123718537); ++ ++ __vdso_gettimeofday = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2639); ++ __vdso_clock_gettime = _dl_vdso_vsym ("__kernel_clock_gettime", &linux2639); ++ __vdso_clock_getres = _dl_vdso_vsym ("__kernel_clock_getres", &linux2639); ++} ++ ++# define VDSO_SETUP _libc_vdso_platform_setup ++#endif ++ ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S 2012-09-24 12:45:26.000000000 +0100 +@@ -0,0 +1,32 @@ ++/* Copyright (C) 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++ .text ++ENTRY(__ioctl) ++ movz x8, #__NR_ioctl ++ sxtw x0, w0 ++ svc #0x0 ++ cmn x0, #0x1, lsl #12 ++ b.hi PLTJMP(C_SYMBOL_NAME(__syscall_error)) ++ ret ++ ++ PSEUDO_END (__ioctl) ++ ++weak_alias (__ioctl, ioctl) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/kernel-features.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/kernel-features.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/kernel-features.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/kernel-features.h 2012-09-24 15:06:11.000000000 +0100 +@@ -0,0 +1,39 @@ ++/* Set flags signalling availability of kernel features based on given ++ kernel version number. ++ ++ Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++/* AArch64 support starts with 2.6.39, guaranteeing many kernel ++ features. */ ++ ++#define __ASSUME_ACCEPT4 1 ++#define __ASSUME_DUP3 1 ++#define __ASSUME_EVENTFD2 1 ++#define __ASSUME_IN_NONBLOCK 1 ++#define __ASSUME_O_CLOEXEC 1 ++#define __ASSUME_PIPE2 1 ++#define __ASSUME_PREAD 1 ++#define __ASSUME_PWRITE 1 ++#define __ASSUME_SIGNALFD4 1 ++#define __ASSUME_SOCK_CLOEXEC 1 ++#define __ASSUME_UTIMES 1 ++ ++#include_next +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h 2012-09-24 12:45:57.000000000 +0100 +@@ -0,0 +1,25 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++/* This structure must have the same shape as the linux kernel ++ equivalent. */ ++struct kernel_rt_sigframe ++{ ++ siginfo_t info; ++ struct ucontext uc; ++}; +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ldconfig.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/ldconfig.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ldconfig.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/ldconfig.h 2012-09-24 12:46:13.000000000 +0100 +@@ -0,0 +1,25 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++#define SYSDEP_KNOWN_INTERPRETER_NAMES \ ++ { "/lib/ld-linux-aarch64.so.1", FLAG_ELF_LIBC6 }, ++#define SYSDEP_KNOWN_LIBRARY_NAMES \ ++ { "libc.so.6", FLAG_ELF_LIBC6 }, \ ++ { "libm.so.6", FLAG_ELF_LIBC6 }, +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S 2012-09-24 12:46:17.000000000 +0100 +@@ -0,0 +1,19 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include <__read_tp.S> +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/makecontext.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/makecontext.c +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/makecontext.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/makecontext.c 2012-09-24 12:46:32.000000000 +0100 +@@ -0,0 +1,75 @@ ++/* Create new context. ++ Copyright (C) 2002, 2004, 2005, 2008, 2011, 2012 ++ Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++#include ++ ++ ++/* makecontext sets up a stack and the registers for the ++ user context. The stack looks like this: ++ ++ +-----------------------+ ++ | padding as required | ++ +-----------------------+ ++ sp -> | parameter 7-n | ++ +-----------------------+ ++ ++ The registers are set up like this: ++ %x0 .. %x7: parameter 1 to 8 ++ %x19 : uc_link ++ %sp : stack pointer. ++*/ ++ ++void ++__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) ++{ ++ extern void __startcontext (void); ++ unsigned long int *sp; ++ va_list ap; ++ int i; ++ ++ sp = (unsigned long int *) ++ ((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); ++ ++ /* Allocate stack arguments. */ ++ sp -= argc < 8 ? 0 : argc - 8; ++ ++ /* Keep the stack aligned. */ ++ sp = (unsigned long int *) (((uintptr_t) sp) & -16L); ++ ++ ucp->uc_mcontext.regs[19] = (uintptr_t) ucp->uc_link; ++ ucp->uc_mcontext.sp = (uintptr_t) sp; ++ ucp->uc_mcontext.pc = (uintptr_t) func; ++ ucp->uc_mcontext.regs[29] = (uintptr_t) 0; ++ ucp->uc_mcontext.regs[30] = (uintptr_t) &__startcontext; ++ ++ va_start (ap, argc); ++ for (i = 0; i < argc; ++i) ++ if (i < 8) ++ ucp->uc_mcontext.regs[i] = va_arg (ap, unsigned long int); ++ else ++ sp[i - 8] = va_arg (ap, unsigned long int); ++ ++ va_end (ap); ++} ++ ++weak_alias (__makecontext, makecontext) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/mmap.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/mmap.c +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/mmap.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/mmap.c 2012-09-24 12:46:44.000000000 +0100 +@@ -0,0 +1,34 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++__ptr_t ++__mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset) ++{ ++ return INLINE_SYSCALL (mmap, 6, addr, len, prot, flags, fd, offset); ++} ++ ++weak_alias (__mmap, mmap) ++weak_alias (__mmap, mmap64) ++weak_alias (__mmap, __mmap64) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/local_lim.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/local_lim.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/local_lim.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/local_lim.h 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,100 @@ ++/* Minimum guaranteed maximum values for system limits. Linux version. ++ Copyright (C) 1993-1998,2000,2002-2004,2008 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library. If not, see ++ . */ ++ ++/* The kernel header pollutes the namespace with the NR_OPEN symbol ++ and defines LINK_MAX although filesystems have different maxima. A ++ similar thing is true for OPEN_MAX: the limit can be changed at ++ runtime and therefore the macro must not be defined. Remove this ++ after including the header if necessary. */ ++#ifndef NR_OPEN ++# define __undef_NR_OPEN ++#endif ++#ifndef LINK_MAX ++# define __undef_LINK_MAX ++#endif ++#ifndef OPEN_MAX ++# define __undef_OPEN_MAX ++#endif ++#ifndef ARG_MAX ++# define __undef_ARG_MAX ++#endif ++ ++/* The kernel sources contain a file with all the needed information. */ ++#include ++ ++/* Have to remove NR_OPEN? */ ++#ifdef __undef_NR_OPEN ++# undef NR_OPEN ++# undef __undef_NR_OPEN ++#endif ++/* Have to remove LINK_MAX? */ ++#ifdef __undef_LINK_MAX ++# undef LINK_MAX ++# undef __undef_LINK_MAX ++#endif ++/* Have to remove OPEN_MAX? */ ++#ifdef __undef_OPEN_MAX ++# undef OPEN_MAX ++# undef __undef_OPEN_MAX ++#endif ++/* Have to remove ARG_MAX? */ ++#ifdef __undef_ARG_MAX ++# undef ARG_MAX ++# undef __undef_ARG_MAX ++#endif ++ ++/* The number of data keys per process. */ ++#define _POSIX_THREAD_KEYS_MAX 128 ++/* This is the value this implementation supports. */ ++#define PTHREAD_KEYS_MAX 1024 ++ ++/* Controlling the iterations of destructors for thread-specific data. */ ++#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 ++/* Number of iterations this implementation does. */ ++#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS ++ ++/* The number of threads per process. */ ++#define _POSIX_THREAD_THREADS_MAX 64 ++/* We have no predefined limit on the number of threads. */ ++#undef PTHREAD_THREADS_MAX ++ ++/* Maximum amount by which a process can descrease its asynchronous I/O ++ priority level. */ ++#define AIO_PRIO_DELTA_MAX 20 ++ ++/* Minimum size for a thread. At least two pages for systems with 64k ++ pages. */ ++#define PTHREAD_STACK_MIN 131072 ++ ++/* Maximum number of timer expiration overruns. */ ++#define DELAYTIMER_MAX 2147483647 ++ ++/* Maximum tty name length. */ ++#define TTY_NAME_MAX 32 ++ ++/* Maximum login name length. This is arbitrary. */ ++#define LOGIN_NAME_MAX 256 ++ ++/* Maximum host name length. */ ++#define HOST_NAME_MAX 64 ++ ++/* Maximum message queue priority level. */ ++#define MQ_PRIO_MAX 32768 ++ ++/* Maximum value the semaphore can have. */ ++#define SEM_VALUE_MAX (2147483647) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h 2012-09-24 12:47:13.000000000 +0100 +@@ -0,0 +1,170 @@ ++/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2009-2012 ++ Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _BITS_PTHREADTYPES_H ++#define _BITS_PTHREADTYPES_H 1 ++ ++#include ++ ++#define __SIZEOF_PTHREAD_ATTR_T 64 ++#define __SIZEOF_PTHREAD_MUTEX_T 48 ++#define __SIZEOF_PTHREAD_MUTEXATTR_T 8 ++#define __SIZEOF_PTHREAD_COND_T 48 ++#define __SIZEOF_PTHREAD_COND_COMPAT_T 48 ++#define __SIZEOF_PTHREAD_CONDATTR_T 8 ++#define __SIZEOF_PTHREAD_RWLOCK_T 56 ++#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 ++#define __SIZEOF_PTHREAD_BARRIER_T 32 ++#define __SIZEOF_PTHREAD_BARRIERATTR_T 8 ++ ++ ++/* 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_t1 ++#endif ++ ++typedef struct __pthread_internal_list ++{ ++ struct __pthread_internal_list *__prev; ++ struct __pthread_internal_list *__next; ++} __pthread_list_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; ++ unsigned int __nusers; ++ int __kind; ++ int __spins; ++ __pthread_list_t __list; ++#define __PTHREAD_MUTEX_HAVE_PREV 1 ++ } __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]; ++ long int __align; ++} pthread_cond_t; ++ ++typedef union ++{ ++ char __size[__SIZEOF_PTHREAD_CONDATTR_T]; ++ 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; ++ int __writer; ++ int __shared; ++ unsigned long int __pad1; ++ unsigned long int __pad2; ++ unsigned int __flags; ++ } __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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/semaphore.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/semaphore.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/semaphore.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/semaphore.h 2012-09-24 12:47:32.000000000 +0100 +@@ -0,0 +1,35 @@ ++/* Copyright (C) 2002, 2005, 2007, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _SEMAPHORE_H ++# error "Never use directly; include instead." ++#endif ++ ++ ++#define __SIZEOF_SEM_T 32 ++ ++ ++/* 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/c++-types.data glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/c++-types.data +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/c++-types.data 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/c++-types.data 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,67 @@ ++blkcnt64_t:l ++blkcnt_t:l ++blksize_t:i ++caddr_t:Pc ++clockid_t:i ++clock_t:l ++daddr_t:i ++dev_t:m ++fd_mask:l ++fsblkcnt64_t:m ++fsblkcnt_t:m ++fsfilcnt64_t:m ++fsfilcnt_t:m ++fsid_t:8__fsid_t ++gid_t:j ++id_t:j ++ino64_t:m ++ino_t:m ++int16_t:s ++int32_t:i ++int64_t:l ++int8_t:a ++intptr_t:l ++key_t:i ++loff_t:l ++mode_t:j ++nlink_t:j ++off64_t:l ++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:l ++register_t:l ++rlim64_t:m ++rlim_t:m ++sigset_t:10__sigset_t ++size_t:m ++socklen_t:j ++ssize_t:l ++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:m ++u_int8_t:h ++ulong:m ++u_long:m ++u_quad_t:m ++useconds_t:j ++ushort:t ++u_short:t +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/clone.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/clone.S +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/clone.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/clone.S 2012-09-24 12:47:49.000000000 +0100 +@@ -0,0 +1,21 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define RESET_PID ++#include ++#include "../clone.S" +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/createthread.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/createthread.c +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/createthread.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/createthread.c 2012-09-24 12:47:59.000000000 +0100 +@@ -0,0 +1,23 @@ ++/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++/* Value passed to 'clone' for initialization of the thread register. */ ++#define TLS_VALUE (pd + 1) ++ ++/* Get the real implementation. */ ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/fork.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/fork.c +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/fork.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/fork.c 2012-09-24 12:48:11.000000000 +0100 +@@ -0,0 +1,30 @@ ++/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Phil Blundell , 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 ++ . */ ++ ++#include ++#include ++#include ++#include ++ ++ ++#define ARCH_FORK() \ ++ INLINE_SYSCALL (clone, 5, \ ++ CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ ++ NULL, NULL, NULL, &THREAD_SELF->tid) ++ ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/ld.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/ld.abilist +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/ld.abilist 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/ld.abilist 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,12 @@ ++GLIBC_2.16 ++ GLIBC_2.16 A ++ __libc_memalign F ++ __libc_stack_end D 0x8 ++ __stack_chk_guard D 0x8 ++ __tls_get_addr F ++ _dl_mcount F ++ _r_debug D 0x28 ++ calloc F ++ free F ++ malloc F ++ realloc F +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libBrokenLocale.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libBrokenLocale.abilist +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libBrokenLocale.abilist 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libBrokenLocale.abilist 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,3 @@ ++GLIBC_2.16 ++ GLIBC_2.16 A ++ __ctype_get_mb_cur_max F +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libanl.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libanl.abilist +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libanl.abilist 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libanl.abilist 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,6 @@ ++GLIBC_2.16 ++ GLIBC_2.16 A ++ gai_cancel F ++ gai_error F ++ gai_suspend F ++ getaddrinfo_a F +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,2079 @@ ++GLIBC_2.16 ++ GLIBC_2.16 A ++ _Exit F ++ _IO_2_1_stderr_ D 0xe0 ++ _IO_2_1_stdin_ D 0xe0 ++ _IO_2_1_stdout_ D 0xe0 ++ _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 0xa8 ++ _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 0x8 ++ _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 0xa8 ++ _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 ++ ___brk_addr D 0x8 ++ __adjtimex F ++ __after_morecore_hook D 0x8 ++ __argz_count F ++ __argz_next F ++ __argz_stringify F ++ __asprintf F ++ __asprintf_chk 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 0x8 ++ __cxa_at_quick_exit F ++ __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 ++ __dprintf_chk F ++ __dup2 F ++ __duplocale F ++ __endmntent F ++ __environ D 0x8 ++ __errno_location F ++ __fbufsize F ++ __fcntl F ++ __fdelt_chk F ++ __fdelt_warn 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 ++ __fread_chk F ++ __fread_unlocked_chk F ++ __freadable F ++ __freading F ++ __free_hook D 0x8 ++ __freelocale F ++ __fsetlocking F ++ __fwprintf_chk F ++ __fwritable F ++ __fwriting F ++ __fxstat F ++ __fxstat64 F ++ __fxstatat F ++ __fxstatat64 F ++ __getauxval 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 ++ __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 ++ __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 ++ __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 0x8 ++ __key_encryptsession_pk_LOCAL D 0x8 ++ __key_gendes_LOCAL D 0x8 ++ __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 ++ __longjmp_chk F ++ __lseek F ++ __lxstat F ++ __lxstat64 F ++ __malloc_hook D 0x8 ++ __malloc_initialize_hook D 0x8 ++ __mbrlen F ++ __mbrtowc F ++ __mbsnrtowcs_chk F ++ __mbsrtowcs_chk F ++ __mbstowcs_chk F ++ __memalign_hook D 0x8 ++ __memcpy_chk F ++ __memmove_chk F ++ __mempcpy F ++ __mempcpy_chk F ++ __mempcpy_small F ++ __memset_chk F ++ __monstartup F ++ __morecore D 0x8 ++ __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 ++ __obstack_printf_chk F ++ __obstack_vprintf_chk F ++ __open F ++ __open64 F ++ __open64_2 F ++ __open_2 F ++ __openat64_2 F ++ __openat_2 F ++ __overflow F ++ __pipe F ++ __poll F ++ __poll_chk F ++ __posix_getopt F ++ __ppoll_chk F ++ __pread64 F ++ __pread64_chk F ++ __pread_chk F ++ __printf_chk F ++ __printf_fp F ++ __profile_frequency F ++ __progname D 0x8 ++ __progname_full D 0x8 ++ __ptsname_r_chk F ++ __pwrite64 F ++ __rawmemchr F ++ __rcmd_errstr D 0x8 ++ __read F ++ __read_chk F ++ __readlink_chk F ++ __readlinkat_chk F ++ __realloc_hook D 0x8 ++ __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_cpualloc F ++ __sched_cpucount F ++ __sched_cpufree 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 ++ __setmntent F ++ __setpgid F ++ __sigaction F ++ __sigaddset F ++ __sigdelset F ++ __sigismember F ++ __signbit F ++ __signbitf F ++ __signbitl 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 ++ __syslog_chk F ++ __sysv_signal F ++ __timezone D 0x8 ++ __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 0x10 ++ __uflow F ++ __underflow F ++ __uselocale F ++ __vasprintf_chk F ++ __vdprintf_chk 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 0x8 ++ _exit F ++ _flushlbf F ++ _libc_intl_domainname D 0x5 ++ _longjmp F ++ _mcleanup F ++ _mcount F ++ _nl_default_dirname D 0x12 ++ _nl_domain_bindings D 0x8 ++ _nl_msg_cat_cntr D 0x4 ++ _null_auth D 0x18 ++ _obstack_allocated_p F ++ _obstack_begin F ++ _obstack_begin_1 F ++ _obstack_free F ++ _obstack_memory_used F ++ _obstack_newchunk F ++ _res D 0x238 ++ _res_hconf D 0x48 ++ _rpc_dtablesize F ++ _seterr_reply F ++ _setjmp F ++ _sys_errlist D 0x438 ++ _sys_nerr D 0x4 ++ _sys_siglist D 0x208 ++ _tolower F ++ _toupper F ++ a64l F ++ abort F ++ abs F ++ accept F ++ accept4 F ++ access F ++ acct F ++ addmntent F ++ addseverity F ++ adjtime F ++ adjtimex F ++ advance F ++ alarm F ++ aligned_alloc 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 0x8 ++ argp_program_version D 0x8 ++ argp_program_version_hook D 0x8 ++ 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 ++ c16rtomb F ++ c32rtomb 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 ++ clock_adjtime 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 ++ dup3 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 ++ endsgent F ++ endspent F ++ endttyent F ++ endusershell F ++ endutent F ++ endutxent F ++ environ D 0x8 ++ envz_add F ++ envz_entry F ++ envz_get F ++ envz_merge F ++ envz_remove F ++ envz_strip F ++ epoll_create F ++ epoll_create1 F ++ epoll_ctl F ++ epoll_pwait 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 0x8 ++ 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 ++ eventfd F ++ eventfd_read F ++ eventfd_write F ++ execl F ++ execle F ++ execlp F ++ execv F ++ execve F ++ execvp F ++ execvpe F ++ exit F ++ faccessat F ++ fallocate F ++ fallocate64 F ++ fanotify_init F ++ fanotify_mark 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 ++ fgetsgent F ++ fgetsgent_r 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 ++ futimens 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 ++ getauxval 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 ++ getsgent F ++ getsgent_r F ++ getsgnam F ++ getsgnam_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 0x28 ++ 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 ++ index 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_option_alloc F ++ inet6_option_append F ++ inet6_option_find F ++ inet6_option_init F ++ inet6_option_next F ++ inet6_option_space 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 ++ 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 ++ innetgr F ++ inotify_add_watch F ++ inotify_init F ++ inotify_init1 F ++ inotify_rm_watch F ++ insque F ++ ioctl 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 0x8 ++ loc2 D 0x8 ++ localeconv F ++ localtime F ++ localtime_r F ++ lockf F ++ lockf64 F ++ locs D 0x8 ++ 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_info F ++ malloc_set_state F ++ malloc_stats F ++ malloc_trim F ++ malloc_usable_size F ++ mallopt F ++ mallwatch D 0x8 ++ mblen F ++ mbrlen F ++ mbrtoc16 F ++ mbrtoc32 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 ++ mkostemp F ++ mkostemp64 F ++ mkostemps F ++ mkostemps64 F ++ mkstemp F ++ mkstemp64 F ++ mkstemps F ++ mkstemps64 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 ++ name_to_handle_at 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 ++ ntp_gettimex F ++ obstack_alloc_failed_handler D 0x8 ++ obstack_exit_failure D 0x4 ++ obstack_free F ++ obstack_printf F ++ obstack_vprintf F ++ on_exit F ++ open F ++ open64 F ++ open_by_handle_at F ++ open_memstream F ++ open_wmemstream F ++ openat F ++ openat64 F ++ opendir F ++ openlog F ++ optarg D 0x8 ++ opterr D 0x4 ++ optind D 0x4 ++ optopt D 0x4 ++ parse_printf_format F ++ passwd2des F ++ pathconf F ++ pause F ++ pclose F ++ perror F ++ personality F ++ pipe F ++ pipe2 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 ++ preadv F ++ preadv64 F ++ printf F ++ printf_size F ++ printf_size_info F ++ prlimit F ++ prlimit64 F ++ process_vm_readv F ++ process_vm_writev F ++ profil F ++ program_invocation_name D 0x8 ++ program_invocation_short_name D 0x8 ++ pselect F ++ psiginfo 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 ++ putsgent 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 ++ pwritev F ++ pwritev64 F ++ qecvt F ++ qecvt_r F ++ qfcvt F ++ qfcvt_r F ++ qgcvt F ++ qsort F ++ qsort_r F ++ query_module F ++ quick_exit 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 0x8 ++ 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 ++ recvmmsg F ++ recvmsg F ++ regcomp F ++ regerror F ++ regexec F ++ regfree F ++ register_printf_function F ++ register_printf_modifier F ++ register_printf_specifier F ++ register_printf_type 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 0x20 ++ 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 ++ scandirat F ++ scandirat64 F ++ scanf F ++ sched_get_priority_max F ++ sched_get_priority_min F ++ sched_getaffinity F ++ sched_getcpu 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 ++ sendmmsg 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 ++ setns 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 ++ setsgent 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 ++ sgetsgent F ++ sgetsgent_r 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 ++ signalfd 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 ++ splice 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 0x8 ++ stdin D 0x8 ++ stdout D 0x8 ++ 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_l 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 0x8 ++ svc_register F ++ svc_run F ++ svc_sendreply F ++ svc_unregister F ++ svcauthdes_stats D 0x18 ++ 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 ++ sync_file_range F ++ syncfs F ++ sys_errlist D 0x438 ++ sys_nerr D 0x4 ++ sys_sigabbrev D 0x208 ++ sys_siglist D 0x208 ++ 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 ++ tee F ++ telldir F ++ tempnam F ++ textdomain F ++ tfind F ++ time F ++ timegm F ++ timelocal F ++ timerfd_create F ++ timerfd_gettime F ++ timerfd_settime F ++ times F ++ timespec_get F ++ timezone D 0x8 ++ 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 0x10 ++ 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 ++ utimensat 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 ++ vmsplice 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.17 ++ GLIBC_2.17 A ++ secure_getenv F +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libcrypt.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libcrypt.abilist +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libcrypt.abilist 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libcrypt.abilist 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,9 @@ ++GLIBC_2.16 ++ GLIBC_2.16 A ++ crypt F ++ crypt_r F ++ encrypt F ++ encrypt_r F ++ fcrypt F ++ setkey F ++ setkey_r F +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libdl.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libdl.abilist +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libdl.abilist 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libdl.abilist 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,11 @@ ++GLIBC_2.16 ++ GLIBC_2.16 A ++ dladdr F ++ dladdr1 F ++ dlclose F ++ dlerror F ++ dlinfo F ++ dlmopen F ++ dlopen F ++ dlsym F ++ dlvsym F +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libm.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libm.abilist +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libm.abilist 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libm.abilist 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,396 @@ ++GLIBC_2.16 ++ GLIBC_2.16 A ++ _LIB_VERSION D 0x4 ++ __acos_finite F ++ __acosf_finite F ++ __acosh_finite F ++ __acoshf_finite F ++ __acoshl_finite F ++ __acosl_finite F ++ __asin_finite F ++ __asinf_finite F ++ __asinl_finite F ++ __atan2_finite F ++ __atan2f_finite F ++ __atan2l_finite F ++ __atanh_finite F ++ __atanhf_finite F ++ __atanhl_finite F ++ __clog10 F ++ __clog10f F ++ __clog10l F ++ __cosh_finite F ++ __coshf_finite F ++ __coshl_finite F ++ __exp10_finite F ++ __exp10f_finite F ++ __exp10l_finite F ++ __exp2_finite F ++ __exp2f_finite F ++ __exp2l_finite F ++ __exp_finite F ++ __expf_finite F ++ __expl_finite F ++ __finite F ++ __finitef F ++ __finitel F ++ __fmod_finite F ++ __fmodf_finite F ++ __fmodl_finite F ++ __fpclassify F ++ __fpclassifyf F ++ __fpclassifyl F ++ __gamma_r_finite F ++ __gammaf_r_finite F ++ __gammal_r_finite F ++ __hypot_finite F ++ __hypotf_finite F ++ __hypotl_finite F ++ __j0_finite F ++ __j0f_finite F ++ __j0l_finite F ++ __j1_finite F ++ __j1f_finite F ++ __j1l_finite F ++ __jn_finite F ++ __jnf_finite F ++ __jnl_finite F ++ __lgamma_r_finite F ++ __lgammaf_r_finite F ++ __lgammal_r_finite F ++ __log10_finite F ++ __log10f_finite F ++ __log10l_finite F ++ __log2_finite F ++ __log2f_finite F ++ __log2l_finite F ++ __log_finite F ++ __logf_finite F ++ __logl_finite F ++ __pow_finite F ++ __powf_finite F ++ __powl_finite F ++ __remainder_finite F ++ __remainderf_finite F ++ __remainderl_finite F ++ __scalb_finite F ++ __scalbf_finite F ++ __scalbl_finite F ++ __signbit F ++ __signbitf F ++ __signbitl F ++ __sinh_finite F ++ __sinhf_finite F ++ __sinhl_finite F ++ __sqrt_finite F ++ __sqrtf_finite F ++ __y0_finite F ++ __y0f_finite F ++ __y0l_finite F ++ __y1_finite F ++ __y1f_finite F ++ __y1l_finite F ++ __yn_finite F ++ __ynf_finite F ++ __ynl_finite 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libnsl.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libnsl.abilist +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libnsl.abilist 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libnsl.abilist 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,123 @@ ++GLIBC_2.16 ++ GLIBC_2.16 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,225 @@ ++GLIBC_2.16 ++ GLIBC_2.16 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_atfork 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_getname_np 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 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 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 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_setname_np F ++ pthread_setschedparam F ++ pthread_setschedprio F ++ pthread_setspecific F ++ pthread_sigmask F ++ pthread_sigqueue 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libresolv.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libresolv.abilist +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libresolv.abilist 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libresolv.abilist 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,93 @@ ++GLIBC_2.16 ++ GLIBC_2.16 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 0xa8 ++ __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 0x450 ++ __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 0x80 ++ _sethtent F ++ inet_net_ntop F ++ inet_net_pton F ++ inet_neta F ++ 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 ++ res_gethostbyaddr F ++ res_gethostbyname F ++ res_gethostbyname2 F ++ res_send_setqhook F ++ res_send_setrhook F +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/librt.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/librt.abilist +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/librt.abilist 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/librt.abilist 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,42 @@ ++GLIBC_2.16 ++ GLIBC_2.16 A ++ __mq_open_2 F ++ 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 +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libthread_db.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libthread_db.abilist +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libthread_db.abilist 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libthread_db.abilist 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,42 @@ ++GLIBC_2.16 ++ GLIBC_2.16 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libutil.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libutil.abilist +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libutil.abilist 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libutil.abilist 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,8 @@ ++GLIBC_2.16 ++ GLIBC_2.16 A ++ forkpty F ++ login F ++ login_tty F ++ logout F ++ logwtmp F ++ openpty F +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,15 @@ ++# See scripts/check-localplt.awk for how this file is processed. ++# PLT use is required for the malloc family and for matherr because ++# users can define their own functions and have library internals call them. ++libc.so: calloc ++libc.so: free ++libc.so: malloc ++libc.so: memalign ++libc.so: realloc ++libc.so: __signbit ++libc.so: __signbitl ++libm.so: matherr ++libm.so: __signbit ++libm.so: __signbitf ++libm.so: __signbitl ++libpthread.so: __errno_location +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h 2012-09-24 12:48:34.000000000 +0100 +@@ -0,0 +1,284 @@ ++/* Copyright (C) 2005, 2006, 2007, 2008, 2009-2012 ++ Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _LOWLEVELLOCK_H ++#define _LOWLEVELLOCK_H 1 ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#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_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_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); \ ++ }) ++ ++ ++#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_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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/not-cancel.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/not-cancel.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/not-cancel.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/not-cancel.h 2012-09-24 12:48:55.000000000 +0100 +@@ -0,0 +1,105 @@ ++/* Uncancelable versions of cancelable interfaces. Linux/NPTL version. ++ ++ Copyright (C) 2003, 2006, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ Contributed by Ulrich Drepper , 2003. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++#define open_not_cancel(name, flags, mode) \ ++ INLINE_SYSCALL (openat, 4, AT_FDCWD, (const char *) (name), (flags), (mode)) ++ ++#define open_not_cancel_2(name, flags) \ ++ INLINE_SYSCALL (openat, 3, AT_FDCWD, (const char *) (name), (flags)) ++ ++#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt ++extern int __openat_nocancel (int fd, const char *fname, int oflag, ++ mode_t mode) attribute_hidden; ++extern int __openat64_nocancel (int fd, const char *fname, int oflag, ++ mode_t mode) attribute_hidden; ++#else ++# define __openat_nocancel(fd, fname, oflag, mode) \ ++ openat (fd, fname, oflag, mode) ++# define __openat64_nocancel(fd, fname, oflag, mode) \ ++ openat64 (fd, fname, oflag, mode) ++#endif ++ ++/* Uncancelable openat. */ ++#define openat_not_cancel(fd, fname, oflag, mode) \ ++ __openat_nocancel (fd, fname, oflag, mode) ++#define openat_not_cancel_3(fd, fname, oflag) \ ++ __openat_nocancel (fd, fname, oflag, 0) ++#define openat64_not_cancel(fd, fname, oflag, mode) \ ++ __openat64_nocancel (fd, fname, oflag, mode) ++#define openat64_not_cancel_3(fd, fname, oflag) \ ++ __openat64_nocancel (fd, fname, oflag, 0) ++ ++/* Uncancelable close. */ ++#define close_not_cancel(fd) \ ++ INLINE_SYSCALL (close, 1, fd) ++#define close_not_cancel_no_status(fd) \ ++ (void) ({ INTERNAL_SYSCALL_DECL (err); \ ++ INTERNAL_SYSCALL (close, err, 1, (fd)); }) ++ ++/* Uncancelable read. */ ++#define read_not_cancel(fd, buf, n) \ ++ INLINE_SYSCALL (read, 3, (fd), (buf), (n)) ++ ++/* Uncancelable write. */ ++#define write_not_cancel(fd, buf, n) \ ++ INLINE_SYSCALL (write, 3, (fd), (buf), (n)) ++ ++/* Uncancelable writev. */ ++#define writev_not_cancel_no_status(fd, iov, n) \ ++ (void) ({ INTERNAL_SYSCALL_DECL (err); \ ++ INTERNAL_SYSCALL (writev, err, 3, (fd), (iov), (n)); }) ++ ++/* Uncancelable fcntl. */ ++#define fcntl_not_cancel(fd, cmd, val) \ ++ __fcntl_nocancel (fd, cmd, val) ++ ++/* Uncancelable waitpid. */ ++#ifdef __NR_waitpid ++# define waitpid_not_cancel(pid, stat_loc, options) \ ++ INLINE_SYSCALL (waitpid, 3, pid, stat_loc, options) ++#else ++# define waitpid_not_cancel(pid, stat_loc, options) \ ++ INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL) ++#endif ++ ++/* Uncancelable pause. */ ++#ifdef __NR_pause ++# define pause_not_cancel() \ ++ INLINE_SYSCALL (pause, 0) ++#else ++# define pause_not_cancel() \ ++ __pause_nocancel () ++#endif ++ ++/* Uncancelable nanosleep. */ ++#ifdef __NR_nanosleep ++# define nanosleep_not_cancel(requested_time, remaining) \ ++ INLINE_SYSCALL (nanosleep, 2, requested_time, remaining) ++#else ++# define nanosleep_not_cancel(requested_time, remaining) \ ++ __nanosleep_nocancel (requested_time, remaining) ++#endif ++ ++/* Uncancelable sigsuspend. */ ++#define sigsuspend_not_cancel(set) \ ++ __sigsuspend_nocancel (set) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pt-vfork.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pt-vfork.S +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pt-vfork.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pt-vfork.S 2012-09-24 12:49:23.000000000 +0100 +@@ -0,0 +1,35 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++/* Save the PID value. */ ++#define SAVE_PID \ ++ mrs x2, tpidr_el0; \ ++ sub x2, x2, #PTHREAD_SIZEOF; \ ++ ldr w3, [x2, #PTHREAD_PID_OFFSET]; \ ++ neg w0, w3; \ ++ str w0, [x2, #PTHREAD_PID_OFFSET] ++ ++/* Restore the old PID value in the parent. */ ++#define RESTORE_PID \ ++ cbz x0, 1f; \ ++ str w3, [x2, #PTHREAD_PID_OFFSET]; \ ++1: ++ ++#include "../vfork.S" +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c 2012-09-24 12:49:33.000000000 +0100 +@@ -0,0 +1,90 @@ ++/* Copyright (C) 2004, 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include "pthreadP.h" ++#include ++ ++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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h 2012-09-24 12:49:44.000000000 +0100 +@@ -0,0 +1,205 @@ ++/* Copyright (C) 2003, 2004, 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#ifndef __ASSEMBLER__ ++# include ++#endif ++ ++#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt ++ ++# undef PSEUDO ++# define PSEUDO(name, syscall_name, args) \ ++ .section ".text"; \ ++ .type __##syscall_name##_nocancel,%function; \ ++ .globl __##syscall_name##_nocancel; \ ++ __##syscall_name##_nocancel: \ ++ cfi_startproc; \ ++ DO_CALL (syscall_name, args); \ ++ PSEUDO_RET; \ ++ cfi_endproc; \ ++ .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ ++ ENTRY (name); \ ++ SINGLE_THREAD_P; \ ++ DOARGS_##args; \ ++ bne .Lpseudo_cancel; \ ++ DO_CALL (syscall_name, 0); \ ++ UNDOARGS_##args; \ ++ cmn x0, 4095; \ ++ PSEUDO_RET; \ ++ .Lpseudo_cancel: \ ++ DOCARGS_##args; /* save syscall args etc. around CENABLE. */ \ ++ CENABLE; \ ++ mov x16, x0; /* put mask in safe place. */ \ ++ UNDOCARGS_##args; /* restore syscall args. */ \ ++ mov x8, SYS_ify (syscall_name); /* do the call. */ \ ++ svc 0; \ ++ str x0, [sp, -16]!; /* save syscall return value. */ \ ++ cfi_adjust_cfa_offset (16); \ ++ mov x0, x16; /* get mask back. */ \ ++ CDISABLE; \ ++ ldr x0, [sp], 16; \ ++ cfi_adjust_cfa_offset (-16); \ ++ ldr x30, [sp], 16; \ ++ cfi_adjust_cfa_offset (-16); \ ++ cfi_restore (x30); \ ++ UNDOARGS_##args; \ ++ cmn x0, 4095; ++ ++# define DOCARGS_0 \ ++ str x30, [sp, -16]!; \ ++ cfi_adjust_cfa_offset (16); \ ++ cfi_rel_offset (x30, 0) ++ ++# define UNDOCARGS_0 ++ ++# define DOCARGS_1 \ ++ DOCARGS_0; \ ++ str x0, [sp, -16]!; \ ++ cfi_adjust_cfa_offset (16); \ ++ cfi_rel_offset (x0, 0) ++ ++# define UNDOCARGS_1 \ ++ ldr x0, [sp], 16; \ ++ cfi_restore (x0); \ ++ cfi_adjust_cfa_offset (-16); \ ++ ++# define DOCARGS_2 \ ++ DOCARGS_1; \ ++ str x1, [sp, -16]!; \ ++ cfi_adjust_cfa_offset (16); \ ++ cfi_rel_offset (x1, 0) ++ ++# define UNDOCARGS_2 \ ++ ldr x1, [sp], 16; \ ++ cfi_restore (x1); \ ++ cfi_adjust_cfa_offset (-16); \ ++ UNDOCARGS_1 ++ ++# define DOCARGS_3 \ ++ DOCARGS_2; \ ++ str x2, [sp, -16]!; \ ++ cfi_adjust_cfa_offset (16); \ ++ cfi_rel_offset (x2, 0) ++ ++# define UNDOCARGS_3 \ ++ ldr x2, [sp], 16; \ ++ cfi_restore (x2); \ ++ cfi_adjust_cfa_offset (-16); \ ++ UNDOCARGS_2 ++ ++# define DOCARGS_4 \ ++ DOCARGS_3; \ ++ str x3, [sp, -16]!; \ ++ cfi_adjust_cfa_offset (16); \ ++ cfi_rel_offset (x3, 0) ++ ++# define UNDOCARGS_4 \ ++ ldr x3, [sp], 16; \ ++ cfi_restore (x3); \ ++ cfi_adjust_cfa_offset (-16); \ ++ UNDOCARGS_3 ++ ++# define DOCARGS_5 \ ++ DOCARGS_4; \ ++ str x4, [sp, -16]!; \ ++ cfi_adjust_cfa_offset (16); \ ++ cfi_rel_offset (x4, 0) ++ ++# define UNDOCARGS_5 \ ++ ldr x4, [sp], 16; \ ++ cfi_restore (x4); \ ++ cfi_adjust_cfa_offset (-16); \ ++ UNDOCARGS_4 ++ ++# define DOCARGS_6 \ ++ DOCARGS_5; \ ++ str x5, [sp, -16]!; \ ++ cfi_adjust_cfa_offset (16); \ ++ cfi_rel_offset (x5, 0) ++ ++# define UNDOCARGS_6 \ ++ ldr x5, [sp], 16; \ ++ cfi_restore (x5); \ ++ cfi_adjust_cfa_offset (-16); \ ++ UNDOCARGS_5 ++ ++# 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 \ ++ adrp x16, __local_multiple_threads; \ ++ add x16, x16, #:lo12:__local_multiple_threads; \ ++ ldr x16, [x16]; \ ++ cmp x16, 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 \ ++ stp x0, x30, [sp, -16]!; \ ++ cfi_adjust_cfa_offset (16); \ ++ cfi_rel_offset (x0, 0); \ ++ cfi_rel_offset (x30, 8); \ ++ bl __read_tp; \ ++ sub x0, x0, PTHREAD_SIZEOF; \ ++ ldr x16, [x0, PTHREAD_MULTIPLE_THREADS_OFFSET]; \ ++ ldp x0, x30, [sp], 16; \ ++ cfi_restore (x0); \ ++ cfi_restore (x30); \ ++ cfi_adjust_cfa_offset (-16); \ ++ cmp x16, 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/vfork.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/vfork.S +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/vfork.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/vfork.S 2012-09-24 12:49:57.000000000 +0100 +@@ -0,0 +1,37 @@ ++/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++/* Save the PID value. */ ++#define SAVE_PID \ ++ mrs x2, tpidr_el0; \ ++ sub x2, x2, #PTHREAD_SIZEOF; \ ++ ldr w3, [x2, #PTHREAD_PID_OFFSET]; \ ++ cmp w3, #0; \ ++ mov w0, #0x80000000; \ ++ csneg w0, w0, w3, eq; \ ++ str w0, [x2, #PTHREAD_PID_OFFSET] ++ ++/* Restore the old PID value in the parent. */ ++#define RESTORE_PID \ ++ cbz x0, 1f; /* If we are the parent... */ \ ++ str w3, [x2, #PTHREAD_PID_OFFSET]; /* restore the saved PID. */ \ ++1: ++ ++#include "../vfork.S" +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/profil-counter.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/profil-counter.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/profil-counter.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/profil-counter.h 2012-09-24 13:01:32.000000000 +0100 +@@ -0,0 +1,20 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++/* We can use the ix86 version. */ ++#include +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S 2012-09-24 12:59:03.000000000 +0100 +@@ -0,0 +1,89 @@ ++/* Set current context. ++ ++ Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include "ucontext_i.h" ++#include "ucontext-internal.h" ++ ++/* int setcontext (const ucontext_t *ucp) */ ++ ++ .text ++ ++ENTRY(__setcontext) ++ ++ /* Create a signal frame on the stack: ++ ++ fp ++ lr ++ ... ++ sp-> rt_sigframe ++ */ ++ ++ stp x29, x30, [sp, -16]! ++ cfi_adjust_cfa_offset (16) ++ cfi_rel_offset (x29, 0) ++ cfi_rel_offset (x30, 8) ++ ++ mov x29, sp ++ cfi_def_cfa_register (x29) ++ ++ /* Allocate space for the sigcontext. */ ++ mov w3, #((RT_SIGFRAME_SIZE + SP_ALIGN_SIZE) & SP_ALIGN_MASK) ++ sub sp, sp, x3 ++ ++ /* Compute the base address of the ucontext structure. */ ++ add x1, sp, #RT_SIGFRAME_UCONTEXT ++ ++ /* Only ucontext is required in the frame, *copy* it in. */ ++ ++#if UCONTEXT_SIZE % 16 ++#error The implementation of setcontext.S assumes sizeof(ucontext_t) % 16 == 0 ++#endif ++ ++ mov x2, #UCONTEXT_SIZE / 16 ++0: ++ ldp x3, x4, [x0], #16 ++ stp x3, x4, [x1], #16 ++ sub x2, x2, 1 ++ cbnz x2, 0b ++ ++ /* rt_sigreturn () -- no arguments, sp points to struct rt_sigframe. */ ++ mov x8, SYS_ify (rt_sigreturn) ++ svc 0 ++ ++ /* Ooops we failed. Recover the stack */ ++ ++ mov sp, x29 ++ cfi_def_cfa_register (sp) ++ ++ ldp x29, x30, [sp], 16 ++ cfi_adjust_cfa_offset (16) ++ cfi_restore (x29) ++ cfi_restore (x30) ++ b PLTJMP(C_SYMBOL_NAME(__syscall_error)) ++ ++PSEUDO_END (__setcontext) ++weak_alias (__setcontext, setcontext) ++ ++ENTRY(__startcontext) ++ mov x0, x19 ++ cbnz x0, PLTJMP(__setcontext) ++1: b PLTJMP(HIDDEN_JUMPTARGET(_exit)) ++END(__startcontext) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sigaction.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/sigaction.c +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sigaction.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sigaction.c 2012-09-24 15:07:00.000000000 +0100 +@@ -0,0 +1,81 @@ ++/* Copyright (C) 1997-2000, 2002, 2003, 2005, 2006, 2009-2012 ++ Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++ ++#define SA_RESTORER 0x04000000 ++ ++/* 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 ++ ++int ++__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) ++{ ++ int result; ++ struct kernel_sigaction kact; ++ struct kernel_sigaction 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; ++#endif ++ } ++ ++ result = INLINE_SYSCALL (rt_sigaction, 4, sig, ++ act ? __ptrvalue (&kact) : NULL, ++ oact ? __ptrvalue (&koact) : NULL, _NSIG / 8); ++ if (result >= 0 || errno != ENOSYS) ++ { ++ 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/swapcontext.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/swapcontext.S +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/swapcontext.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/swapcontext.S 2012-09-24 12:59:21.000000000 +0100 +@@ -0,0 +1,100 @@ ++/* Modify saved context. ++ ++ Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++#include "ucontext_i.h" ++#include "ucontext-internal.h" ++ ++/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */ ++ ++ .text ++ENTRY(__swapcontext) ++ /* Set the value returned when swapcontext() returns in this context. */ ++ str xzr, [x0, oX0 + 0 * SZREG] ++ ++ stp x18, x19, [x0, oX0 + 18 * SZREG] ++ stp x20, x21, [x0, oX0 + 20 * SZREG] ++ stp x22, x23, [x0, oX0 + 22 * SZREG] ++ stp x24, x25, [x0, oX0 + 24 * SZREG] ++ stp x26, x27, [x0, oX0 + 26 * SZREG] ++ stp x28, x29, [x0, oX0 + 28 * SZREG] ++ str x30, [x0, oX0 + 30 * SZREG] ++ str x30, [x0, oPC] ++ mov x2, sp ++ str x2, [x0, oSP] ++ ++ /* Figure out where to place the first context extension ++ block. */ ++ add x2, x0, #oEXTENSION ++ ++ /* Write the context extension fpsimd header. */ ++ mov w3, #(FPSIMD_MAGIC & 0xffff) ++ movk w3, #(FPSIMD_MAGIC >> 16), lsl #16 ++ str w3, [x2, #oHEAD + oMAGIC] ++ mov w3, #FPSIMD_CONTEXT_SIZE ++ str w3, [x2, #oHEAD + oSIZE] ++ ++ /* Fill in the FP SIMD context. */ ++ add x3, x2, #oV0 + 8 * SZVREG ++ stp d8, d9, [x3], #2 * SZVREG ++ stp d10, d11, [x3], #2 * SZVREG ++ stp d12, d13, [x3], #2 * SZVREG ++ stp d14, d15, [x3], #2 * SZVREG ++ ++ add x3, x2, #oFPSR ++ ++ mrs x4, fpsr ++ str w4, [x3, #oFPSR - oFPSR] ++ ++ mrs x4, fpcr ++ str w4, [x3, #oFPCR - oFPSR] ++ ++ /* Write the termination context extension header. */ ++ add x2, x2, #FPSIMD_CONTEXT_SIZE ++ ++ str xzr, [x2, #oHEAD + oMAGIC] ++ str xzr, [x2, #oHEAD + oSIZE] ++ ++ /* Preserve ucp. */ ++ mov x21, x1 ++ ++ /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, ++ _NSIG8) */ ++ /* Grab the signal mask */ ++ /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ ++ add x2, x0, #UCONTEXT_SIGMASK ++ mov x0, SIG_BLOCK ++ mov x1, 0 ++ mov x3, _NSIG8 ++ mov x8, SYS_ify (rt_sigprocmask) ++ svc 0 ++ cbnz x0, 1f ++ ++ mov x22, x30 ++ mov x0, x21 ++ bl JUMPTARGET (__setcontext) ++ mov x30, x22 ++ RET ++ ++1: ++ b PLTJMP(C_SYMBOL_NAME(__syscall_error)) ++PSEUDO_END (__swapcontext) ++weak_alias (__swapcontext, swapcontext) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/elf.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/elf.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/elf.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/elf.h 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,25 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _SYS_ELF_H ++#define _SYS_ELF_H 1 ++ ++#warning "This header is obsolete; use instead." ++ ++#include ++ ++#endif /* sys/elf.h */ +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h 2012-09-26 20:49:16.000000000 +0100 +@@ -0,0 +1,133 @@ ++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#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 ++#include ++#include ++#include ++ ++/* We need to see the definition of struct pt_regs but do not want the ++ linux PTRACE_* defines since they conflict with the generic eglibc ++ definitions in sys/ptrace.h Hence the undef's below. */ ++#include ++ ++#undef PTRACE_GET_THREAD_AREA ++#undef PTRACE_GETHBPREGS ++#undef PTRACE_SETHBPREGS ++ ++#include ++ ++__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 ++ pt_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_pt_regs) / sizeof(elf_greg_t)) ++typedef elf_greg_t elf_gregset_t[ELF_NGREG]; ++ ++/* Register set for the floating-point registers. */ ++typedef struct user_fpsimd_state 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 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h 2012-09-26 20:49:16.000000000 +0100 +@@ -0,0 +1,174 @@ ++/* `ptrace' debugger support interface. Linux version. ++ Copyright (C) 1996-2012 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _SYS_PTRACE_H ++#define _SYS_PTRACE_H 1 ++ ++#include ++ ++__BEGIN_DECLS ++ ++/* Type of the REQUEST argument to `ptrace.' */ ++enum __ptrace_request ++{ ++ /* Indicate that the process making this request should be traced. ++ All signals received by this process can be intercepted by its ++ parent, and its parent can use the other `ptrace' requests. */ ++ PTRACE_TRACEME = 0, ++#define PT_TRACE_ME PTRACE_TRACEME ++ ++ /* Return the word in the process's text space at address ADDR. */ ++ PTRACE_PEEKTEXT = 1, ++#define PT_READ_I PTRACE_PEEKTEXT ++ ++ /* Return the word in the process's data space at address ADDR. */ ++ PTRACE_PEEKDATA = 2, ++#define PT_READ_D PTRACE_PEEKDATA ++ ++ /* Return the word in the process's user area at offset ADDR. */ ++ PTRACE_PEEKUSER = 3, ++#define PT_READ_U PTRACE_PEEKUSER ++ ++ /* Write the word DATA into the process's text space at address ADDR. */ ++ PTRACE_POKETEXT = 4, ++#define PT_WRITE_I PTRACE_POKETEXT ++ ++ /* Write the word DATA into the process's data space at address ADDR. */ ++ PTRACE_POKEDATA = 5, ++#define PT_WRITE_D PTRACE_POKEDATA ++ ++ /* Write the word DATA into the process's user area at offset ADDR. */ ++ PTRACE_POKEUSER = 6, ++#define PT_WRITE_U PTRACE_POKEUSER ++ ++ /* Continue the process. */ ++ PTRACE_CONT = 7, ++#define PT_CONTINUE PTRACE_CONT ++ ++ /* Kill the process. */ ++ PTRACE_KILL = 8, ++#define PT_KILL PTRACE_KILL ++ ++ /* Single step the process. */ ++ PTRACE_SINGLESTEP = 9, ++#define PT_STEP PTRACE_SINGLESTEP ++ ++ /* Attach to a process that is already running. */ ++ PTRACE_ATTACH = 16, ++#define PT_ATTACH PTRACE_ATTACH ++ ++ /* Detach from a process attached to with PTRACE_ATTACH. */ ++ PTRACE_DETACH = 17, ++#define PT_DETACH PTRACE_DETACH ++ ++ PTRACE_GET_THREAD_AREA = 22, ++ ++ /* Continue and stop at the next (return from) syscall. */ ++ PTRACE_SYSCALL = 24, ++#define PT_SYSCALL PTRACE_SYSCALL ++ ++ /* Get all hardware breakpoint registers. */ ++ PTRACE_GETHBPREGS = 29, ++ ++ /* Set all hardware breakpoint registers. */ ++ PTRACE_SETHBPREGS = 30, ++ ++ /* Set ptrace filter options. */ ++ PTRACE_SETOPTIONS = 0x4200, ++#define PT_SETOPTIONS PTRACE_SETOPTIONS ++ ++ /* Get last ptrace message. */ ++ PTRACE_GETEVENTMSG = 0x4201, ++#define PT_GETEVENTMSG PTRACE_GETEVENTMSG ++ ++ /* Get siginfo for process. */ ++ PTRACE_GETSIGINFO = 0x4202, ++#define PT_GETSIGINFO PTRACE_GETSIGINFO ++ ++ /* Set new siginfo for process. */ ++ PTRACE_SETSIGINFO = 0x4203, ++#define PT_SETSIGINFO PTRACE_SETSIGINFO ++ ++ /* Get register content. */ ++ PTRACE_GETREGSET = 0x4204, ++#define PTRACE_GETREGSET PTRACE_GETREGSET ++ ++ /* Set register content. */ ++ PTRACE_SETREGSET = 0x4205, ++#define PTRACE_SETREGSET PTRACE_SETREGSET ++ ++ /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect ++ signal or group stop state. */ ++ PTRACE_SEIZE = 0x4206, ++#define PTRACE_SEIZE PTRACE_SEIZE ++ ++ /* Trap seized trace. */ ++ PTRACE_INTERRUPT = 0x4207, ++#define PTRACE_INTERRUPT PTRACE_INTERRUPT ++ ++ /* Wait for next group event. */ ++ PTRACE_LISTEN = 0x4208 ++}; ++ ++ ++/* Flag for PTRACE_LISTEN. */ ++enum __ptrace_flags ++{ ++ PTRACE_SEIZE_DEVEL = 0x80000000 ++}; ++ ++/* Options set using PTRACE_SETOPTIONS. */ ++enum __ptrace_setoptions ++{ ++ PTRACE_O_TRACESYSGOOD = 0x00000001, ++ PTRACE_O_TRACEFORK = 0x00000002, ++ PTRACE_O_TRACEVFORK = 0x00000004, ++ PTRACE_O_TRACECLONE = 0x00000008, ++ PTRACE_O_TRACEEXEC = 0x00000010, ++ PTRACE_O_TRACEVFORKDONE = 0x00000020, ++ PTRACE_O_TRACEEXIT = 0x00000040, ++ PTRACE_O_TRACESECCOMP = 0x00000080, ++ PTRACE_O_MASK = 0x000000ff ++}; ++ ++/* Wait extended result codes for the above trace options. */ ++enum __ptrace_eventcodes ++{ ++ PTRACE_EVENT_FORK = 1, ++ PTRACE_EVENT_VFORK = 2, ++ PTRACE_EVENT_CLONE = 3, ++ PTRACE_EVENT_EXEC = 4, ++ PTRACE_EVENT_VFORK_DONE = 5, ++ PTRACE_EVENT_EXIT = 6, ++ PTRACE_EVENT_SECCOMP = 7 ++}; ++ ++/* Perform process tracing functions. REQUEST is one of the values ++ above, and determines the action to be taken. ++ For all requests except PTRACE_TRACEME, PID specifies the process to be ++ traced. ++ ++ PID and the other arguments described above for the various requests should ++ appear (those that are used for the particular request) as: ++ pid_t PID, void *ADDR, int DATA, void *ADDR2 ++ after REQUEST. */ ++extern long int ptrace (enum __ptrace_request __request, ...) __THROW; ++ ++__END_DECLS ++ ++#endif /* _SYS_PTRACE_H */ +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,55 @@ ++/* Copyright (C) 1998, 1999, 2001, 2006 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++/* System V/AArch64 ABI compliant context switching support. */ ++ ++#ifndef _SYS_UCONTEXT_H ++#define _SYS_UCONTEXT_H 1 ++ ++#include ++#include ++#include ++ ++/* We need the signal context definitions even if they are not used ++ included in . */ ++#include ++ ++typedef int greg_t; ++ ++/* Container for all general registers. */ ++typedef elf_gregset_t gregset_t; ++ ++/* Structure to describe FPU registers. */ ++typedef elf_fpregset_t 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; ++ __sigset_t uc_sigmask; ++ mcontext_t uc_mcontext; ++ } ucontext_t; ++ ++#endif /* sys/ucontext.h */ +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h 2012-09-26 20:49:16.000000000 +0100 +@@ -0,0 +1,31 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _SYS_USER_H ++#define _SYS_USER_H 1 ++ ++/* We need to see the definition of struct pt_regs but do not want the ++ linux PTRACE_* defines since they conflict with the generic glibc ++ definitions in sys/ptrace.h Hence the undef's below. */ ++#include ++ ++#undef PTRACE_GET_THREAD_AREA ++#undef PTRACE_GETHBPREGS ++#undef PTRACE_SETHBPREGS ++ ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h.orig glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h.orig +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h.orig 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h.orig 2012-09-24 12:59:55.000000000 +0100 +@@ -0,0 +1,36 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _SYS_USER_H ++#define _SYS_USER_H 1 ++ ++/* We need to see the definition of struct pt_regs but do not want the ++ linux PTRACE_* defines since they conflict with the generic eglibc ++ definitions in sys/ptrace.h Hence the undef's below. */ ++#include ++ ++#undef PTRACE_GETREGS ++#undef PTRACE_SETREGS ++#undef PTRACE_GETFPREGS ++#undef PTRACE_SETFPREGS ++#undef PTRACE_GET_THREAD_AREA ++#undef PTRACE_SET_SYSCALL ++#undef PTRACE_GETHBPREGS ++#undef PTRACE_SETHBPREGS ++ ++#endif +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/syscall.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/syscall.S +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/syscall.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/syscall.S 2012-09-24 13:00:07.000000000 +0100 +@@ -0,0 +1,44 @@ ++/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++/* syscall (int nr, ...) ++ ++ AArch64 system calls take between 0 and 7 arguments. On entry here nr ++ is in w0 and any other system call arguments are in register x1..x7. ++ ++ For kernel entry we need to move the system call nr to x8 then ++ load the remaining arguments to register. */ ++ ++ENTRY (syscall) ++ uxtw x8, w0 ++ mov x0, x1 ++ mov x1, x2 ++ mov x2, x3 ++ mov x3, x4 ++ mov x4, x5 ++ mov x5, x6 ++ mov x6, x7 ++ svc 0x0 ++ cmn x0, #4095 ++ b.cs 1f ++ RET ++1: ++ b PLTJMP(SYSCALL_ERROR) ++PSEUDO_END (syscall) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/syscalls.list glibc/ports/sysdeps/unix/sysv/linux/aarch64/syscalls.list +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/syscalls.list 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/syscalls.list 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,34 @@ ++# File name Caller Syscall name # args Strong name Weak names ++ ++# Semaphore and shm system calls. ++msgget - msgget i:ii __msgget msgget ++msgctl - msgctl i:iip __msgctl msgctl ++msgrcv - msgrcv Ci:ibnii __msgrcv msgrcv ++msgsnd - msgsnd Ci:ibni __msgsnd msgsnd ++shmctl - shmctl i:iip __shmctl shmctl ++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 ++semctl - semctl i:iiii __semctl semctl ++ ++# proper socket implementations: ++accept - accept Ci:iBN __libc_accept __accept accept ++bind - bind i:ipi __bind bind ++connect - connect Ci:ipi __libc_connect __connect_internal __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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.c +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.c 2012-09-25 16:37:48.000000000 +0100 +@@ -0,0 +1,33 @@ ++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library. If not, see ++ . */ ++ ++#include ++#include ++ ++int __syscall_error (int err); ++hidden_proto (__syscall_error) ++ ++/* This routine is jumped to by all the syscall handlers, to stash ++ an error number into errno. */ ++int ++__syscall_error (int err) ++{ ++ __set_errno (- err); ++ return -1; ++} ++hidden_def (__syscall_error) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h 2012-09-24 15:08:39.000000000 +0100 +@@ -0,0 +1,401 @@ ++/* Copyright (C) 2005-2007, 2009-2012 ++ Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#ifndef _LINUX_AARCH64_SYSDEP_H ++#define _LINUX_AARCH64_SYSDEP_H 1 ++ ++#include ++#include ++ ++/* Don't use stime, even if the kernel headers define it. We have ++ settimeofday. Similarly use setitimer to implement alarm. */ ++#undef __NR_time ++#undef __NR_umount ++#undef __NR_stime ++#undef __NR_alarm ++#undef __NR_utime ++#undef __NR_select ++#undef __NR_readdir ++#undef __NR_socketcall ++#undef __NR_ipc ++ ++/* Defines RTLD_PRIVATE_ERRNO and USE_DL_SYSINFO. */ ++#include ++ ++#include ++ ++/* In order to get __set_errno() definition in INLINE_SYSCALL. */ ++#ifndef __ASSEMBLER__ ++#include ++#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) ++ ++#ifdef __ASSEMBLER__ ++ ++/* 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 x0, #4095; ++ ++/* Notice the use of 'RET' instead of 'ret' the assembler is case ++ insensitive and eglibc already uses the preprocessor symbol 'ret' ++ so we use the upper case 'RET' to force through a ret instruction ++ to the assembler */ ++#define PSEUDO_RET \ ++ b.cs 1f; \ ++ RET; \ ++ 1: \ ++ 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); ++ ++/* Notice the use of 'RET' instead of 'ret' the assembler is case ++ insensitive and eglibc already uses the preprocessor symbol 'ret' ++ so we use the upper case 'RET' to force through a ret instruction ++ to the assembler */ ++#define PSEUDO_RET_NOERRNO \ ++ RET; ++ ++#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); \ ++ neg x0, x0 ++ ++#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: \ ++ adrp x1, C_SYMBOL_NAME(rtld_errno); \ ++ add x1, x1, #:lo12:C_SYMBOL_NAME(rtld_errno); \ ++ neg w0, w0; \ ++ str w0, [x1]; \ ++ mov x0, -1; \ ++ RET; ++# else ++ ++# define SYSCALL_ERROR_HANDLER \ ++__local_syscall_error: \ ++ stp x29, x30, [sp, -32]!; \ ++ cfi_adjust_cfa_offset (32); \ ++ cfi_rel_offset (x29, 0); \ ++ cfi_rel_offset (x30, 8); \ ++ add x29, sp, 0; \ ++ str x19, [sp,16]; \ ++ neg x19, x0; \ ++ bl PLTJMP(C_SYMBOL_NAME(__errno_location)); \ ++ str x19, [x0]; \ ++ mov x0, -1; \ ++ ldr x19, [sp,16]; \ ++ ldp x29, x30, [sp], 32; \ ++ cfi_adjust_cfa_offset (-32); \ ++ cfi_restore (x29); \ ++ cfi_restore (x30); \ ++ RET; ++# endif ++#else ++# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ ++# define SYSCALL_ERROR __syscall_error ++#endif ++ ++/* Linux takes system call args in registers: ++ syscall number in the SVC instruction ++ arg 1 x0 ++ arg 2 x1 ++ arg 3 x2 ++ arg 4 x3 ++ arg 5 x4 ++ arg 6 x5 ++ arg 7 x6 ++ ++ The compiler is going to form a call by coming here, through PSEUDO, with ++ arguments ++ syscall number in the DO_CALL macro ++ arg 1 x0 ++ arg 2 x1 ++ arg 3 x2 ++ arg 4 x3 ++ arg 5 x4 ++ arg 6 x5 ++ arg 7 x6 ++ ++ 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. ++ ++*/ ++ ++#undef DO_CALL ++#define DO_CALL(syscall_name, args) \ ++ DOARGS_##args \ ++ mov x8, SYS_ify (syscall_name); \ ++ svc 0; \ ++ UNDOARGS_##args ++ ++#define DOARGS_0 /* nothing */ ++#define DOARGS_1 /* nothing */ ++#define DOARGS_2 /* nothing */ ++#define DOARGS_3 /* nothing */ ++#define DOARGS_4 /* nothing */ ++#define DOARGS_5 /* nothing */ ++#define DOARGS_6 /* nothing */ ++#define DOARGS_7 /* nothing */ ++ ++#define UNDOARGS_0 /* nothing */ ++#define UNDOARGS_1 /* nothing */ ++#define UNDOARGS_2 /* nothing */ ++#define UNDOARGS_3 /* nothing */ ++#define UNDOARGS_4 /* nothing */ ++#define UNDOARGS_5 /* nothing */ ++#define UNDOARGS_6 /* nothing */ ++#define UNDOARGS_7 /* nothing */ ++ ++#else /* not __ASSEMBLER__ */ ++ ++#ifdef SHARED ++# define INLINE_VSYSCALL(name, nr, args...) \ ++ ({ \ ++ __label__ out; \ ++ __label__ iserr; \ ++ long sc_ret; \ ++ long sc_err; \ ++ INTERNAL_SYSCALL_DECL (sc_err); \ ++ \ ++ if (__vdso_##name != NULL) \ ++ { \ ++ register long _x0 asm ("x0"); \ ++ sc_ret = INTERNAL_VSYSCALL_NCS (__vdso_##name, sc_err, nr, ##args); \ ++ if (!INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ ++ goto out; \ ++ if (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err) != ENOSYS) \ ++ goto iserr; \ ++ } \ ++ \ ++ sc_ret = INTERNAL_SYSCALL (name, sc_err, nr, ##args); \ ++ if (INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ ++ { \ ++ iserr: \ ++ __set_errno (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err)); \ ++ sc_ret = -1L; \ ++ } \ ++ out: \ ++ sc_ret; \ ++ }) ++#else ++# define INLINE_VSYSCALL(name, nr, args...) \ ++ INLINE_SYSCALL (name, nr, ##args) ++#endif ++ ++#ifdef SHARED ++# define INTERNAL_VSYSCALL(name, err, nr, args...) \ ++ ({ \ ++ __label__ out; \ ++ long v_ret; \ ++ \ ++ if (__vdso_##name != NULL) \ ++ { \ ++ register long _x0 asm ("x0"); \ ++ v_ret = INTERNAL_VSYSCALL_NCS (__vdso_##name, err, nr, ##args); \ ++ if (!INTERNAL_SYSCALL_ERROR_P (v_ret, err) \ ++ || INTERNAL_SYSCALL_ERRNO (v_ret, err) != ENOSYS) \ ++ goto out; \ ++ } \ ++ v_ret = INTERNAL_SYSCALL (name, err, nr, ##args); \ ++ out: \ ++ v_ret; \ ++ }) ++#else ++# define INTERNAL_VSYSCALL(name, err, nr, args...) \ ++ INTERNAL_SYSCALL (name, err, nr, ##args) ++#endif ++ ++/* List of system calls which are supported as vsyscalls. */ ++#define HAVE_CLOCK_GETRES_VSYSCALL 1 ++#define HAVE_CLOCK_GETTIME_VSYSCALL 1 ++ ++#define INTERNAL_VSYSCALL_NCS(funcptr, err, nr, args...) \ ++ ({ \ ++ LOAD_ARGS_##nr (args) \ ++ asm volatile ("blr %1" \ ++ : "=r" (_x0) \ ++ : "r" (funcptr), ASM_ARGS_##nr \ ++ : "x30", "memory"); \ ++ (long) _x0; \ ++ }) ++ ++ ++/* Define a macro which expands into the inline wrapper code for a system ++ call. */ ++#undef INLINE_SYSCALL ++#define INLINE_SYSCALL(name, nr, args...) \ ++ ({ unsigned long _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 long) -1; \ ++ } \ ++ (long) _sys_result; }) ++ ++#undef INTERNAL_SYSCALL_DECL ++#define INTERNAL_SYSCALL_DECL(err) do { } while (0) ++ ++#undef INTERNAL_SYSCALL_RAW ++#define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ ++ ({ unsigned long _sys_result; \ ++ { \ ++ LOAD_ARGS_##nr (args) \ ++ register long _x8 asm ("x8") = (name); \ ++ asm volatile ("svc 0 // syscall " # name \ ++ : "+r" (_x0), "+r" (_x8) \ ++ : ASM_ARGS_##nr \ ++ : "memory", CLOBBER_ARGS_##nr); \ ++ _sys_result = _x0; \ ++ } \ ++ (long) _sys_result; }) ++ ++#undef INTERNAL_SYSCALL ++#define INTERNAL_SYSCALL(name, err, nr, args...) \ ++ INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args) ++ ++#undef INTERNAL_SYSCALL_AARCH64 ++#define INTERNAL_SYSCALL_AARCH64(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 long) (val) >= (unsigned long) -4095) ++ ++#undef INTERNAL_SYSCALL_ERRNO ++#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) ++ ++#define CLOBBER_ARGS_0 CLOBBER_ARGS_1 ++#define CLOBBER_ARGS_1 "x1", CLOBBER_ARGS_2 ++#define CLOBBER_ARGS_2 "x2", CLOBBER_ARGS_3 ++#define CLOBBER_ARGS_3 "x3", CLOBBER_ARGS_4 ++#define CLOBBER_ARGS_4 "x4", CLOBBER_ARGS_5 ++#define CLOBBER_ARGS_5 "x5", CLOBBER_ARGS_6 ++#define CLOBBER_ARGS_6 "x6", CLOBBER_ARGS_7 ++#define CLOBBER_ARGS_7 \ ++ "x7", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", "x18" ++ ++#define LOAD_ARGS_0() \ ++ register long _x0 asm ("x0"); ++ ++#define ASM_ARGS_0 ++#define LOAD_ARGS_1(x0) \ ++ long _x0tmp = (long) (x0); \ ++ LOAD_ARGS_0 () \ ++ _x0 = _x0tmp; ++#define ASM_ARGS_1 "r" (_x0) ++#define LOAD_ARGS_2(x0, x1) \ ++ long _x1tmp = (long) (x1); \ ++ LOAD_ARGS_1 (x0) \ ++ register long _x1 asm ("x1") = _x1tmp; ++#define ASM_ARGS_2 ASM_ARGS_1, "r" (_x1) ++#define LOAD_ARGS_3(x0, x1, x2) \ ++ long _x2tmp = (long) (x2); \ ++ LOAD_ARGS_2 (x0, x1) \ ++ register long _x2 asm ("x2") = _x2tmp; ++#define ASM_ARGS_3 ASM_ARGS_2, "r" (_x2) ++#define LOAD_ARGS_4(x0, x1, x2, x3) \ ++ long _x3tmp = (long) (x3); \ ++ LOAD_ARGS_3 (x0, x1, x2) \ ++ register long _x3 asm ("x3") = _x3tmp; ++#define ASM_ARGS_4 ASM_ARGS_3, "r" (_x3) ++#define LOAD_ARGS_5(x0, x1, x2, x3, x4) \ ++ long _x4tmp = (long) (x4); \ ++ LOAD_ARGS_4 (x0, x1, x2, x3) \ ++ register long _x4 asm ("x4") = _x4tmp; ++#define ASM_ARGS_5 ASM_ARGS_4, "r" (_x4) ++#define LOAD_ARGS_6(x0, x1, x2, x3, x4, x5) \ ++ long _x5tmp = (long) (x5); \ ++ LOAD_ARGS_5 (x0, x1, x2, x3, x4) \ ++ register long _x5 asm ("x5") = _x5tmp; ++#define ASM_ARGS_6 ASM_ARGS_5, "r" (_x5) ++#define LOAD_ARGS_7(x0, x1, x2, x3, x4, x5, x6) \ ++ long _x6tmp = (long) (x6); \ ++ LOAD_ARGS_6 (x0, x1, x2, x3, x4, x5) \ ++ register long _x6 asm ("x6") = _x6tmp; ++#define ASM_ARGS_7 ASM_ARGS_6, "r" (_x6) ++ ++#undef INTERNAL_SYSCALL_NCS ++#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ ++ INTERNAL_SYSCALL_RAW (number, err, nr, args) ++ ++#endif /* __ASSEMBLER__ */ ++ ++/* Pointer mangling is not yet supported for AArch64. */ ++#define PTR_MANGLE(var) (void) (var) ++#define PTR_DEMANGLE(var) (void) (var) ++ ++#if !defined __NR_pread && defined __NR_pread64 ++# define __NR_pread __NR_pread64 ++#endif ++ ++#if !defined __NR_pwrite && defined __NR_pwrite64 ++# define __NR_pwrite __NR_pwrite64 ++#endif ++ ++#endif /* linux/aarch64/sysdep.h */ +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h 2012-09-24 13:01:08.000000000 +0100 +@@ -0,0 +1,45 @@ ++/* Copyright (C) 2009-2012 Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#define SP_ALIGN_SIZE 15 ++ ++#define SP_ALIGN_MASK ~15 ++ ++/* Size of an X regiser in bytes. */ ++#define SZREG 8 ++ ++/* Size of a V register in bytes. */ ++#define SZVREG 16 ++ ++/* Number of integer parameter passing registers. */ ++#define NUMXREGARGS 8 ++ ++/* Number of FP parameter passing registers. */ ++#define NUMDREGARGS 8 ++ ++/* Size of named integer argument in bytes when passed on the ++ stack. */ ++#define SIZEOF_NAMED_INT 4 ++ ++/* Size of an anonymous integer argument in bytes when passed on the ++ stack. */ ++#define SIZEOF_ANONYMOUS_INT 8 ++ ++#define oX21 (oX0 + 21*8) ++#define oFP (oX0 + 29*8) ++#define oLR (oX0 + 30*8) +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym glibc/ports/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym 2012-09-24 12:41:10.000000000 +0100 +@@ -0,0 +1,54 @@ ++#include ++#include ++#include ++#include ++#include ++ ++#include "kernel_rt_sigframe.h" ++ ++SIG_BLOCK ++SIG_SETMASK ++ ++_NSIG8 (_NSIG / 8) ++ ++-- Offsets of the fields in the kernel rt_sigframe_t structure. ++#define rt_sigframe(member) offsetof (struct kernel_rt_sigframe, member) ++ ++RT_SIGFRAME_UCONTEXT rt_sigframe (uc) ++ ++RT_SIGFRAME_SIZE sizeof (struct kernel_rt_sigframe) ++FPSIMD_CONTEXT_SIZE sizeof (struct fpsimd_context) ++ ++#define ucontext(member) offsetof (ucontext_t, member) ++#define stack(member) ucontext (uc_stack.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_SIZE sizeof (ucontext_t) ++ ++STACK_SP stack (ss_sp) ++STACK_SIZE stack (ss_size) ++STACK_FLAGS stack (ss_flags) ++ ++oX0 mcontext (regs) ++oSP mcontext (sp) ++oPC mcontext (pc) ++oEXTENSION mcontext (__reserved) ++ ++#define fpsimd_context(member) offsetof (struct fpsimd_context, member) ++ ++oHEAD fpsimd_context (head) ++oV0 fpsimd_context (vregs) ++oFPSR fpsimd_context (fpsr) ++oFPCR fpsimd_context (fpcr) ++ ++#define aarch64_ctx(member) offsetof (struct _aarch64_ctx, member) ++ ++oMAGIC aarch64_ctx (magic) ++oSIZE aarch64_ctx (size) ++ ++FPSIMD_MAGIC +diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/vfork.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/vfork.S +--- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/vfork.S 1970-01-01 01:00:00.000000000 +0100 ++++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/vfork.S 2012-09-24 13:01:26.000000000 +0100 +@@ -0,0 +1,50 @@ ++/* Copyright (C) 1999, 2002, 2003, 2005, 2009-2012 ++ Free Software Foundation, Inc. ++ ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public License as ++ published by the Free Software Foundation; either version 2.1 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#define _ERRNO_H 1 ++#include ++#include ++ ++/* 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 ++ mov x0, #0x4111 /* CLONE_VM | CLONE_VFORK | SIGCHLD */ ++ mov x1, sp ++ DO_CALL (clone, 2) ++#ifdef RESTORE_PID ++ RESTORE_PID ++#endif ++ cmn x0, #4095 ++ b.cs 1f ++ RET ++1: ++ b PLTJMP(SYSCALL_ERROR) ++ ++PSEUDO_END (__vfork) ++libc_hidden_def (__vfork) ++ ++weak_alias (__vfork, vfork) diff --git a/meta/recipes-core/eglibc/eglibc-2.16/aarch64-0002-Synchronize-with-linux-elf.h.patch b/meta/recipes-core/eglibc/eglibc-2.16/aarch64-0002-Synchronize-with-linux-elf.h.patch new file mode 100644 index 0000000000..390480b4ca --- /dev/null +++ b/meta/recipes-core/eglibc/eglibc-2.16/aarch64-0002-Synchronize-with-linux-elf.h.patch @@ -0,0 +1,40 @@ +Upstream-Status: backport + +Dropped ChangeLog part as it does not apply. + +From 2abe9f1507f971d1513a2d75a865ec4615d2d6b8 Mon Sep 17 00:00:00 2001 +From: Petr Machata +Date: Thu, 6 Sep 2012 12:41:14 -0700 +Subject: [PATCH] Synchronize with linux/elf.h. + +Add new ARM and s390 note constants e.g. NT_*. +--- + ChangeLog | 7 +++++++ + elf/elf.h | 9 +++++++++ + 2 files changed, 16 insertions(+) + +diff --git a/ChangeLog b/ChangeLog +index 7385bcb..986ed54 100644 +diff --git a/elf/elf.h b/elf/elf.h +index 6c85f92..41fc3bd 100644 +--- a/elf/elf.h ++++ b/elf/elf.h +@@ -622,6 +622,15 @@ typedef struct + #define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ + #define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */ + #define NT_X86_XSTATE 0x202 /* x86 extended state using xsave */ ++#define NT_S390_HIGH_GPRS 0x300 /* s390 upper register halves */ ++#define NT_S390_TIMER 0x301 /* s390 timer register */ ++#define NT_S390_TODCMP 0x302 /* s390 TOD clock comparator register */ ++#define NT_S390_TODPREG 0x303 /* s390 TOD programmable register */ ++#define NT_S390_CTRS 0x304 /* s390 control registers */ ++#define NT_S390_PREFIX 0x305 /* s390 prefix register */ ++#define NT_S390_LAST_BREAK 0x306 /* s390 breaking event address */ ++#define NT_S390_SYSTEM_CALL 0x307 /* s390 system call restart data */ ++#define NT_ARM_VFP 0x400 /* ARM VFP/NEON registers */ + + /* Legal values for the note segment descriptor types for object files. */ + +-- +1.8.0 + diff --git a/meta/recipes-core/eglibc/eglibc-2.16/aarch64-0003-Adding-AArch64-support-to-elf-elf.h.patch b/meta/recipes-core/eglibc/eglibc-2.16/aarch64-0003-Adding-AArch64-support-to-elf-elf.h.patch new file mode 100644 index 0000000000..1c547e4b8a --- /dev/null +++ b/meta/recipes-core/eglibc/eglibc-2.16/aarch64-0003-Adding-AArch64-support-to-elf-elf.h.patch @@ -0,0 +1,62 @@ +Upstream-Status: backport + +Dropped ChangeLog part as it does not apply. + +From 19b2ecfcae9ccd7f9a974e8d1869d45ecd7310bb Mon Sep 17 00:00:00 2001 +From: Marcus Shawcroft +Date: Wed, 7 Nov 2012 13:32:08 +0000 +Subject: [PATCH] Adding AArch64 support to elf/elf.h + +--- + ChangeLog | 12 ++++++++++++ + elf/elf.h | 18 ++++++++++++++++++ + 2 files changed, 30 insertions(+) + +diff --git a/ChangeLog b/ChangeLog +index aeebbc4..69593de 100644 +diff --git a/elf/elf.h b/elf/elf.h +index 2524924..5a9b13f 100644 +--- a/elf/elf.h ++++ b/elf/elf.h +@@ -249,6 +249,7 @@ typedef struct + #define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */ + #define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */ + #define EM_XTENSA 94 /* Tensilica Xtensa Architecture */ ++#define EM_AARCH64 183 /* ARM AARCH64 */ + #define EM_TILEPRO 188 /* Tilera TILEPro */ + #define EM_TILEGX 191 /* Tilera TILE-Gx */ + #define EM_NUM 192 +@@ -631,6 +632,9 @@ typedef struct + #define NT_S390_LAST_BREAK 0x306 /* s390 breaking event address */ + #define NT_S390_SYSTEM_CALL 0x307 /* s390 system call restart data */ + #define NT_ARM_VFP 0x400 /* ARM VFP/NEON registers */ ++#define NT_ARM_TLS 0x401 /* ARM TLS register */ ++#define NT_ARM_HW_BREAK 0x402 /* ARM hardware breakpoint registers */ ++#define NT_ARM_HW_WATCH 0x403 /* ARM hardware watchpoint registers */ + + /* Legal values for the note segment descriptor types for object files. */ + +@@ -2306,6 +2310,20 @@ typedef Elf32_Addr Elf32_Conflict; + #define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) /* ARM attributes section. */ + + ++/* AArch64 specific declarations. */ ++ ++#define R_AARCH64_NONE 0 /* No relocation. */ ++#define R_AARCH64_ABS64 257 /* Direct 64 bit. */ ++#define R_AARCH64_ABS32 258 /* Direct 32 bit. */ ++#define R_AARCH64_COPY 1024 /* Copy symbol at runtime. */ ++#define R_AARCH64_GLOB_DAT 1025 /* Create GOT entry. */ ++#define R_AARCH64_JUMP_SLOT 1026 /* Create PLT entry. */ ++#define R_AARCH64_RELATIVE 1027 /* Adjust by program base. */ ++#define R_AARCH64_TLS_DTPMOD64 1028 /* Module number, 64 bit. */ ++#define R_AARCH64_TLS_DTPREL64 1029 /* Module-relative offset, 64 bit. */ ++#define R_AARCH64_TLS_TPREL64 1030 /* TP-relative offset, 64 bit. */ ++#define R_AARCH64_TLSDESC 1031 /* TLS Descriptor. */ ++ + /* ARM relocs. */ + + #define R_ARM_NONE 0 /* No reloc */ +-- +1.8.0 + diff --git a/meta/recipes-core/eglibc/eglibc-2.16/aarch64-glibc-fsf-v1-eaf6f205.patch b/meta/recipes-core/eglibc/eglibc-2.16/aarch64-glibc-fsf-v1-eaf6f205.patch deleted file mode 100644 index f0c3b74175..0000000000 --- a/meta/recipes-core/eglibc/eglibc-2.16/aarch64-glibc-fsf-v1-eaf6f205.patch +++ /dev/null @@ -1,15455 +0,0 @@ -import http://sourceware.org/ml/libc-alpha/2012-10/msg00008.html - -Upstream-Status: merged into trunk -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/Implies glibc/ports/sysdeps/aarch64/Implies ---- glibc.orig/ports/sysdeps/aarch64/Implies 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/Implies 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,6 @@ -+wordsize-64 -+ieee754/ldbl-128 -+ieee754/dbl-64/wordsize-64 -+ieee754/dbl-64 -+ieee754/flt-32 -+aarch64/soft-fp -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/Makefile glibc/ports/sysdeps/aarch64/Makefile ---- glibc.orig/ports/sysdeps/aarch64/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/Makefile 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,21 @@ -+long-double-fcts = yes -+ -+ifeq ($(subdir),debug) -+CFLAGS-backtrace.c += -funwind-tables -+CFLAGS-tst-backtrace2.c += -funwind-tables -+CFLAGS-tst-backtrace3.c += -funwind-tables -+CFLAGS-tst-backtrace4.c += -funwind-tables -+CFLAGS-tst-backtrace5.c += -funwind-tables -+CFLAGS-tst-backtrace6.c += -funwind-tables -+endif -+ -+ifeq ($(subdir),elf) -+sysdep-dl-routines += tlsdesc dl-tlsdesc -+sysdep_routines += tlsdesc dl-tlsdesc -+sysdep-rtld-routines += tlsdesc dl-tlsdesc -+gen-as-const-headers += dl-link.sym -+endif -+ -+ifeq ($(subdir),csu) -+gen-as-const-headers += tlsdesc.sym -+endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/__longjmp.S glibc/ports/sysdeps/aarch64/__longjmp.S ---- glibc.orig/ports/sysdeps/aarch64/__longjmp.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/__longjmp.S 2012-09-24 13:01:47.000000000 +0100 -@@ -0,0 +1,102 @@ -+/* Copyright (C) 1997, 1998, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library. If not, see -+ . */ -+ -+#include -+#include -+ -+/* __longjmp(jmpbuf, val) */ -+ -+ENTRY (__longjmp) -+#ifdef CHECK_SP -+ ldr x5, [x0, #JB_SP<<3] -+ CHECK_SP (x5) -+#endif -+ cfi_def_cfa(x0, 0) -+ cfi_offset(x19, JB_X19<<3) -+ cfi_offset(x20, JB_X20<<3) -+ cfi_offset(x21, JB_X21<<3) -+ cfi_offset(x22, JB_X22<<3) -+ cfi_offset(x23, JB_X23<<3) -+ cfi_offset(x24, JB_X24<<3) -+ cfi_offset(x25, JB_X25<<3) -+ cfi_offset(x26, JB_X26<<3) -+ cfi_offset(x27, JB_X27<<3) -+ cfi_offset(x28, JB_X28<<3) -+ cfi_offset(x29, JB_X29<<3) -+ cfi_offset(x30, JB_LR<<3) -+ -+ cfi_offset( d8, JB_D8<<3) -+ cfi_offset( d9, JB_D9<<3) -+ cfi_offset(d10, JB_D10<<3) -+ cfi_offset(d11, JB_D11<<3) -+ cfi_offset(d12, JB_D12<<3) -+ cfi_offset(d13, JB_D13<<3) -+ cfi_offset(d14, JB_D14<<3) -+ cfi_offset(d15, JB_D15<<3) -+ -+ ldp x19, x20, [x0, #JB_X19<<3] -+ ldp x21, x22, [x0, #JB_X21<<3] -+ ldp x23, x24, [x0, #JB_X23<<3] -+ ldp x25, x26, [x0, #JB_X25<<3] -+ ldp x27, x28, [x0, #JB_X27<<3] -+ ldp x29, x30, [x0, #JB_X29<<3] -+ -+ ldp d8, d9, [x0, #JB_D8<<3] -+ ldp d10, d11, [x0, #JB_D10<<3] -+ ldp d12, d13, [x0, #JB_D12<<3] -+ ldp d14, d15, [x0, #JB_D14<<3] -+ -+ /* Originally this was implemented with a series of -+ .cfi_restore() directives. -+ -+ The theory was that cfi_restore should revert to previous -+ frame value is the same as the current value. In practice -+ this doesn't work, even after cfi_restore() gdb continues -+ to try to recover a previous frame value offset from x0, -+ which gets stuffed after a few more instructions. The -+ cfi_same_value() mechanism appears to work fine. */ -+ -+ cfi_same_value(x19) -+ cfi_same_value(x20) -+ cfi_same_value(x21) -+ cfi_same_value(x22) -+ cfi_same_value(x23) -+ cfi_same_value(x24) -+ cfi_same_value(x25) -+ cfi_same_value(x26) -+ cfi_same_value(x27) -+ cfi_same_value(x28) -+ cfi_same_value(x29) -+ cfi_same_value(x30) -+ cfi_same_value(d8) -+ cfi_same_value(d9) -+ cfi_same_value(d10) -+ cfi_same_value(d11) -+ cfi_same_value(d12) -+ cfi_same_value(d13) -+ cfi_same_value(d14) -+ cfi_same_value(d15) -+ -+ ldr x5, [x0, #JB_SP<<3] -+ mov sp, x5 -+ cmp x1, #0 -+ mov x0, #1 -+ csel x0, x1, x0, ne -+ /* Use br instead of ret because ret is guaranteed to mispredict */ -+ br x30 -+END (__longjmp) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/backtrace.c glibc/ports/sysdeps/aarch64/backtrace.c ---- glibc.orig/ports/sysdeps/aarch64/backtrace.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/backtrace.c 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1 @@ -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/atomic.h glibc/ports/sysdeps/aarch64/bits/atomic.h ---- glibc.orig/ports/sysdeps/aarch64/bits/atomic.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/bits/atomic.h 2012-09-24 13:02:01.000000000 +0100 -@@ -0,0 +1,109 @@ -+/* Copyright (C) 2003, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library. If not, see -+ . */ -+ -+#ifndef _AARCH64_BITS_ATOMIC_H -+#define _AARCH64_BITS_ATOMIC_H 1 -+ -+#include -+ -+typedef int8_t atomic8_t; -+typedef int16_t atomic16_t; -+typedef int32_t atomic32_t; -+typedef int64_t atomic64_t; -+ -+typedef uint8_t uatomic8_t; -+typedef uint16_t uatomic16_t; -+typedef uint32_t uatomic32_t; -+typedef uint64_t uatomic64_t; -+ -+typedef intptr_t atomicptr_t; -+typedef uintptr_t uatomicptr_t; -+typedef intmax_t atomic_max_t; -+typedef uintmax_t uatomic_max_t; -+ -+#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \ -+ (!__sync_bool_compare_and_swap ((mem), (oldval), (newval))) -+ -+#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval) \ -+ (!__sync_bool_compare_and_swap ((mem), (oldval), (newval))) -+ -+#define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \ -+ (!__sync_bool_compare_and_swap ((mem), (oldval), (newval))) -+ -+#define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \ -+ (!__sync_bool_compare_and_swap ((mem), (oldval), (newval))) -+ -+#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \ -+ __sync_val_compare_and_swap ((mem), (oldval), (newval)) -+ -+#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \ -+ __sync_val_compare_and_swap ((mem), (oldval), (newval)) -+ -+#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ -+ __sync_val_compare_and_swap ((mem), (oldval), (newval)) -+ -+#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ -+ __sync_val_compare_and_swap ((mem), (oldval), (newval)) -+ -+/* Atomically store newval and return the old value. */ -+#define atomic_exchange_acq(mem, value) \ -+ __sync_lock_test_and_set (mem, value) -+ -+#define atomic_exchange_rel(mem, value) \ -+ (__sync_synchronize (), __sync_lock_test_and_set (mem, value)) -+ -+#define atomic_exchange_and_add(mem, value) \ -+ ({ __typeof (*mem) __result; \ -+ __result = __sync_fetch_and_add ((mem), (int) (value)); \ -+ __result; }) -+ -+#define atomic_decrement_if_positive(mem) \ -+ ({ __typeof (*mem) __oldval, __val; \ -+ __typeof (mem) __memp = (mem); \ -+ \ -+ __val = (*__memp); \ -+ do \ -+ { \ -+ __oldval = __val; \ -+ if (__builtin_expect (__val <= 0, 0)) \ -+ break; \ -+ __val = atomic_compare_and_exchange_val_acq (__memp, __oldval - 1, \ -+ __oldval); \ -+ } \ -+ while (__builtin_expect (__val != __oldval, 0)); \ -+ __oldval; }) -+ -+#define atomic_bit_test_set(mem, bit) \ -+ ({ __typeof (*mem) __oldval, __val; \ -+ __typeof (mem) __memp = (mem); \ -+ __typeof (*mem) __mask = ((__typeof (*mem)) 1 << (bit)); \ -+ \ -+ __val = (*__memp); \ -+ do \ -+ { \ -+ __oldval = __val; \ -+ __val = atomic_compare_and_exchange_val_acq (__memp, \ -+ __oldval | __mask, \ -+ __oldval); \ -+ } \ -+ while (__builtin_expect (__val != __oldval, 0)); \ -+ __oldval & __mask; }) -+ -+#define atomic_full_barrier() __sync_synchronize () -+ -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/endian.h glibc/ports/sysdeps/aarch64/bits/endian.h ---- glibc.orig/ports/sysdeps/aarch64/bits/endian.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/bits/endian.h 2012-09-24 13:02:10.000000000 +0100 -@@ -0,0 +1,30 @@ -+/* Copyright (C) 1997, 1998, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library. If not, see -+ . */ -+ -+#ifndef _ENDIAN_H -+# error "Never use directly; include instead." -+#endif -+ -+/* AArch64 can be either big or little endian. */ -+#ifdef __AARCH64EB__ -+#define __BYTE_ORDER __BIG_ENDIAN -+#else -+#define __BYTE_ORDER __LITTLE_ENDIAN -+#endif -+ -+#define __FLOAT_WORD_ORDER __BYTE_ORDER -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/fenv.h glibc/ports/sysdeps/aarch64/bits/fenv.h ---- glibc.orig/ports/sysdeps/aarch64/bits/fenv.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/bits/fenv.h 2012-09-24 13:02:18.000000000 +0100 -@@ -0,0 +1,61 @@ -+/* Copyright (C) 2004, 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _FENV_H -+# error "Never use directly; include instead." -+#endif -+ -+/* Define bits representing exceptions in the FPSR status word. */ -+#define FE_INVALID 1 -+#define FE_DIVBYZERO 2 -+#define FE_OVERFLOW 4 -+#define FE_UNDERFLOW 8 -+#define FE_INEXACT 16 -+ -+/* Amount to shift by to convert an exception bit in FPSR to a an -+ exception bit mask in FPCR. */ -+#define FE_EXCEPT_SHIFT 8 -+ -+/* All supported exceptions. */ -+#define FE_ALL_EXCEPT \ -+ (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) -+ -+/* Define bits representing rounding modes in the FPCR Rmode field. */ -+#define FE_TONEAREST 0x000000 -+#define FE_UPWARD 0x400000 -+#define FE_DOWNWARD 0x800000 -+#define FE_TOWARDZERO 0xc00000 -+ -+/* Type representing exception flags. */ -+typedef unsigned int fexcept_t; -+ -+/* Type representing floating-point environment. */ -+typedef struct -+ { -+ unsigned int fpcr; -+ unsigned int fpsr; -+ } -+fenv_t; -+ -+/* If the default argument is used we use this value. */ -+#define FE_DFL_ENV ((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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/link.h glibc/ports/sysdeps/aarch64/bits/link.h ---- glibc.orig/ports/sysdeps/aarch64/bits/link.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/bits/link.h 2012-09-24 13:02:25.000000000 +0100 -@@ -0,0 +1,60 @@ -+/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _LINK_H -+# error "Never include directly; use instead." -+#endif -+ -+/* Registers for entry into PLT on AArch64. */ -+typedef struct La_aarch64_regs -+{ -+ uint64_t lr_xreg[8]; -+ uint64_t lr_dreg[8]; -+ uint64_t lr_sp; -+ uint64_t lr_lr; -+} La_aarch64_regs; -+ -+/* Return values for calls from PLT on AArch64. */ -+typedef struct La_aarch64_retval -+{ -+ /* Up to two integer registers can be used for a return value. */ -+ uint64_t lrv_xreg[2]; -+ /* Up to four D registers can be used for a return value. */ -+ uint64_t lrv_dreg[4]; -+ -+} La_aarch64_retval; -+__BEGIN_DECLS -+ -+extern Elf64_Addr -+la_aarch64_gnu_pltenter (Elf64_Sym *__sym, unsigned int __ndx, -+ uintptr_t *__refcook, -+ uintptr_t *__defcook, -+ La_aarch64_regs *__regs, -+ unsigned int *__flags, -+ const char *__symname, -+ long int *__framesizep); -+ -+extern unsigned int -+la_aarch64_gnu_pltexit (Elf64_Sym *__sym, unsigned int __ndx, -+ uintptr_t *__refcook, -+ uintptr_t *__defcook, -+ const La_aarch64_regs *__inregs, -+ La_aarch64_retval *__outregs, -+ const char *__symname); -+ -+__END_DECLS -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/linkmap.h glibc/ports/sysdeps/aarch64/bits/linkmap.h ---- glibc.orig/ports/sysdeps/aarch64/bits/linkmap.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/bits/linkmap.h 2012-09-24 13:02:41.000000000 +0100 -@@ -0,0 +1,23 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+struct link_map_machine -+{ -+ ElfW(Addr) plt; /* Address of .plt */ -+ void *tlsdesc_table; /* Address of TLS descriptor hash table. */ -+}; -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/mathdef.h glibc/ports/sysdeps/aarch64/bits/mathdef.h ---- glibc.orig/ports/sysdeps/aarch64/bits/mathdef.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/bits/mathdef.h 2012-09-24 13:02:49.000000000 +0100 -@@ -0,0 +1,51 @@ -+/* Copyright (C) 1999, 2000, 2004, 2006, 2007, 2010-2012 -+ Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#if !defined _MATH_H && !defined _COMPLEX_H -+# error "Never use directly; include 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 */ -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bits/setjmp.h glibc/ports/sysdeps/aarch64/bits/setjmp.h ---- glibc.orig/ports/sysdeps/aarch64/bits/setjmp.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/bits/setjmp.h 2012-09-24 13:03:03.000000000 +0100 -@@ -0,0 +1,34 @@ -+/* Copyright (C) 1997, 1998, 2005, 2006, 2009-2012 -+ Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _BITS_SETJMP_H -+#define _BITS_SETJMP_H 1 -+ -+#if !defined _SETJMP_H && !defined _PTHREAD_H -+# error "Never include directly; use instead." -+#endif -+ -+#ifndef _ASM -+/* Jump buffer contains: -+ x19-x28, x29(fp), x30(lr), (x31)sp, d8-d15. Other registers are not -+ saved. */ -+typedef unsigned long long __jmp_buf [22]; -+ -+#endif -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bsd-_setjmp.S glibc/ports/sysdeps/aarch64/bsd-_setjmp.S ---- glibc.orig/ports/sysdeps/aarch64/bsd-_setjmp.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/bsd-_setjmp.S 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1 @@ -+/* _setjmp is in setjmp.S */ -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/bsd-setjmp.S glibc/ports/sysdeps/aarch64/bsd-setjmp.S ---- glibc.orig/ports/sysdeps/aarch64/bsd-setjmp.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/bsd-setjmp.S 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1 @@ -+/* setjmp is in setjmp.S */ -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/crti.S glibc/ports/sysdeps/aarch64/crti.S ---- glibc.orig/ports/sysdeps/aarch64/crti.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/crti.S 2012-09-24 13:03:14.000000000 +0100 -@@ -0,0 +1,90 @@ -+/* Special .init and .fini section support for AArch64. -+ Copyright (C) 1995-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser 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 -+ . */ -+ -+/* 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. */ -+ -+#include -+ -+#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 -+ .align 2 -+ .type call_weak_fn, %function -+call_weak_fn: -+ adrp x0, :got:PREINIT_FUNCTION -+ ldr x0, [x0, #:got_lo12:PREINIT_FUNCTION] -+ cbz x0, 1f -+ b PREINIT_FUNCTION -+1: -+ RET -+ .size call_weak_fn, .-call_weak_fn -+#endif -+ -+ .section .init,"ax",%progbits -+ .align 2 -+ .global _init -+ .type _init, %function -+_init: -+ stp x29, x30, [sp, -16]! -+ mov x29, sp -+#if PREINIT_FUNCTION_WEAK -+ bl call_weak_fn -+#else -+ bl PREINIT_FUNCTION -+#endif -+ -+ .section .fini,"ax",%progbits -+ .align 2 -+ .global _fini -+ .type _fini, %function -+_fini: -+ stp x29, x30, [sp, -16]! -+ mov x29, sp -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/crtn.S glibc/ports/sysdeps/aarch64/crtn.S ---- glibc.orig/ports/sysdeps/aarch64/crtn.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/crtn.S 2012-09-24 13:03:18.000000000 +0100 -@@ -0,0 +1,46 @@ -+/* Special .init and .fini section support for AArch64. -+ Copyright (C) 1995-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser 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 -+ . */ -+ -+/* crtn.S puts function epilogues in the .init and .fini sections -+ corresponding to the prologues in crti.S. */ -+ -+ .section .init,"ax",%progbits -+ ldp x29, x30, [sp], 16 -+ RET -+ -+ .section .fini,"ax",%progbits -+ ldp x29, x30, [sp], 16 -+ RET -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-irel.h glibc/ports/sysdeps/aarch64/dl-irel.h ---- glibc.orig/ports/sysdeps/aarch64/dl-irel.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/dl-irel.h 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,36 @@ -+/* Machine-dependent ELF indirect relocation inline functions. -+ AArch64 version. -+ Copyright (C) 2012 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _DL_IREL_H -+#define _DL_IREL_H -+ -+#include -+#include -+ -+/* AArch64 does not yet implement IFUNC support. However since -+ 2011-06-20 provision of a elf_ifunc_invoke has been mandatory. */ -+ -+static inline ElfW(Addr) -+__attribute ((always_inline)) -+elf_ifunc_invoke (ElfW(Addr) addr) -+{ -+ return ((ElfW(Addr) (*) (void)) (addr)) (); -+} -+ -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-link.sym glibc/ports/sysdeps/aarch64/dl-link.sym ---- glibc.orig/ports/sysdeps/aarch64/dl-link.sym 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/dl-link.sym 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,15 @@ -+#include -+#include -+#include -+#include -+ -+DL_SIZEOF_RG sizeof(struct La_aarch64_regs) -+DL_SIZEOF_RV sizeof(struct La_aarch64_retval) -+ -+DL_OFFSET_RG_X0 offsetof(struct La_aarch64_regs, lr_xreg) -+DL_OFFSET_RG_D0 offsetof(struct La_aarch64_regs, lr_dreg) -+DL_OFFSET_RG_SP offsetof(struct La_aarch64_regs, lr_sp) -+DL_OFFSET_RG_LR offsetof(struct La_aarch64_regs, lr_lr) -+ -+DL_OFFSET_RV_X0 offsetof(struct La_aarch64_retval, lrv_xreg) -+DL_OFFSET_RV_D0 offsetof(struct La_aarch64_retval, lrv_dreg) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-machine.h glibc/ports/sysdeps/aarch64/dl-machine.h ---- glibc.orig/ports/sysdeps/aarch64/dl-machine.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/dl-machine.h 2012-09-24 13:04:02.000000000 +0100 -@@ -0,0 +1,388 @@ -+/* Copyright (C) 1995-2006, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef dl_machine_h -+#define dl_machine_h -+ -+#define ELF_MACHINE_NAME "aarch64" -+ -+#include -+#include -+ -+/* Return nonzero iff ELF header is compatible with the running host. */ -+static inline int __attribute__ ((unused)) -+elf_machine_matches_host (const ElfW(Ehdr) *ehdr) -+{ -+ return ehdr->e_machine == EM_AARCH64; -+} -+ -+/* Return the link-time address of _DYNAMIC. Conveniently, this is the -+ first element of the GOT. */ -+static inline ElfW(Addr) __attribute__ ((unused)) -+elf_machine_dynamic (void) -+{ -+ ElfW(Addr) addr = (ElfW(Addr)) &_DYNAMIC; -+ return addr; -+} -+ -+/* Return the run-time load address of the shared object. */ -+ -+static inline ElfW(Addr) __attribute__ ((unused)) -+elf_machine_load_address (void) -+{ -+ /* To figure out the load address we use the definition that for any symbol: -+ dynamic_addr(symbol) = static_addr(symbol) + load_addr -+ -+ The choice of symbol is arbitrary. The static address we obtain -+ by constructing a non GOT reference to the symbol, the dynamic -+ address of the symbol we compute using adrp/add to compute the -+ symbol's address relative to the PC. */ -+ -+ ElfW(Addr) static_addr; -+ ElfW(Addr) dynamic_addr; -+ -+ asm (" \n\ -+ adrp %1, _dl_start; \n\ -+ add %1, %1, #:lo12:_dl_start \n\ -+ ldr %w0, 1f \n\ -+ b 2f \n\ -+1: .word _dl_start \n\ -+2: \n\ -+ " : "=r" (static_addr), "=r" (dynamic_addr)); -+ return dynamic_addr - static_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) -+{ -+ if (l->l_info[DT_JMPREL] && lazy) -+ { -+ ElfW(Addr) *got; -+ extern void _dl_runtime_resolve (ElfW(Word)); -+ extern void _dl_runtime_profile (ElfW(Word)); -+ -+ got = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]); -+ if (got[1]) -+ { -+ l->l_mach.plt = got[1] + l->l_addr; -+ } -+ got[1] = (ElfW(Addr)) l; -+ -+ /* 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] = (ElfW(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] = (ElfW(Addr)) &_dl_runtime_resolve; -+ } -+ } -+ -+ if (l->l_info[ADDRIDX (DT_TLSDESC_GOT)] && lazy) -+ *(Elf64_Addr*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_GOT)]) + l->l_addr) -+ = (Elf64_Addr) &_dl_tlsdesc_resolve_rela; -+ -+ return lazy; -+} -+ -+/* Initial entry point 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\ -+ mov x0, sp \n\ -+ bl _dl_start \n\ -+ // returns user entry point in x0 \n\ -+ mov x21, x0 \n\ -+_dl_start_user: \n\ -+ // get the original arg count \n\ -+ ldr x1, [sp] \n\ -+ // get the argv address \n\ -+ add x2, sp, #8 \n\ -+ // get _dl_skip_args to see if we were \n\ -+ // invoked as an executable \n\ -+ adrp x4, _dl_skip_args \n\ -+ ldr w4, [x4, #:lo12:_dl_skip_args] \n\ -+ // do we need to adjust argc/argv \n\ -+ cmp w4, 0 \n\ -+ beq .L_done_stack_adjust \n\ -+ // subtract _dl_skip_args from original arg count \n\ -+ sub x1, x1, x4 \n\ -+ // store adjusted argc back to stack \n\ -+ str x1, [sp] \n\ -+ // find the first unskipped argument \n\ -+ mov x3, x2 \n\ -+ add x4, x2, x4, lsl #3 \n\ -+ // shuffle argv down \n\ -+1: ldr x5, [x4], #8 \n\ -+ str x5, [x3], #8 \n\ -+ cmp x5, #0 \n\ -+ bne 1b \n\ -+ // shuffle envp down \n\ -+1: ldr x5, [x4], #8 \n\ -+ str x5, [x3], #8 \n\ -+ cmp x5, #0 \n\ -+ bne 1b \n\ -+ // shuffle auxv down \n\ -+1: ldp x0, x5, [x4, #16]! \n\ -+ stp x0, x5, [x3], #16 \n\ -+ cmp x0, #0 \n\ -+ bne 1b \n\ -+ // Update _dl_argv \n\ -+ adrp x3, _dl_argv \n\ -+ str x2, [x3, #:lo12:_dl_argv] \n\ -+.L_done_stack_adjust: \n\ -+ // compute envp \n\ -+ add x3, x2, x1, lsl #3 \n\ -+ add x3, x3, #8 \n\ -+ adrp x16, _rtld_local \n\ -+ add x16, x16, #:lo12:_rtld_local \n\ -+ ldr x0, [x16] \n\ -+ bl _dl_init_internal \n\ -+ // load the finalizer function \n\ -+ adrp x0, _dl_fini \n\ -+ add x0, x0, #:lo12:_dl_fini \n\ -+ // jump to the user_s entry point \n\ -+ br x21 \n\ -+"); -+ -+#define elf_machine_type_class(type) \ -+ ((((type) == R_AARCH64_JUMP_SLOT || \ -+ (type) == R_AARCH64_TLS_DTPMOD64 || \ -+ (type) == R_AARCH64_TLS_DTPREL64 || \ -+ (type) == R_AARCH64_TLS_TPREL64 || \ -+ (type) == R_AARCH64_TLSDESC) * ELF_RTYPE_CLASS_PLT) \ -+ | (((type) == R_AARCH64_COPY) * ELF_RTYPE_CLASS_COPY)) -+ -+#define ELF_MACHINE_JMP_SLOT R_AARCH64_JUMP_SLOT -+ -+/* AArch64 uses RELA not REL */ -+#define ELF_MACHINE_NO_REL 1 -+ -+static inline ElfW(Addr) -+elf_machine_fixup_plt (struct link_map *map, lookup_t t, -+ const ElfW(Rela) *reloc, -+ ElfW(Addr) *reloc_addr, -+ ElfW(Addr) value) -+{ -+ return *reloc_addr = value; -+} -+ -+/* Return the final value of a plt relocation. */ -+static inline ElfW(Addr) -+elf_machine_plt_value (struct link_map *map, -+ const ElfW(Rela) *reloc, -+ ElfW(Addr) value) -+{ -+ return value; -+} -+ -+#endif -+ -+/* Names of the architecture-specific auditing callback functions. */ -+#define ARCH_LA_PLTENTER aarch64_gnu_pltenter -+#define ARCH_LA_PLTEXIT aarch64_gnu_pltexit -+ -+#ifdef RESOLVE_MAP -+ -+auto inline void -+__attribute__ ((always_inline)) -+elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, -+ const ElfW(Sym) *sym, const struct r_found_version *version, -+ void *const reloc_addr_arg, int skip_ifunc) -+{ -+ ElfW(Addr) *const reloc_addr = reloc_addr_arg; -+ const unsigned int r_type = ELF64_R_TYPE (reloc->r_info); -+ -+ if (__builtin_expect (r_type == R_AARCH64_RELATIVE, 0)) -+ *reloc_addr = map->l_addr + reloc->r_addend; -+ else if (__builtin_expect (r_type == R_AARCH64_NONE, 0)) -+ return; -+ else -+ { -+ const ElfW(Sym) *const refsym = sym; -+ struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); -+ ElfW(Addr) value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; -+ -+ switch (r_type) -+ { -+ case R_AARCH64_COPY: -+ if (sym == NULL) -+ 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_AARCH64_RELATIVE: -+ case R_AARCH64_GLOB_DAT: -+ case R_AARCH64_JUMP_SLOT: -+ case R_AARCH64_ABS32: -+ case R_AARCH64_ABS64: -+ *reloc_addr = value + reloc->r_addend; -+ break; -+ -+ case R_AARCH64_TLSDESC: -+ { -+ struct tlsdesc volatile *td = -+ (struct tlsdesc volatile *)reloc_addr; -+# ifndef RTLD_BOOTSTRAP -+ if (! sym) -+ { -+ td->arg = (void*)reloc->r_addend; -+ td->entry = _dl_tlsdesc_undefweak; -+ } -+ else -+#endif -+ { -+#ifndef RTLD_BOOTSTRAP -+#ifndef SHARED -+ CHECK_STATIC_TLS (map, sym_map); -+#else -+ if (!TRY_STATIC_TLS (map, sym_map)) -+ { -+ td->arg = _dl_make_tlsdesc_dynamic -+ (sym_map, sym->st_value + reloc->r_addend); -+ td->entry = _dl_tlsdesc_dynamic; -+ } -+ else -+#endif -+#endif -+ { -+ td->arg = (void*)(sym->st_value + sym_map->l_tls_offset -+ + reloc->r_addend); -+ td->entry = _dl_tlsdesc_return; -+ } -+ } -+ break; -+ } -+ -+ case R_AARCH64_TLS_DTPMOD64: -+#ifdef RTLD_BOOTSTRAP -+ *reloc_addr = 1; -+#else -+ if (sym_map != NULL) -+ { -+ *reloc_addr = sym_map->l_tls_modid; -+ } -+#endif -+ break; -+ -+ case R_AARCH64_TLS_DTPREL64: -+ if (sym) -+ { -+ const char *strtab; -+ strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); -+ *reloc_addr = sym->st_value + reloc->r_addend; -+ } -+ break; -+ -+ case R_AARCH64_TLS_TPREL64: -+ if (sym) -+ { -+ const char *strtab; -+ strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); -+ CHECK_STATIC_TLS (map, sym_map); -+ *reloc_addr = -+ sym->st_value + reloc->r_addend + sym_map->l_tls_offset; -+ } -+ break; -+ -+ default: -+ _dl_reloc_bad_type (map, r_type, 0); -+ break; -+ } -+ } -+} -+ -+inline void -+__attribute__ ((always_inline)) -+elf_machine_rela_relative (ElfW(Addr) l_addr, -+ const ElfW(Rela) *reloc, -+ void *const reloc_addr_arg) -+{ -+ ElfW(Addr) *const reloc_addr = reloc_addr_arg; -+ *reloc_addr = l_addr + reloc->r_addend; -+} -+ -+inline void -+__attribute__ ((always_inline)) -+elf_machine_lazy_rel (struct link_map *map, -+ ElfW(Addr) l_addr, -+ const ElfW(Rela) *reloc, -+ int skip_ifunc) -+{ -+ ElfW(Addr) *const reloc_addr = (void *) (l_addr + reloc->r_offset); -+ const unsigned int r_type = ELF64_R_TYPE (reloc->r_info); -+ /* Check for unexpected PLT reloc type. */ -+ if (__builtin_expect (r_type == R_AARCH64_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_AARCH64_TLSDESC, 1)) -+ { -+ struct tlsdesc volatile *td = -+ (struct tlsdesc volatile *)reloc_addr; -+ -+ td->arg = (void*)reloc; -+ 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 -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-sysdep.h glibc/ports/sysdeps/aarch64/dl-sysdep.h ---- glibc.orig/ports/sysdeps/aarch64/dl-sysdep.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/dl-sysdep.h 2012-09-24 13:04:19.000000000 +0100 -@@ -0,0 +1,23 @@ -+/* Copyright (C) 2002-2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include_next -+ -+/* _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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-tls.h glibc/ports/sysdeps/aarch64/dl-tls.h ---- glibc.orig/ports/sysdeps/aarch64/dl-tls.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/dl-tls.h 2012-09-24 13:04:28.000000000 +0100 -@@ -0,0 +1,30 @@ -+/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+/* Type used for the representation of TLS information in the GOT. */ -+typedef struct -+{ -+ unsigned long int ti_module; -+ unsigned long int ti_offset; -+} tls_index; -+ -+ -+extern void *__tls_get_addr (tls_index *ti); -+ -+/* Value used for dtv entries for which the allocation is delayed. */ -+#define TLS_DTV_UNALLOCATED ((void *) -1l) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-tlsdesc.S glibc/ports/sysdeps/aarch64/dl-tlsdesc.S ---- glibc.orig/ports/sysdeps/aarch64/dl-tlsdesc.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/dl-tlsdesc.S 2012-09-24 13:04:40.000000000 +0100 -@@ -0,0 +1,329 @@ -+/* Thread-local storage handling in the ELF dynamic linker. -+ AArch64 version. -+ Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include "tlsdesc.h" -+ -+#define NSAVEDQREGPAIRS 16 -+#define SAVE_Q_REGISTERS \ -+ stp q0, q1, [sp, #-32*NSAVEDQREGPAIRS]!; \ -+ cfi_adjust_cfa_offset (32*NSAVEDQREGPAIRS); \ -+ stp q2, q3, [sp, #32*1]; \ -+ stp q4, q5, [sp, #32*2]; \ -+ stp q6, q7, [sp, #32*3]; \ -+ stp q8, q9, [sp, #32*4]; \ -+ stp q10, q11, [sp, #32*5]; \ -+ stp q12, q13, [sp, #32*6]; \ -+ stp q14, q15, [sp, #32*7]; \ -+ stp q16, q17, [sp, #32*8]; \ -+ stp q18, q19, [sp, #32*9]; \ -+ stp q20, q21, [sp, #32*10]; \ -+ stp q22, q23, [sp, #32*11]; \ -+ stp q24, q25, [sp, #32*12]; \ -+ stp q26, q27, [sp, #32*13]; \ -+ stp q28, q29, [sp, #32*14]; \ -+ stp q30, q31, [sp, #32*15]; -+ -+#define RESTORE_Q_REGISTERS \ -+ ldp q2, q3, [sp, #32*1]; \ -+ ldp q4, q5, [sp, #32*2]; \ -+ ldp q6, q7, [sp, #32*3]; \ -+ ldp q8, q9, [sp, #32*4]; \ -+ ldp q10, q11, [sp, #32*5]; \ -+ ldp q12, q13, [sp, #32*6]; \ -+ ldp q14, q15, [sp, #32*7]; \ -+ ldp q16, q17, [sp, #32*8]; \ -+ ldp q18, q19, [sp, #32*9]; \ -+ ldp q20, q21, [sp, #32*10]; \ -+ ldp q22, q23, [sp, #32*11]; \ -+ ldp q24, q25, [sp, #32*12]; \ -+ ldp q26, q27, [sp, #32*13]; \ -+ ldp q28, q29, [sp, #32*14]; \ -+ ldp q30, q31, [sp, #32*15]; \ -+ ldp q0, q1, [sp], #32*NSAVEDQREGPAIRS; \ -+ cfi_adjust_cfa_offset (-32*NSAVEDQREGPAIRS); -+ -+ .text -+ -+ /* Compute the thread pointer offset for symbols in the static -+ TLS block. The offset is the same for all threads. -+ Prototype: -+ _dl_tlsdesc_return (tlsdesc *) ; -+ */ -+ .hidden _dl_tlsdesc_return -+ .global _dl_tlsdesc_return -+ .type _dl_tlsdesc_return,%function -+ cfi_startproc -+ .align 2 -+_dl_tlsdesc_return: -+ ldr x0, [x0, #8] -+ RET -+ cfi_endproc -+ .size _dl_tlsdesc_return, .-_dl_tlsdesc_return -+ -+ /* Handler for undefined weak TLS symbols. -+ Prototype: -+ _dl_tlsdesc_undefweak (tlsdesc *); -+ -+ The second word of the descriptor contains the addend. -+ Return the addend minus the thread pointer. This ensures -+ that when the caller adds on the thread pointer it gets back -+ the addend. */ -+ -+ .hidden _dl_tlsdesc_undefweak -+ .global _dl_tlsdesc_undefweak -+ .type _dl_tlsdesc_undefweak,%function -+ cfi_startproc -+ .align 2 -+_dl_tlsdesc_undefweak: -+ str x1, [sp, #-16]! -+ cfi_adjust_cfa_offset(16) -+ ldr x0, [x0, #8] -+ mrs x1, tpidr_el0 -+ sub x0, x0, x1 -+ ldr x1, [sp], #16 -+ cfi_adjust_cfa_offset(16) -+ RET -+ cfi_endproc -+ .size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak -+ -+#ifdef SHARED -+ /* Handler for dynamic TLS symbols. -+ Prototype: -+ _dl_tlsdesc_dynamic (tlsdesc *) ; -+ -+ The second word of the descriptor points to a -+ tlsdesc_dynamic_arg structure. -+ -+ Returns the offset between the thread pointer and the -+ object referenced by the argument. -+ -+ ptrdiff_t -+ __attribute__ ((__regparm__ (1))) -+ _dl_tlsdesc_dynamic (struct tlsdesc *tdp) -+ { -+ struct tlsdesc_dynamic_arg *td = tdp->arg; -+ dtv_t *dtv = *(dtv_t **)((char *)__thread_pointer + DTV_OFFSET); -+ 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 -+ - __thread_pointer; -+ -+ return ___tls_get_addr (&td->tlsinfo) - __thread_pointer; -+ } -+ */ -+ -+ .hidden _dl_tlsdesc_dynamic -+ .global _dl_tlsdesc_dynamic -+ .type _dl_tlsdesc_dynamic,%function -+ cfi_startproc -+ .align 2 -+_dl_tlsdesc_dynamic: -+#define NSAVEXREGPAIRS 2 -+ stp x29, x30, [sp,#-(32+16*NSAVEXREGPAIRS)]! -+ cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) -+ mov x29, sp -+ -+ /* Save just enough registers to support fast path, if we fall -+ into slow path we will save additional registers. */ -+ -+ stp x1, x2, [sp, #32+16*0] -+ stp x3, x4, [sp, #32+16*1] -+ -+ mrs x4, tpidr_el0 -+ ldr x1, [x0,#8] -+ ldr x0, [x4] -+ ldr x3, [x1,#16] -+ ldr x2, [x0] -+ cmp x3, x2 -+ b.hi 2f -+ ldr x2, [x1] -+ add x0, x0, x2, lsl #4 -+ ldr x0, [x0] -+ cmn x0, #0x1 -+ b.eq 2f -+ ldr x1, [x1,#8] -+ add x0, x0, x1 -+ sub x0, x0, x4 -+1: -+ ldp x1, x2, [sp, #32+16*0] -+ ldp x3, x4, [sp, #32+16*1] -+ -+ ldp x29, x30, [sp], #(32+16*NSAVEXREGPAIRS) -+ cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) -+#undef NSAVEXREGPAIRS -+ RET -+2: -+ /* This is the slow path. We need to call __tls_get_addr() which -+ means we need to save and restore all the register that the -+ callee will trash. */ -+ -+ /* Save the remaining registers that we must treat as caller save. */ -+#define NSAVEXREGPAIRS 7 -+ stp x5, x6, [sp, #-16*NSAVEXREGPAIRS]! -+ cfi_adjust_cfa_offset (16*NSAVEXREGPAIRS) -+ stp x7, x8, [sp, #16*1] -+ stp x9, x10, [sp, #16*2] -+ stp x11, x12, [sp, #16*3] -+ stp x13, x14, [sp, #16*4] -+ stp x15, x16, [sp, #16*5] -+ stp x17, x18, [sp, #16*6] -+ -+ SAVE_Q_REGISTERS -+ -+ mov x0, x1 -+ bl __tls_get_addr -+ -+ mrs x1, tpidr_el0 -+ sub x0, x0, x1 -+ -+ RESTORE_Q_REGISTERS -+ -+ ldp x7, x8, [sp, #16*1] -+ ldp x9, x10, [sp, #16*2] -+ ldp x11, x12, [sp, #16*3] -+ ldp x13, x14, [sp, #16*4] -+ ldp x15, x16, [sp, #16*5] -+ ldp x17, x18, [sp, #16*6] -+ ldp x5, x6, [sp], #16*NSAVEXREGPAIRS -+ cfi_adjust_cfa_offset (-16*NSAVEXREGPAIRS) -+ b 1b -+ cfi_endproc -+ .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic -+#undef NSAVEXREGPAIRS -+#endif -+ -+ /* This function is a wrapper for a lazy resolver for TLS_DESC -+ RELA relocations. -+ When the actual resolver returns, it will have adjusted the -+ TLS descriptor such that we can tail-call it for it to return -+ the TP offset of the symbol. */ -+ -+ .hidden _dl_tlsdesc_resolve_rela -+ .global _dl_tlsdesc_resolve_rela -+ .type _dl_tlsdesc_resolve_rela,%function -+ cfi_startproc -+ .align 2 -+_dl_tlsdesc_resolve_rela: -+#define NSAVEXREGPAIRS 9 -+ stp x29, x30, [sp, #-(32+16*NSAVEXREGPAIRS)]! -+ cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) -+ mov x29, sp -+ stp x1, x4, [sp, #32+16*0] -+ stp x5, x6, [sp, #32+16*1] -+ stp x7, x8, [sp, #32+16*2] -+ stp x9, x10, [sp, #32+16*3] -+ stp x11, x12, [sp, #32+16*4] -+ stp x13, x14, [sp, #32+16*5] -+ stp x15, x16, [sp, #32+16*6] -+ stp x17, x18, [sp, #32+16*7] -+ str x0, [sp, #32+16*8] -+ -+ SAVE_Q_REGISTERS -+ -+ ldr x1, [x3, #8] -+ bl _dl_tlsdesc_resolve_rela_fixup -+ -+ RESTORE_Q_REGISTERS -+ -+ ldr x0, [sp, #32+16*8] -+ ldr x1, [x0] -+ blr x1 -+ -+ ldp x1, x4, [sp, #32+16*0] -+ ldp x5, x6, [sp, #32+16*1] -+ ldp x7, x8, [sp, #32+16*2] -+ ldp x9, x10, [sp, #32+16*3] -+ ldp x11, x12, [sp, #32+16*4] -+ ldp x13, x14, [sp, #32+16*5] -+ ldp x15, x16, [sp, #32+16*6] -+ ldp x17, x18, [sp, #32+16*7] -+ ldp x29, x30, [sp], #(32+16*NSAVEXREGPAIRS) -+ cfi_adjust_cfa_offset (-32+16*NSAVEXREGPAIRS) -+ ldp x2, x3, [sp], #16 -+ cfi_adjust_cfa_offset (-16) -+ RET -+#undef NSAVEXREGPAIRS -+ cfi_endproc -+ .size _dl_tlsdesc_resolve_rela, .-_dl_tlsdesc_resolve_rela -+ -+ /* This function is a placeholder for lazy resolving of TLS -+ relocations. Once some thread starts resolving a TLS -+ relocation, it sets up the TLS descriptor to use this -+ resolver, such that other threads that would attempt to -+ resolve it concurrently may skip the call to the original lazy -+ resolver and go straight to a condition wait. -+ -+ When the actual resolver returns, it will have adjusted the -+ TLS descriptor such that we can tail-call it for it to return -+ the TP offset of the symbol. */ -+ -+ .hidden _dl_tlsdesc_resolve_hold -+ .global _dl_tlsdesc_resolve_hold -+ .type _dl_tlsdesc_resolve_hold,%function -+ cfi_startproc -+ .align 2 -+_dl_tlsdesc_resolve_hold: -+#define NSAVEXREGPAIRS 10 -+1: -+ stp x29, x30, [sp, #-(32+16*NSAVEXREGPAIRS)]! -+ cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) -+ mov x29, sp -+ stp x1, x2, [sp, #32+16*0] -+ stp x3, x4, [sp, #32+16*1] -+ stp x5, x6, [sp, #32+16*2] -+ stp x7, x8, [sp, #32+16*3] -+ stp x9, x10, [sp, #32+16*4] -+ stp x11, x12, [sp, #32+16*5] -+ stp x13, x14, [sp, #32+16*6] -+ stp x15, x16, [sp, #32+16*7] -+ stp x17, x18, [sp, #32+16*8] -+ str x0, [sp, #32+16*9] -+ -+ SAVE_Q_REGISTERS -+ -+ adr x1, 1b -+ bl _dl_tlsdesc_resolve_hold_fixup -+ -+ RESTORE_Q_REGISTERS -+ -+ ldr x0, [sp, #32+16*9] -+ ldr x1, [x0] -+ blr x1 -+ -+ ldp x1, x2, [sp, #32+16*0] -+ ldp x3, x4, [sp, #32+16*1] -+ ldp x5, x6, [sp, #32+16*2] -+ ldp x7, x8, [sp, #32+16*3] -+ ldp x9, x10, [sp, #32+16*4] -+ ldp x11, x12, [sp, #32+16*5] -+ ldp x13, x14, [sp, #32+16*6] -+ ldp x15, x16, [sp, #32+16*7] -+ ldp x17, x18, [sp, #32+16*8] -+ ldp x29, x30, [sp], #(32+16*NSAVEXREGPAIRS) -+ cfi_adjust_cfa_offset (-32+16*NSAVEXREGPAIRS) -+ RET -+ cfi_endproc -+ .size _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold -+#undef NSAVEXREGPAIRS -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-tlsdesc.h glibc/ports/sysdeps/aarch64/dl-tlsdesc.h ---- glibc.orig/ports/sysdeps/aarch64/dl-tlsdesc.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/dl-tlsdesc.h 2012-09-24 13:04:47.000000000 +0100 -@@ -0,0 +1,71 @@ -+/* Thread-local storage descriptor handling in the ELF dynamic linker. -+ AArch64 version. -+ Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _AARCH64_DL_TLSDESC_H -+#define _AARCH64_DL_TLSDESC_H 1 -+ -+/* Use this to access DT_TLSDESC_PLT and DT_TLSDESC_GOT. */ -+#ifndef ADDRIDX -+#define ADDRIDX(tag) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGNUM \ -+ + DT_EXTRANUM + DT_VALNUM + DT_ADDRTAGIDX (tag)) -+#endif -+ -+/* Type used to represent a TLS descriptor in the GOT. */ -+struct tlsdesc -+{ -+ ptrdiff_t (*entry) (struct tlsdesc *); -+ void *arg; -+}; -+ -+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 *); -+ -+extern ptrdiff_t attribute_hidden -+_dl_tlsdesc_undefweak (struct tlsdesc *); -+ -+extern ptrdiff_t attribute_hidden -+_dl_tlsdesc_resolve_rela (struct tlsdesc *); -+ -+extern ptrdiff_t attribute_hidden -+_dl_tlsdesc_resolve_hold (struct tlsdesc *); -+ -+# ifdef SHARED -+extern void *internal_function _dl_make_tlsdesc_dynamic (struct link_map *, -+ size_t); -+ -+extern ptrdiff_t attribute_hidden -+_dl_tlsdesc_dynamic (struct tlsdesc *); -+#endif -+ -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/dl-trampoline.S glibc/ports/sysdeps/aarch64/dl-trampoline.S ---- glibc.orig/ports/sysdeps/aarch64/dl-trampoline.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/dl-trampoline.S 2012-09-24 13:05:02.000000000 +0100 -@@ -0,0 +1,276 @@ -+/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library. If not, see -+ . */ -+ -+#include -+#include -+ -+#include "dl-link.h" -+ -+#define ip0 x16 -+#define ip1 x17 -+#define lr x30 -+ -+ .text -+ .globl _dl_runtime_resolve -+ .type _dl_runtime_resolve, #function -+ cfi_startproc -+ .align 2 -+_dl_runtime_resolve: -+ /* AArch64 we get called with: -+ ip0 &PLTGOT[2] -+ ip1 temp(dl resolver entry point) -+ [sp, #8] lr -+ [sp, #0] &PLTGOT[n] -+ */ -+ -+ cfi_rel_offset (lr, 8) -+ -+ /* Save arguments. */ -+ stp x8, x9, [sp, #-80]! -+ cfi_adjust_cfa_offset (80) -+ cfi_rel_offset (x8, 0) -+ cfi_rel_offset (x9, 8) -+ -+ stp x6, x7, [sp, #16] -+ cfi_rel_offset (x6, 16) -+ cfi_rel_offset (x7, 24) -+ -+ stp x4, x5, [sp, #32] -+ cfi_rel_offset (x4, 32) -+ cfi_rel_offset (x5, 40) -+ -+ stp x2, x3, [sp, #48] -+ cfi_rel_offset (x2, 48) -+ cfi_rel_offset (x3, 56) -+ -+ stp x0, x1, [sp, #64] -+ cfi_rel_offset (x0, 64) -+ cfi_rel_offset (x1, 72) -+ -+ /* Get pointer to linker struct. */ -+ ldr x0, [ip0, #-8] -+ -+ /* Prepare to call _dl_fixup(). */ -+ ldr x1, [sp, 80] /* Recover &PLTGOT[n] */ -+ -+ sub x1, x1, ip0 -+ add x1, x1, x1, lsl #1 -+ lsl x1, x1, #3 -+ sub x1, x1, #192 -+ lsr x1, x1, #3 -+ -+ /* Call fixup routine. */ -+ bl _dl_fixup -+ -+ /* Save the return. */ -+ mov ip0, x0 -+ -+ /* Get arguments and return address back. */ -+ ldp x0, x1, [sp, #64] -+ ldp x2, x3, [sp, #48] -+ ldp x4, x5, [sp, #32] -+ ldp x6, x7, [sp, #16] -+ ldp x8, x9, [sp], #80 -+ cfi_adjust_cfa_offset (-80) -+ -+ ldp ip1, lr, [sp], #16 -+ cfi_adjust_cfa_offset (-16) -+ -+ /* Jump to the newly found address. */ -+ br ip0 -+ -+ cfi_endproc -+ .size _dl_runtime_resolve, .-_dl_runtime_resolve -+#ifndef PROF -+ .globl _dl_runtime_profile -+ .type _dl_runtime_profile, #function -+ cfi_startproc -+ .align 2 -+_dl_runtime_profile: -+ /* AArch64 we get called with: -+ ip0 &PLTGOT[2] -+ ip1 temp(dl resolver entry point) -+ [sp, #8] lr -+ [sp, #0] &PLTGOT[n] -+ -+ Stack frame layout: -+ [sp, #...] lr -+ [sp, #...] &PLTGOT[n] -+ [sp, #96] La_aarch64_regs -+ [sp, #48] La_aarch64_retval -+ [sp, #40] frame size return from pltenter -+ [sp, #32] dl_profile_call saved x1 -+ [sp, #24] dl_profile_call saved x0 -+ [sp, #16] t1 -+ [sp, #0] x29, lr <- x29 -+ */ -+ -+#define OFFSET_T1 16 -+#define OFFSET_SAVED_CALL_X0 OFFSET_T1 + 8 -+#define OFFSET_FS OFFSET_SAVED_CALL_X0 + 16 -+#define OFFSET_RV OFFSET_FS + 8 -+#define OFFSET_RG OFFSET_RV + DL_SIZEOF_RV -+ -+#define SF_SIZE OFFSET_RG + DL_SIZEOF_RG -+ -+#define OFFSET_PLTGOTN SF_SIZE -+#define OFFSET_LR OFFSET_PLTGOTN + 8 -+ -+ /* Save arguments. */ -+ sub sp, sp, #SF_SIZE -+ cfi_adjust_cfa_offset (SF_SIZE) -+ stp x29, x30, [SP, #0] -+ mov x29, sp -+ cfi_def_cfa_register (x29) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (lr, 8) -+ -+ stp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*0] -+ cfi_rel_offset (x0, OFFSET_RG + DL_OFFSET_RG_X0 + 16*0 + 0) -+ cfi_rel_offset (x1, OFFSET_RG + DL_OFFSET_RG_X0 + 16*0 + 8) -+ stp x2, x3, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*1] -+ cfi_rel_offset (x2, OFFSET_RG + DL_OFFSET_RG_X0 + 16*1 + 0) -+ cfi_rel_offset (x3, OFFSET_RG + DL_OFFSET_RG_X0 + 16*1 + 8) -+ stp x4, x5, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*2] -+ cfi_rel_offset (x4, OFFSET_RG + DL_OFFSET_RG_X0 + 16*2 + 0) -+ cfi_rel_offset (x5, OFFSET_RG + DL_OFFSET_RG_X0 + 16*2 + 8) -+ stp x6, x7, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*3] -+ cfi_rel_offset (x6, OFFSET_RG + DL_OFFSET_RG_X0 + 16*3 + 0) -+ cfi_rel_offset (x7, OFFSET_RG + DL_OFFSET_RG_X0 + 16*3 + 8) -+ -+ stp d0, d1, [X29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*0] -+ cfi_rel_offset (d0, OFFSET_RG + DL_OFFSET_RG_D0 + 16*0) -+ cfi_rel_offset (d1, OFFSET_RG + DL_OFFSET_RG_D0 + 16*0 + 8) -+ stp d2, d3, [X29, #OFFSET_RG+ DL_OFFSET_RG_D0 + 16*1] -+ cfi_rel_offset (d2, OFFSET_RG + DL_OFFSET_RG_D0 + 16*1 + 0) -+ cfi_rel_offset (d3, OFFSET_RG + DL_OFFSET_RG_D0 + 16*1 + 8) -+ stp d4, d5, [X29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*2] -+ cfi_rel_offset (d4, OFFSET_RG + DL_OFFSET_RG_D0 + 16*2 + 0) -+ cfi_rel_offset (d5, OFFSET_RG + DL_OFFSET_RG_D0 + 16*2 + 8) -+ stp d6, d7, [X29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*3] -+ cfi_rel_offset (d6, OFFSET_RG + DL_OFFSET_RG_D0 + 16*3 + 0) -+ cfi_rel_offset (d7, OFFSET_RG + DL_OFFSET_RG_D0 + 16*3 + 8) -+ -+ add x0, x29, #SF_SIZE + 16 -+ ldr x1, [x29, #OFFSET_LR] -+ stp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_SP] -+ -+ /* Get pointer to linker struct. */ -+ ldr x0, [ip0, #-8] -+ -+ /* Prepare to call _dl_profile_fixup(). */ -+ ldr x1, [x29, OFFSET_PLTGOTN] /* Recover &PLTGOT[n] */ -+ -+ sub x1, x1, ip0 -+ add x1, x1, x1, lsl #1 -+ lsl x1, x1, #3 -+ sub x1, x1, #192 -+ lsr x1, x1, #3 -+ -+ stp x0, x1, [x29, #OFFSET_SAVED_CALL_X0] -+ -+ /* Set up extra args for _dl_profile_fixup */ -+ ldr x2, [x29, #OFFSET_LR] /* load saved LR */ -+ add x3, x29, #OFFSET_RG /* address of La_aarch64_reg */ -+ add x4, x29, #OFFSET_FS /* address of framesize */ -+ bl _dl_profile_fixup -+ -+ ldr ip0, [x29, #OFFSET_FS] /* framesize == 0 */ -+ cmp ip0, #0 -+ bge 1f -+ cfi_remember_state -+ -+ /* Save the return. */ -+ mov ip0, x0 -+ -+ /* Get arguments and return address back. */ -+ ldp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*0] -+ ldp x2, x3, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*1] -+ ldp x4, x5, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*2] -+ ldp x6, x7, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*3] -+ ldp d0, d1, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*0] -+ ldp d2, d3, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*1] -+ ldp d4, d5, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*2] -+ ldp d6, d7, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*3] -+ -+ cfi_def_cfa_register (sp) -+ ldp x29, x30, [x29, #0] -+ cfi_restore(x29) -+ cfi_restore(x30) -+ -+ add sp, sp, SF_SIZE + 16 -+ cfi_adjust_cfa_offset (- SF_SIZE - 16) -+ -+ /* Jump to the newly found address. */ -+ br ip0 -+ -+ cfi_restore_state -+1: -+ /* The new frame size is in ip0. */ -+ -+ sub x1, x29, ip0 -+ and sp, x1, #0xfffffffffffffff0 -+ -+ str x0, [x29, #OFFSET_T1] -+ -+ mov x0, sp -+ add x1, x29, #SF_SIZE + 16 -+ mov x2, ip0 -+ bl memcpy -+ -+ ldr ip0, [x29, #OFFSET_T1] -+ -+ /* Call the function. */ -+ ldp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*0] -+ ldp x2, x3, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*1] -+ ldp x4, x5, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*2] -+ ldp x6, x7, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*3] -+ ldp d0, d1, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*0] -+ ldp d2, d3, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*1] -+ ldp d4, d5, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*2] -+ ldp d6, d7, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*3] -+ blr ip0 -+ stp x0, x1, [x29, #OFFSET_RV + DL_OFFSET_RV_X0] -+ stp d0, d1, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*0] -+ stp d2, d3, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*1] -+ -+ /* Setup call to pltexit */ -+ ldp x0, x1, [x29, #OFFSET_SAVED_CALL_X0] -+ add x2, x29, #OFFSET_RG -+ add x3, x29, #OFFSET_RV -+ bl _dl_call_pltexit -+ -+ ldp x0, x1, [x29, #OFFSET_RV + DL_OFFSET_RV_X0] -+ ldp d0, d1, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*0] -+ ldp d2, d3, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*1] -+ /* LR from within La_aarch64_reg */ -+ ldr lr, [x29, #OFFSET_RG + DL_OFFSET_RG_LR] -+ cfi_restore(lr) -+ mov sp, x29 -+ cfi_def_cfa_register (sp) -+ ldr x29, [x29, #0] -+ cfi_restore(x29) -+ add sp, sp, SF_SIZE + 16 -+ cfi_adjust_cfa_offset (- SF_SIZE - 16) -+ -+ br lr -+ -+ cfi_endproc -+ .size _dl_runtime_profile, .-_dl_runtime_profile -+#endif -+ .previous -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fclrexcpt.c glibc/ports/sysdeps/aarch64/fclrexcpt.c ---- glibc.orig/ports/sysdeps/aarch64/fclrexcpt.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fclrexcpt.c 2012-09-24 13:05:16.000000000 +0100 -@@ -0,0 +1,35 @@ -+/* Copyright (C) 1997-2001, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+int -+feclearexcept (int excepts) -+{ -+ fpu_fpsr_t fpsr; -+ -+ excepts &= FE_ALL_EXCEPT; -+ -+ _FPU_GETFPSR (fpsr); -+ fpsr = (fpsr & ~FE_ALL_EXCEPT) | (fpsr & FE_ALL_EXCEPT & ~excepts); -+ -+ _FPU_SETFPSR (fpsr); -+ -+ return 0; -+} -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fedisblxcpt.c glibc/ports/sysdeps/aarch64/fedisblxcpt.c ---- glibc.orig/ports/sysdeps/aarch64/fedisblxcpt.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fedisblxcpt.c 2012-09-24 13:05:24.000000000 +0100 -@@ -0,0 +1,40 @@ -+/* Copyright (C) 2001, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+int -+fedisableexcept (int excepts) -+{ -+ fpu_fpcr_t fpcr; -+ int original_excepts; -+ -+ _FPU_GETFPCR(fpcr); -+ -+ original_excepts = (fpcr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; -+ -+ excepts &= FE_ALL_EXCEPT; -+ -+ fpcr &= ~(excepts << FE_EXCEPT_SHIFT); -+ -+ _FPU_SETFPCR(fpcr); -+ _ISB (); -+ -+ return original_excepts; -+} -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/feenablxcpt.c glibc/ports/sysdeps/aarch64/feenablxcpt.c ---- glibc.orig/ports/sysdeps/aarch64/feenablxcpt.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/feenablxcpt.c 2012-09-24 13:05:35.000000000 +0100 -@@ -0,0 +1,40 @@ -+/* Copyright (C) 2001, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+int -+feenableexcept (int excepts) -+{ -+ fpu_fpcr_t fpcr; -+ int original_excepts; -+ -+ _FPU_GETFPCR(fpcr); -+ -+ original_excepts = (fpcr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; -+ -+ excepts &= FE_ALL_EXCEPT; -+ -+ fpcr |= (excepts << FE_EXCEPT_SHIFT); -+ -+ _FPU_SETFPCR(fpcr); -+ _ISB (); -+ -+ return original_excepts; -+} -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fegetenv.c glibc/ports/sysdeps/aarch64/fegetenv.c ---- glibc.orig/ports/sysdeps/aarch64/fegetenv.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fegetenv.c 2012-09-24 13:05:53.000000000 +0100 -@@ -0,0 +1,33 @@ -+/* Copyright (C) 1997-2001, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+int -+fegetenv (fenv_t *envp) -+{ -+ fpu_fpcr_t fpcr; -+ fpu_fpsr_t fpsr; -+ _FPU_GETFPCR (fpcr); -+ _FPU_GETFPSR (fpsr); -+ envp->fpcr = fpcr; -+ envp->fpsr = fpsr; -+ return 0; -+} -+libm_hidden_def (fegetenv) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fegetexcept.c glibc/ports/sysdeps/aarch64/fegetexcept.c ---- glibc.orig/ports/sysdeps/aarch64/fegetexcept.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fegetexcept.c 2012-09-24 13:06:02.000000000 +0100 -@@ -0,0 +1,28 @@ -+/* Copyright (C) 2001, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+int -+fegetexcept (void) -+{ -+ fpu_fpcr_t fpcr; -+ _FPU_GETFPCR (fpcr); -+ return (fpcr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; -+} -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fegetround.c glibc/ports/sysdeps/aarch64/fegetround.c ---- glibc.orig/ports/sysdeps/aarch64/fegetround.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fegetround.c 2012-09-24 13:06:11.000000000 +0100 -@@ -0,0 +1,28 @@ -+/* Copyright (C) 1997, 1998, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+int -+fegetround (void) -+{ -+ fpu_fpcr_t fpcr; -+ _FPU_GETFPCR (fpcr); -+ return fpcr & FE_TOWARDZERO; -+} -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/feholdexcpt.c glibc/ports/sysdeps/aarch64/feholdexcpt.c ---- glibc.orig/ports/sysdeps/aarch64/feholdexcpt.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/feholdexcpt.c 2012-09-24 15:07:31.000000000 +0100 -@@ -0,0 +1,48 @@ -+/* Copyright (C) 1997-1999, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+int -+feholdexcept (fenv_t *envp) -+{ -+ fpu_fpsr_t fpsr; -+ fpu_fpcr_t fpcr; -+ -+ _FPU_GETFPCR (fpcr); -+ envp->fpcr = fpcr; -+ -+ _FPU_GETFPSR (fpsr); -+ envp->fpsr = fpsr; -+ -+ /* Now set all exceptions to non-stop. */ -+ fpcr &= ~(FE_ALL_EXCEPT << FE_EXCEPT_SHIFT); -+ -+ /* And clear all exception flags. */ -+ fpsr &= ~FE_ALL_EXCEPT; -+ -+ _FPU_SETFPSR(fpsr); -+ -+ _FPU_SETFPCR(fpcr); -+ _ISB (); -+ -+ return 0; -+} -+ -+libm_hidden_def (feholdexcept) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fesetenv.c glibc/ports/sysdeps/aarch64/fesetenv.c ---- glibc.orig/ports/sysdeps/aarch64/fesetenv.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fesetenv.c 2012-09-24 13:06:37.000000000 +0100 -@@ -0,0 +1,61 @@ -+/* Copyright (C) 1997-2002, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+int -+fesetenv (const fenv_t *envp) -+{ -+ fpu_fpcr_t fpcr; -+ fpu_fpsr_t fpsr; -+ -+ _FPU_GETFPCR (fpcr); -+ _FPU_GETFPSR (fpsr); -+ -+ fpcr &= _FPU_FPCR_RESERVED; -+ fpsr &= _FPU_FPSR_RESERVED; -+ -+ if (envp == FE_DFL_ENV) -+ { -+ fpcr |= _FPU_FPCR_DEFAULT; -+ fpsr |= _FPU_FPSR_DEFAULT; -+ } -+ else if (envp == FE_NOMASK_ENV) -+ { -+ fpcr |= _FPU_FPCR_IEEE; -+ fpsr |= _FPU_FPSR_IEEE; -+ } -+ else -+ { -+ fpcr |= envp->fpcr & ~_FPU_FPCR_RESERVED; -+ fpsr |= envp->fpsr & ~_FPU_FPSR_RESERVED; -+ } -+ -+ _FPU_SETFPSR (fpsr); -+ -+ _FPU_SETFPCR (fpcr); -+ -+ /* The instruction stream must be syncrnonized after any write to -+ FPCR */ -+ _ISB (); -+ -+ return 0; -+} -+ -+libm_hidden_def (fesetenv) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fesetround.c glibc/ports/sysdeps/aarch64/fesetround.c ---- glibc.orig/ports/sysdeps/aarch64/fesetround.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fesetround.c 2012-09-24 13:06:46.000000000 +0100 -@@ -0,0 +1,47 @@ -+/* Copyright (C) 1997, 1998, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+int -+fesetround (int round) -+{ -+ fpu_fpcr_t fpcr; -+ -+ switch (round) -+ { -+ case FE_TONEAREST: -+ case FE_UPWARD: -+ case FE_DOWNWARD: -+ case FE_TOWARDZERO: -+ _FPU_GETFPCR (fpcr); -+ fpcr = (fpcr & ~FE_TOWARDZERO) | round; -+ -+ _FPU_SETFPCR (fpcr); -+ _ISB (); -+ return 0; -+ -+ default: -+ return 1; -+ } -+ -+ return 1; -+} -+ -+libm_hidden_def (fesetround) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/feupdateenv.c glibc/ports/sysdeps/aarch64/feupdateenv.c ---- glibc.orig/ports/sysdeps/aarch64/feupdateenv.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/feupdateenv.c 2012-09-24 13:07:01.000000000 +0100 -@@ -0,0 +1,38 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+int -+feupdateenv (const fenv_t *envp) -+{ -+ fpu_fpsr_t fpsr; -+ -+ /* Get the current exception state. */ -+ _FPU_GETFPSR (fpsr); -+ -+ /* Install new environment. */ -+ fesetenv (envp); -+ -+ /* Raise the saved exceptions. */ -+ feraiseexcept (fpsr & FE_ALL_EXCEPT); -+ -+ return 0; -+} -+libm_hidden_def (feupdateenv) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fgetexcptflg.c glibc/ports/sysdeps/aarch64/fgetexcptflg.c ---- glibc.orig/ports/sysdeps/aarch64/fgetexcptflg.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fgetexcptflg.c 2012-09-24 13:07:10.000000000 +0100 -@@ -0,0 +1,33 @@ -+/* Copyright (C) 2001, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+int -+fegetexceptflag (fexcept_t *flagp, int excepts) -+{ -+ fpu_fpsr_t fpsr; -+ -+ /* Get the current exceptions. */ -+ _FPU_GETFPSR (fpsr); -+ -+ *flagp = fpsr & excepts & FE_ALL_EXCEPT; -+ -+ return 0; -+} -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_ceil.c glibc/ports/sysdeps/aarch64/fpu/s_ceil.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_ceil.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_ceil.c 2012-09-24 13:08:06.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC ceil -+#define INSN "frintp" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_ceilf.c glibc/ports/sysdeps/aarch64/fpu/s_ceilf.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_ceilf.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_ceilf.c 2012-09-24 13:08:17.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC ceilf -+#define INSN "frintp" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_floor.c glibc/ports/sysdeps/aarch64/fpu/s_floor.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_floor.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_floor.c 2012-09-24 13:08:20.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC floor -+#define INSN "frintm" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_floorf.c glibc/ports/sysdeps/aarch64/fpu/s_floorf.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_floorf.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_floorf.c 2012-09-24 13:08:23.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC floorf -+#define INSN "frintm" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_fma.c glibc/ports/sysdeps/aarch64/fpu/s_fma.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_fma.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_fma.c 2012-09-24 13:08:33.000000000 +0100 -@@ -0,0 +1,54 @@ -+/* Copyright (C) 1996, 1997, 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+#ifndef FUNC -+#define FUNC fma -+#endif -+ -+#ifndef TYPE -+#define TYPE double -+#define REGS "d" -+#else -+#ifndef REGS -+#error REGS not defined -+#endif -+#endif -+ -+#define __CONCATX(a,b) __CONCAT(a,b) -+ -+TYPE -+__CONCATX(__,FUNC) (x, y, z) -+ TYPE x; -+ TYPE y; -+ TYPE z; -+{ -+ TYPE result; -+ asm ( "fmadd" "\t%" REGS "0, %" REGS "1, %" REGS "2, %" REGS "3" -+ : "=w" (result) : "w" (x), "w" (y), "w" (z) ); -+ return result; -+} -+ -+#define weak_aliasx(a,b) weak_alias(a,b) -+weak_aliasx (__CONCATX(__,FUNC), FUNC) -+#define strong_aliasx(a,b) strong_alias(a,b) -+#ifdef NO_LONG_DOUBLE -+strong_aliasx (__CONCATX(__,FUNC), __CONCATX(__,__CONCATX(FUNC,l))) -+weak_aliasx (__CONCATX(__,FUNC), __CONCATX(FUNC,l)) -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_fmaf.c glibc/ports/sysdeps/aarch64/fpu/s_fmaf.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_fmaf.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_fmaf.c 2012-09-24 13:08:39.000000000 +0100 -@@ -0,0 +1,22 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC fmaf -+#define TYPE float -+#define REGS "s" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_fmax.c glibc/ports/sysdeps/aarch64/fpu/s_fmax.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_fmax.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_fmax.c 2012-09-24 13:08:43.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC fmax -+#define INSN "fmaxnm" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_fmaxf.c glibc/ports/sysdeps/aarch64/fpu/s_fmaxf.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_fmaxf.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_fmaxf.c 2012-09-24 13:08:48.000000000 +0100 -@@ -0,0 +1,23 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC fmaxf -+#define INSN "fmaxnm" -+#define TYPE float -+#define REGS "s" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_fmin.c glibc/ports/sysdeps/aarch64/fpu/s_fmin.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_fmin.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_fmin.c 2012-09-24 13:08:56.000000000 +0100 -@@ -0,0 +1,57 @@ -+/* Copyright (C) 1996, 1997, 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+#ifndef FUNC -+#define FUNC fmin -+#endif -+ -+#ifndef INSN -+#define INSN "fminnm" -+#endif -+ -+#ifndef TYPE -+#define TYPE double -+#define REGS "d" -+#else -+#ifndef REGS -+#error REGS not defined -+#endif -+#endif -+ -+#define __CONCATX(a,b) __CONCAT(a,b) -+ -+TYPE -+__CONCATX(__,FUNC) (x, y) -+ TYPE x; -+ TYPE y; -+{ -+ TYPE result; -+ asm ( INSN "\t%" REGS "0, %" REGS "1, %" REGS "2" -+ : "=w" (result) : "w" (x), "w" (y) ); -+ return result; -+} -+ -+#define weak_aliasx(a,b) weak_alias(a,b) -+weak_aliasx (__CONCATX(__,FUNC), FUNC) -+#define strong_aliasx(a,b) strong_alias(a,b) -+#ifdef NO_LONG_DOUBLE -+strong_aliasx (__CONCATX(__,FUNC), __CONCATX(__,__CONCATX(FUNC,l))) -+weak_aliasx (__CONCATX(__,FUNC), __CONCATX(FUNC,l)) -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_fminf.c glibc/ports/sysdeps/aarch64/fpu/s_fminf.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_fminf.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_fminf.c 2012-09-24 13:09:02.000000000 +0100 -@@ -0,0 +1,22 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC fminf -+#define TYPE float -+#define REGS "s" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_frint.x glibc/ports/sysdeps/aarch64/fpu/s_frint.x ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_frint.x 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_frint.x 2012-09-24 13:09:09.000000000 +0100 -@@ -0,0 +1,56 @@ -+/* Copyright (C) 1996, 1997, 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+#ifndef FUNC -+#error FUNC not defined -+#endif -+ -+#ifndef TYPE -+#define TYPE double -+#define REGS "d" -+#else -+#ifndef REGS -+#error REGS not defined -+#endif -+#endif -+ -+#ifndef INSN -+#error INSN not defined -+#endif -+ -+#define __CONCATX(a,b) __CONCAT(a,b) -+ -+TYPE -+__CONCATX(__,FUNC) (x) -+ TYPE x; -+{ -+ TYPE result; -+ asm ( INSN "\t%" REGS "0, %" REGS "1" : -+ "=w" (result) : "w" (x) ); -+ return result; -+} -+ -+#define weak_aliasx(a,b) weak_alias(a,b) -+weak_aliasx (__CONCATX(__,FUNC), FUNC) -+#define strong_aliasx(a,b) strong_alias(a,b) -+#ifdef NO_LONG_DOUBLE -+strong_aliasx (__CONCATX(__,FUNC), __CONCATX(__,__CONCATX(FUNC,l))) -+weak_aliasx (__CONCATX(__,FUNC), __CONCATX(FUNC,l)) -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_frintf.x glibc/ports/sysdeps/aarch64/fpu/s_frintf.x ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_frintf.x 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_frintf.x 2012-09-24 13:09:15.000000000 +0100 -@@ -0,0 +1,24 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef FUNC -+#error FUNC not defined -+#endif -+#define TYPE float -+#define REGS "s" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_llrint.c glibc/ports/sysdeps/aarch64/fpu/s_llrint.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_llrint.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_llrint.c 2012-09-24 13:09:19.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC llrint -+#define OTYPE long long int -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_llrintf.c glibc/ports/sysdeps/aarch64/fpu/s_llrintf.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_llrintf.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_llrintf.c 2012-09-24 13:09:23.000000000 +0100 -@@ -0,0 +1,23 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC llrintf -+#define ITYPE float -+#define IREGS "s" -+#define OTYPE long long int -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_llround.c glibc/ports/sysdeps/aarch64/fpu/s_llround.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_llround.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_llround.c 2012-09-24 13:09:26.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC llround -+#define OTYPE long long int -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_llroundf.c glibc/ports/sysdeps/aarch64/fpu/s_llroundf.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_llroundf.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_llroundf.c 2012-09-24 13:09:29.000000000 +0100 -@@ -0,0 +1,23 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC llroundf -+#define ITYPE float -+#define IREGS "s" -+#define OTYPE long long int -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_lrint.c glibc/ports/sysdeps/aarch64/fpu/s_lrint.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_lrint.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_lrint.c 2012-09-24 13:09:37.000000000 +0100 -@@ -0,0 +1,60 @@ -+/* Copyright (C) 1996, 1997, 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+#ifndef FUNC -+#define FUNC lrint -+#endif -+ -+#ifndef ITYPE -+#define ITYPE double -+#define IREGS "d" -+#else -+#ifndef IREGS -+#error IREGS not defined -+#endif -+#endif -+ -+#ifndef OTYPE -+#define OTYPE long int -+#endif -+ -+#define OREGS "x" -+ -+#define __CONCATX(a,b) __CONCAT(a,b) -+ -+OTYPE -+__CONCATX(__,FUNC) (x) -+ ITYPE x; -+{ -+ OTYPE result; -+ ITYPE temp; -+ asm ( "frintx" "\t%" IREGS "1, %" IREGS "2\n\t" -+ "fcvtzs" "\t%" OREGS "0, %" IREGS "1" -+ : "=r" (result), "=w" (temp) : "w" (x) ); -+ return result; -+} -+ -+#define weak_aliasx(a,b) weak_alias(a,b) -+weak_aliasx (__CONCATX(__,FUNC), FUNC) -+#define strong_aliasx(a,b) strong_alias(a,b) -+#ifdef NO_LONG_DOUBLE -+strong_aliasx (__CONCATX(__,FUNC), __CONCATX(__,__CONCATX(FUNC,l))) -+weak_aliasx (__CONCATX(__,FUNC), __CONCATX(FUNC,l)) -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_lrintf.c glibc/ports/sysdeps/aarch64/fpu/s_lrintf.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_lrintf.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_lrintf.c 2012-09-24 13:09:43.000000000 +0100 -@@ -0,0 +1,22 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC lrintf -+#define ITYPE float -+#define IREGS "s" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_lround.c glibc/ports/sysdeps/aarch64/fpu/s_lround.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_lround.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_lround.c 2012-09-24 13:09:50.000000000 +0100 -@@ -0,0 +1,58 @@ -+/* Copyright (C) 1996, 1997, 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+#ifndef FUNC -+#define FUNC lround -+#endif -+ -+#ifndef ITYPE -+#define ITYPE double -+#define IREGS "d" -+#else -+#ifndef IREGS -+#error IREGS not defined -+#endif -+#endif -+ -+#ifndef OTYPE -+#define OTYPE long int -+#endif -+ -+#define OREGS "x" -+ -+#define __CONCATX(a,b) __CONCAT(a,b) -+ -+OTYPE -+__CONCATX(__,FUNC) (x) -+ ITYPE x; -+{ -+ OTYPE result; -+ asm ( "fcvtas" "\t%" OREGS "0, %" IREGS "1" -+ : "=r" (result) : "w" (x) ); -+ return result; -+} -+ -+#define weak_aliasx(a,b) weak_alias(a,b) -+weak_aliasx (__CONCATX(__,FUNC), FUNC) -+#define strong_aliasx(a,b) strong_alias(a,b) -+#ifdef NO_LONG_DOUBLE -+strong_aliasx (__CONCATX(__,FUNC), __CONCATX(__,__CONCATX(FUNC,l))) -+weak_aliasx (__CONCATX(__,FUNC), __CONCATX(FUNC,l)) -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_lroundf.c glibc/ports/sysdeps/aarch64/fpu/s_lroundf.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_lroundf.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_lroundf.c 2012-09-24 13:09:56.000000000 +0100 -@@ -0,0 +1,22 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC lroundf -+#define ITYPE float -+#define IREGS "s" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_nearbyint.c glibc/ports/sysdeps/aarch64/fpu/s_nearbyint.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_nearbyint.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_nearbyint.c 2012-09-24 13:09:59.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC nearbyint -+#define INSN "frinti" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_nearbyintf.c glibc/ports/sysdeps/aarch64/fpu/s_nearbyintf.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_nearbyintf.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_nearbyintf.c 2012-09-24 13:10:01.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC nearbyintf -+#define INSN "frinti" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_rint.c glibc/ports/sysdeps/aarch64/fpu/s_rint.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_rint.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_rint.c 2012-09-24 13:10:04.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC rint -+#define INSN "frintx" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_rintf.c glibc/ports/sysdeps/aarch64/fpu/s_rintf.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_rintf.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_rintf.c 2012-09-24 13:10:07.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC rintf -+#define INSN "frintx" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_round.c glibc/ports/sysdeps/aarch64/fpu/s_round.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_round.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_round.c 2012-09-24 13:10:11.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC round -+#define INSN "frinta" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_roundf.c glibc/ports/sysdeps/aarch64/fpu/s_roundf.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_roundf.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_roundf.c 2012-09-24 13:10:14.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC roundf -+#define INSN "frinta" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_trunc.c glibc/ports/sysdeps/aarch64/fpu/s_trunc.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_trunc.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_trunc.c 2012-09-24 13:10:17.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC trunc -+#define INSN "frintz" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu/s_truncf.c glibc/ports/sysdeps/aarch64/fpu/s_truncf.c ---- glibc.orig/ports/sysdeps/aarch64/fpu/s_truncf.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu/s_truncf.c 2012-09-24 13:10:20.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define FUNC truncf -+#define INSN "frintz" -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fpu-control.h glibc/ports/sysdeps/aarch64/fpu-control.h ---- glibc.orig/ports/sysdeps/aarch64/fpu-control.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fpu-control.h 2012-09-24 13:10:39.000000000 +0100 -@@ -0,0 +1,78 @@ -+/* Copyright (C) 1996-1998, 2000, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _FPU_CONTROL_H -+#define _FPU_CONTROL_H -+ -+/* Macros for accessing the FPCR and FPSR. */ -+ -+#define _FPU_GETFPCR(fpcr) \ -+ __asm__ __volatile__ ("mrs %0, fpcr" : "=r" (fpcr)) -+ -+#define _FPU_SETFPCR(fpcr) \ -+ __asm__ __volatile__ ("msr fpcr, %0" : : "r" (fpcr)) -+ -+#define _FPU_GETFPSR(fpsr) \ -+ __asm__ __volatile__ ("mrs %0, fpsr" : "=r" (fpsr)) -+ -+#define _FPU_SETFPSR(fpsr) \ -+ __asm__ __volatile__ ("msr fpsr, %0" : : "r" (fpsr)) -+ -+#define _ISB() \ -+ __asm__ __volatile__ ("isb") -+ -+/* Reserved bits should be preserved when modifying register -+ contents. These two masks indicate which bits in each of FPCR and -+ FPSR should not be changed. */ -+ -+#define _FPU_FPCR_RESERVED 0xfe0fe0ff -+#define _FPU_FPSR_RESERVED 0x0fffffe0 -+ -+#define _FPU_FPCR_DEFAULT 0x00000000 -+#define _FPU_FPSR_DEFAULT 0x00000000 -+ -+/* Layout of FPCR and FPSR: -+ -+ | | | | | | | | -+ 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 -+ s s s s s s s s s s s -+ c c c c c c c c c c c c -+ N Z C V Q A D F R R S S S L L L I U U I U O D I I U U I U O D I -+ C H N Z M M T T B E E E D N N X F F Z O D N N X F F Z O -+ P O O R R Z N N N E K K E E E E E C K K C C C C C -+ D D I I P -+ E E D D -+ E E -+ */ -+#define _FPU_FPCR_MASK_IXE 0x1000 -+#define _FPU_FPCR_MASK_UFE 0x0800 -+#define _FPU_FPCR_MASK_OFE 0x0400 -+#define _FPU_FPCR_MASK_DZE 0x0200 -+#define _FPU_FPCR_MASK_IOE 0x0100 -+ -+#define _FPU_FPCR_IEEE \ -+ (_FPU_FPCR_DEFAULT | _FPU_FPCR_MASK_IXE | \ -+ _FPU_FPCR_MASK_UFE | _FPU_FPCR_MASK_OFE | \ -+ _FPU_FPCR_MASK_DZE | _FPU_FPCR_MASK_IOE) -+ -+#define _FPU_FPSR_IEEE 0 -+ -+typedef unsigned int fpu_fpcr_t; -+typedef unsigned int fpu_fpsr_t; -+ -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fraiseexcpt.c glibc/ports/sysdeps/aarch64/fraiseexcpt.c ---- glibc.orig/ports/sysdeps/aarch64/fraiseexcpt.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fraiseexcpt.c 2012-09-24 13:10:52.000000000 +0100 -@@ -0,0 +1,92 @@ -+/* Copyright (C) 1997-2002, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+ -+int -+feraiseexcept (int excepts) -+{ -+ int fpsr; -+ const float fp_zero = 0.0; -+ const float fp_one = 1.0; -+ const float fp_max = FLT_MAX; -+ const float fp_min = FLT_MIN; -+ const float fp_1e32 = 1.0e32f; -+ const float fp_two = 2.0; -+ const float fp_three = 3.0; -+ -+ /* Raise exceptions represented by EXCEPTS. But we must raise only -+ one signal at a time. It is important that if the OVERFLOW or -+ UNDERFLOW exception and the inexact exception are given at the -+ same time, the OVERFLOW or UNDERFLOW exception precedes the -+ INEXACT exception. -+ -+ After each exception we read from the FPSR, to force the -+ exception to be raised immediately. */ -+ -+ if (FE_INVALID & excepts) -+ __asm__ __volatile__ ( -+ "ldr s0, %1\n\t" -+ "fdiv s0, s0, s0\n\t" -+ "mrs %0, fpsr" : "=r" (fpsr) -+ : "m" (fp_zero) -+ : "d0"); -+ -+ if (FE_DIVBYZERO & excepts) -+ __asm__ __volatile__ ( -+ "ldr s0, %1\n\t" -+ "ldr s1, %2\n\t" -+ "fdiv s0, s0, s1\n\t" -+ "mrs %0, fpsr" : "=r" (fpsr) -+ : "m" (fp_one), "m" (fp_zero) -+ : "d0", "d1"); -+ -+ if (FE_OVERFLOW & excepts) -+ /* There's no way to raise overflow without also raising inexact. */ -+ __asm__ __volatile__ ( -+ "ldr s0, %1\n\t" -+ "ldr s1, %2\n\t" -+ "fadd s0, s0, s1\n\t" -+ "mrs %0, fpsr" : "=r" (fpsr) -+ : "m" (fp_max), "m" (fp_1e32) -+ : "d0", "d1"); -+ -+ if (FE_UNDERFLOW & excepts) -+ __asm__ __volatile__ ( -+ "ldr s0, %1\n\t" -+ "ldr s1, %2\n\t" -+ "fdiv s0, s0, s1\n\t" -+ "mrs %0, fpsr" : "=r" (fpsr) -+ : "m" (fp_min), "m" (fp_three) -+ : "d0", "d1"); -+ -+ if (FE_INEXACT & excepts) -+ __asm__ __volatile__ ( -+ "ldr s0, %1\n\t" -+ "ldr s1, %2\n\t" -+ "fdiv s0, s0, s1\n\t" -+ "mrs %0, fpsr" : "=r" (fpsr) -+ : "m" (fp_two), "m" (fp_three) -+ : "d0", "d1"); -+ -+ return 0; -+} -+ -+libm_hidden_def (feraiseexcept) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/fsetexcptflg.c glibc/ports/sysdeps/aarch64/fsetexcptflg.c ---- glibc.orig/ports/sysdeps/aarch64/fsetexcptflg.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/fsetexcptflg.c 2012-09-24 13:11:07.000000000 +0100 -@@ -0,0 +1,39 @@ -+/* Copyright (C) 1997-2001, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+ -+int -+fesetexceptflag (const fexcept_t *flagp, int excepts) -+{ -+ fpu_fpsr_t fpsr; -+ -+ /* Get the current environment. */ -+ _FPU_GETFPSR (fpsr); -+ -+ /* Set the desired exception mask. */ -+ fpsr &= ~(excepts & FE_ALL_EXCEPT); -+ fpsr |= (*flagp & excepts & FE_ALL_EXCEPT); -+ -+ /* Save state back to the FPU. */ -+ _FPU_SETFPSR (fpsr); -+ -+ return 0; -+} -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/ftestexcept.c glibc/ports/sysdeps/aarch64/ftestexcept.c ---- glibc.orig/ports/sysdeps/aarch64/ftestexcept.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/ftestexcept.c 2012-09-24 13:11:16.000000000 +0100 -@@ -0,0 +1,32 @@ -+/* Copyright (C) 1997, 1998, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+int -+fetestexcept (int excepts) -+{ -+ fpu_fpsr_t fpsr; -+ -+ /* Get current exceptions. */ -+ _FPU_GETFPSR(fpsr); -+ -+ return fpsr & excepts & FE_ALL_EXCEPT; -+} -+libm_hidden_def (fetestexcept) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/jmpbuf-offsets.h glibc/ports/sysdeps/aarch64/jmpbuf-offsets.h ---- glibc.orig/ports/sysdeps/aarch64/jmpbuf-offsets.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/jmpbuf-offsets.h 2012-09-24 13:11:26.000000000 +0100 -@@ -0,0 +1,44 @@ -+/* Copyright (C) 2006, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library. If not, see -+ . */ -+ -+#define JB_X19 0 -+#define JB_X20 1 -+#define JB_X21 2 -+#define JB_X22 3 -+#define JB_X23 4 -+#define JB_X24 5 -+#define JB_X25 6 -+#define JB_X26 7 -+#define JB_X27 8 -+#define JB_X28 9 -+#define JB_X29 10 -+#define JB_LR 11 -+#define JB_SP 13 -+ -+#define JB_D8 14 -+#define JB_D9 15 -+#define JB_D10 16 -+#define JB_D11 17 -+#define JB_D12 18 -+#define JB_D13 19 -+#define JB_D14 20 -+#define JB_D15 21 -+ -+/* Helper for generic ____longjmp_chk(). */ -+#define JB_FRAME_ADDRESS(buf) \ -+ ((void *) (unsigned long) (buf[JB_SP])) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/jmpbuf-unwind.h glibc/ports/sysdeps/aarch64/jmpbuf-unwind.h ---- glibc.orig/ports/sysdeps/aarch64/jmpbuf-unwind.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/jmpbuf-unwind.h 2012-09-24 13:11:36.000000000 +0100 -@@ -0,0 +1,46 @@ -+/* Copyright (C) 2005, 2006, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+ -+/* Test if longjmp to JMPBUF would unwind the frame -+ containing a local variable at ADDRESS. */ -+#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ -+ ((void *) (address) < (void *) demangle (jmpbuf[JB_SP])) -+ -+#define _JMPBUF_CFA_UNWINDS_ADJ(jmpbuf, context, adj) \ -+ _JMPBUF_UNWINDS_ADJ (jmpbuf, (void *) _Unwind_GetCFA (context), adj) -+ -+static inline uintptr_t __attribute__ ((unused)) -+_jmpbuf_sp (__jmp_buf jmpbuf) -+{ -+ uintptr_t sp = jmpbuf[JB_SP]; -+#ifdef PTR_DEMANGLE -+ PTR_DEMANGLE (sp); -+#endif -+ return sp; -+} -+ -+#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ -+ ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) -+ -+/* We use the normal longjmp for unwinding. */ -+#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/ldsodefs.h glibc/ports/sysdeps/aarch64/ldsodefs.h ---- glibc.orig/ports/sysdeps/aarch64/ldsodefs.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/ldsodefs.h 2012-09-24 13:11:46.000000000 +0100 -@@ -0,0 +1,48 @@ -+/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _AARCH64_LDSODEFS_H -+#define _AARCH64_LDSODEFS_H 1 -+ -+#include -+ -+struct La_aarch64_regs; -+struct La_aarch64_retval; -+ -+#define ARCH_PLTENTER_MEMBERS \ -+ ElfW(Addr) (*aarch64_gnu_pltenter) (ElfW(Sym) *, \ -+ unsigned int, \ -+ uintptr_t *, \ -+ uintptr_t *, \ -+ struct La_aarch64_regs *, \ -+ unsigned int *, \ -+ const char *, \ -+ long int *) -+ -+#define ARCH_PLTEXIT_MEMBERS \ -+ ElfW(Addr) (*aarch64_gnu_pltexit) (ElfW(Sym) *, \ -+ unsigned int, \ -+ uintptr_t *, \ -+ uintptr_t *, \ -+ struct La_aarch64_regs *, \ -+ struct La_aarch64_retval *, \ -+ const char *) -+ -+#include_next -+ -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/libc-tls.c glibc/ports/sysdeps/aarch64/libc-tls.c ---- glibc.orig/ports/sysdeps/aarch64/libc-tls.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/libc-tls.c 2012-09-24 13:11:55.000000000 +0100 -@@ -0,0 +1,32 @@ -+/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+/* On AArch64, 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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/libm-test-ulps glibc/ports/sysdeps/aarch64/libm-test-ulps ---- glibc.orig/ports/sysdeps/aarch64/libm-test-ulps 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/libm-test-ulps 2012-09-28 12:55:43.000000000 +0100 -@@ -0,0 +1,3726 @@ -+# Begin of automatic generation -+ -+# acos_downward -+Test "acos_downward (-0) == pi/2": -+float: 1 -+ifloat: 1 -+Test "acos_downward (-0.5) == M_PI_6l*4.0": -+double: 1 -+idouble: 1 -+Test "acos_downward (-1) == pi": -+float: 1 -+ifloat: 1 -+Test "acos_downward (0) == pi/2": -+float: 1 -+ifloat: 1 -+Test "acos_downward (0.5) == M_PI_6l*2.0": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# acos_towardzero -+Test "acos_towardzero (-0) == pi/2": -+float: 1 -+ifloat: 1 -+Test "acos_towardzero (-0.5) == M_PI_6l*4.0": -+double: 1 -+idouble: 1 -+Test "acos_towardzero (-1) == pi": -+float: 1 -+ifloat: 1 -+Test "acos_towardzero (0) == pi/2": -+float: 1 -+ifloat: 1 -+Test "acos_towardzero (0.5) == M_PI_6l*2.0": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# acos_upward -+Test "acos_upward (-0) == pi/2": -+ildouble: 1 -+ldouble: 1 -+Test "acos_upward (-1) == pi": -+ildouble: 1 -+ldouble: 1 -+Test "acos_upward (0) == pi/2": -+ildouble: 1 -+ldouble: 1 -+ -+# asin_downward -+Test "asin_downward (-0.5) == -pi/6": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "asin_downward (-1.0) == -pi/2": -+ildouble: 1 -+ldouble: 1 -+Test "asin_downward (0.5) == pi/6": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "asin_downward (1.0) == pi/2": -+float: 1 -+ifloat: 1 -+ -+# asin_towardzero -+Test "asin_towardzero (-0.5) == -pi/6": -+double: 1 -+idouble: 1 -+Test "asin_towardzero (-1.0) == -pi/2": -+float: 1 -+ifloat: 1 -+Test "asin_towardzero (0.5) == pi/6": -+double: 1 -+idouble: 1 -+Test "asin_towardzero (1.0) == pi/2": -+float: 1 -+ifloat: 1 -+ -+# asin_upward -+Test "asin_upward (-1.0) == -pi/2": -+float: 1 -+ifloat: 1 -+Test "asin_upward (1.0) == pi/2": -+ildouble: 1 -+ldouble: 1 -+ -+# atan2 -+Test "atan2 (-0.00756827042671106339, -.001792735857538728036) == -1.80338464113663849327153994379639112": -+ildouble: 1 -+ldouble: 1 -+Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# atanh -+Test "atanh (0.75) == 0.972955074527656652552676371721589865": -+float: 1 -+ifloat: 1 -+ -+# cacos -+Test "Imaginary part of: cacos (+0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cacos (+0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+Test "Imaginary part of: cacos (+0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: cacos (+0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cacos (+0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cacos (+0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cacos (-0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cacos (-0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+Test "Imaginary part of: cacos (-0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: cacos (-0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cacos (-0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cacos (-0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cacos (-1.5 + +0 i) == pi - 0.9624236501192068949955178268487368462704 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacos (0.5 + +0 i) == 1.047197551196597746154214461093167628066 - 0 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacos (0.5 - 0 i) == 1.047197551196597746154214461093167628066 + +0 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cacos (1.5 + +0 i) == +0 - 0.9624236501192068949955178268487368462704 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# cacosh -+Test "Real part of: cacosh (+0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (+0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (+0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (+0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (+0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (+0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (-0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (-0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (-0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (-0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (-0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (-0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cacosh (-0.5 + +0 i) == +0 + 2.094395102393195492308428922186335256131 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: cacosh (-0.5 - 0 i) == +0 - 2.094395102393195492308428922186335256131 i": -+double: 1 -+idouble: 1 -+Test "Real part of: cacosh (-1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + pi i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (-1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - pi i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + +0 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cacosh (1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - 0 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# casin -+Test "Imaginary part of: casin (+0 + 0.5 i) == +0 + 0.4812118250596034474977589134243684231352 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: casin (+0 + 1.0 i) == +0 + 0.8813735870195430252326093249797923090282 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+Test "Imaginary part of: casin (+0 + 1.5 i) == +0 + 1.194763217287109304111930828519090523536 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: casin (+0 - 0.5 i) == +0 - 0.4812118250596034474977589134243684231352 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: casin (+0 - 1.0 i) == +0 - 0.8813735870195430252326093249797923090282 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: casin (+0 - 1.5 i) == +0 - 1.194763217287109304111930828519090523536 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: casin (-0 + 0.5 i) == -0 + 0.4812118250596034474977589134243684231352 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: casin (-0 + 1.0 i) == -0 + 0.8813735870195430252326093249797923090282 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+Test "Imaginary part of: casin (-0 + 1.5 i) == -0 + 1.194763217287109304111930828519090523536 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: casin (-0 - 0.5 i) == -0 - 0.4812118250596034474977589134243684231352 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: casin (-0 - 1.0 i) == -0 - 0.8813735870195430252326093249797923090282 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: casin (-0 - 1.5 i) == -0 - 1.194763217287109304111930828519090523536 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: casin (-1.5 + +0 i) == -pi/2 + 0.9624236501192068949955178268487368462704 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: casin (1.5 + +0 i) == pi/2 + 0.9624236501192068949955178268487368462704 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# casinh -+Test "Real part of: casinh (-0 + 1.5 i) == -0.9624236501192068949955178268487368462704 + pi/2 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: casinh (-0 - 1.5 i) == -0.9624236501192068949955178268487368462704 - pi/2 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: casinh (-0.5 + +0 i) == -0.4812118250596034474977589134243684231352 + +0 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: casinh (-0.5 - 0 i) == -0.4812118250596034474977589134243684231352 - 0 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: casinh (-1.0 + +0 i) == -0.8813735870195430252326093249797923090282 + +0 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+Test "Real part of: casinh (-1.0 - 0 i) == -0.8813735870195430252326093249797923090282 - 0 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+Test "Real part of: casinh (-1.5 + +0 i) == -1.194763217287109304111930828519090523536 + +0 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: casinh (-1.5 - 0 i) == -1.194763217287109304111930828519090523536 - 0 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": -+double: 5 -+float: 1 -+idouble: 5 -+ifloat: 1 -+ildouble: 4 -+ldouble: 4 -+Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i": -+double: 3 -+float: 6 -+idouble: 3 -+ifloat: 6 -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: casinh (0.5 + +0 i) == 0.4812118250596034474977589134243684231352 + +0 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: casinh (0.5 - 0 i) == 0.4812118250596034474977589134243684231352 - 0 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: casinh (1.0 + +0 i) == 0.8813735870195430252326093249797923090282 + +0 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: casinh (1.0 - 0 i) == 0.8813735870195430252326093249797923090282 - 0 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: casinh (1.5 + +0 i) == 1.194763217287109304111930828519090523536 + +0 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: casinh (1.5 - 0 i) == 1.194763217287109304111930828519090523536 - 0 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# catan -+Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i": -+ildouble: 1 -+ldouble: 1 -+ -+# catanh -+Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i": -+double: 4 -+idouble: 4 -+Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i": -+ildouble: 1 -+ldouble: 1 -+ -+# cbrt -+Test "cbrt (-0.001) == -0.1": -+ildouble: 1 -+ldouble: 1 -+Test "cbrt (-27.0) == -3.0": -+double: 1 -+idouble: 1 -+Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217": -+double: 1 -+idouble: 1 -+ -+# ccos -+Test "Imaginary part of: ccos (-0.75 + 11357.25 i) == 9.001213196851067077465606717616495588201e4931 + 8.385498349388321535962327491346664141020e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccos (-0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ccos (-0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccos (-0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccos (-0.75 - 11357.25 i) == 9.001213196851067077465606717616495588201e4931 - 8.385498349388321535962327491346664141020e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccos (-0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ccos (-0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccos (-0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: ccos (0.75 + 11357.25 i) == 9.001213196851067077465606717616495588201e4931 - 8.385498349388321535962327491346664141020e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccos (0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ccos (0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccos (0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccos (0.75 - 11357.25 i) == 9.001213196851067077465606717616495588201e4931 + 8.385498349388321535962327491346664141020e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccos (0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ccos (0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccos (0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccos (0x1p-1074 + 1440 i) == inf - 5.981479269486130556466515778180916082415e301 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: ccos (0x1p-16434 + 22730 i) == inf - 1.217853148905605987081057582351152052687e4924 i": -+ildouble: 1 -+ldouble: 1 -+ -+# ccosh -+Test "Imaginary part of: ccosh (-11357.25 + 0.75 i) == 9.001213196851067077465606717616495588201e4931 - 8.385498349388321535962327491346664141020e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccosh (-11357.25 - 0.75 i) == 9.001213196851067077465606717616495588201e4931 + 8.385498349388321535962327491346664141020e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccosh (-710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccosh (-710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ccosh (-89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccosh (-89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ccosh (-89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccosh (-89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: ccosh (11357.25 + 0.75 i) == 9.001213196851067077465606717616495588201e4931 + 8.385498349388321535962327491346664141020e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccosh (11357.25 - 0.75 i) == 9.001213196851067077465606717616495588201e4931 - 8.385498349388321535962327491346664141020e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: ccosh (22730 + 0x1p-16434 i) == inf + 1.217853148905605987081057582351152052687e4924 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccosh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccosh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ccosh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccosh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ccosh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ccosh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# cexp -+Test "Imaginary part of: cexp (-10000 + 0x1p16383 i) == 1.045876464564882298442774542991176546722e-4343 + 4.421154026488516836023811173959413420548e-4344 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cexp (-720 + 0.75 i) == 1.486960657116368433685753325516638551722e-313 + 1.385247284245720590980701226843815229385e-313 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cexp (-95 + 0.75 i) == 4.039714446238306526889476684000081624047e-42 + 3.763383677300535390271646960780570275931e-42 i": -+double: 1 -+idouble: 1 -+Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cexp (1440 + 0x1p-1074 i) == inf + 1.196295853897226111293303155636183216483e302 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: cexp (1440 + 0x1p-1074 i) == inf + 1.196295853897226111293303155636183216483e302 i plus overflow exception": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: cexp (22730 + 0x1p-16434 i) == inf + 2.435706297811211974162115164702304105374e4924 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cexp (22730 + 0x1p-16434 i) == inf + 2.435706297811211974162115164702304105374e4924 i plus overflow exception": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i": -+double: 1 -+idouble: 1 -+Test "Real part of: cexp (500 + 0x1p1023 i) == -1.159886268932754433233243794561351783426e217 + 7.904017694554466595359379965081774849708e216 i": -+double: 1 -+idouble: 1 -+Test "Real part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i": -+float: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+# clog -+Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 2.649094276923003995420209214900915462737e-10 + 3.141592653589793238462643383279502884197 i": -+double: 1 -+idouble: 1 -+Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 2.649094282537168795982991778475646793277e-10 + 3.141592652530155111500161671113150737892 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i) == 5.354083939753840089583620652120903838944e-25 - 1.570796326795931422008642456283782656359 i": -+float: 1 -+ifloat: 1 -+Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + pi i": -+float: 1 -+ifloat: 1 -+Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - pi i": -+float: 1 -+ifloat: 1 -+Test "Real part of: clog (-0x1.fp+16383 + 0x1p-16445 i) == 11356.49165759582936919077408168801636572 + pi i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (-0x1.fp+16383 + 0x1p-16494 i) == 11356.49165759582936919077408168801636572 + pi i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (-0x1.fp+16383 - 0x1p-16445 i) == 11356.49165759582936919077408168801636572 - pi i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (-0x1.fp+16383 - 0x1p-16494 i) == 11356.49165759582936919077408168801636572 - pi i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i": -+float: 1 -+ifloat: 1 -+Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i": -+float: 1 -+ifloat: 1 -+Test "Real part of: clog (-0x1p-16445 + 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 + pi/2 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (-0x1p-16445 - 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 - pi/2 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (-0x1p-16494 + 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 + pi/2 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (-0x1p-16494 - 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 - pi/2 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i) == 8.298731898331237038231468223024422855654e-5 + 1.110938609507128729312743251313024793990e-3 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: clog (0x1.000566p0 + 0x1.234p-10 i) == 8.298731898331237038231468223024422855654e-5 + 1.110938609507128729312743251313024793990e-3 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: clog (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 709.8942846690411016323109979483151967689 + 0.4636476090008061606231772164674799632783 i": -+double: 1 -+idouble: 1 -+Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + +0 i": -+float: 1 -+ifloat: 1 -+Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - 0 i": -+float: 1 -+ifloat: 1 -+Test "Real part of: clog (0x1.fp+16383 + 0x1.fp+16383 i) == 11356.83823118610934184548269774874545400 + pi/4 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (0x1.fp+16383 + 0x1p-16445 i) == 11356.49165759582936919077408168801636572 + +0 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (0x1.fp+16383 + 0x1p-16494 i) == 11356.49165759582936919077408168801636572 + +0 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (0x1.fp+16383 - 0x1p-16445 i) == 11356.49165759582936919077408168801636572 - 0 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (0x1.fp+16383 - 0x1p-16494 i) == 11356.49165759582936919077408168801636572 - 0 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i) == -744.0934983311012896593986823853525458290 + pi/4 i": -+double: 1 -+idouble: 1 -+Test "Real part of: clog (0x1p-147 + 0x1p-147 i) == -101.5460619520319878296245057936228672231 + pi/4 i": -+float: 1 -+ifloat: 1 -+Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i": -+float: 1 -+ifloat: 1 -+Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i": -+float: 1 -+ifloat: 1 -+Test "Real part of: clog (0x1p-16445 + 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 + pi/2 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (0x1p-16445 - 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 - pi/2 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (0x1p-16494 + 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 + pi/2 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (0x1p-16494 - 0x1.fp+16383 i) == 11356.49165759582936919077408168801636572 - pi/2 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog (1.0 + 0x1.234566p-10 i) == 6.172834701221959432440126967147726538097e-7 + 1.111110564353742042376451655136933182201e-3 i": -+float: 1 -+ifloat: 1 -+ -+# clog10 -+Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i": -+double: 2 -+idouble: 2 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i": -+double: 1 -+idouble: 1 -+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i": -+double: 2 -+idouble: 2 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (-0x1.fp+1023 + 0x1p-1074 i) == 308.2409272754311106024666378243768099991 + 1.364376353841841347485783625431355770210 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (-0x1.fp+1023 - 0x1p-1074 i) == 308.2409272754311106024666378243768099991 - 1.364376353841841347485783625431355770210 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (-0x1.fp+127 + 0x1p-149 i) == 38.51805116050395969095658815123105801479 + 1.364376353841841347485783625431355770210 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (-0x1.fp+127 - 0x1p-149 i) == 38.51805116050395969095658815123105801479 - 1.364376353841841347485783625431355770210 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (-0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (-0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (-0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (-0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i) == 2.556638434669064077889576526006849923281e-13 + 1.364375882602207106407956770293808181427 i": -+double: 1 -+idouble: 1 -+Test "Real part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (-inf + inf i) == inf + 3/4 pi*log10(e) i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog10 (0x1.00000000000000123456789abcp0 + 0x1.23456789p-1000 i) == 4.285899851347756186652871946325962330640e-19 + 4.611541215247321502041995872887317363241e-302 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: clog10 (0x1.00000000000000123456789abcp0 + 0x1.23456789p-1000 i) == 4.285899851347756186652871946325962330640e-19 + 4.611541215247321502041995872887317363241e-302 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: clog10 (0x1.00000000000000123456789abcp0 + 0x1.23456789p-60 i) == 4.285899851347756188767674032946882584784e-19 + 4.285899850759344225805480528847018395861e-19 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i": -+double: 1 -+idouble: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-100 i) == 3.577293486783822178310971763308187385546e-5 + 3.897399639875661463735636919790792140598e-31 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-100 i) == 3.577293486783822178310971763308187385546e-5 + 3.897399639875661463735636919790792140598e-31 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: clog10 (0x1.234566p-30 + 1.0 i) == 2.438200411482400072282924063740535840474e-19 + 6.821881764607257184291586401763604544928e-1 i": -+float: 1 -+ifloat: 1 -+Test "Real part of: clog10 (0x1.234566p-50 + 1.0 i) == 2.217530356103816369479108963807448194409e-31 + 6.821881769209202348667823902864283966959e-1 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i) == 2.217530356103816369479108963807448194409e-31 + 6.821881769209202348667823902864283966959e-1 i": -+float: 1 -+ifloat: 1 -+Test "Real part of: clog10 (0x1.234566p-60 + 1.0 i) == 2.114801746467415208319767917450504756866e-37 + 6.821881769209206733143018621078368211515e-1 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: clog10 (0x1.234566p-60 + 1.0 i) == 2.114801746467415208319767917450504756866e-37 + 6.821881769209206733143018621078368211515e-1 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i) == 38.68235441693561449174780668781319348761 + pi/4*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i) == 38.53183941910362389414093724045094697423 + 1.276276851248440096917018665609900318458e-39 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 308.4052305577487344482591243175787477115 + pi/4*log10(e) i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 308.3031705664207720674749211936626341569 + 0.2013595981366865903254995612594728746470 i": -+double: 1 -+idouble: 1 -+Test "Real part of: clog10 (0x1.fp+16383 + 0x1.fp+16383 i) == 4932.212175672014259683102930239951947672 + pi/4*log10(e) i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: clog10 (0x1.fp+16383 + 0x1p+16383 i) == 4932.112944269463028900262609694408579449 + 0.2069271710841128115912940666587802677383 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: clog10 (0x1p-1073 + 0x1p-1073 i) == -322.8546703496198318667349645920187712089 + pi/4*log10(e) i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i": -+double: 1 -+idouble: 1 -+Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i) == -44.10089436477324509881274807713822842154 + pi/4*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i) == -44.70295435610120748924022586658721447508 + pi/4*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (0x1p-509 + 1.0 i) == 7.730698388614835910296270976605350994446e-308 + 6.821881769209206737428918127156778851051e-1 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (0x1p-510 + 1.0 i) == 1.932674597153708977574067744151337748612e-308 + 6.821881769209206737428918127156778851051e-1 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (0x1p-511 + 1.0 i) == 4.831686492884272443935169360378344371529e-309 + 6.821881769209206737428918127156778851051e-1 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (0x1p-61 + 1.0 i) == 4.084085680564517578238994467153626207224e-38 + 6.821881769209206735545466044044889962925e-1 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (0x1p-62 + 1.0 i) == 1.021021420141129394559748616788406551878e-38 + 6.821881769209206736487192085600834406988e-1 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (0x1p-63 + 1.0 i) == 2.552553550352823486399371541971016379740e-39 + 6.821881769209206736958055106378806629019e-1 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i) == 2.680828048441605163181684680300513080769e-7 + 4.825491868832381486767558728169977751564e-4 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ -+# cos -+Test "cos (0x1p+120) == -9.25879022854837867303861764107414946730833e-01": -+float: 1 -+ifloat: 1 -+Test "cos (0x1p+127) == 7.81914638714960072263910298466369236613162e-01": -+float: 1 -+ifloat: 1 -+Test "cos (M_PI_6l * 2.0) == 0.5": -+double: 1 -+idouble: 1 -+Test "cos (M_PI_6l * 4.0) == -0.5": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# cos_downward -+Test "cos_downward (1) == 0.5403023058681397174009366074429766037323": -+float: 1 -+ifloat: 1 -+Test "cos_downward (10) == -0.8390715290764524522588639478240648345199": -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (2) == -0.4161468365471423869975682295007621897660": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (3) == -0.9899924966004454572715727947312613023937": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (4) == -0.6536436208636119146391681830977503814241": -+float: 1 -+ifloat: 1 -+Test "cos_downward (5) == 0.2836621854632262644666391715135573083344": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (6) == 0.9601702866503660205456522979229244054519": -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_downward (8) == -0.1455000338086135258688413818311946826093": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+# cos_tonearest -+Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+ -+# cos_towardzero -+Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199": -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (6) == 0.9601702866503660205456522979229244054519": -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+# cos_upward -+Test "cos_upward (1) == 0.5403023058681397174009366074429766037323": -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (10) == -0.8390715290764524522588639478240648345199": -+float: 1 -+ifloat: 1 -+Test "cos_upward (4) == -0.6536436208636119146391681830977503814241": -+ildouble: 1 -+ldouble: 1 -+Test "cos_upward (6) == 0.9601702866503660205456522979229244054519": -+float: 1 -+ifloat: 1 -+Test "cos_upward (7) == 0.7539022543433046381411975217191820122183": -+float: 1 -+ifloat: 1 -+Test "cos_upward (9) == -0.9111302618846769883682947111811653112463": -+float: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+# cosh_downward -+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# cosh_tonearest -+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997": -+ildouble: 1 -+ldouble: 1 -+ -+# cosh_towardzero -+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# cosh_upward -+Test "cosh_upward (22) == 1792456423.065795780980053377632656584997": -+ildouble: 1 -+ldouble: 1 -+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344": -+ildouble: 1 -+ldouble: 1 -+Test "cosh_upward (24) == 13244561064.92173614708845674912733665919": -+ildouble: 1 -+ldouble: 1 -+ -+# cpow -+Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i": -+double: 1 -+float: 4 -+idouble: 1 -+ifloat: 4 -+ildouble: 4 -+ldouble: 4 -+Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i": -+double: 2 -+float: 3 -+idouble: 2 -+ifloat: 3 -+ildouble: 11 -+ldouble: 11 -+Test "Real part of: cpow (2 + 0 i, 10 + 0 i) == 1024.0 + 0.0 i": -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": -+double: 1 -+float: 5 -+idouble: 1 -+ifloat: 5 -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": -+float: 2 -+ifloat: 2 -+Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i": -+double: 2 -+float: 2 -+idouble: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+# csin -+Test "Real part of: csin (-0.75 + 11357.25 i) == -8.385498349388321535962327491346664141020e4931 + 9.001213196851067077465606717616495588201e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csin (-0.75 + 710.5 i) == -1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csin (-0.75 + 89.5 i) == -2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csin (-0.75 + 89.5 i) == -2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csin (-0.75 - 11357.25 i) == -8.385498349388321535962327491346664141020e4931 - 9.001213196851067077465606717616495588201e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csin (-0.75 - 710.5 i) == -1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csin (-0.75 - 89.5 i) == -2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csin (-0.75 - 89.5 i) == -2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csin (0.75 + 11357.25 i) == 8.385498349388321535962327491346664141020e4931 + 9.001213196851067077465606717616495588201e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csin (0.75 + 710.5 i) == 1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csin (0.75 + 89.5 i) == 2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csin (0.75 + 89.5 i) == 2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csin (0.75 - 11357.25 i) == 8.385498349388321535962327491346664141020e4931 - 9.001213196851067077465606717616495588201e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csin (0.75 - 710.5 i) == 1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csin (0.75 - 89.5 i) == 2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csin (0.75 - 89.5 i) == 2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csin (0x1p-1074 + 1440 i) == 5.981479269486130556466515778180916082415e301 + inf i": -+double: 1 -+idouble: 1 -+Test "Real part of: csin (0x1p-16434 + 22730 i) == 1.217853148905605987081057582351152052687e4924 + inf i": -+ildouble: 1 -+ldouble: 1 -+ -+# csinh -+Test "Imaginary part of: csinh (-11357.25 + 0.75 i) == -9.001213196851067077465606717616495588201e4931 + 8.385498349388321535962327491346664141020e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csinh (-11357.25 - 0.75 i) == -9.001213196851067077465606717616495588201e4931 - 8.385498349388321535962327491346664141020e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: csinh (-710.5 + 0.75 i) == -1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csinh (-710.5 - 0.75 i) == -1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csinh (-89.5 + 0.75 i) == -2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csinh (-89.5 + 0.75 i) == -2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csinh (-89.5 - 0.75 i) == -2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csinh (-89.5 - 0.75 i) == -2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: csinh (11357.25 + 0.75 i) == 9.001213196851067077465606717616495588201e4931 + 8.385498349388321535962327491346664141020e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csinh (11357.25 - 0.75 i) == 9.001213196851067077465606717616495588201e4931 - 8.385498349388321535962327491346664141020e4931 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csinh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: csinh (22730 + 0x1p-16434 i) == inf + 1.217853148905605987081057582351152052687e4924 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csinh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csinh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csinh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csinh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csinh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csinh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# csqrt -+Test "Real part of: csqrt (-0x1.0000000000000000000000000001p-16382 - 0x1.0000000000000000000000000001p-16382 i) == 8.344545284118961663847948339519226074126e-2467 - 2.014551439675644900022606748976158925145e-2466 i": -+ldouble: 1 -+Test "Real part of: csqrt (-0x1.0000000000000002p-16382 - 0x1.0000000000000002p-16382 i) == 8.344545284118961664300307045791497724440e-2467 - 2.014551439675644900131815801350165472778e-2466 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csqrt (-0x1.0000000000000002p-16382 - 0x1.0000000000000002p-16382 i) == 8.344545284118961664300307045791497724440e-2467 - 2.014551439675644900131815801350165472778e-2466 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csqrt (-0x1.0000000000001p-1022 - 0x1.0000000000001p-1022 i) == 6.788430486774966350907249113759995429568e-155 - 1.638872094839911521020410942677082920935e-154 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i) == 4.934094449071842328766868579214125217132e-20 - 1.191195773697904627170323731331667740087e-19 i": -+double: 1 -+idouble: 1 -+Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csqrt (0.75 + 1.25 i) == 1.05065169626078392338656675760808326 + 0.594868882070379067881984030639932657 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csqrt (0x1.0000000000000000000000000001p-16382 + 0x1.0000000000000000000000000001p-16382 i) == 2.014551439675644900022606748976158925145e-2466 + 8.344545284118961663847948339519226074126e-2467 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csqrt (0x1.0000000000000002p-16382 + 0x1.0000000000000002p-16382 i) == 2.014551439675644900131815801350165472778e-2466 + 8.344545284118961664300307045791497724440e-2467 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csqrt (0x1.0000000000000002p-16382 + 0x1.0000000000000002p-16382 i) == 2.014551439675644900131815801350165472778e-2466 + 8.344545284118961664300307045791497724440e-2467 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csqrt (0x1.0000000000001p-1022 + 0x1.0000000000001p-1022 i) == 1.638872094839911521020410942677082920935e-154 + 6.788430486774966350907249113759995429568e-155 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i) == 1.191195773697904627170323731331667740087e-19 + 4.934094449071842328766868579214125217132e-20 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i) == 1.844674352395372953599975585936590505260e+19 + 2.710505511993121390769065968615872097053e-20 i": -+float: 1 -+ifloat: 1 -+Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 1.379778091031440685006200821918878702861e+154 + 3.257214233483129514781233066898042490248e+153 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i) == 1.179514222452201722651836720466795901016e+2466 + 4.885707879516577666702435054303191575148e+2465 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i) == 1.179514222452201722651836720466795901016e+2466 + 4.885707879516577666702435054303191575148e+2465 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1p+16383 i) == 1.106698967236475180613254276996359485630e+2466 + 2.687568007603946993388538156299100955642e+2465 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: csqrt (0x1p-16440 + 0x1p-16441 i) == 3.514690655930285351254618340783294558136e-2475 + 8.297059146828716918029689466551384219370e-2476 i": -+ildouble: 1 -+ldouble: 1 -+ -+# ctan -+Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: ctan (0x1p1023 + 1 i) == -0.2254627924997545057926782581695274244229 + 0.8786063118883068695462540226219865087189 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: ctan (0x1p1023 + 1 i) == -0.2254627924997545057926782581695274244229 + 0.8786063118883068695462540226219865087189 i": -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: ctan (0x1p127 + 1 i) == 0.2446359391192790896381501310437708987204 + 0.9101334047676183761532873794426475906201 i": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: ctan (0x1p127 + 1 i) == 0.2446359391192790896381501310437708987204 + 0.9101334047676183761532873794426475906201 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ctan (0x1p16383 + 1 i) == 0.1608598776370396607204448234354670036772 + 0.8133818522051542536316746743877629761488 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ctan (0x1p16383 + 1 i) == 0.1608598776370396607204448234354670036772 + 0.8133818522051542536316746743877629761488 i": -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: ctan (0x3.243f6cp-1 + 0 i) == -2.287733242885645987394874673945769518150e7 + 0.0 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ctan (1 + 355 i) == 8.140551093483276762350406321792653551513e-309 + 1.0 i": -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: ctan (1 + 365 i) == 1.677892637497921890115075995898773550884e-317 + 1.0 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ctan (1 + 45 i) == 1.490158918874345552942703234806348520895e-39 + 1.000000000000000000000000000000000000001 i": -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: ctan (1 + 47 i) == 2.729321264492904590777293425576722354636e-41 + 1.0 i": -+ildouble: 1 -+ldouble: 1 -+ -+# ctan_downward -+Test "Real part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i) == -3.986797629811710706723242948653362815645e19 + 5.793882568875674066286163141055208625180e-4912 i": -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": -+ildouble: 4 -+ldouble: 4 -+Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": -+ildouble: 3 -+ldouble: 3 -+Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": -+float: 1 -+ifloat: 1 -+ildouble: 5 -+ldouble: 5 -+ -+# ctan_tonearest -+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x1p-16445 i) == -3.986797629811710706723242948653362815645e19 + 5.793882568875674066286163141055208625180e-4912 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": -+ildouble: 3 -+ldouble: 3 -+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": -+ildouble: 3 -+ldouble: 3 -+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+# ctan_towardzero -+Test "Real part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x1p-16445 i) == -3.986797629811710706723242948653362815645e19 + 5.793882568875674066286163141055208625180e-4912 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": -+float: 1 -+ifloat: 1 -+ildouble: 5 -+ldouble: 5 -+ -+# ctan_upward -+Test "Real part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i) == -3.986797629811710706723242948653362815645e19 + 5.793882568875674066286163141055208625180e-4912 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i) == -3.986797629811710706723242948653362815645e19 + 5.793882568875674066286163141055208625180e-4912 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": -+double: 1 -+idouble: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i) == 1.633123935319536975596773704152891653086e16 + 1.317719414943508315995636961402669067843e-291 i": -+ildouble: 3 -+ldouble: 3 -+Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+ -+# ctanh -+Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i) == 0.0 - 2.287733242885645987394874673945769518150e7 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i": -+double: 1 -+idouble: 1 -+Test "Imaginary part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i": -+float: 1 -+ifloat: 1 -+Test "Real part of: ctanh (1 + 0x1p1023 i) == 0.8786063118883068695462540226219865087189 - 0.2254627924997545057926782581695274244229 i": -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: ctanh (1 + 0x1p1023 i) == 0.8786063118883068695462540226219865087189 - 0.2254627924997545057926782581695274244229 i": -+double: 1 -+idouble: 1 -+Test "Real part of: ctanh (1 + 0x1p127 i) == 0.9101334047676183761532873794426475906201 + 0.2446359391192790896381501310437708987204 i": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ctanh (1 + 0x1p127 i) == 0.9101334047676183761532873794426475906201 + 0.2446359391192790896381501310437708987204 i": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: ctanh (1 + 0x1p16383 i) == 0.8133818522051542536316746743877629761488 + 0.1608598776370396607204448234354670036772 i": -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: ctanh (1 + 0x1p16383 i) == 0.8133818522051542536316746743877629761488 + 0.1608598776370396607204448234354670036772 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ctanh (355 + 1 i) == 1.0 + 8.140551093483276762350406321792653551513e-309 i": -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: ctanh (365 + 1 i) == 1.0 + 1.677892637497921890115075995898773550884e-317 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ctanh (45 + 1 i) == 1.000000000000000000000000000000000000001 + 1.490158918874345552942703234806348520895e-39 i": -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: ctanh (47 + 1 i) == 1.0 + 2.729321264492904590777293425576722354636e-41 i": -+ildouble: 1 -+ldouble: 1 -+ -+# ctanh_downward -+Test "Real part of: ctanh_downward (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": -+ildouble: 3 -+ldouble: 3 -+Test "Imaginary part of: ctanh_downward (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": -+ildouble: 4 -+ldouble: 4 -+Test "Real part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": -+float: 1 -+ifloat: 1 -+ildouble: 5 -+ldouble: 5 -+Test "Imaginary part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: ctanh_downward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i) == 5.793882568875674066286163141055208625180e-4912 - 3.986797629811710706723242948653362815645e19 i": -+ildouble: 2 -+ldouble: 2 -+ -+# ctanh_tonearest -+Test "Real part of: ctanh_tonearest (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": -+ildouble: 3 -+ldouble: 3 -+Test "Imaginary part of: ctanh_tonearest (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": -+ildouble: 3 -+ldouble: 3 -+Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ctanh_tonearest (0x1p-16445 + 0x1.921fb54442d1846ap+0 i) == 5.793882568875674066286163141055208625180e-4912 - 3.986797629811710706723242948653362815645e19 i": -+ildouble: 1 -+ldouble: 1 -+ -+# ctanh_towardzero -+Test "Real part of: ctanh_towardzero (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": -+ildouble: 2 -+ldouble: 2 -+Test "Imaginary part of: ctanh_towardzero (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": -+ildouble: 1 -+ldouble: 1 -+Test "Real part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": -+float: 1 -+ifloat: 1 -+ildouble: 5 -+ldouble: 5 -+Test "Imaginary part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": -+float: 1 -+ifloat: 1 -+Test "Imaginary part of: ctanh_towardzero (0x1p-16445 + 0x1.921fb54442d1846ap+0 i) == 5.793882568875674066286163141055208625180e-4912 - 3.986797629811710706723242948653362815645e19 i": -+ildouble: 1 -+ldouble: 1 -+ -+# ctanh_upward -+Test "Real part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": -+ildouble: 3 -+ldouble: 3 -+Test "Imaginary part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i) == 1.317719414943508315995636961402669067843e-291 + 1.633123935319536975596773704152891653086e16 i": -+double: 1 -+idouble: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+Test "Imaginary part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "Real part of: ctanh_upward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i) == 5.793882568875674066286163141055208625180e-4912 - 3.986797629811710706723242948653362815645e19 i": -+ildouble: 1 -+ldouble: 1 -+Test "Imaginary part of: ctanh_upward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i) == 5.793882568875674066286163141055208625180e-4912 - 3.986797629811710706723242948653362815645e19 i": -+ildouble: 1 -+ldouble: 1 -+ -+# erf -+Test "erf (1.25) == 0.922900128256458230136523481197281140": -+double: 1 -+idouble: 1 -+ -+# erfc -+Test "erfc (0.75) == 0.288844366346484868401062165408589223": -+float: 1 -+ifloat: 1 -+Test "erfc (0x1.f7303cp+1) == 2.705500297238986897105236321218861842255e-8": -+double: 1 -+idouble: 1 -+Test "erfc (0x1.ffa002p+2) == 1.233585992097580296336099501489175967033e-29": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "erfc (0x1.ffffc8p+2) == 1.122671365033056305522366683719541099329e-29": -+ildouble: 1 -+ldouble: 1 -+Test "erfc (2.0) == 0.00467773498104726583793074363274707139": -+double: 1 -+idouble: 1 -+Test "erfc (27.0) == 0.523704892378925568501606768284954709e-318": -+ildouble: 1 -+ldouble: 1 -+Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8": -+double: 1 -+idouble: 1 -+ -+# errno -+Test "errno for pow(0,-odd) == ERANGE": -+float: -34 -+ -+# exp10 -+Test "exp10 (-1) == 0.1": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+Test "exp10 (-305) == 1.0e-305": -+double: 1 -+idouble: 1 -+Test "exp10 (-36) == 1.0e-36": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "exp10 (0.75) == 5.62341325190349080394951039776481231": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "exp10 (3) == 1000": -+double: 6 -+float: 2 -+idouble: 6 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+Test "exp10 (36) == 1.0e36": -+double: 1 -+idouble: 1 -+Test "exp10 (4932) == 1.0e4932": -+ildouble: 1 -+ldouble: 1 -+ -+# exp2 -+Test "exp2 (100.5) == 1.792728671193156477399422023278661496394e+30": -+ildouble: 1 -+ldouble: 1 -+ -+# exp_downward -+Test "exp_downward (2) == e^2": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "exp_downward (3) == e^3": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# exp_towardzero -+Test "exp_towardzero (2) == e^2": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "exp_towardzero (3) == e^3": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# exp_upward -+Test "exp_upward (1) == e": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# expm1 -+Test "expm1 (-79.0) == -0.9999999999999999999999999999999999509391": -+ildouble: 1 -+ldouble: 1 -+Test "expm1 (0.75) == 1.11700001661267466854536981983709561": -+double: 1 -+idouble: 1 -+Test "expm1 (1) == M_El - 1.0": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "expm1 (500.0) == 1.4035922178528374107397703328409120821806e+217": -+double: 1 -+idouble: 1 -+ -+# gamma -+Test "gamma (-0.5) == log(2*sqrt(pi))": -+ildouble: 1 -+ldouble: 1 -+ -+# hypot -+Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271": -+float: 1 -+ifloat: 1 -+Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271": -+float: 1 -+ifloat: 1 -+Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271": -+float: 1 -+ifloat: 1 -+Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271": -+float: 1 -+ifloat: 1 -+Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271": -+float: 1 -+ifloat: 1 -+Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271": -+float: 1 -+ifloat: 1 -+Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271": -+float: 1 -+ifloat: 1 -+Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271": -+float: 1 -+ifloat: 1 -+ -+# j0 -+Test "j0 (-0x1.001000001p+593) == -3.927269966354206207832593635798954916263e-90": -+ildouble: 1 -+ldouble: 1 -+Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "j0 (0x1.d7ce3ap+107) == 2.775523647291230802651040996274861694514e-17": -+float: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+Test "j0 (10.0) == -0.245935764451348335197760862485328754": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "j0 (2.0) == 0.223890779141235668051827454649948626": -+ildouble: 2 -+ldouble: 2 -+Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "j0 (8.0) == 0.171650807137553906090869407851972001": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# j1 -+Test "j1 (-1.0) == -0.440050585744933515959682203718914913": -+ildouble: 1 -+ldouble: 1 -+Test "j1 (0.75) == 0.349243602174862192523281016426251335": -+ildouble: 1 -+ldouble: 1 -+Test "j1 (0x1.3ffp+74) == 1.818984347516051243459364437186082741567e-12": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "j1 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "j1 (1.0) == 0.440050585744933515959682203718914913": -+ildouble: 1 -+ldouble: 1 -+Test "j1 (10.0) == 0.0434727461688614366697487680258592883": -+float: 2 -+ifloat: 2 -+ildouble: 2 -+ldouble: 2 -+Test "j1 (2.0) == 0.576724807756873387202448242269137087": -+double: 1 -+idouble: 1 -+Test "j1 (8.0) == 0.234636346853914624381276651590454612": -+double: 1 -+idouble: 1 -+ildouble: 4 -+ldouble: 4 -+ -+# jn -+Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "jn (0, 10.0) == -0.245935764451348335197760862485328754": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "jn (0, 2.0) == 0.223890779141235668051827454649948626": -+ildouble: 2 -+ldouble: 2 -+Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "jn (0, 8.0) == 0.171650807137553906090869407851972001": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "jn (1, -1.0) == -0.440050585744933515959682203718914913": -+ildouble: 1 -+ldouble: 1 -+Test "jn (1, 0.75) == 0.349243602174862192523281016426251335": -+ildouble: 1 -+ldouble: 1 -+Test "jn (1, 1.0) == 0.440050585744933515959682203718914913": -+ildouble: 1 -+ldouble: 1 -+Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883": -+float: 2 -+ifloat: 2 -+ildouble: 2 -+ldouble: 2 -+Test "jn (1, 2.0) == 0.576724807756873387202448242269137087": -+double: 1 -+idouble: 1 -+Test "jn (1, 8.0) == 0.234636346853914624381276651590454612": -+double: 1 -+idouble: 1 -+ildouble: 4 -+ldouble: 4 -+Test "jn (10, -1.0) == 0.263061512368745320699785368779050294e-9": -+ildouble: 1 -+ldouble: 1 -+Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "jn (10, 1.0) == 0.263061512368745320699785368779050294e-9": -+ildouble: 1 -+ldouble: 1 -+Test "jn (10, 10.0) == 0.207486106633358857697278723518753428": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+Test "jn (2, 0x1.ffff62p+99) == -4.43860668048170034334926693188979974489e-16": -+double: 2 -+float: 2 -+idouble: 2 -+ifloat: 2 -+Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2": -+double: 1 -+idouble: 1 -+Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563": -+double: 3 -+float: 1 -+idouble: 3 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "jn (3, 2.0) == 0.128943249474402051098793332969239835": -+float: 1 -+ifloat: 1 -+Test "jn (3, 2.4048255576957729) == 0.19899990535769083404042146764530813": -+double: 3 -+float: 2 -+idouble: 3 -+ildouble: 1 -+ldouble: 1 -+Test "jn (4, 2.4048255576957729) == 0.647466661641779720084932282551219891E-1": -+double: 1 -+float: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "jn (5, 2.4048255576957729) == 0.163892432048058525099230549946147698E-1": -+double: 3 -+float: 2 -+idouble: 3 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "jn (6, 2.4048255576957729) == 0.34048184720278336646673682895929161E-2": -+double: 4 -+float: 4 -+idouble: 4 -+ifloat: 3 -+ildouble: 5 -+ldouble: 5 -+Test "jn (7, 2.4048255576957729) == 0.60068836573295394221291569249883076E-3": -+double: 3 -+float: 5 -+idouble: 3 -+ifloat: 5 -+ildouble: 3 -+ldouble: 3 -+Test "jn (8, 2.4048255576957729) == 0.92165786705344923232879022467054148E-4": -+double: 3 -+float: 4 -+idouble: 3 -+ifloat: 2 -+ildouble: 8 -+ldouble: 8 -+Test "jn (9, 2.4048255576957729) == 0.12517270977961513005428966643852564E-4": -+double: 1 -+float: 5 -+idouble: 1 -+ifloat: 2 -+ildouble: 3 -+ldouble: 3 -+ -+# lgamma -+Test "lgamma (-0.5) == log(2*sqrt(pi))": -+ildouble: 1 -+ldouble: 1 -+Test "lgamma (0.7) == 0.260867246531666514385732417016759578": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+# llrint_downward -+Test "llrint_downward (-0.2) == -1": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-1.4) == -2": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-4503599627370495.4999999999999) == -4503599627370496LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-4503599627370496.25) == -4503599627370497LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-4503599627370496.4999999999999) == -4503599627370497LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-4503599627370496.5) == -4503599627370497LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-4503599627370497.4999999999999) == -4503599627370498LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-72057594037927936.25) == -72057594037927937LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-72057594037927936.5) == -72057594037927937LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-8388600.3) == -8388601": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-9007199254740991.4999999999999) == -9007199254740992LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-9007199254740992.25) == -9007199254740993LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-9007199254740992.4999999999999) == -9007199254740993LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-9007199254740992.5) == -9007199254740993LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-9007199254740993.4999999999999) == -9007199254740994LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-9223372036854775806.25) == -9223372036854775807LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (-9223372036854775806.5) == -9223372036854775807LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (4503599627370494.5000000000001) == 4503599627370494LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (4503599627370495.5) == 4503599627370495LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (4503599627370495.5000000000001) == 4503599627370495LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (4503599627370496.5000000000001) == 4503599627370496LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (4503599627370496.75) == 4503599627370496LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (4503599627370497.5) == 4503599627370497LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (72057594037927935.5) == 72057594037927935LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (72057594037927936.75) == 72057594037927936LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (72057594037927937.5) == 72057594037927937LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (9007199254740991.5) == 9007199254740991LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (9007199254740991.5000000000001) == 9007199254740991LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (9007199254740992.5000000000001) == 9007199254740992LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (9007199254740992.75) == 9007199254740992LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (9007199254740993.5) == 9007199254740993LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (9007199254740993.5000000000001) == 9007199254740993LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (9223372036854775805.5) == 9223372036854775805LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_downward (9223372036854775806.75) == 9223372036854775806LL": -+ildouble: 1 -+ldouble: 1 -+ -+# llrint_towardzero -+Test "llrint_towardzero (4503599627370494.5000000000001) == 4503599627370494LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (4503599627370495.5) == 4503599627370495LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (4503599627370495.5000000000001) == 4503599627370495LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (4503599627370496.5000000000001) == 4503599627370496LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (4503599627370496.75) == 4503599627370496LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (4503599627370497.5) == 4503599627370497LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (72057594037927935.5) == 72057594037927935LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (72057594037927936.75) == 72057594037927936LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (72057594037927937.5) == 72057594037927937LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (9007199254740991.5) == 9007199254740991LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (9007199254740991.5000000000001) == 9007199254740991LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (9007199254740992.5000000000001) == 9007199254740992LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (9007199254740992.75) == 9007199254740992LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (9007199254740993.5) == 9007199254740993LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (9007199254740993.5000000000001) == 9007199254740993LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (9223372036854775805.5) == 9223372036854775805LL": -+ildouble: 1 -+ldouble: 1 -+Test "llrint_towardzero (9223372036854775806.75) == 9223372036854775806LL": -+ildouble: 1 -+ldouble: 1 -+ -+# log10 -+Test "log10 (0.75) == -0.124938736608299953132449886193870744": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+Test "log10 (e) == log10(e)": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# log2 -+Test "log2 (0.75) == -.415037499278843818546261056052183492": -+ildouble: 1 -+ldouble: 1 -+ -+# lrint_downward -+Test "lrint_downward (-0.2) == -1": -+ildouble: 1 -+ldouble: 1 -+Test "lrint_downward (-0.5) == -1": -+ildouble: 1 -+ldouble: 1 -+Test "lrint_downward (-1.4) == -2": -+ildouble: 1 -+ldouble: 1 -+Test "lrint_downward (-8388600.3) == -8388601": -+ildouble: 1 -+ldouble: 1 -+Test "lrint_downward (0.8) == 0": -+ildouble: 1 -+ldouble: 1 -+ -+# pow -+Test "pow (0x0.ffffffp0, 0x1p24) == 0.3678794302077803437135155590023422899744": -+float: 1 -+ifloat: 1 -+ -+# pow_downward -+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948": -+float: 1 -+ifloat: 1 -+ -+# pow_towardzero -+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948": -+float: 1 -+ifloat: 1 -+ -+# pow_upward -+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# sin_downward -+Test "sin_downward (10) == -0.5440211108893698134047476618513772816836": -+float: 1 -+ifloat: 1 -+Test "sin_downward (2) == 0.9092974268256816953960198659117448427023": -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (3) == 0.1411200080598672221007448028081102798469": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (4) == -0.7568024953079282513726390945118290941359": -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (5) == -0.9589242746631384688931544061559939733525": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (6) == -0.2794154981989258728115554466118947596280": -+float: 1 -+ifloat: 1 -+Test "sin_downward (8) == 0.9893582466233817778081235982452886721164": -+ildouble: 1 -+ldouble: 1 -+Test "sin_downward (9) == 0.4121184852417565697562725663524351793439": -+ildouble: 1 -+ldouble: 1 -+ -+# sin_tonearest -+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226": -+float: 1 -+ifloat: 1 -+Test "sin_tonearest (3) == 0.1411200080598672221007448028081102798469": -+ildouble: 1 -+ldouble: 1 -+ -+# sin_towardzero -+Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226": -+float: 1 -+ifloat: 1 -+Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836": -+float: 1 -+ifloat: 1 -+Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164": -+ildouble: 1 -+ldouble: 1 -+Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# sin_upward -+Test "sin_upward (1) == 0.8414709848078965066525023216302989996226": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (10) == -0.5440211108893698134047476618513772816836": -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (2) == 0.9092974268256816953960198659117448427023": -+float: 2 -+ifloat: 2 -+Test "sin_upward (3) == 0.1411200080598672221007448028081102798469": -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (4) == -0.7568024953079282513726390945118290941359": -+float: 1 -+ifloat: 1 -+Test "sin_upward (6) == -0.2794154981989258728115554466118947596280": -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (7) == 0.6569865987187890903969990915936351779369": -+ildouble: 1 -+ldouble: 1 -+Test "sin_upward (9) == 0.4121184852417565697562725663524351793439": -+float: 1 -+ifloat: 1 -+ -+# sincos -+Test "sincos (0x1p+120, &sin_res, &cos_res) puts -9.25879022854837867303861764107414946730833e-01 in cos_res": -+float: 1 -+ifloat: 1 -+Test "sincos (0x1p+127, &sin_res, &cos_res) puts 7.81914638714960072263910298466369236613162e-01 in cos_res": -+float: 1 -+ifloat: 1 -+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res": -+double: 1 -+idouble: 1 -+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res": -+float: 1 -+ifloat: 1 -+ -+# sinh_downward -+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# sinh_towardzero -+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168": -+float: 1 -+ifloat: 1 -+ -+# sinh_upward -+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225": -+ildouble: 1 -+ldouble: 1 -+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305": -+ildouble: 1 -+ldouble: 1 -+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168": -+ildouble: 1 -+ldouble: 1 -+ -+# sqrt -+Test "sqrt (2) == M_SQRT2l": -+ildouble: 1 -+ldouble: 1 -+ -+# tan_downward -+Test "tan_downward (1) == 1.5574077246549022305069748074583601730873": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_downward (10) == 0.6483608274590866712591249330098086768169": -+float: 1 -+ifloat: 1 -+Test "tan_downward (2) == -2.1850398632615189916433061023136825434320": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_downward (6) == -0.2910061913847491570536995888681755428312": -+float: 1 -+ifloat: 1 -+Test "tan_downward (8) == -6.7997114552203786999252627596086333648814": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_downward (9) == -0.4523156594418098405903708757987855343087": -+float: 1 -+ifloat: 1 -+ -+# tan_towardzero -+Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169": -+float: 1 -+ifloat: 1 -+Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312": -+ildouble: 1 -+ldouble: 1 -+Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+# tan_upward -+Test "tan_upward (10) == 0.6483608274590866712591249330098086768169": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (2) == -2.1850398632615189916433061023136825434320": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (3) == -0.1425465430742778052956354105339134932261": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (4) == 1.1578212823495775831373424182673239231198": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (5) == -3.3805150062465856369827058794473439087096": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (6) == -0.2910061913847491570536995888681755428312": -+ildouble: 1 -+ldouble: 1 -+Test "tan_upward (9) == -0.4523156594418098405903708757987855343087": -+ildouble: 1 -+ldouble: 1 -+ -+# tanh -+Test "tanh (-0.75) == -0.635148952387287319214434357312496495": -+ildouble: 1 -+ldouble: 1 -+Test "tanh (-1.0) == -0.7615941559557648881194582826047935904": -+ildouble: 1 -+ldouble: 1 -+Test "tanh (0.75) == 0.635148952387287319214434357312496495": -+ildouble: 1 -+ldouble: 1 -+Test "tanh (1.0) == 0.7615941559557648881194582826047935904": -+ildouble: 1 -+ldouble: 1 -+ -+# tgamma -+Test "tgamma (-0.5) == -2 sqrt (pi)": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "tgamma (0.5) == sqrt (pi)": -+float: 1 -+ifloat: 1 -+Test "tgamma (0.7) == 1.29805533264755778568117117915281162": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+Test "tgamma (4) == 6": -+ildouble: 1 -+ldouble: 1 -+ -+# y0 -+Test "y0 (0x1.3ffp+74) == 1.818984347516051243459467456433028748678e-12": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "y0 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+Test "y0 (1.0) == 0.0882569642156769579829267660235151628": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+Test "y0 (1.5) == 0.382448923797758843955068554978089862": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+Test "y0 (10.0) == 0.0556711672835993914244598774101900481": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+Test "y0 (2.0) == 0.510375672649745119596606592727157873": -+double: 1 -+idouble: 1 -+Test "y0 (8.0) == 0.223521489387566220527323400498620359": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+ -+# y1 -+Test "y1 (0.125) == -5.19993611253477499595928744876579921": -+double: 1 -+idouble: 1 -+Test "y1 (0.75) == -1.03759455076928541973767132140642198": -+ildouble: 1 -+ldouble: 1 -+Test "y1 (0x1.001000001p+593) == 3.927269966354206207832593635798954916263e-90": -+ildouble: 1 -+ldouble: 1 -+Test "y1 (0x1.27e204p+99) == -8.881610148467797208469612080785210013461e-16": -+double: 1 -+idouble: 1 -+Test "y1 (1.5) == -0.412308626973911295952829820633445323": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "y1 (10.0) == 0.249015424206953883923283474663222803": -+double: 3 -+float: 1 -+idouble: 3 -+ifloat: 1 -+Test "y1 (2.0) == -0.107032431540937546888370772277476637": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "y1 (8.0) == -0.158060461731247494255555266187483550": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+# yn -+Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+Test "yn (0, 1.5) == 0.382448923797758843955068554978089862": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+Test "yn (0, 2.0) == 0.510375672649745119596606592727157873": -+double: 1 -+idouble: 1 -+Test "yn (0, 8.0) == 0.223521489387566220527323400498620359": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+Test "yn (1, 0.125) == -5.19993611253477499595928744876579921": -+double: 1 -+idouble: 1 -+Test "yn (1, 0.75) == -1.03759455076928541973767132140642198": -+ildouble: 1 -+ldouble: 1 -+Test "yn (1, 1.5) == -0.412308626973911295952829820633445323": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "yn (1, 10.0) == 0.249015424206953883923283474663222803": -+double: 3 -+float: 1 -+idouble: 3 -+ifloat: 1 -+Test "yn (1, 2.0) == -0.107032431540937546888370772277476637": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "yn (1, 8.0) == -0.158060461731247494255555266187483550": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+Test "yn (10, 0.125) == -127057845771019398.252538486899753195": -+double: 1 -+idouble: 1 -+ildouble: 2 -+ldouble: 2 -+Test "yn (10, 0.75) == -2133501638.90573424452445412893839236": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+ildouble: 5 -+ldouble: 5 -+Test "yn (10, 1.0) == -121618014.278689189288130426667971145": -+float: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+Test "yn (10, 10.0) == -0.359814152183402722051986577343560609": -+double: 2 -+idouble: 2 -+ildouble: 2 -+ldouble: 2 -+Test "yn (10, 2.0) == -129184.542208039282635913145923304214": -+double: 3 -+float: 1 -+idouble: 3 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "yn (3, 0.125) == -2612.69757350066712600220955744091741": -+double: 1 -+idouble: 1 -+Test "yn (3, 0.75) == -12.9877176234475433186319774484809207": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+Test "yn (3, 10.0) == -0.251362657183837329779204747654240998": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+Test "yn (3, 2.0) == -1.12778377684042778608158395773179238": -+double: 1 -+idouble: 1 -+ -+# Maximal error of functions: -+Function: "acos_downward": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "acos_towardzero": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "acos_upward": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "asin_downward": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "asin_towardzero": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ -+Function: "asin_upward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "atan2": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "atanh": -+float: 1 -+ifloat: 1 -+ -+Function: Real part of "cacos": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Imaginary part of "cacos": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+ -+Function: Real part of "cacosh": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Imaginary part of "cacosh": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Real part of "casin": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ -+Function: Imaginary part of "casin": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+ -+Function: Real part of "casinh": -+double: 5 -+float: 1 -+idouble: 5 -+ifloat: 1 -+ildouble: 4 -+ldouble: 4 -+ -+Function: Imaginary part of "casinh": -+double: 3 -+float: 6 -+idouble: 3 -+ifloat: 6 -+ildouble: 2 -+ldouble: 2 -+ -+Function: Imaginary part of "catan": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Real part of "catanh": -+double: 4 -+idouble: 4 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Imaginary part of "catanh": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cbrt": -+double: 1 -+idouble: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Real part of "ccos": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Imaginary part of "ccos": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Real part of "ccosh": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Imaginary part of "ccosh": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Real part of "cexp": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Imaginary part of "cexp": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Real part of "clog": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Imaginary part of "clog": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Real part of "clog10": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Imaginary part of "clog10": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "cos": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cos_downward": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "cos_tonearest": -+float: 1 -+ifloat: 1 -+ -+Function: "cos_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "cos_upward": -+float: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cosh_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cosh_tonearest": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cosh_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "cosh_upward": -+ildouble: 1 -+ldouble: 1 -+ -+Function: Real part of "cpow": -+double: 2 -+float: 5 -+idouble: 2 -+ifloat: 5 -+ildouble: 11 -+ldouble: 11 -+ -+Function: Imaginary part of "cpow": -+double: 2 -+float: 2 -+idouble: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Real part of "csin": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Imaginary part of "csin": -+ildouble: 1 -+ldouble: 1 -+ -+Function: Real part of "csinh": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Imaginary part of "csinh": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Real part of "csqrt": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ldouble: 1 -+ -+Function: Imaginary part of "csqrt": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Real part of "ctan": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: Imaginary part of "ctan": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: Real part of "ctan_downward": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 4 -+ldouble: 4 -+ -+Function: Imaginary part of "ctan_downward": -+float: 1 -+ifloat: 1 -+ildouble: 5 -+ldouble: 5 -+ -+Function: Real part of "ctan_tonearest": -+float: 1 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+ -+Function: Imaginary part of "ctan_tonearest": -+float: 1 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+ -+Function: Real part of "ctan_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Imaginary part of "ctan_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 5 -+ldouble: 5 -+ -+Function: Real part of "ctan_upward": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: Imaginary part of "ctan_upward": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+ildouble: 3 -+ldouble: 3 -+ -+Function: Real part of "ctanh": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+ildouble: 2 -+ldouble: 2 -+ -+Function: Imaginary part of "ctanh": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: Real part of "ctanh_downward": -+float: 1 -+ifloat: 1 -+ildouble: 5 -+ldouble: 5 -+ -+Function: Imaginary part of "ctanh_downward": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 4 -+ldouble: 4 -+ -+Function: Real part of "ctanh_tonearest": -+float: 1 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+ -+Function: Imaginary part of "ctanh_tonearest": -+float: 1 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+ -+Function: Real part of "ctanh_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 5 -+ldouble: 5 -+ -+Function: Imaginary part of "ctanh_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: Real part of "ctanh_upward": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+ildouble: 3 -+ldouble: 3 -+ -+Function: Imaginary part of "ctanh_upward": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "erf": -+double: 1 -+idouble: 1 -+ -+Function: "erfc": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "exp10": -+double: 6 -+float: 2 -+idouble: 6 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "exp2": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "exp_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "exp_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "exp_upward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "expm1": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "gamma": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "hypot": -+float: 1 -+ifloat: 1 -+ -+Function: "j0": -+double: 2 -+float: 2 -+idouble: 2 -+ifloat: 2 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "j1": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+ildouble: 4 -+ldouble: 4 -+ -+Function: "jn": -+double: 4 -+float: 5 -+idouble: 4 -+ifloat: 5 -+ildouble: 8 -+ldouble: 8 -+ -+Function: "lgamma": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "log": -+float: 1 -+ -+Function: "log10": -+double: 1 -+float: 2 -+idouble: 1 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "log1p": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "log2": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "pow": -+float: 1 -+ifloat: 1 -+ -+Function: "pow_downward": -+float: 1 -+ifloat: 1 -+ -+Function: "pow_towardzero": -+float: 1 -+ifloat: 1 -+ -+Function: "pow_upward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_tonearest": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sin_upward": -+float: 2 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sincos": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sinh_downward": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "sinh_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 2 -+ldouble: 2 -+ -+Function: "sinh_upward": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "sqrt": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "tan": -+double: 1 -+idouble: 1 -+ -+Function: "tan_downward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "tan_towardzero": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "tan_upward": -+float: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "tanh": -+ildouble: 1 -+ldouble: 1 -+ -+Function: "tgamma": -+double: 1 -+float: 1 -+idouble: 1 -+ifloat: 1 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "y0": -+double: 2 -+float: 1 -+idouble: 2 -+ifloat: 1 -+ildouble: 3 -+ldouble: 3 -+ -+Function: "y1": -+double: 3 -+float: 2 -+idouble: 3 -+ifloat: 2 -+ildouble: 1 -+ldouble: 1 -+ -+Function: "yn": -+double: 3 -+float: 2 -+idouble: 3 -+ifloat: 2 -+ildouble: 5 -+ldouble: 5 -+ -+# end of automatic generation -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/memusage.h glibc/ports/sysdeps/aarch64/memusage.h ---- glibc.orig/ports/sysdeps/aarch64/memusage.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/memusage.h 2012-09-24 13:12:05.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2000, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; }) -+ -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/nptl/Makefile glibc/ports/sysdeps/aarch64/nptl/Makefile ---- glibc.orig/ports/sysdeps/aarch64/nptl/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/nptl/Makefile 2012-09-28 12:54:07.000000000 +0100 -@@ -0,0 +1,21 @@ -+# Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. -+# -+# This file is part of the GNU C Library. -+# -+# The GNU C Library is free software; you can redistribute it and/or -+# modify it under the terms of the GNU Lesser General Public -+# License as published by the Free Software Foundation; either -+# version 2.1 of the License, or (at your option) any later version. -+# -+# The GNU C Library is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# Lesser General Public License for more details. -+# -+# You should have received a copy of the GNU Lesser General Public -+# License along with the GNU C Library. If not, see -+# . -+ -+ifeq ($(subdir),csu) -+gen-as-const-headers += tcb-offsets.sym -+endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/nptl/pthread_spin_lock.c glibc/ports/sysdeps/aarch64/nptl/pthread_spin_lock.c ---- glibc.orig/ports/sysdeps/aarch64/nptl/pthread_spin_lock.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/nptl/pthread_spin_lock.c 2012-09-24 13:12:34.000000000 +0100 -@@ -0,0 +1,29 @@ -+/* Copyright (C) 2008-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include "pthreadP.h" -+ -+int -+pthread_spin_lock (pthread_spinlock_t *lock) -+{ -+ while (atomic_compare_and_exchange_val_acq (lock, 1, 0) != 0) -+ while (*lock != 0) -+ ; -+ return 0; -+} -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/nptl/pthread_spin_trylock.c glibc/ports/sysdeps/aarch64/nptl/pthread_spin_trylock.c ---- glibc.orig/ports/sysdeps/aarch64/nptl/pthread_spin_trylock.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/nptl/pthread_spin_trylock.c 2012-09-24 13:12:43.000000000 +0100 -@@ -0,0 +1,27 @@ -+/* Copyright (C) 2008-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include "pthreadP.h" -+ -+int -+pthread_spin_trylock (pthread_spinlock_t *lock) -+{ -+ return atomic_compare_and_exchange_val_acq (lock, 1, 0) ? EBUSY : 0; -+} -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/nptl/pthreaddef.h glibc/ports/sysdeps/aarch64/nptl/pthreaddef.h ---- glibc.orig/ports/sysdeps/aarch64/nptl/pthreaddef.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/nptl/pthreaddef.h 2012-09-24 13:12:54.000000000 +0100 -@@ -0,0 +1,46 @@ -+/* Copyright (C) 2002, 2003, 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+/* 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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/nptl/tcb-offsets.sym glibc/ports/sysdeps/aarch64/nptl/tcb-offsets.sym ---- glibc.orig/ports/sysdeps/aarch64/nptl/tcb-offsets.sym 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/nptl/tcb-offsets.sym 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,7 @@ -+#include -+#include -+ -+PTHREAD_MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) -+PTHREAD_PID_OFFSET offsetof (struct pthread, pid) -+PTHREAD_TID_OFFSET offsetof (struct pthread, tid) -+PTHREAD_SIZEOF sizeof (struct pthread) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/nptl/tls.h glibc/ports/sysdeps/aarch64/nptl/tls.h ---- glibc.orig/ports/sysdeps/aarch64/nptl/tls.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/nptl/tls.h 2012-09-24 13:13:31.000000000 +0100 -@@ -0,0 +1,142 @@ -+/* Copyright (C) 2005, 2007, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _TLS_H -+#define _TLS_H 1 -+ -+#include -+ -+#ifndef __ASSEMBLER__ -+# include -+# include -+# include -+ -+/* Type for the dtv. */ -+typedef union dtv -+{ -+ size_t counter; -+ struct -+ { -+ void *val; -+ bool is_static; -+ } pointer; -+} dtv_t; -+ -+#else /* __ASSEMBLER__ */ -+# include -+#endif /* __ASSEMBLER__ */ -+ -+#ifndef __ASSEMBLER__ -+ -+/* Get system call information. */ -+# include -+ -+/* The TP points to the start of the thread blocks. */ -+# define TLS_DTV_AT_TP 1 -+ -+/* Get the thread descriptor definition. */ -+# include -+ -+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 __alignof__ (tcbhead_t) -+ -+/* 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 __alignof__ (tcbhead_t) -+ -+/* 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) \ -+ ({ __asm __volatile ("msr tpidr_el0, %0" : : "r" (tcbp)); 0; }) -+ -+/* 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 (64, 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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/preconfigure glibc/ports/sysdeps/aarch64/preconfigure ---- glibc.orig/ports/sysdeps/aarch64/preconfigure 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/preconfigure 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,14 @@ -+case "$machine" in -+aarch64*) -+ base_machine=aarch64 -+ machine=aarch64 -+ ;; -+esac -+ -+case "$machine" in -+aarch64*) -+ # Parameters to allow auto-detection of -z relro. -+ libc_commonpagesize=0x1000 -+ libc_relro_required=yes -+ ;; -+esac -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/setjmp.S glibc/ports/sysdeps/aarch64/setjmp.S ---- glibc.orig/ports/sysdeps/aarch64/setjmp.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/setjmp.S 2012-09-24 13:13:45.000000000 +0100 -@@ -0,0 +1,51 @@ -+/* Copyright (C) 1997, 1998, 2008-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library. If not, see -+ . */ -+ -+#include -+#include -+ -+ /* Keep traditional entry points in with sigsetjmp(). */ -+ENTRY (setjmp) -+ mov x1, #1 -+ b 1f -+END (setjmp) -+ -+ENTRY (_setjmp) -+ mov x1, #0 -+ b 1f -+END (_setjmp) -+libc_hidden_def (_setjmp) -+ -+ENTRY (__sigsetjmp) -+ -+1: -+ stp x19, x20, [x0, #JB_X19<<3] -+ stp x21, x22, [x0, #JB_X21<<3] -+ stp x23, x24, [x0, #JB_X23<<3] -+ stp x25, x26, [x0, #JB_X25<<3] -+ stp x27, x28, [x0, #JB_X27<<3] -+ stp x29, x30, [x0, #JB_X29<<3] -+ stp d8, d9, [x0, #JB_D8<<3] -+ stp d10, d11, [x0, #JB_D10<<3] -+ stp d12, d13, [x0, #JB_D12<<3] -+ stp d14, d15, [x0, #JB_D14<<3] -+ mov x1, sp -+ str x1, [x0, #JB_SP<<3] -+ b PLTJMP(C_SYMBOL_NAME(__sigjmp_save)) -+END (__sigsetjmp) -+hidden_def (__sigsetjmp) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/shlib-versions glibc/ports/sysdeps/aarch64/shlib-versions ---- glibc.orig/ports/sysdeps/aarch64/shlib-versions 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/shlib-versions 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,2 @@ -+aarch64.*-.*-linux.* DEFAULT GLIBC_2.16 -+aarch64.*-.*-linux.* ld=ld-linux-aarch64.so.1 -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/soft-fp/Makefile glibc/ports/sysdeps/aarch64/soft-fp/Makefile ---- glibc.orig/ports/sysdeps/aarch64/soft-fp/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/soft-fp/Makefile 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,3 @@ -+ifeq ($(subdir),math) -+CPPFLAGS += -I../soft-fp -+endif -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/soft-fp/e_sqrtl.c glibc/ports/sysdeps/aarch64/soft-fp/e_sqrtl.c ---- glibc.orig/ports/sysdeps/aarch64/soft-fp/e_sqrtl.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/soft-fp/e_sqrtl.c 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,38 @@ -+/* long double square root in software floating-point emulation. -+ Copyright (C) 1997, 1999, 2006 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Contributed by Richard Henderson (rth@cygnus.com) and -+ Jakub Jelinek (jj@ultra.linux.cz). -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+ -+long double -+__ieee754_sqrtl (const long double a) -+{ -+ FP_DECL_EX; -+ FP_DECL_Q(A); FP_DECL_Q(C); -+ long double c; -+ -+ FP_INIT_ROUNDMODE; -+ FP_UNPACK_Q(A, a); -+ FP_SQRT_Q(C, A); -+ FP_PACK_Q(c, C); -+ FP_HANDLE_EXCEPTIONS; -+ return c; -+} -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/soft-fp/sfp-machine.h glibc/ports/sysdeps/aarch64/soft-fp/sfp-machine.h ---- glibc.orig/ports/sysdeps/aarch64/soft-fp/sfp-machine.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/soft-fp/sfp-machine.h 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,70 @@ -+#include -+#include -+ -+#define _FP_W_TYPE_SIZE 64 -+#define _FP_W_TYPE unsigned long long -+#define _FP_WS_TYPE signed long long -+#define _FP_I_TYPE long long -+ -+#define _FP_MUL_MEAT_S(R,X,Y) \ -+ _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y) -+#define _FP_MUL_MEAT_D(R,X,Y) \ -+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -+#define _FP_MUL_MEAT_Q(R,X,Y) \ -+ _FP_MUL_MEAT_2_wide_3mul(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) -+ -+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm) -+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y) -+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) -+ -+#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) -+#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1) -+#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1 -+#define _FP_NANSIGN_S 0 -+#define _FP_NANSIGN_D 0 -+#define _FP_NANSIGN_Q 0 -+ -+#define _FP_KEEPNANFRACP 1 -+/* From my experiments it seems X is chosen unless one of the -+ NaNs is sNaN, in which case the result is NANSIGN/NANFRAC. */ -+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ -+ do { \ -+ if ((_FP_FRAC_HIGH_RAW_##fs(X) | \ -+ _FP_FRAC_HIGH_RAW_##fs(Y)) & _FP_QNANBIT_##fs) \ -+ { \ -+ R##_s = _FP_NANSIGN_##fs; \ -+ _FP_FRAC_SET_##wc(R,_FP_NANFRAC_##fs); \ -+ } \ -+ else \ -+ { \ -+ R##_s = X##_s; \ -+ _FP_FRAC_COPY_##wc(R,X); \ -+ } \ -+ R##_c = FP_CLS_NAN; \ -+ } while (0) -+ -+#define _FP_DECL_EX fpu_control_t _fcw -+ -+#define FP_ROUNDMODE (_fcw & 0x3) -+ -+#define FP_RND_NEAREST FE_TONEAREST -+#define FP_RND_ZERO FE_TOWARDZERO -+#define FP_RND_PINF FE_UPWARD -+#define FP_RND_MINF FE_DOWNWARD -+ -+#define FP_EX_INVALID FE_INVALID -+#define FP_EX_OVERFLOW FE_OVERFLOW -+#define FP_EX_UNDERFLOW FE_UNDERFLOW -+#define FP_EX_DIVZERO FE_DIVBYZERO -+#define FP_EX_INEXACT FE_INEXACT -+ -+#define FP_INIT_ROUNDMODE \ -+do { \ -+ _FPU_GETCW (_fcw); \ -+} while (0) -+ -+#define FP_HANDLE_EXCEPTIONS \ -+do { \ -+ if (__builtin_expect (_fex, 0)) \ -+ _FPU_SETCW (_fcw | _fex | (_fex << 10)); \ -+} while (0) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/stackinfo.h glibc/ports/sysdeps/aarch64/stackinfo.h ---- glibc.orig/ports/sysdeps/aarch64/stackinfo.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/stackinfo.h 2012-09-24 13:14:11.000000000 +0100 -@@ -0,0 +1,33 @@ -+/* Copyright (C) 2001, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+/* This file contains a bit of information about the stack allocation -+ of the processor. */ -+ -+#ifndef _STACKINFO_H -+#define _STACKINFO_H 1 -+ -+#include -+ -+/* On AArch64 the stack grows down. */ -+#define _STACK_GROWS_DOWN 1 -+ -+/* Default to a non-executable stack. */ -+#define DEFAULT_STACK_PERMS (PF_R|PF_W) -+ -+#endif /* stackinfo.h */ -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/start.S glibc/ports/sysdeps/aarch64/start.S ---- glibc.orig/ports/sysdeps/aarch64/start.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/start.S 2012-09-24 13:14:30.000000000 +0100 -@@ -0,0 +1,94 @@ -+/* Copyright (C) 1995-1998, 2001, 2002, 2005, 2008-2012 -+ Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library. If not, see -+ . */ -+ -+/* 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: -+ -+ x1 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 -+ 8(sp) argv[0] -+ ... -+ (8*argc)(sp) NULL -+ (8*(argc+1))(sp) envp[0] -+ ... -+ NULL -+ */ -+ -+ .text -+ .globl _start -+ .type _start,#function -+_start: -+ /* Create an initial frame with 0 LR and FP */ -+ mov x29, #0 -+ mov x30, #0 -+ mov x29, sp -+ -+ /* Setup rtld_fini in argument register */ -+ mov x5, x0 -+ -+ /* Load argc and a pointer to argv */ -+ ldr x1, [sp, #0] -+ add x2, sp, #8 -+ -+ /* Setup stack limit in argument register */ -+ mov x6, sp -+ -+#ifdef SHARED -+ adrp x0, :got:main -+ ldr x0, [x0, #:got_lo12:main] -+ -+ adrp x3, :got:__libc_csu_init -+ ldr x3, [x3, #:got_lo12:__libc_csu_init] -+ -+ adrp x4, :got:__libc_csu_fini -+ ldr x4, [x4, #:got_lo12:__libc_csu_fini] -+#else -+ /* Set up the other arguments in registers */ -+ ldr x0, =main -+ ldr x3, =__libc_csu_init -+ ldr x4, =__libc_csu_fini -+#endif -+ -+ /* __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 -+ -+ /* should never get here....*/ -+ bl abort -+ -+ /* 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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/sysdep.h glibc/ports/sysdeps/aarch64/sysdep.h ---- glibc.orig/ports/sysdeps/aarch64/sysdep.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/sysdep.h 2012-09-24 13:14:42.000000000 +0100 -@@ -0,0 +1,65 @@ -+/* Copyright (C) 1997, 1998, 2003, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+#ifdef __ASSEMBLER__ -+ -+/* Syntactic details of assembler. */ -+ -+#define ALIGNARG(log2) log2 -+#define ASM_SIZE_DIRECTIVE(name) .size name,.-name -+ -+#define PLTJMP(_x) _x -+ -+/* 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_startproc; \ -+ CALL_MCOUNT -+ -+#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 -+#define CALL_MCOUNT \ -+ str x30, [sp, #-16]!; \ -+ bl PLTJMP(mcount) ; \ -+ ldr x30, [sp], #16 ; -+#else -+#define CALL_MCOUNT /* Do nothing. */ -+#endif -+ -+/* Local label name for asm code. */ -+#ifndef L -+#define L(name) .L##name -+#endif -+ -+/* Since C identifiers are not normally prefixed with an underscore -+ on this system, the asm identifier `syscall_error' intrudes on the -+ C name space. Make sure we use an innocuous name. */ -+#define syscall_error __syscall_error -+#define mcount _mcount -+ -+#endif /* __ASSEMBLER__ */ -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/tls-macros.h glibc/ports/sysdeps/aarch64/tls-macros.h ---- glibc.orig/ports/sysdeps/aarch64/tls-macros.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/tls-macros.h 2012-09-24 13:15:11.000000000 +0100 -@@ -0,0 +1,51 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define TLS_LD(x) TLS_GD(x) -+ -+#define TLS_GD(x) \ -+ ({ register unsigned long __result asm ("x0"); \ -+ asm ("adrp %0, :tlsgd:" #x "; " \ -+ "add %0, %0, #:tlsgd_lo12:" #x "; " \ -+ "bl __tls_get_addr;" \ -+ "nop" \ -+ : "=r" (__result) \ -+ : \ -+ : "x1", "x2", "x3", "x4", "x5", "x6", \ -+ "x7", "x8", "x9", "x10", "x11", "x12", \ -+ "x13", "x14", "x15", "x16", "x17", "x18", \ -+ "x30", "memory"); \ -+ (int *) (__result); }) -+ -+#define TLS_IE(x) \ -+ ({ register unsigned long __result asm ("x0"); \ -+ register unsigned long __t; \ -+ asm ("mrs %1, tpidr_el0; " \ -+ "adrp %0, :gottprel:" #x "; " \ -+ "ldr %0, [%0, #:gottprel_lo12:" #x "]; " \ -+ "add %0, %0, %1" \ -+ : "=r" (__result), "=r" (__t)); \ -+ (int *) (__result); }) -+ -+#define TLS_LE(x) \ -+ ({ register unsigned long __result asm ("x0"); \ -+ asm ("mrs %0, tpidr_el0; " \ -+ "add %0, %0, :tprel_hi12:" #x "; " \ -+ "add %0, %0, :tprel_lo12_nc:" #x \ -+ : "=r" (__result)); \ -+ (int *) (__result); }) -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/tlsdesc.c glibc/ports/sysdeps/aarch64/tlsdesc.c ---- glibc.orig/ports/sysdeps/aarch64/tlsdesc.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/tlsdesc.c 2012-09-24 13:15:42.000000000 +0100 -@@ -0,0 +1,154 @@ -+/* Manage TLS descriptors. -+ AArch64 version. -+ Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+/* The following functions take an entry_check_offset argument. It's -+ computed by the caller as an offset between its entry point and the -+ call site, such that by adding the built-in return address that is -+ implicitly passed to the function with this offset, we can easily -+ obtain the caller's entry point to compare with the entry point -+ given in the TLS descriptor. If it's changed, we want to return -+ immediately. */ -+ -+/* This function is used to lazily resolve TLS_DESC RELA relocations. -+ The argument location is used to hold a pointer to the relocation. */ -+ -+void -+attribute_hidden -+_dl_tlsdesc_resolve_rela_fixup (struct tlsdesc volatile *td, -+ struct link_map *l) -+{ -+ const ElfW(Rela) *reloc = td->arg; -+ -+ if (_dl_tlsdesc_resolve_early_return_p -+ (td, (void*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_PLT)]) + l->l_addr))) -+ return; -+ -+ /* The code below was borrowed from _dl_fixup(), -+ except for checking for STB_LOCAL. */ -+ 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[ELFW(R_SYM) (reloc->r_info)]; -+ lookup_t result; -+ -+ /* 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[ELFW(R_SYM) (reloc->r_info)] & 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); -+ } -+ else -+ { -+ /* We already found the symbol. The module (and therefore its load -+ address) is also known. */ -+ result = l; -+ } -+ -+ if (!sym) -+ { -+ td->arg = (void*) reloc->r_addend; -+ td->entry = _dl_tlsdesc_undefweak; -+ } -+ else -+ { -+# ifndef SHARED -+ CHECK_STATIC_TLS (l, result); -+# else -+ if (!TRY_STATIC_TLS (l, result)) -+ { -+ td->arg = _dl_make_tlsdesc_dynamic (result, sym->st_value -+ + reloc->r_addend); -+ td->entry = _dl_tlsdesc_dynamic; -+ } -+ else -+# endif -+ { -+ td->arg = (void*) (sym->st_value + result->l_tls_offset -+ + reloc->r_addend); -+ td->entry = _dl_tlsdesc_return; -+ } -+ } -+ -+ _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 -+ if (map->l_mach.tlsdesc_table) -+ htab_delete (map->l_mach.tlsdesc_table); -+#endif -+} -diff -x .git -uNr glibc.orig/ports/sysdeps/aarch64/tlsdesc.sym glibc/ports/sysdeps/aarch64/tlsdesc.sym ---- glibc.orig/ports/sysdeps/aarch64/tlsdesc.sym 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/tlsdesc.sym 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,15 @@ -+#include -+#include -+#include -+#include -+#include -+ -+-- -+ -+-- Abuse tls.h macros to derive offsets relative to the thread register. -+ -+TLSDESC_ARG offsetof(struct tlsdesc, arg) -+ -+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 -x .git -uNr glibc.orig/ports/sysdeps/aarch64/tst-audit.h glibc/ports/sysdeps/aarch64/tst-audit.h ---- glibc.orig/ports/sysdeps/aarch64/tst-audit.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/aarch64/tst-audit.h 2012-09-24 13:15:59.000000000 +0100 -@@ -0,0 +1,25 @@ -+/* Definitions for testing PLT entry/exit auditing. AArch64 version. -+ -+ Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define pltenter la_aarch64_gnu_pltenter -+#define pltexit la_aarch64_gnu_pltexit -+#define La_regs La_aarch64_regs -+#define La_retval La_aarch64_retval -+#define int_retval lrv_xreg[0] -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/Implies glibc/ports/sysdeps/unix/sysv/linux/aarch64/Implies ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/Implies 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/Implies 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,2 @@ -+unix/sysv/linux/generic -+unix/sysv/linux/wordsize-64 -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/Makefile glibc/ports/sysdeps/unix/sysv/linux/aarch64/Makefile ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/Makefile 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,41 @@ -+ifeq ($(subdir),csu) -+sysdep_routines += __read_tp libc-__read_tp -+static-only-routines += __read_tp -+shared-only-routines += libc-__read_tp -+ -+# In order for unwinding to fail when it falls out of main, we need a -+# cantunwind marker. There's one in start.S. To make sure we reach it, add -+# unwind tables for __libc_start_main. -+CFLAGS-libc-start.c += -fexceptions -+endif -+ -+ifeq ($(subdir),io) -+CFLAGS-creat.c += -fexceptions -+CFLAGS-open.c += -fexceptions -+CFLAGS-open64.c += -fexceptions -+endif -+ -+ifeq ($(subdir),elf) -+sysdep_routines += dl-vdso -+sysdep-rtld-routines += __read_tp -+endif -+ -+ifeq ($(subdir),misc) -+sysdep_routines += epoll_create epoll_wait inotify_init -+sysdep_headers += sys/elf.h -+CFLAGS-select.c += -fexceptions -+endif -+ -+ifeq ($(subdir),nptl) -+CFLAGS-open.c += -fexceptions -+CFLAGS-open64.c += -fexceptions -+CFLAGS-pause.c += -fexceptions -+CFLAGS-send.c += -fexceptions -+CFLAGS-recv.c += -fexceptions -+endif -+ -+ifeq ($(subdir),stdlib) -+ -+gen-as-const-headers += ucontext_i.sym -+ -+endif -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/Versions glibc/ports/sysdeps/unix/sysv/linux/aarch64/Versions ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/Versions 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/Versions 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,6 @@ -+libc { -+ GLIBC_PRIVATE { -+ __vdso_clock_gettime; -+ __vdso_clock_getres; -+ } -+} -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/__read_tp.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/__read_tp.S ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/__read_tp.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/__read_tp.S 2012-09-24 12:42:40.000000000 +0100 -@@ -0,0 +1,25 @@ -+/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+ .hidden __read_tp -+ENTRY (__read_tp) -+ mrs x0, tpidr_el0 -+ RET -+END (__read_tp) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h 2012-09-24 12:43:27.000000000 +0100 -@@ -0,0 +1,339 @@ -+/* O_*, F_*, FD_* bit values for the AArch64 Linux ABI. -+ Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library. If not, see -+ . */ -+ -+#ifndef _FCNTL_H -+# error "Never use directly; include instead." -+#endif -+ -+#include -+#include -+#ifdef __USE_GNU -+# include -+#endif -+ -+ -+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files -+ located on a few file systems. */ -+#define O_ACCMODE 0003 -+#define O_RDONLY 00 -+#define O_WRONLY 01 -+#define O_RDWR 02 -+#define O_CREAT 0100 /* not fcntl */ -+#define O_EXCL 0200 /* not fcntl */ -+#define O_NOCTTY 0400 /* not fcntl */ -+#define O_TRUNC 01000 /* not fcntl */ -+#define O_APPEND 02000 -+#define O_NONBLOCK 04000 -+#define O_NDELAY O_NONBLOCK -+#define O_SYNC 04010000 -+#define O_FSYNC O_SYNC -+#define O_ASYNC 020000 -+ -+#ifdef __USE_XOPEN2K8 -+# define O_DIRECTORY 040000 /* Must be a directory. */ -+# define O_NOFOLLOW 0100000 /* Do not follow links. */ -+# define O_CLOEXEC 02000000 /* Set close_on_exec. */ -+#endif -+#ifdef __USE_GNU -+# define O_DIRECT 0200000 /* Direct disk access. */ -+# define O_NOATIME 01000000 /* Do not set atime. */ -+# define O_PATH 010000000 /* Resolve pathname but do not open file. */ -+#endif -+ -+/* For now Linux has synchronisity options for data and read operations. -+ We define the symbols here but let them do the same as O_SYNC since -+ this is a superset. */ -+#if defined __USE_POSIX199309 || defined __USE_UNIX98 -+# define O_DSYNC 010000 /* Synchronize data. */ -+# define O_RSYNC O_SYNC /* Synchronize read operations. */ -+#endif -+ -+#ifdef __USE_LARGEFILE64 -+# if __WORDSIZE == 64 -+# define O_LARGEFILE 0 -+# else -+# define O_LARGEFILE 0400000 -+# endif -+#endif -+ -+/* Values for the second argument to `fcntl'. */ -+#define F_DUPFD 0 /* Duplicate file descriptor. */ -+#define F_GETFD 1 /* Get file descriptor flags. */ -+#define F_SETFD 2 /* Set file descriptor flags. */ -+#define F_GETFL 3 /* Get file status flags. */ -+#define F_SETFL 4 /* Set file status flags. */ -+#if __WORDSIZE == 64 -+# define F_GETLK 5 /* Get record locking info. */ -+# define F_SETLK 6 /* Set record locking info (non-blocking). */ -+# define F_SETLKW 7 /* Set record locking info (blocking). */ -+/* Not necessary, we always have 64-bit offsets. */ -+# define F_GETLK64 5 /* Get record locking info. */ -+# define F_SETLK64 6 /* Set record locking info (non-blocking). */ -+# define F_SETLKW64 7 /* Set record locking info (blocking). */ -+#else -+# ifndef __USE_FILE_OFFSET64 -+# define F_GETLK 5 /* Get record locking info. */ -+# define F_SETLK 6 /* Set record locking info (non-blocking). */ -+# define F_SETLKW 7 /* Set record locking info (blocking). */ -+# else -+# define F_GETLK F_GETLK64 /* Get record locking info. */ -+# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/ -+# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */ -+# endif -+# define F_GETLK64 12 /* Get record locking info. */ -+# define F_SETLK64 13 /* Set record locking info (non-blocking). */ -+# define F_SETLKW64 14 /* Set record locking info (blocking). */ -+#endif -+ -+#if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K8 -+# define F_SETOWN 8 /* Get owner (process receiving SIGIO). */ -+# define F_GETOWN 9 /* Set owner (process receiving SIGIO). */ -+#endif -+ -+#ifdef __USE_GNU -+# define F_SETSIG 10 /* Set number of signal to be sent. */ -+# define F_GETSIG 11 /* Get number of signal to be sent. */ -+# define F_SETOWN_EX 15 /* Get owner (thread receiving SIGIO). */ -+# define F_GETOWN_EX 16 /* Set owner (thread receiving SIGIO). */ -+#endif -+ -+#ifdef __USE_GNU -+# define F_SETLEASE 1024 /* Set a lease. */ -+# define F_GETLEASE 1025 /* Enquire what lease is active. */ -+# define F_NOTIFY 1026 /* Request notfications on a directory. */ -+# define F_SETPIPE_SZ 1031 /* Set pipe page size array. */ -+# define F_GETPIPE_SZ 1032 /* Set pipe page size array. */ -+#endif -+#ifdef __USE_XOPEN2K8 -+# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with -+ close-on-exit set. */ -+#endif -+ -+/* For F_[GET|SET]FD. */ -+#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ -+ -+/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ -+#define F_RDLCK 0 /* Read lock. */ -+#define F_WRLCK 1 /* Write lock. */ -+#define F_UNLCK 2 /* Remove lock. */ -+ -+/* For old implementation of bsd flock(). */ -+#define F_EXLCK 4 /* or 3 */ -+#define F_SHLCK 8 /* or 4 */ -+ -+#ifdef __USE_BSD -+/* Operations for bsd flock(), also used by the kernel implementation. */ -+# define LOCK_SH 1 /* shared lock */ -+# define LOCK_EX 2 /* exclusive lock */ -+# define LOCK_NB 4 /* or'd with one of the above to prevent -+ blocking */ -+# define LOCK_UN 8 /* remove lock */ -+#endif -+ -+#ifdef __USE_GNU -+# define LOCK_MAND 32 /* This is a mandatory flock: */ -+# define LOCK_READ 64 /* ... which allows concurrent read operations. */ -+# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */ -+# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */ -+#endif -+ -+#ifdef __USE_GNU -+/* Types of directory notifications that may be requested with F_NOTIFY. */ -+# define DN_ACCESS 0x00000001 /* File accessed. */ -+# define DN_MODIFY 0x00000002 /* File modified. */ -+# define DN_CREATE 0x00000004 /* File created. */ -+# define DN_DELETE 0x00000008 /* File removed. */ -+# define DN_RENAME 0x00000010 /* File renamed. */ -+# define DN_ATTRIB 0x00000020 /* File changed attibutes. */ -+# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */ -+#endif -+ -+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 -+ -+#ifdef __USE_GNU -+/* Owner types. */ -+enum __pid_type -+ { -+ F_OWNER_TID = 0, /* Kernel thread. */ -+ F_OWNER_PID, /* Process. */ -+ F_OWNER_PGRP, /* Process group. */ -+ F_OWNER_GID = F_OWNER_PGRP /* Alternative, obsolete name. */ -+ }; -+ -+/* Structure to use with F_GETOWN_EX and F_SETOWN_EX. */ -+struct f_owner_ex -+ { -+ enum __pid_type type; /* Owner type of ID. */ -+ __pid_t pid; /* ID of owner. */ -+ }; -+#endif -+ -+/* Define some more compatibility macros to be backward compatible with -+ BSD systems which did not managed to hide these kernel macros. */ -+#ifdef __USE_BSD -+# define FAPPEND O_APPEND -+# define FFSYNC O_FSYNC -+# define FASYNC O_ASYNC -+# define FNONBLOCK O_NONBLOCK -+# define FNDELAY O_NDELAY -+#endif /* Use BSD. */ -+ -+/* Advise to `posix_fadvise'. */ -+#ifdef __USE_XOPEN2K -+# define POSIX_FADV_NORMAL 0 /* No further special treatment. */ -+# define POSIX_FADV_RANDOM 1 /* Expect random page references. */ -+# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */ -+# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */ -+# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */ -+# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */ -+#endif -+ -+ -+#ifdef __USE_GNU -+/* Flags for SYNC_FILE_RANGE. */ -+# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages -+ in the range before performing the -+ write. */ -+# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those -+ dirty pages in the range which are -+ not presently under writeback. */ -+# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in -+ the range after performing the -+ write. */ -+ -+/* Flags for SPLICE and VMSPLICE. */ -+# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */ -+# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing -+ (but we may still block on the fd -+ we splice from/to). */ -+# define SPLICE_F_MORE 4 /* Expect more data. */ -+# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */ -+ -+ -+/* File handle structure. */ -+struct file_handle -+{ -+ unsigned int handle_bytes; -+ int handle_type; -+ /* File identifier. */ -+ unsigned char f_handle[0]; -+}; -+ -+/* Maximum handle size (for now). */ -+# define MAX_HANDLE_SZ 128 -+#endif -+ -+__BEGIN_DECLS -+ -+#ifdef __USE_GNU -+ -+/* Provide kernel hint to read ahead. */ -+extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count) -+ __THROW; -+ -+ -+/* Selective file content synch'ing. -+ -+ This function is a possible cancellation point and therefore not -+ marked with __THROW. */ -+extern int sync_file_range (int __fd, __off64_t __offset, __off64_t __count, -+ unsigned int __flags); -+ -+ -+/* Splice address range into a pipe. -+ -+ This function is a possible cancellation point and therefore not -+ marked with __THROW. */ -+extern ssize_t vmsplice (int __fdout, const struct iovec *__iov, -+ size_t __count, unsigned int __flags); -+ -+/* Splice two files together. -+ -+ This function is a possible cancellation point and therefore not -+ marked with __THROW. */ -+extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout, -+ __off64_t *__offout, size_t __len, -+ unsigned int __flags); -+ -+/* In-kernel implementation of tee for pipe buffers. -+ -+ This function is a possible cancellation point and therefore not -+ marked with __THROW. */ -+extern ssize_t tee (int __fdin, int __fdout, size_t __len, -+ unsigned int __flags); -+ -+/* Reserve storage for the data of the file associated with FD. -+ -+ This function is a possible cancellation point and therefore not -+ marked with __THROW. */ -+# ifndef __USE_FILE_OFFSET64 -+extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); -+# else -+# ifdef __REDIRECT -+extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset, -+ __off64_t __len), -+ fallocate64); -+# else -+# define fallocate fallocate64 -+# endif -+# endif -+# ifdef __USE_LARGEFILE64 -+extern int fallocate64 (int __fd, int __mode, __off64_t __offset, -+ __off64_t __len); -+# endif -+ -+ -+/* Map file name to file handle. */ -+extern int name_to_handle_at (int __dfd, const char *__name, -+ struct file_handle *__handle, int *__mnt_id, -+ int __flags) __THROW; -+ -+/* Open file using the file handle. -+ -+ This function is a possible cancellation point and therefore not -+ marked with __THROW. */ -+extern int open_by_handle_at (int __mountdirfd, struct file_handle *__handle, -+ int __flags); -+ -+#endif /* use GNU */ -+ -+__END_DECLS -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/bits/libc-vdso.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/bits/libc-vdso.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/bits/libc-vdso.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/bits/libc-vdso.h 2012-09-24 12:43:51.000000000 +0100 -@@ -0,0 +1,31 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library. If not, see -+ . */ -+ -+#ifndef _LIBC_VDSO_H -+#define _LIBC_VDSO_H -+ -+#ifdef SHARED -+ -+extern void (*__vdso_gettimeofday) (struct timeval *, void *) -+ attribute_hidden; -+extern void (*__vdso_clock_gettime) (clockid_t, struct timespec *); -+extern void (*__vdso_clock_getres) (clockid_t, struct timespec *); -+ -+#endif -+ -+#endif /* _LIBC_VDSO_H */ -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/bits/mman.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/bits/mman.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/bits/mman.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/bits/mman.h 2012-09-24 12:44:12.000000000 +0100 -@@ -0,0 +1,114 @@ -+/* Definitions for POSIX memory map interface. Linux/AArch64 version. -+ Copyright (C) 1997, 2000, 2003, 2005, 2006, 2009-2012 -+ Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library. If not, see -+ . */ -+ -+#ifndef _SYS_MMAN_H -+# error "Never use directly; include instead." -+#endif -+ -+/* The following definitions basically come from the kernel headers. -+ But the kernel header is not namespace clean. */ -+ -+ -+/* Protections are chosen from these bits, OR'd together. The -+ implementation does not necessarily support PROT_EXEC or PROT_WRITE -+ without PROT_READ. The only guarantees are that no writing will be -+ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */ -+ -+#define PROT_READ 0x1 /* Page can be read. */ -+#define PROT_WRITE 0x2 /* Page can be written. */ -+#define PROT_EXEC 0x4 /* Page can be executed. */ -+#define PROT_NONE 0x0 /* Page can not be accessed. */ -+#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of -+ growsdown vma (mprotect only). */ -+#define PROT_GROWSUP 0x02000000 /* Extend change to start of -+ growsup vma (mprotect only). */ -+ -+/* Sharing types (must choose one and only one of these). */ -+#define MAP_SHARED 0x01 /* Share changes. */ -+#define MAP_PRIVATE 0x02 /* Changes are private. */ -+#ifdef __USE_MISC -+# define MAP_TYPE 0x0f /* Mask for type of mapping. */ -+#endif -+ -+/* Other flags. */ -+#define MAP_FIXED 0x10 /* Interpret addr exactly. */ -+#ifdef __USE_MISC -+# define MAP_FILE 0 -+# define MAP_ANONYMOUS 0x20 /* Don't use a file. */ -+# define MAP_ANON MAP_ANONYMOUS -+#endif -+ -+#ifdef __USE_MISC -+/* These are Linux-specific. */ -+# 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 -+ -+/* Flags to `msync'. */ -+#define MS_ASYNC 1 /* Sync memory asynchronously. */ -+#define MS_SYNC 4 /* Synchronous memory sync. */ -+#define MS_INVALIDATE 2 /* Invalidate the caches. */ -+ -+/* Flags for `mlockall'. */ -+#define MCL_CURRENT 1 /* Lock all currently mapped pages. */ -+#define MCL_FUTURE 2 /* Lock all additions to address -+ space. */ -+ -+/* Flags for `mremap'. */ -+#ifdef __USE_GNU -+# define MREMAP_MAYMOVE 1 -+# define MREMAP_FIXED 2 -+#endif -+ -+/* Advice to `madvise'. */ -+#ifdef __USE_BSD -+# define MADV_NORMAL 0 /* No further special treatment. */ -+# define MADV_RANDOM 1 /* Expect random page references. */ -+# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -+# define MADV_WILLNEED 3 /* Will need these pages. */ -+# define MADV_DONTNEED 4 /* Don't need these pages. */ -+# define MADV_REMOVE 9 /* Remove these pages and resources. */ -+# define MADV_DONTFORK 10 /* Do not inherit across fork. */ -+# define MADV_DOFORK 11 /* Do inherit across fork. */ -+# define MADV_MERGEABLE 12 /* KSM may merge identical pages. */ -+# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages. */ -+# define MADV_HUGEPAGE 14 /* Worth backing with hugepages. */ -+# define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages. */ -+# define MADV_DONTDUMP 16 /* Explicity exclude from the core dump, -+ overrides the coredump filter bits. */ -+# define MADV_DODUMP 17 /* Clear the MADV_DONTDUMP flag. */ -+# define MADV_HWPOISON 100 /* Poison a page for testing. */ -+#endif -+ -+/* The POSIX people had to invent similar names for the same things. */ -+#ifdef __USE_XOPEN2K -+# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ -+# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ -+# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -+# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ -+# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/clone.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/clone.S ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/clone.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/clone.S 2012-09-24 12:44:25.000000000 +0100 -@@ -0,0 +1,99 @@ -+/* Copyright (C) 1996, 1997, 1998, 1999, 2002, 2005, 2008, 2009-2012 -+ Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Contributed by Pat Beirne -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+/* 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 -+#define _ERRNO_H 1 -+#include -+ -+#define CLONE_VM_BIT 8 -+#define CLONE_VM (1 << CLONE_VM_BIT) -+ -+#define CLONE_THREAD_BIT 16 -+#define CLONE_THREAD (1 << CLONE_THREAD_BIT) -+ -+/* int clone(int (*fn)(void *arg), x0 -+ void *child_stack, x1 -+ int flags, x2 -+ void *arg, x3 -+ pid_t *ptid, x4 -+ struct user_desc *tls, x5 -+ pid_t *ctid); x6 -+ */ -+ .text -+ENTRY(__clone) -+ /* Sanity check args. */ -+ cbz x0, 1f -+ cbz x1, 1f -+ /* Insert the args onto the new stack. */ -+ stp x0, x3, [x1, #-16]! /* Fn, arg. */ -+ -+ /* Do the system call. */ -+ mov x0, x2 /* flags */ -+ -+ /* New sp is already in x1. */ -+ mov x2, x4 /* ptid */ -+ mov x3, x5 /* tls */ -+ mov x4, x6 /* ctid */ -+ -+#ifdef RESET_PID -+ /* We rely on the kernel preserving the argument regsiters across a -+ each system call so that we can inspect the flags against after -+ the clone call. */ -+ mov x5, x0 -+#endif -+ -+ mov x8, #SYS_ify(clone) -+ /* X0:flags, x1:newsp, x2:parenttidptr, x3:newtls, x4:childtid. */ -+ svc 0x0 -+ cmp x0, #0 -+ beq 2f -+ blt PLTJMP(C_SYMBOL_NAME(__syscall_error)) -+ RET -+1: mov x0, #-EINVAL -+ b PLTJMP(syscall_error) -+ -+2: -+#ifdef RESET_PID -+ tbnz x5, #CLONE_THREAD_BIT, 3f -+ mov x0, #-1 -+ tbnz x5, #CLONE_VM_BIT, 2f -+ mov x8, #SYS_ify(getpid) -+ svc 0x0 -+2: -+ mrs x1, tpidr_el0 -+ sub x1, x1, #PTHREAD_SIZEOF -+ str w0, [x1, #PTHREAD_PID_OFFSET] -+ str w0, [x1, #PTHREAD_TID_OFFSET] -+ -+3: -+#endif -+ /* Pick the function arg and call address from the stack and -+ execute. */ -+ ldp x1, x0, [sp], #16 -+ blr x1 -+ -+ /* We are done, pass the return value through x0. */ -+ b PLTJMP(HIDDEN_JUMPTARGET(_exit)) -+ -+PSEUDO_END (__clone) -+ -+weak_alias (__clone, clone) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/configure glibc/ports/sysdeps/unix/sysv/linux/aarch64/configure ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/configure 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/configure 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,3 @@ -+# This file is generated from configure.in by Autoconf. DO NOT EDIT! -+ -+arch_minimum_kernel=2.6.39 -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/configure.in glibc/ports/sysdeps/unix/sysv/linux/aarch64/configure.in ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/configure.in 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/configure.in 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,4 @@ -+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. -+# Local configure fragment for sysdeps/unix/sysv/linux/aarch64. -+ -+arch_minimum_kernel=2.6.39 -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S 2012-09-24 12:44:46.000000000 +0100 -@@ -0,0 +1,105 @@ -+/* Save current context. -+ -+ Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include "ucontext_i.h" -+#include "ucontext-internal.h" -+ -+/* int getcontext (ucontext_t *ucp) -+ -+ Returns 0 on success -1 and errno on failure. -+ */ -+ -+ .text -+ -+ENTRY(__getcontext) -+ /* The saved context will return to the getcontext() call point -+ with a return value of 0 */ -+ str xzr, [x0, oX0 + 0 * SZREG] -+ -+ stp x18, x19, [x0, oX0 + 18 * SZREG] -+ stp x20, x21, [x0, oX0 + 20 * SZREG] -+ stp x22, x23, [x0, oX0 + 22 * SZREG] -+ stp x24, x25, [x0, oX0 + 24 * SZREG] -+ stp x26, x27, [x0, oX0 + 26 * SZREG] -+ stp x28, x29, [x0, oX0 + 28 * SZREG] -+ str x30, [x0, oX0 + 30 * SZREG] -+ -+ /* Place LR into the saved PC, this will ensure that when -+ switching to this saved context with setcontext() control -+ will pass back to the caller of getcontext(), we have -+ already arrange to return the appropriate return value in x0 -+ above. */ -+ str x30, [x0, oPC] -+ -+ /* Save the current SP */ -+ mov x2, sp -+ str x2, [x0, oSP] -+ -+ /* Figure out where to place the first context extension -+ block. */ -+ add x2, x0, #oEXTENSION -+ -+ /* Write the context extension fpsimd header. */ -+ mov w3, #(FPSIMD_MAGIC & 0xffff) -+ movk w3, #(FPSIMD_MAGIC >> 16), lsl #16 -+ str w3, [x2, #oHEAD + oMAGIC] -+ mov w3, #FPSIMD_CONTEXT_SIZE -+ str w3, [x2, #oHEAD + oSIZE] -+ -+ /* Fill in the FP SIMD context. */ -+ add x3, x2, #oV0 + 8 * SZVREG -+ stp d8, d9, [x3], # 2 * SZVREG -+ stp d10, d11, [x3], # 2 * SZVREG -+ stp d12, d13, [x3], # 2 * SZVREG -+ stp d14, d15, [x3], # 2 * SZVREG -+ -+ add x3, x2, oFPSR -+ -+ mrs x4, fpsr -+ str w4, [x3] -+ -+ mrs x4, fpcr -+ str w4, [x3, oFPCR - oFPSR] -+ -+ /* Write the termination context extension header. */ -+ add x2, x2, #FPSIMD_CONTEXT_SIZE -+ -+ str xzr, [x2, #oHEAD + oMAGIC] -+ str xzr, [x2, #oHEAD + oSIZE] -+ -+ /* Grab the signal mask */ -+ /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ -+ add x2, x0, #UCONTEXT_SIGMASK -+ mov x0, SIG_BLOCK -+ mov x1, 0 -+ mov x3, _NSIG8 -+ mov x8, SYS_ify (rt_sigprocmask) -+ svc 0 -+ cbnz x0, 1f -+ -+ /* Return 0 for success */ -+ mov x0, 0 -+ RET -+1: -+ b PLTJMP(C_SYMBOL_NAME(__syscall_error)) -+ -+ PSEUDO_END (__getcontext) -+weak_alias (__getcontext, getcontext) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c 2012-09-24 12:44:55.000000000 +0100 -@@ -0,0 +1,39 @@ -+/* Copyright (C) 2005-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+ -+#undef __gettimeofday -+ -+#include -+#include -+ -+/* Get the current time of day and timezone information, -+ putting it into *tv and *tz. If tz is null, *tz is not filled. -+ Returns 0 on success, -1 on errors. */ -+int -+__gettimeofday (tv, tz) -+ struct timeval *tv; -+ struct timezone *tz; -+{ -+ return INLINE_VSYSCALL (gettimeofday, 2, CHECK_1 (tv), CHECK_1 (tz)); -+} -+libc_hidden_def (__gettimeofday) -+weak_alias (__gettimeofday, gettimeofday) -+libc_hidden_weak (gettimeofday) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/init-first.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/init-first.c ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/init-first.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/init-first.c 2012-09-24 12:45:16.000000000 +0100 -@@ -0,0 +1,43 @@ -+/* Copyright (C) 2007, 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifdef SHARED -+# include -+# undef __gettimeofday -+# undef __clock_gettime -+# undef __clock_getres -+# include -+ -+void (*__vdso_gettimeofday) (struct timeval *, void *) attribute_hidden; -+void (*__vdso_clock_gettime) (clockid_t, struct timespec *); -+void (*__vdso_clock_getres) (clockid_t, struct timespec *); -+ -+static inline void -+_libc_vdso_platform_setup (void) -+{ -+ PREPARE_VERSION (linux2639, "LINUX_2.6.39", 123718537); -+ -+ __vdso_gettimeofday = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2639); -+ __vdso_clock_gettime = _dl_vdso_vsym ("__kernel_clock_gettime", &linux2639); -+ __vdso_clock_getres = _dl_vdso_vsym ("__kernel_clock_getres", &linux2639); -+} -+ -+# define VDSO_SETUP _libc_vdso_platform_setup -+#endif -+ -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S 2012-09-24 12:45:26.000000000 +0100 -@@ -0,0 +1,32 @@ -+/* Copyright (C) 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+ .text -+ENTRY(__ioctl) -+ movz x8, #__NR_ioctl -+ sxtw x0, w0 -+ svc #0x0 -+ cmn x0, #0x1, lsl #12 -+ b.hi PLTJMP(C_SYMBOL_NAME(__syscall_error)) -+ ret -+ -+ PSEUDO_END (__ioctl) -+ -+weak_alias (__ioctl, ioctl) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/kernel-features.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/kernel-features.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/kernel-features.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/kernel-features.h 2012-09-24 15:06:11.000000000 +0100 -@@ -0,0 +1,39 @@ -+/* Set flags signalling availability of kernel features based on given -+ kernel version number. -+ -+ Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+/* AArch64 support starts with 2.6.39, guaranteeing many kernel -+ features. */ -+ -+#define __ASSUME_ACCEPT4 1 -+#define __ASSUME_DUP3 1 -+#define __ASSUME_EVENTFD2 1 -+#define __ASSUME_IN_NONBLOCK 1 -+#define __ASSUME_O_CLOEXEC 1 -+#define __ASSUME_PIPE2 1 -+#define __ASSUME_PREAD 1 -+#define __ASSUME_PWRITE 1 -+#define __ASSUME_SIGNALFD4 1 -+#define __ASSUME_SOCK_CLOEXEC 1 -+#define __ASSUME_UTIMES 1 -+ -+#include_next -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h 2012-09-24 12:45:57.000000000 +0100 -@@ -0,0 +1,25 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+/* This structure must have the same shape as the linux kernel -+ equivalent. */ -+struct kernel_rt_sigframe -+{ -+ siginfo_t info; -+ struct ucontext uc; -+}; -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ldconfig.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/ldconfig.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ldconfig.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/ldconfig.h 2012-09-24 12:46:13.000000000 +0100 -@@ -0,0 +1,25 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+#define SYSDEP_KNOWN_INTERPRETER_NAMES \ -+ { "/lib/ld-linux-aarch64.so.1", FLAG_ELF_LIBC6 }, -+#define SYSDEP_KNOWN_LIBRARY_NAMES \ -+ { "libc.so.6", FLAG_ELF_LIBC6 }, \ -+ { "libm.so.6", FLAG_ELF_LIBC6 }, -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S 2012-09-24 12:46:17.000000000 +0100 -@@ -0,0 +1,19 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include <__read_tp.S> -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/makecontext.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/makecontext.c ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/makecontext.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/makecontext.c 2012-09-24 12:46:32.000000000 +0100 -@@ -0,0 +1,75 @@ -+/* Create new context. -+ Copyright (C) 2002, 2004, 2005, 2008, 2011, 2012 -+ Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+ -+ -+/* makecontext sets up a stack and the registers for the -+ user context. The stack looks like this: -+ -+ +-----------------------+ -+ | padding as required | -+ +-----------------------+ -+ sp -> | parameter 7-n | -+ +-----------------------+ -+ -+ The registers are set up like this: -+ %x0 .. %x7: parameter 1 to 8 -+ %x19 : uc_link -+ %sp : stack pointer. -+*/ -+ -+void -+__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -+{ -+ extern void __startcontext (void); -+ unsigned long int *sp; -+ va_list ap; -+ int i; -+ -+ sp = (unsigned long int *) -+ ((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); -+ -+ /* Allocate stack arguments. */ -+ sp -= argc < 8 ? 0 : argc - 8; -+ -+ /* Keep the stack aligned. */ -+ sp = (unsigned long int *) (((uintptr_t) sp) & -16L); -+ -+ ucp->uc_mcontext.regs[19] = (uintptr_t) ucp->uc_link; -+ ucp->uc_mcontext.sp = (uintptr_t) sp; -+ ucp->uc_mcontext.pc = (uintptr_t) func; -+ ucp->uc_mcontext.regs[29] = (uintptr_t) 0; -+ ucp->uc_mcontext.regs[30] = (uintptr_t) &__startcontext; -+ -+ va_start (ap, argc); -+ for (i = 0; i < argc; ++i) -+ if (i < 8) -+ ucp->uc_mcontext.regs[i] = va_arg (ap, unsigned long int); -+ else -+ sp[i - 8] = va_arg (ap, unsigned long int); -+ -+ va_end (ap); -+} -+ -+weak_alias (__makecontext, makecontext) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/mmap.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/mmap.c ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/mmap.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/mmap.c 2012-09-24 12:46:44.000000000 +0100 -@@ -0,0 +1,34 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+__ptr_t -+__mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset) -+{ -+ return INLINE_SYSCALL (mmap, 6, addr, len, prot, flags, fd, offset); -+} -+ -+weak_alias (__mmap, mmap) -+weak_alias (__mmap, mmap64) -+weak_alias (__mmap, __mmap64) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/local_lim.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/local_lim.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/local_lim.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/local_lim.h 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,100 @@ -+/* Minimum guaranteed maximum values for system limits. Linux version. -+ Copyright (C) 1993-1998,2000,2002-2004,2008 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library. If not, see -+ . */ -+ -+/* The kernel header pollutes the namespace with the NR_OPEN symbol -+ and defines LINK_MAX although filesystems have different maxima. A -+ similar thing is true for OPEN_MAX: the limit can be changed at -+ runtime and therefore the macro must not be defined. Remove this -+ after including the header if necessary. */ -+#ifndef NR_OPEN -+# define __undef_NR_OPEN -+#endif -+#ifndef LINK_MAX -+# define __undef_LINK_MAX -+#endif -+#ifndef OPEN_MAX -+# define __undef_OPEN_MAX -+#endif -+#ifndef ARG_MAX -+# define __undef_ARG_MAX -+#endif -+ -+/* The kernel sources contain a file with all the needed information. */ -+#include -+ -+/* Have to remove NR_OPEN? */ -+#ifdef __undef_NR_OPEN -+# undef NR_OPEN -+# undef __undef_NR_OPEN -+#endif -+/* Have to remove LINK_MAX? */ -+#ifdef __undef_LINK_MAX -+# undef LINK_MAX -+# undef __undef_LINK_MAX -+#endif -+/* Have to remove OPEN_MAX? */ -+#ifdef __undef_OPEN_MAX -+# undef OPEN_MAX -+# undef __undef_OPEN_MAX -+#endif -+/* Have to remove ARG_MAX? */ -+#ifdef __undef_ARG_MAX -+# undef ARG_MAX -+# undef __undef_ARG_MAX -+#endif -+ -+/* The number of data keys per process. */ -+#define _POSIX_THREAD_KEYS_MAX 128 -+/* This is the value this implementation supports. */ -+#define PTHREAD_KEYS_MAX 1024 -+ -+/* Controlling the iterations of destructors for thread-specific data. */ -+#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 -+/* Number of iterations this implementation does. */ -+#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS -+ -+/* The number of threads per process. */ -+#define _POSIX_THREAD_THREADS_MAX 64 -+/* We have no predefined limit on the number of threads. */ -+#undef PTHREAD_THREADS_MAX -+ -+/* Maximum amount by which a process can descrease its asynchronous I/O -+ priority level. */ -+#define AIO_PRIO_DELTA_MAX 20 -+ -+/* Minimum size for a thread. At least two pages for systems with 64k -+ pages. */ -+#define PTHREAD_STACK_MIN 131072 -+ -+/* Maximum number of timer expiration overruns. */ -+#define DELAYTIMER_MAX 2147483647 -+ -+/* Maximum tty name length. */ -+#define TTY_NAME_MAX 32 -+ -+/* Maximum login name length. This is arbitrary. */ -+#define LOGIN_NAME_MAX 256 -+ -+/* Maximum host name length. */ -+#define HOST_NAME_MAX 64 -+ -+/* Maximum message queue priority level. */ -+#define MQ_PRIO_MAX 32768 -+ -+/* Maximum value the semaphore can have. */ -+#define SEM_VALUE_MAX (2147483647) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h 2012-09-24 12:47:13.000000000 +0100 -@@ -0,0 +1,170 @@ -+/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2009-2012 -+ Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _BITS_PTHREADTYPES_H -+#define _BITS_PTHREADTYPES_H 1 -+ -+#include -+ -+#define __SIZEOF_PTHREAD_ATTR_T 64 -+#define __SIZEOF_PTHREAD_MUTEX_T 48 -+#define __SIZEOF_PTHREAD_MUTEXATTR_T 8 -+#define __SIZEOF_PTHREAD_COND_T 48 -+#define __SIZEOF_PTHREAD_COND_COMPAT_T 48 -+#define __SIZEOF_PTHREAD_CONDATTR_T 8 -+#define __SIZEOF_PTHREAD_RWLOCK_T 56 -+#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -+#define __SIZEOF_PTHREAD_BARRIER_T 32 -+#define __SIZEOF_PTHREAD_BARRIERATTR_T 8 -+ -+ -+/* 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_t1 -+#endif -+ -+typedef struct __pthread_internal_list -+{ -+ struct __pthread_internal_list *__prev; -+ struct __pthread_internal_list *__next; -+} __pthread_list_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; -+ unsigned int __nusers; -+ int __kind; -+ int __spins; -+ __pthread_list_t __list; -+#define __PTHREAD_MUTEX_HAVE_PREV 1 -+ } __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]; -+ long int __align; -+} pthread_cond_t; -+ -+typedef union -+{ -+ char __size[__SIZEOF_PTHREAD_CONDATTR_T]; -+ 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; -+ int __writer; -+ int __shared; -+ unsigned long int __pad1; -+ unsigned long int __pad2; -+ unsigned int __flags; -+ } __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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/semaphore.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/semaphore.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/semaphore.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/bits/semaphore.h 2012-09-24 12:47:32.000000000 +0100 -@@ -0,0 +1,35 @@ -+/* Copyright (C) 2002, 2005, 2007, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _SEMAPHORE_H -+# error "Never use directly; include instead." -+#endif -+ -+ -+#define __SIZEOF_SEM_T 32 -+ -+ -+/* 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/c++-types.data glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/c++-types.data ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/c++-types.data 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/c++-types.data 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,67 @@ -+blkcnt64_t:l -+blkcnt_t:l -+blksize_t:i -+caddr_t:Pc -+clockid_t:i -+clock_t:l -+daddr_t:i -+dev_t:m -+fd_mask:l -+fsblkcnt64_t:m -+fsblkcnt_t:m -+fsfilcnt64_t:m -+fsfilcnt_t:m -+fsid_t:8__fsid_t -+gid_t:j -+id_t:j -+ino64_t:m -+ino_t:m -+int16_t:s -+int32_t:i -+int64_t:l -+int8_t:a -+intptr_t:l -+key_t:i -+loff_t:l -+mode_t:j -+nlink_t:j -+off64_t:l -+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:l -+register_t:l -+rlim64_t:m -+rlim_t:m -+sigset_t:10__sigset_t -+size_t:m -+socklen_t:j -+ssize_t:l -+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:m -+u_int8_t:h -+ulong:m -+u_long:m -+u_quad_t:m -+useconds_t:j -+ushort:t -+u_short:t -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/clone.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/clone.S ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/clone.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/clone.S 2012-09-24 12:47:49.000000000 +0100 -@@ -0,0 +1,21 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define RESET_PID -+#include -+#include "../clone.S" -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/createthread.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/createthread.c ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/createthread.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/createthread.c 2012-09-24 12:47:59.000000000 +0100 -@@ -0,0 +1,23 @@ -+/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+/* Value passed to 'clone' for initialization of the thread register. */ -+#define TLS_VALUE (pd + 1) -+ -+/* Get the real implementation. */ -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/fork.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/fork.c ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/fork.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/fork.c 2012-09-24 12:48:11.000000000 +0100 -@@ -0,0 +1,30 @@ -+/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ Contributed by Phil Blundell , 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 -+ . */ -+ -+#include -+#include -+#include -+#include -+ -+ -+#define ARCH_FORK() \ -+ INLINE_SYSCALL (clone, 5, \ -+ CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ -+ NULL, NULL, NULL, &THREAD_SELF->tid) -+ -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/ld.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/ld.abilist ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/ld.abilist 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/ld.abilist 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,12 @@ -+GLIBC_2.16 -+ GLIBC_2.16 A -+ __libc_memalign F -+ __libc_stack_end D 0x8 -+ __stack_chk_guard D 0x8 -+ __tls_get_addr F -+ _dl_mcount F -+ _r_debug D 0x28 -+ calloc F -+ free F -+ malloc F -+ realloc F -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libBrokenLocale.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libBrokenLocale.abilist ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libBrokenLocale.abilist 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libBrokenLocale.abilist 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,3 @@ -+GLIBC_2.16 -+ GLIBC_2.16 A -+ __ctype_get_mb_cur_max F -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libanl.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libanl.abilist ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libanl.abilist 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libanl.abilist 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,6 @@ -+GLIBC_2.16 -+ GLIBC_2.16 A -+ gai_cancel F -+ gai_error F -+ gai_suspend F -+ getaddrinfo_a F -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,2079 @@ -+GLIBC_2.16 -+ GLIBC_2.16 A -+ _Exit F -+ _IO_2_1_stderr_ D 0xe0 -+ _IO_2_1_stdin_ D 0xe0 -+ _IO_2_1_stdout_ D 0xe0 -+ _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 0xa8 -+ _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 0x8 -+ _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 0xa8 -+ _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 -+ ___brk_addr D 0x8 -+ __adjtimex F -+ __after_morecore_hook D 0x8 -+ __argz_count F -+ __argz_next F -+ __argz_stringify F -+ __asprintf F -+ __asprintf_chk 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 0x8 -+ __cxa_at_quick_exit F -+ __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 -+ __dprintf_chk F -+ __dup2 F -+ __duplocale F -+ __endmntent F -+ __environ D 0x8 -+ __errno_location F -+ __fbufsize F -+ __fcntl F -+ __fdelt_chk F -+ __fdelt_warn 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 -+ __fread_chk F -+ __fread_unlocked_chk F -+ __freadable F -+ __freading F -+ __free_hook D 0x8 -+ __freelocale F -+ __fsetlocking F -+ __fwprintf_chk F -+ __fwritable F -+ __fwriting F -+ __fxstat F -+ __fxstat64 F -+ __fxstatat F -+ __fxstatat64 F -+ __getauxval 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 -+ __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 -+ __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 -+ __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 0x8 -+ __key_encryptsession_pk_LOCAL D 0x8 -+ __key_gendes_LOCAL D 0x8 -+ __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 -+ __longjmp_chk F -+ __lseek F -+ __lxstat F -+ __lxstat64 F -+ __malloc_hook D 0x8 -+ __malloc_initialize_hook D 0x8 -+ __mbrlen F -+ __mbrtowc F -+ __mbsnrtowcs_chk F -+ __mbsrtowcs_chk F -+ __mbstowcs_chk F -+ __memalign_hook D 0x8 -+ __memcpy_chk F -+ __memmove_chk F -+ __mempcpy F -+ __mempcpy_chk F -+ __mempcpy_small F -+ __memset_chk F -+ __monstartup F -+ __morecore D 0x8 -+ __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 -+ __obstack_printf_chk F -+ __obstack_vprintf_chk F -+ __open F -+ __open64 F -+ __open64_2 F -+ __open_2 F -+ __openat64_2 F -+ __openat_2 F -+ __overflow F -+ __pipe F -+ __poll F -+ __poll_chk F -+ __posix_getopt F -+ __ppoll_chk F -+ __pread64 F -+ __pread64_chk F -+ __pread_chk F -+ __printf_chk F -+ __printf_fp F -+ __profile_frequency F -+ __progname D 0x8 -+ __progname_full D 0x8 -+ __ptsname_r_chk F -+ __pwrite64 F -+ __rawmemchr F -+ __rcmd_errstr D 0x8 -+ __read F -+ __read_chk F -+ __readlink_chk F -+ __readlinkat_chk F -+ __realloc_hook D 0x8 -+ __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_cpualloc F -+ __sched_cpucount F -+ __sched_cpufree 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 -+ __setmntent F -+ __setpgid F -+ __sigaction F -+ __sigaddset F -+ __sigdelset F -+ __sigismember F -+ __signbit F -+ __signbitf F -+ __signbitl 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 -+ __syslog_chk F -+ __sysv_signal F -+ __timezone D 0x8 -+ __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 0x10 -+ __uflow F -+ __underflow F -+ __uselocale F -+ __vasprintf_chk F -+ __vdprintf_chk 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 0x8 -+ _exit F -+ _flushlbf F -+ _libc_intl_domainname D 0x5 -+ _longjmp F -+ _mcleanup F -+ _mcount F -+ _nl_default_dirname D 0x12 -+ _nl_domain_bindings D 0x8 -+ _nl_msg_cat_cntr D 0x4 -+ _null_auth D 0x18 -+ _obstack_allocated_p F -+ _obstack_begin F -+ _obstack_begin_1 F -+ _obstack_free F -+ _obstack_memory_used F -+ _obstack_newchunk F -+ _res D 0x238 -+ _res_hconf D 0x48 -+ _rpc_dtablesize F -+ _seterr_reply F -+ _setjmp F -+ _sys_errlist D 0x438 -+ _sys_nerr D 0x4 -+ _sys_siglist D 0x208 -+ _tolower F -+ _toupper F -+ a64l F -+ abort F -+ abs F -+ accept F -+ accept4 F -+ access F -+ acct F -+ addmntent F -+ addseverity F -+ adjtime F -+ adjtimex F -+ advance F -+ alarm F -+ aligned_alloc 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 0x8 -+ argp_program_version D 0x8 -+ argp_program_version_hook D 0x8 -+ 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 -+ c16rtomb F -+ c32rtomb 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 -+ clock_adjtime 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 -+ dup3 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 -+ endsgent F -+ endspent F -+ endttyent F -+ endusershell F -+ endutent F -+ endutxent F -+ environ D 0x8 -+ envz_add F -+ envz_entry F -+ envz_get F -+ envz_merge F -+ envz_remove F -+ envz_strip F -+ epoll_create F -+ epoll_create1 F -+ epoll_ctl F -+ epoll_pwait 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 0x8 -+ 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 -+ eventfd F -+ eventfd_read F -+ eventfd_write F -+ execl F -+ execle F -+ execlp F -+ execv F -+ execve F -+ execvp F -+ execvpe F -+ exit F -+ faccessat F -+ fallocate F -+ fallocate64 F -+ fanotify_init F -+ fanotify_mark 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 -+ fgetsgent F -+ fgetsgent_r 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 -+ futimens 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 -+ getauxval 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 -+ getsgent F -+ getsgent_r F -+ getsgnam F -+ getsgnam_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 0x28 -+ 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 -+ index 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_option_alloc F -+ inet6_option_append F -+ inet6_option_find F -+ inet6_option_init F -+ inet6_option_next F -+ inet6_option_space 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 -+ 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 -+ innetgr F -+ inotify_add_watch F -+ inotify_init F -+ inotify_init1 F -+ inotify_rm_watch F -+ insque F -+ ioctl 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 0x8 -+ loc2 D 0x8 -+ localeconv F -+ localtime F -+ localtime_r F -+ lockf F -+ lockf64 F -+ locs D 0x8 -+ 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_info F -+ malloc_set_state F -+ malloc_stats F -+ malloc_trim F -+ malloc_usable_size F -+ mallopt F -+ mallwatch D 0x8 -+ mblen F -+ mbrlen F -+ mbrtoc16 F -+ mbrtoc32 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 -+ mkostemp F -+ mkostemp64 F -+ mkostemps F -+ mkostemps64 F -+ mkstemp F -+ mkstemp64 F -+ mkstemps F -+ mkstemps64 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 -+ name_to_handle_at 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 -+ ntp_gettimex F -+ obstack_alloc_failed_handler D 0x8 -+ obstack_exit_failure D 0x4 -+ obstack_free F -+ obstack_printf F -+ obstack_vprintf F -+ on_exit F -+ open F -+ open64 F -+ open_by_handle_at F -+ open_memstream F -+ open_wmemstream F -+ openat F -+ openat64 F -+ opendir F -+ openlog F -+ optarg D 0x8 -+ opterr D 0x4 -+ optind D 0x4 -+ optopt D 0x4 -+ parse_printf_format F -+ passwd2des F -+ pathconf F -+ pause F -+ pclose F -+ perror F -+ personality F -+ pipe F -+ pipe2 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 -+ preadv F -+ preadv64 F -+ printf F -+ printf_size F -+ printf_size_info F -+ prlimit F -+ prlimit64 F -+ process_vm_readv F -+ process_vm_writev F -+ profil F -+ program_invocation_name D 0x8 -+ program_invocation_short_name D 0x8 -+ pselect F -+ psiginfo 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 -+ putsgent 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 -+ pwritev F -+ pwritev64 F -+ qecvt F -+ qecvt_r F -+ qfcvt F -+ qfcvt_r F -+ qgcvt F -+ qsort F -+ qsort_r F -+ query_module F -+ quick_exit 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 0x8 -+ 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 -+ recvmmsg F -+ recvmsg F -+ regcomp F -+ regerror F -+ regexec F -+ regfree F -+ register_printf_function F -+ register_printf_modifier F -+ register_printf_specifier F -+ register_printf_type 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 0x20 -+ 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 -+ scandirat F -+ scandirat64 F -+ scanf F -+ sched_get_priority_max F -+ sched_get_priority_min F -+ sched_getaffinity F -+ sched_getcpu 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 -+ sendmmsg 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 -+ setns 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 -+ setsgent 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 -+ sgetsgent F -+ sgetsgent_r 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 -+ signalfd 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 -+ splice 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 0x8 -+ stdin D 0x8 -+ stdout D 0x8 -+ 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_l 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 0x8 -+ svc_register F -+ svc_run F -+ svc_sendreply F -+ svc_unregister F -+ svcauthdes_stats D 0x18 -+ 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 -+ sync_file_range F -+ syncfs F -+ sys_errlist D 0x438 -+ sys_nerr D 0x4 -+ sys_sigabbrev D 0x208 -+ sys_siglist D 0x208 -+ 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 -+ tee F -+ telldir F -+ tempnam F -+ textdomain F -+ tfind F -+ time F -+ timegm F -+ timelocal F -+ timerfd_create F -+ timerfd_gettime F -+ timerfd_settime F -+ times F -+ timespec_get F -+ timezone D 0x8 -+ 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 0x10 -+ 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 -+ utimensat 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 -+ vmsplice 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.17 -+ GLIBC_2.17 A -+ secure_getenv F -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libcrypt.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libcrypt.abilist ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libcrypt.abilist 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libcrypt.abilist 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,9 @@ -+GLIBC_2.16 -+ GLIBC_2.16 A -+ crypt F -+ crypt_r F -+ encrypt F -+ encrypt_r F -+ fcrypt F -+ setkey F -+ setkey_r F -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libdl.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libdl.abilist ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libdl.abilist 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libdl.abilist 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,11 @@ -+GLIBC_2.16 -+ GLIBC_2.16 A -+ dladdr F -+ dladdr1 F -+ dlclose F -+ dlerror F -+ dlinfo F -+ dlmopen F -+ dlopen F -+ dlsym F -+ dlvsym F -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libm.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libm.abilist ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libm.abilist 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libm.abilist 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,396 @@ -+GLIBC_2.16 -+ GLIBC_2.16 A -+ _LIB_VERSION D 0x4 -+ __acos_finite F -+ __acosf_finite F -+ __acosh_finite F -+ __acoshf_finite F -+ __acoshl_finite F -+ __acosl_finite F -+ __asin_finite F -+ __asinf_finite F -+ __asinl_finite F -+ __atan2_finite F -+ __atan2f_finite F -+ __atan2l_finite F -+ __atanh_finite F -+ __atanhf_finite F -+ __atanhl_finite F -+ __clog10 F -+ __clog10f F -+ __clog10l F -+ __cosh_finite F -+ __coshf_finite F -+ __coshl_finite F -+ __exp10_finite F -+ __exp10f_finite F -+ __exp10l_finite F -+ __exp2_finite F -+ __exp2f_finite F -+ __exp2l_finite F -+ __exp_finite F -+ __expf_finite F -+ __expl_finite F -+ __finite F -+ __finitef F -+ __finitel F -+ __fmod_finite F -+ __fmodf_finite F -+ __fmodl_finite F -+ __fpclassify F -+ __fpclassifyf F -+ __fpclassifyl F -+ __gamma_r_finite F -+ __gammaf_r_finite F -+ __gammal_r_finite F -+ __hypot_finite F -+ __hypotf_finite F -+ __hypotl_finite F -+ __j0_finite F -+ __j0f_finite F -+ __j0l_finite F -+ __j1_finite F -+ __j1f_finite F -+ __j1l_finite F -+ __jn_finite F -+ __jnf_finite F -+ __jnl_finite F -+ __lgamma_r_finite F -+ __lgammaf_r_finite F -+ __lgammal_r_finite F -+ __log10_finite F -+ __log10f_finite F -+ __log10l_finite F -+ __log2_finite F -+ __log2f_finite F -+ __log2l_finite F -+ __log_finite F -+ __logf_finite F -+ __logl_finite F -+ __pow_finite F -+ __powf_finite F -+ __powl_finite F -+ __remainder_finite F -+ __remainderf_finite F -+ __remainderl_finite F -+ __scalb_finite F -+ __scalbf_finite F -+ __scalbl_finite F -+ __signbit F -+ __signbitf F -+ __signbitl F -+ __sinh_finite F -+ __sinhf_finite F -+ __sinhl_finite F -+ __sqrt_finite F -+ __sqrtf_finite F -+ __y0_finite F -+ __y0f_finite F -+ __y0l_finite F -+ __y1_finite F -+ __y1f_finite F -+ __y1l_finite F -+ __yn_finite F -+ __ynf_finite F -+ __ynl_finite 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libnsl.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libnsl.abilist ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libnsl.abilist 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libnsl.abilist 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,123 @@ -+GLIBC_2.16 -+ GLIBC_2.16 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,225 @@ -+GLIBC_2.16 -+ GLIBC_2.16 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_atfork 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_getname_np 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 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 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 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_setname_np F -+ pthread_setschedparam F -+ pthread_setschedprio F -+ pthread_setspecific F -+ pthread_sigmask F -+ pthread_sigqueue 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libresolv.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libresolv.abilist ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libresolv.abilist 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libresolv.abilist 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,93 @@ -+GLIBC_2.16 -+ GLIBC_2.16 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 0xa8 -+ __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 0x450 -+ __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 0x80 -+ _sethtent F -+ inet_net_ntop F -+ inet_net_pton F -+ inet_neta F -+ 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 -+ res_gethostbyaddr F -+ res_gethostbyname F -+ res_gethostbyname2 F -+ res_send_setqhook F -+ res_send_setrhook F -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/librt.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/librt.abilist ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/librt.abilist 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/librt.abilist 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,42 @@ -+GLIBC_2.16 -+ GLIBC_2.16 A -+ __mq_open_2 F -+ 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 -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libthread_db.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libthread_db.abilist ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libthread_db.abilist 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libthread_db.abilist 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,42 @@ -+GLIBC_2.16 -+ GLIBC_2.16 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libutil.abilist glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libutil.abilist ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libutil.abilist 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libutil.abilist 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,8 @@ -+GLIBC_2.16 -+ GLIBC_2.16 A -+ forkpty F -+ login F -+ login_tty F -+ logout F -+ logwtmp F -+ openpty F -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,15 @@ -+# See scripts/check-localplt.awk for how this file is processed. -+# PLT use is required for the malloc family and for matherr because -+# users can define their own functions and have library internals call them. -+libc.so: calloc -+libc.so: free -+libc.so: malloc -+libc.so: memalign -+libc.so: realloc -+libc.so: __signbit -+libc.so: __signbitl -+libm.so: matherr -+libm.so: __signbit -+libm.so: __signbitf -+libm.so: __signbitl -+libpthread.so: __errno_location -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h 2012-09-24 12:48:34.000000000 +0100 -@@ -0,0 +1,284 @@ -+/* Copyright (C) 2005, 2006, 2007, 2008, 2009-2012 -+ Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _LOWLEVELLOCK_H -+#define _LOWLEVELLOCK_H 1 -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#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_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_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); \ -+ }) -+ -+ -+#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_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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/not-cancel.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/not-cancel.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/not-cancel.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/not-cancel.h 2012-09-24 12:48:55.000000000 +0100 -@@ -0,0 +1,105 @@ -+/* Uncancelable versions of cancelable interfaces. Linux/NPTL version. -+ -+ Copyright (C) 2003, 2006, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ Contributed by Ulrich Drepper , 2003. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+#define open_not_cancel(name, flags, mode) \ -+ INLINE_SYSCALL (openat, 4, AT_FDCWD, (const char *) (name), (flags), (mode)) -+ -+#define open_not_cancel_2(name, flags) \ -+ INLINE_SYSCALL (openat, 3, AT_FDCWD, (const char *) (name), (flags)) -+ -+#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt -+extern int __openat_nocancel (int fd, const char *fname, int oflag, -+ mode_t mode) attribute_hidden; -+extern int __openat64_nocancel (int fd, const char *fname, int oflag, -+ mode_t mode) attribute_hidden; -+#else -+# define __openat_nocancel(fd, fname, oflag, mode) \ -+ openat (fd, fname, oflag, mode) -+# define __openat64_nocancel(fd, fname, oflag, mode) \ -+ openat64 (fd, fname, oflag, mode) -+#endif -+ -+/* Uncancelable openat. */ -+#define openat_not_cancel(fd, fname, oflag, mode) \ -+ __openat_nocancel (fd, fname, oflag, mode) -+#define openat_not_cancel_3(fd, fname, oflag) \ -+ __openat_nocancel (fd, fname, oflag, 0) -+#define openat64_not_cancel(fd, fname, oflag, mode) \ -+ __openat64_nocancel (fd, fname, oflag, mode) -+#define openat64_not_cancel_3(fd, fname, oflag) \ -+ __openat64_nocancel (fd, fname, oflag, 0) -+ -+/* Uncancelable close. */ -+#define close_not_cancel(fd) \ -+ INLINE_SYSCALL (close, 1, fd) -+#define close_not_cancel_no_status(fd) \ -+ (void) ({ INTERNAL_SYSCALL_DECL (err); \ -+ INTERNAL_SYSCALL (close, err, 1, (fd)); }) -+ -+/* Uncancelable read. */ -+#define read_not_cancel(fd, buf, n) \ -+ INLINE_SYSCALL (read, 3, (fd), (buf), (n)) -+ -+/* Uncancelable write. */ -+#define write_not_cancel(fd, buf, n) \ -+ INLINE_SYSCALL (write, 3, (fd), (buf), (n)) -+ -+/* Uncancelable writev. */ -+#define writev_not_cancel_no_status(fd, iov, n) \ -+ (void) ({ INTERNAL_SYSCALL_DECL (err); \ -+ INTERNAL_SYSCALL (writev, err, 3, (fd), (iov), (n)); }) -+ -+/* Uncancelable fcntl. */ -+#define fcntl_not_cancel(fd, cmd, val) \ -+ __fcntl_nocancel (fd, cmd, val) -+ -+/* Uncancelable waitpid. */ -+#ifdef __NR_waitpid -+# define waitpid_not_cancel(pid, stat_loc, options) \ -+ INLINE_SYSCALL (waitpid, 3, pid, stat_loc, options) -+#else -+# define waitpid_not_cancel(pid, stat_loc, options) \ -+ INLINE_SYSCALL (wait4, 4, pid, stat_loc, options, NULL) -+#endif -+ -+/* Uncancelable pause. */ -+#ifdef __NR_pause -+# define pause_not_cancel() \ -+ INLINE_SYSCALL (pause, 0) -+#else -+# define pause_not_cancel() \ -+ __pause_nocancel () -+#endif -+ -+/* Uncancelable nanosleep. */ -+#ifdef __NR_nanosleep -+# define nanosleep_not_cancel(requested_time, remaining) \ -+ INLINE_SYSCALL (nanosleep, 2, requested_time, remaining) -+#else -+# define nanosleep_not_cancel(requested_time, remaining) \ -+ __nanosleep_nocancel (requested_time, remaining) -+#endif -+ -+/* Uncancelable sigsuspend. */ -+#define sigsuspend_not_cancel(set) \ -+ __sigsuspend_nocancel (set) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pt-vfork.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pt-vfork.S ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pt-vfork.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pt-vfork.S 2012-09-24 12:49:23.000000000 +0100 -@@ -0,0 +1,35 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+/* Save the PID value. */ -+#define SAVE_PID \ -+ mrs x2, tpidr_el0; \ -+ sub x2, x2, #PTHREAD_SIZEOF; \ -+ ldr w3, [x2, #PTHREAD_PID_OFFSET]; \ -+ neg w0, w3; \ -+ str w0, [x2, #PTHREAD_PID_OFFSET] -+ -+/* Restore the old PID value in the parent. */ -+#define RESTORE_PID \ -+ cbz x0, 1f; \ -+ str w3, [x2, #PTHREAD_PID_OFFSET]; \ -+1: -+ -+#include "../vfork.S" -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c 2012-09-24 12:49:33.000000000 +0100 -@@ -0,0 +1,90 @@ -+/* Copyright (C) 2004, 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include "pthreadP.h" -+#include -+ -+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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h 2012-09-24 12:49:44.000000000 +0100 -@@ -0,0 +1,205 @@ -+/* Copyright (C) 2003, 2004, 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#ifndef __ASSEMBLER__ -+# include -+#endif -+ -+#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt -+ -+# undef PSEUDO -+# define PSEUDO(name, syscall_name, args) \ -+ .section ".text"; \ -+ .type __##syscall_name##_nocancel,%function; \ -+ .globl __##syscall_name##_nocancel; \ -+ __##syscall_name##_nocancel: \ -+ cfi_startproc; \ -+ DO_CALL (syscall_name, args); \ -+ PSEUDO_RET; \ -+ cfi_endproc; \ -+ .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ -+ ENTRY (name); \ -+ SINGLE_THREAD_P; \ -+ DOARGS_##args; \ -+ bne .Lpseudo_cancel; \ -+ DO_CALL (syscall_name, 0); \ -+ UNDOARGS_##args; \ -+ cmn x0, 4095; \ -+ PSEUDO_RET; \ -+ .Lpseudo_cancel: \ -+ DOCARGS_##args; /* save syscall args etc. around CENABLE. */ \ -+ CENABLE; \ -+ mov x16, x0; /* put mask in safe place. */ \ -+ UNDOCARGS_##args; /* restore syscall args. */ \ -+ mov x8, SYS_ify (syscall_name); /* do the call. */ \ -+ svc 0; \ -+ str x0, [sp, -16]!; /* save syscall return value. */ \ -+ cfi_adjust_cfa_offset (16); \ -+ mov x0, x16; /* get mask back. */ \ -+ CDISABLE; \ -+ ldr x0, [sp], 16; \ -+ cfi_adjust_cfa_offset (-16); \ -+ ldr x30, [sp], 16; \ -+ cfi_adjust_cfa_offset (-16); \ -+ cfi_restore (x30); \ -+ UNDOARGS_##args; \ -+ cmn x0, 4095; -+ -+# define DOCARGS_0 \ -+ str x30, [sp, -16]!; \ -+ cfi_adjust_cfa_offset (16); \ -+ cfi_rel_offset (x30, 0) -+ -+# define UNDOCARGS_0 -+ -+# define DOCARGS_1 \ -+ DOCARGS_0; \ -+ str x0, [sp, -16]!; \ -+ cfi_adjust_cfa_offset (16); \ -+ cfi_rel_offset (x0, 0) -+ -+# define UNDOCARGS_1 \ -+ ldr x0, [sp], 16; \ -+ cfi_restore (x0); \ -+ cfi_adjust_cfa_offset (-16); \ -+ -+# define DOCARGS_2 \ -+ DOCARGS_1; \ -+ str x1, [sp, -16]!; \ -+ cfi_adjust_cfa_offset (16); \ -+ cfi_rel_offset (x1, 0) -+ -+# define UNDOCARGS_2 \ -+ ldr x1, [sp], 16; \ -+ cfi_restore (x1); \ -+ cfi_adjust_cfa_offset (-16); \ -+ UNDOCARGS_1 -+ -+# define DOCARGS_3 \ -+ DOCARGS_2; \ -+ str x2, [sp, -16]!; \ -+ cfi_adjust_cfa_offset (16); \ -+ cfi_rel_offset (x2, 0) -+ -+# define UNDOCARGS_3 \ -+ ldr x2, [sp], 16; \ -+ cfi_restore (x2); \ -+ cfi_adjust_cfa_offset (-16); \ -+ UNDOCARGS_2 -+ -+# define DOCARGS_4 \ -+ DOCARGS_3; \ -+ str x3, [sp, -16]!; \ -+ cfi_adjust_cfa_offset (16); \ -+ cfi_rel_offset (x3, 0) -+ -+# define UNDOCARGS_4 \ -+ ldr x3, [sp], 16; \ -+ cfi_restore (x3); \ -+ cfi_adjust_cfa_offset (-16); \ -+ UNDOCARGS_3 -+ -+# define DOCARGS_5 \ -+ DOCARGS_4; \ -+ str x4, [sp, -16]!; \ -+ cfi_adjust_cfa_offset (16); \ -+ cfi_rel_offset (x4, 0) -+ -+# define UNDOCARGS_5 \ -+ ldr x4, [sp], 16; \ -+ cfi_restore (x4); \ -+ cfi_adjust_cfa_offset (-16); \ -+ UNDOCARGS_4 -+ -+# define DOCARGS_6 \ -+ DOCARGS_5; \ -+ str x5, [sp, -16]!; \ -+ cfi_adjust_cfa_offset (16); \ -+ cfi_rel_offset (x5, 0) -+ -+# define UNDOCARGS_6 \ -+ ldr x5, [sp], 16; \ -+ cfi_restore (x5); \ -+ cfi_adjust_cfa_offset (-16); \ -+ UNDOCARGS_5 -+ -+# 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 \ -+ adrp x16, __local_multiple_threads; \ -+ add x16, x16, #:lo12:__local_multiple_threads; \ -+ ldr x16, [x16]; \ -+ cmp x16, 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 \ -+ stp x0, x30, [sp, -16]!; \ -+ cfi_adjust_cfa_offset (16); \ -+ cfi_rel_offset (x0, 0); \ -+ cfi_rel_offset (x30, 8); \ -+ bl __read_tp; \ -+ sub x0, x0, PTHREAD_SIZEOF; \ -+ ldr x16, [x0, PTHREAD_MULTIPLE_THREADS_OFFSET]; \ -+ ldp x0, x30, [sp], 16; \ -+ cfi_restore (x0); \ -+ cfi_restore (x30); \ -+ cfi_adjust_cfa_offset (-16); \ -+ cmp x16, 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/vfork.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/vfork.S ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/nptl/vfork.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/nptl/vfork.S 2012-09-24 12:49:57.000000000 +0100 -@@ -0,0 +1,37 @@ -+/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+/* Save the PID value. */ -+#define SAVE_PID \ -+ mrs x2, tpidr_el0; \ -+ sub x2, x2, #PTHREAD_SIZEOF; \ -+ ldr w3, [x2, #PTHREAD_PID_OFFSET]; \ -+ cmp w3, #0; \ -+ mov w0, #0x80000000; \ -+ csneg w0, w0, w3, eq; \ -+ str w0, [x2, #PTHREAD_PID_OFFSET] -+ -+/* Restore the old PID value in the parent. */ -+#define RESTORE_PID \ -+ cbz x0, 1f; /* If we are the parent... */ \ -+ str w3, [x2, #PTHREAD_PID_OFFSET]; /* restore the saved PID. */ \ -+1: -+ -+#include "../vfork.S" -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/profil-counter.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/profil-counter.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/profil-counter.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/profil-counter.h 2012-09-24 13:01:32.000000000 +0100 -@@ -0,0 +1,20 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+/* We can use the ix86 version. */ -+#include -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S 2012-09-24 12:59:03.000000000 +0100 -@@ -0,0 +1,89 @@ -+/* Set current context. -+ -+ Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include "ucontext_i.h" -+#include "ucontext-internal.h" -+ -+/* int setcontext (const ucontext_t *ucp) */ -+ -+ .text -+ -+ENTRY(__setcontext) -+ -+ /* Create a signal frame on the stack: -+ -+ fp -+ lr -+ ... -+ sp-> rt_sigframe -+ */ -+ -+ stp x29, x30, [sp, -16]! -+ cfi_adjust_cfa_offset (16) -+ cfi_rel_offset (x29, 0) -+ cfi_rel_offset (x30, 8) -+ -+ mov x29, sp -+ cfi_def_cfa_register (x29) -+ -+ /* Allocate space for the sigcontext. */ -+ mov w3, #((RT_SIGFRAME_SIZE + SP_ALIGN_SIZE) & SP_ALIGN_MASK) -+ sub sp, sp, x3 -+ -+ /* Compute the base address of the ucontext structure. */ -+ add x1, sp, #RT_SIGFRAME_UCONTEXT -+ -+ /* Only ucontext is required in the frame, *copy* it in. */ -+ -+#if UCONTEXT_SIZE % 16 -+#error The implementation of setcontext.S assumes sizeof(ucontext_t) % 16 == 0 -+#endif -+ -+ mov x2, #UCONTEXT_SIZE / 16 -+0: -+ ldp x3, x4, [x0], #16 -+ stp x3, x4, [x1], #16 -+ sub x2, x2, 1 -+ cbnz x2, 0b -+ -+ /* rt_sigreturn () -- no arguments, sp points to struct rt_sigframe. */ -+ mov x8, SYS_ify (rt_sigreturn) -+ svc 0 -+ -+ /* Ooops we failed. Recover the stack */ -+ -+ mov sp, x29 -+ cfi_def_cfa_register (sp) -+ -+ ldp x29, x30, [sp], 16 -+ cfi_adjust_cfa_offset (16) -+ cfi_restore (x29) -+ cfi_restore (x30) -+ b PLTJMP(C_SYMBOL_NAME(__syscall_error)) -+ -+PSEUDO_END (__setcontext) -+weak_alias (__setcontext, setcontext) -+ -+ENTRY(__startcontext) -+ mov x0, x19 -+ cbnz x0, PLTJMP(__setcontext) -+1: b PLTJMP(HIDDEN_JUMPTARGET(_exit)) -+END(__startcontext) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sigaction.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/sigaction.c ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sigaction.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sigaction.c 2012-09-24 15:07:00.000000000 +0100 -@@ -0,0 +1,81 @@ -+/* Copyright (C) 1997-2000, 2002, 2003, 2005, 2006, 2009-2012 -+ Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#include -+#include -+ -+#include -+#include -+ -+#include -+ -+#define SA_RESTORER 0x04000000 -+ -+/* 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 -+ -+int -+__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) -+{ -+ int result; -+ struct kernel_sigaction kact; -+ struct kernel_sigaction 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; -+#endif -+ } -+ -+ result = INLINE_SYSCALL (rt_sigaction, 4, sig, -+ act ? __ptrvalue (&kact) : NULL, -+ oact ? __ptrvalue (&koact) : NULL, _NSIG / 8); -+ if (result >= 0 || errno != ENOSYS) -+ { -+ 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/swapcontext.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/swapcontext.S ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/swapcontext.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/swapcontext.S 2012-09-24 12:59:21.000000000 +0100 -@@ -0,0 +1,100 @@ -+/* Modify saved context. -+ -+ Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+#include "ucontext_i.h" -+#include "ucontext-internal.h" -+ -+/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */ -+ -+ .text -+ENTRY(__swapcontext) -+ /* Set the value returned when swapcontext() returns in this context. */ -+ str xzr, [x0, oX0 + 0 * SZREG] -+ -+ stp x18, x19, [x0, oX0 + 18 * SZREG] -+ stp x20, x21, [x0, oX0 + 20 * SZREG] -+ stp x22, x23, [x0, oX0 + 22 * SZREG] -+ stp x24, x25, [x0, oX0 + 24 * SZREG] -+ stp x26, x27, [x0, oX0 + 26 * SZREG] -+ stp x28, x29, [x0, oX0 + 28 * SZREG] -+ str x30, [x0, oX0 + 30 * SZREG] -+ str x30, [x0, oPC] -+ mov x2, sp -+ str x2, [x0, oSP] -+ -+ /* Figure out where to place the first context extension -+ block. */ -+ add x2, x0, #oEXTENSION -+ -+ /* Write the context extension fpsimd header. */ -+ mov w3, #(FPSIMD_MAGIC & 0xffff) -+ movk w3, #(FPSIMD_MAGIC >> 16), lsl #16 -+ str w3, [x2, #oHEAD + oMAGIC] -+ mov w3, #FPSIMD_CONTEXT_SIZE -+ str w3, [x2, #oHEAD + oSIZE] -+ -+ /* Fill in the FP SIMD context. */ -+ add x3, x2, #oV0 + 8 * SZVREG -+ stp d8, d9, [x3], #2 * SZVREG -+ stp d10, d11, [x3], #2 * SZVREG -+ stp d12, d13, [x3], #2 * SZVREG -+ stp d14, d15, [x3], #2 * SZVREG -+ -+ add x3, x2, #oFPSR -+ -+ mrs x4, fpsr -+ str w4, [x3, #oFPSR - oFPSR] -+ -+ mrs x4, fpcr -+ str w4, [x3, #oFPCR - oFPSR] -+ -+ /* Write the termination context extension header. */ -+ add x2, x2, #FPSIMD_CONTEXT_SIZE -+ -+ str xzr, [x2, #oHEAD + oMAGIC] -+ str xzr, [x2, #oHEAD + oSIZE] -+ -+ /* Preserve ucp. */ -+ mov x21, x1 -+ -+ /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, -+ _NSIG8) */ -+ /* Grab the signal mask */ -+ /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ -+ add x2, x0, #UCONTEXT_SIGMASK -+ mov x0, SIG_BLOCK -+ mov x1, 0 -+ mov x3, _NSIG8 -+ mov x8, SYS_ify (rt_sigprocmask) -+ svc 0 -+ cbnz x0, 1f -+ -+ mov x22, x30 -+ mov x0, x21 -+ bl JUMPTARGET (__setcontext) -+ mov x30, x22 -+ RET -+ -+1: -+ b PLTJMP(C_SYMBOL_NAME(__syscall_error)) -+PSEUDO_END (__swapcontext) -+weak_alias (__swapcontext, swapcontext) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/elf.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/elf.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/elf.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/elf.h 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,25 @@ -+/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _SYS_ELF_H -+#define _SYS_ELF_H 1 -+ -+#warning "This header is obsolete; use instead." -+ -+#include -+ -+#endif /* sys/elf.h */ -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h 2012-09-26 20:49:16.000000000 +0100 -@@ -0,0 +1,133 @@ -+/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#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 -+#include -+#include -+#include -+ -+/* We need to see the definition of struct pt_regs but do not want the -+ linux PTRACE_* defines since they conflict with the generic eglibc -+ definitions in sys/ptrace.h Hence the undef's below. */ -+#include -+ -+#undef PTRACE_GET_THREAD_AREA -+#undef PTRACE_GETHBPREGS -+#undef PTRACE_SETHBPREGS -+ -+#include -+ -+__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 -+ pt_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_pt_regs) / sizeof(elf_greg_t)) -+typedef elf_greg_t elf_gregset_t[ELF_NGREG]; -+ -+/* Register set for the floating-point registers. */ -+typedef struct user_fpsimd_state 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 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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h 2012-09-26 20:49:16.000000000 +0100 -@@ -0,0 +1,174 @@ -+/* `ptrace' debugger support interface. Linux version. -+ Copyright (C) 1996-2012 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _SYS_PTRACE_H -+#define _SYS_PTRACE_H 1 -+ -+#include -+ -+__BEGIN_DECLS -+ -+/* Type of the REQUEST argument to `ptrace.' */ -+enum __ptrace_request -+{ -+ /* Indicate that the process making this request should be traced. -+ All signals received by this process can be intercepted by its -+ parent, and its parent can use the other `ptrace' requests. */ -+ PTRACE_TRACEME = 0, -+#define PT_TRACE_ME PTRACE_TRACEME -+ -+ /* Return the word in the process's text space at address ADDR. */ -+ PTRACE_PEEKTEXT = 1, -+#define PT_READ_I PTRACE_PEEKTEXT -+ -+ /* Return the word in the process's data space at address ADDR. */ -+ PTRACE_PEEKDATA = 2, -+#define PT_READ_D PTRACE_PEEKDATA -+ -+ /* Return the word in the process's user area at offset ADDR. */ -+ PTRACE_PEEKUSER = 3, -+#define PT_READ_U PTRACE_PEEKUSER -+ -+ /* Write the word DATA into the process's text space at address ADDR. */ -+ PTRACE_POKETEXT = 4, -+#define PT_WRITE_I PTRACE_POKETEXT -+ -+ /* Write the word DATA into the process's data space at address ADDR. */ -+ PTRACE_POKEDATA = 5, -+#define PT_WRITE_D PTRACE_POKEDATA -+ -+ /* Write the word DATA into the process's user area at offset ADDR. */ -+ PTRACE_POKEUSER = 6, -+#define PT_WRITE_U PTRACE_POKEUSER -+ -+ /* Continue the process. */ -+ PTRACE_CONT = 7, -+#define PT_CONTINUE PTRACE_CONT -+ -+ /* Kill the process. */ -+ PTRACE_KILL = 8, -+#define PT_KILL PTRACE_KILL -+ -+ /* Single step the process. */ -+ PTRACE_SINGLESTEP = 9, -+#define PT_STEP PTRACE_SINGLESTEP -+ -+ /* Attach to a process that is already running. */ -+ PTRACE_ATTACH = 16, -+#define PT_ATTACH PTRACE_ATTACH -+ -+ /* Detach from a process attached to with PTRACE_ATTACH. */ -+ PTRACE_DETACH = 17, -+#define PT_DETACH PTRACE_DETACH -+ -+ PTRACE_GET_THREAD_AREA = 22, -+ -+ /* Continue and stop at the next (return from) syscall. */ -+ PTRACE_SYSCALL = 24, -+#define PT_SYSCALL PTRACE_SYSCALL -+ -+ /* Get all hardware breakpoint registers. */ -+ PTRACE_GETHBPREGS = 29, -+ -+ /* Set all hardware breakpoint registers. */ -+ PTRACE_SETHBPREGS = 30, -+ -+ /* Set ptrace filter options. */ -+ PTRACE_SETOPTIONS = 0x4200, -+#define PT_SETOPTIONS PTRACE_SETOPTIONS -+ -+ /* Get last ptrace message. */ -+ PTRACE_GETEVENTMSG = 0x4201, -+#define PT_GETEVENTMSG PTRACE_GETEVENTMSG -+ -+ /* Get siginfo for process. */ -+ PTRACE_GETSIGINFO = 0x4202, -+#define PT_GETSIGINFO PTRACE_GETSIGINFO -+ -+ /* Set new siginfo for process. */ -+ PTRACE_SETSIGINFO = 0x4203, -+#define PT_SETSIGINFO PTRACE_SETSIGINFO -+ -+ /* Get register content. */ -+ PTRACE_GETREGSET = 0x4204, -+#define PTRACE_GETREGSET PTRACE_GETREGSET -+ -+ /* Set register content. */ -+ PTRACE_SETREGSET = 0x4205, -+#define PTRACE_SETREGSET PTRACE_SETREGSET -+ -+ /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect -+ signal or group stop state. */ -+ PTRACE_SEIZE = 0x4206, -+#define PTRACE_SEIZE PTRACE_SEIZE -+ -+ /* Trap seized trace. */ -+ PTRACE_INTERRUPT = 0x4207, -+#define PTRACE_INTERRUPT PTRACE_INTERRUPT -+ -+ /* Wait for next group event. */ -+ PTRACE_LISTEN = 0x4208 -+}; -+ -+ -+/* Flag for PTRACE_LISTEN. */ -+enum __ptrace_flags -+{ -+ PTRACE_SEIZE_DEVEL = 0x80000000 -+}; -+ -+/* Options set using PTRACE_SETOPTIONS. */ -+enum __ptrace_setoptions -+{ -+ PTRACE_O_TRACESYSGOOD = 0x00000001, -+ PTRACE_O_TRACEFORK = 0x00000002, -+ PTRACE_O_TRACEVFORK = 0x00000004, -+ PTRACE_O_TRACECLONE = 0x00000008, -+ PTRACE_O_TRACEEXEC = 0x00000010, -+ PTRACE_O_TRACEVFORKDONE = 0x00000020, -+ PTRACE_O_TRACEEXIT = 0x00000040, -+ PTRACE_O_TRACESECCOMP = 0x00000080, -+ PTRACE_O_MASK = 0x000000ff -+}; -+ -+/* Wait extended result codes for the above trace options. */ -+enum __ptrace_eventcodes -+{ -+ PTRACE_EVENT_FORK = 1, -+ PTRACE_EVENT_VFORK = 2, -+ PTRACE_EVENT_CLONE = 3, -+ PTRACE_EVENT_EXEC = 4, -+ PTRACE_EVENT_VFORK_DONE = 5, -+ PTRACE_EVENT_EXIT = 6, -+ PTRACE_EVENT_SECCOMP = 7 -+}; -+ -+/* Perform process tracing functions. REQUEST is one of the values -+ above, and determines the action to be taken. -+ For all requests except PTRACE_TRACEME, PID specifies the process to be -+ traced. -+ -+ PID and the other arguments described above for the various requests should -+ appear (those that are used for the particular request) as: -+ pid_t PID, void *ADDR, int DATA, void *ADDR2 -+ after REQUEST. */ -+extern long int ptrace (enum __ptrace_request __request, ...) __THROW; -+ -+__END_DECLS -+ -+#endif /* _SYS_PTRACE_H */ -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,55 @@ -+/* Copyright (C) 1998, 1999, 2001, 2006 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+/* System V/AArch64 ABI compliant context switching support. */ -+ -+#ifndef _SYS_UCONTEXT_H -+#define _SYS_UCONTEXT_H 1 -+ -+#include -+#include -+#include -+ -+/* We need the signal context definitions even if they are not used -+ included in . */ -+#include -+ -+typedef int greg_t; -+ -+/* Container for all general registers. */ -+typedef elf_gregset_t gregset_t; -+ -+/* Structure to describe FPU registers. */ -+typedef elf_fpregset_t 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; -+ __sigset_t uc_sigmask; -+ mcontext_t uc_mcontext; -+ } ucontext_t; -+ -+#endif /* sys/ucontext.h */ -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h 2012-09-26 20:49:16.000000000 +0100 -@@ -0,0 +1,31 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _SYS_USER_H -+#define _SYS_USER_H 1 -+ -+/* We need to see the definition of struct pt_regs but do not want the -+ linux PTRACE_* defines since they conflict with the generic glibc -+ definitions in sys/ptrace.h Hence the undef's below. */ -+#include -+ -+#undef PTRACE_GET_THREAD_AREA -+#undef PTRACE_GETHBPREGS -+#undef PTRACE_SETHBPREGS -+ -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h.orig glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h.orig ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h.orig 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h.orig 2012-09-24 12:59:55.000000000 +0100 -@@ -0,0 +1,36 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _SYS_USER_H -+#define _SYS_USER_H 1 -+ -+/* We need to see the definition of struct pt_regs but do not want the -+ linux PTRACE_* defines since they conflict with the generic eglibc -+ definitions in sys/ptrace.h Hence the undef's below. */ -+#include -+ -+#undef PTRACE_GETREGS -+#undef PTRACE_SETREGS -+#undef PTRACE_GETFPREGS -+#undef PTRACE_SETFPREGS -+#undef PTRACE_GET_THREAD_AREA -+#undef PTRACE_SET_SYSCALL -+#undef PTRACE_GETHBPREGS -+#undef PTRACE_SETHBPREGS -+ -+#endif -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/syscall.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/syscall.S ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/syscall.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/syscall.S 2012-09-24 13:00:07.000000000 +0100 -@@ -0,0 +1,44 @@ -+/* Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+ -+/* syscall (int nr, ...) -+ -+ AArch64 system calls take between 0 and 7 arguments. On entry here nr -+ is in w0 and any other system call arguments are in register x1..x7. -+ -+ For kernel entry we need to move the system call nr to x8 then -+ load the remaining arguments to register. */ -+ -+ENTRY (syscall) -+ uxtw x8, w0 -+ mov x0, x1 -+ mov x1, x2 -+ mov x2, x3 -+ mov x3, x4 -+ mov x4, x5 -+ mov x5, x6 -+ mov x6, x7 -+ svc 0x0 -+ cmn x0, #4095 -+ b.cs 1f -+ RET -+1: -+ b PLTJMP(SYSCALL_ERROR) -+PSEUDO_END (syscall) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/syscalls.list glibc/ports/sysdeps/unix/sysv/linux/aarch64/syscalls.list ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/syscalls.list 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/syscalls.list 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,34 @@ -+# File name Caller Syscall name # args Strong name Weak names -+ -+# Semaphore and shm system calls. -+msgget - msgget i:ii __msgget msgget -+msgctl - msgctl i:iip __msgctl msgctl -+msgrcv - msgrcv Ci:ibnii __msgrcv msgrcv -+msgsnd - msgsnd Ci:ibni __msgsnd msgsnd -+shmctl - shmctl i:iip __shmctl shmctl -+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 -+semctl - semctl i:iiii __semctl semctl -+ -+# proper socket implementations: -+accept - accept Ci:iBN __libc_accept __accept accept -+bind - bind i:ipi __bind bind -+connect - connect Ci:ipi __libc_connect __connect_internal __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 -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.c glibc/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.c ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.c 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.c 2012-09-25 16:37:48.000000000 +0100 -@@ -0,0 +1,33 @@ -+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library. If not, see -+ . */ -+ -+#include -+#include -+ -+int __syscall_error (int err); -+hidden_proto (__syscall_error) -+ -+/* This routine is jumped to by all the syscall handlers, to stash -+ an error number into errno. */ -+int -+__syscall_error (int err) -+{ -+ __set_errno (- err); -+ return -1; -+} -+hidden_def (__syscall_error) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h 2012-09-24 15:08:39.000000000 +0100 -@@ -0,0 +1,401 @@ -+/* Copyright (C) 2005-2007, 2009-2012 -+ Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#ifndef _LINUX_AARCH64_SYSDEP_H -+#define _LINUX_AARCH64_SYSDEP_H 1 -+ -+#include -+#include -+ -+/* Don't use stime, even if the kernel headers define it. We have -+ settimeofday. Similarly use setitimer to implement alarm. */ -+#undef __NR_time -+#undef __NR_umount -+#undef __NR_stime -+#undef __NR_alarm -+#undef __NR_utime -+#undef __NR_select -+#undef __NR_readdir -+#undef __NR_socketcall -+#undef __NR_ipc -+ -+/* Defines RTLD_PRIVATE_ERRNO and USE_DL_SYSINFO. */ -+#include -+ -+#include -+ -+/* In order to get __set_errno() definition in INLINE_SYSCALL. */ -+#ifndef __ASSEMBLER__ -+#include -+#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) -+ -+#ifdef __ASSEMBLER__ -+ -+/* 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 x0, #4095; -+ -+/* Notice the use of 'RET' instead of 'ret' the assembler is case -+ insensitive and eglibc already uses the preprocessor symbol 'ret' -+ so we use the upper case 'RET' to force through a ret instruction -+ to the assembler */ -+#define PSEUDO_RET \ -+ b.cs 1f; \ -+ RET; \ -+ 1: \ -+ 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); -+ -+/* Notice the use of 'RET' instead of 'ret' the assembler is case -+ insensitive and eglibc already uses the preprocessor symbol 'ret' -+ so we use the upper case 'RET' to force through a ret instruction -+ to the assembler */ -+#define PSEUDO_RET_NOERRNO \ -+ RET; -+ -+#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); \ -+ neg x0, x0 -+ -+#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: \ -+ adrp x1, C_SYMBOL_NAME(rtld_errno); \ -+ add x1, x1, #:lo12:C_SYMBOL_NAME(rtld_errno); \ -+ neg w0, w0; \ -+ str w0, [x1]; \ -+ mov x0, -1; \ -+ RET; -+# else -+ -+# define SYSCALL_ERROR_HANDLER \ -+__local_syscall_error: \ -+ stp x29, x30, [sp, -32]!; \ -+ cfi_adjust_cfa_offset (32); \ -+ cfi_rel_offset (x29, 0); \ -+ cfi_rel_offset (x30, 8); \ -+ add x29, sp, 0; \ -+ str x19, [sp,16]; \ -+ neg x19, x0; \ -+ bl PLTJMP(C_SYMBOL_NAME(__errno_location)); \ -+ str x19, [x0]; \ -+ mov x0, -1; \ -+ ldr x19, [sp,16]; \ -+ ldp x29, x30, [sp], 32; \ -+ cfi_adjust_cfa_offset (-32); \ -+ cfi_restore (x29); \ -+ cfi_restore (x30); \ -+ RET; -+# endif -+#else -+# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ -+# define SYSCALL_ERROR __syscall_error -+#endif -+ -+/* Linux takes system call args in registers: -+ syscall number in the SVC instruction -+ arg 1 x0 -+ arg 2 x1 -+ arg 3 x2 -+ arg 4 x3 -+ arg 5 x4 -+ arg 6 x5 -+ arg 7 x6 -+ -+ The compiler is going to form a call by coming here, through PSEUDO, with -+ arguments -+ syscall number in the DO_CALL macro -+ arg 1 x0 -+ arg 2 x1 -+ arg 3 x2 -+ arg 4 x3 -+ arg 5 x4 -+ arg 6 x5 -+ arg 7 x6 -+ -+ 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. -+ -+*/ -+ -+#undef DO_CALL -+#define DO_CALL(syscall_name, args) \ -+ DOARGS_##args \ -+ mov x8, SYS_ify (syscall_name); \ -+ svc 0; \ -+ UNDOARGS_##args -+ -+#define DOARGS_0 /* nothing */ -+#define DOARGS_1 /* nothing */ -+#define DOARGS_2 /* nothing */ -+#define DOARGS_3 /* nothing */ -+#define DOARGS_4 /* nothing */ -+#define DOARGS_5 /* nothing */ -+#define DOARGS_6 /* nothing */ -+#define DOARGS_7 /* nothing */ -+ -+#define UNDOARGS_0 /* nothing */ -+#define UNDOARGS_1 /* nothing */ -+#define UNDOARGS_2 /* nothing */ -+#define UNDOARGS_3 /* nothing */ -+#define UNDOARGS_4 /* nothing */ -+#define UNDOARGS_5 /* nothing */ -+#define UNDOARGS_6 /* nothing */ -+#define UNDOARGS_7 /* nothing */ -+ -+#else /* not __ASSEMBLER__ */ -+ -+#ifdef SHARED -+# define INLINE_VSYSCALL(name, nr, args...) \ -+ ({ \ -+ __label__ out; \ -+ __label__ iserr; \ -+ long sc_ret; \ -+ long sc_err; \ -+ INTERNAL_SYSCALL_DECL (sc_err); \ -+ \ -+ if (__vdso_##name != NULL) \ -+ { \ -+ register long _x0 asm ("x0"); \ -+ sc_ret = INTERNAL_VSYSCALL_NCS (__vdso_##name, sc_err, nr, ##args); \ -+ if (!INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ -+ goto out; \ -+ if (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err) != ENOSYS) \ -+ goto iserr; \ -+ } \ -+ \ -+ sc_ret = INTERNAL_SYSCALL (name, sc_err, nr, ##args); \ -+ if (INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ -+ { \ -+ iserr: \ -+ __set_errno (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err)); \ -+ sc_ret = -1L; \ -+ } \ -+ out: \ -+ sc_ret; \ -+ }) -+#else -+# define INLINE_VSYSCALL(name, nr, args...) \ -+ INLINE_SYSCALL (name, nr, ##args) -+#endif -+ -+#ifdef SHARED -+# define INTERNAL_VSYSCALL(name, err, nr, args...) \ -+ ({ \ -+ __label__ out; \ -+ long v_ret; \ -+ \ -+ if (__vdso_##name != NULL) \ -+ { \ -+ register long _x0 asm ("x0"); \ -+ v_ret = INTERNAL_VSYSCALL_NCS (__vdso_##name, err, nr, ##args); \ -+ if (!INTERNAL_SYSCALL_ERROR_P (v_ret, err) \ -+ || INTERNAL_SYSCALL_ERRNO (v_ret, err) != ENOSYS) \ -+ goto out; \ -+ } \ -+ v_ret = INTERNAL_SYSCALL (name, err, nr, ##args); \ -+ out: \ -+ v_ret; \ -+ }) -+#else -+# define INTERNAL_VSYSCALL(name, err, nr, args...) \ -+ INTERNAL_SYSCALL (name, err, nr, ##args) -+#endif -+ -+/* List of system calls which are supported as vsyscalls. */ -+#define HAVE_CLOCK_GETRES_VSYSCALL 1 -+#define HAVE_CLOCK_GETTIME_VSYSCALL 1 -+ -+#define INTERNAL_VSYSCALL_NCS(funcptr, err, nr, args...) \ -+ ({ \ -+ LOAD_ARGS_##nr (args) \ -+ asm volatile ("blr %1" \ -+ : "=r" (_x0) \ -+ : "r" (funcptr), ASM_ARGS_##nr \ -+ : "x30", "memory"); \ -+ (long) _x0; \ -+ }) -+ -+ -+/* Define a macro which expands into the inline wrapper code for a system -+ call. */ -+#undef INLINE_SYSCALL -+#define INLINE_SYSCALL(name, nr, args...) \ -+ ({ unsigned long _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 long) -1; \ -+ } \ -+ (long) _sys_result; }) -+ -+#undef INTERNAL_SYSCALL_DECL -+#define INTERNAL_SYSCALL_DECL(err) do { } while (0) -+ -+#undef INTERNAL_SYSCALL_RAW -+#define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ -+ ({ unsigned long _sys_result; \ -+ { \ -+ LOAD_ARGS_##nr (args) \ -+ register long _x8 asm ("x8") = (name); \ -+ asm volatile ("svc 0 // syscall " # name \ -+ : "+r" (_x0), "+r" (_x8) \ -+ : ASM_ARGS_##nr \ -+ : "memory", CLOBBER_ARGS_##nr); \ -+ _sys_result = _x0; \ -+ } \ -+ (long) _sys_result; }) -+ -+#undef INTERNAL_SYSCALL -+#define INTERNAL_SYSCALL(name, err, nr, args...) \ -+ INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args) -+ -+#undef INTERNAL_SYSCALL_AARCH64 -+#define INTERNAL_SYSCALL_AARCH64(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 long) (val) >= (unsigned long) -4095) -+ -+#undef INTERNAL_SYSCALL_ERRNO -+#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) -+ -+#define CLOBBER_ARGS_0 CLOBBER_ARGS_1 -+#define CLOBBER_ARGS_1 "x1", CLOBBER_ARGS_2 -+#define CLOBBER_ARGS_2 "x2", CLOBBER_ARGS_3 -+#define CLOBBER_ARGS_3 "x3", CLOBBER_ARGS_4 -+#define CLOBBER_ARGS_4 "x4", CLOBBER_ARGS_5 -+#define CLOBBER_ARGS_5 "x5", CLOBBER_ARGS_6 -+#define CLOBBER_ARGS_6 "x6", CLOBBER_ARGS_7 -+#define CLOBBER_ARGS_7 \ -+ "x7", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", "x18" -+ -+#define LOAD_ARGS_0() \ -+ register long _x0 asm ("x0"); -+ -+#define ASM_ARGS_0 -+#define LOAD_ARGS_1(x0) \ -+ long _x0tmp = (long) (x0); \ -+ LOAD_ARGS_0 () \ -+ _x0 = _x0tmp; -+#define ASM_ARGS_1 "r" (_x0) -+#define LOAD_ARGS_2(x0, x1) \ -+ long _x1tmp = (long) (x1); \ -+ LOAD_ARGS_1 (x0) \ -+ register long _x1 asm ("x1") = _x1tmp; -+#define ASM_ARGS_2 ASM_ARGS_1, "r" (_x1) -+#define LOAD_ARGS_3(x0, x1, x2) \ -+ long _x2tmp = (long) (x2); \ -+ LOAD_ARGS_2 (x0, x1) \ -+ register long _x2 asm ("x2") = _x2tmp; -+#define ASM_ARGS_3 ASM_ARGS_2, "r" (_x2) -+#define LOAD_ARGS_4(x0, x1, x2, x3) \ -+ long _x3tmp = (long) (x3); \ -+ LOAD_ARGS_3 (x0, x1, x2) \ -+ register long _x3 asm ("x3") = _x3tmp; -+#define ASM_ARGS_4 ASM_ARGS_3, "r" (_x3) -+#define LOAD_ARGS_5(x0, x1, x2, x3, x4) \ -+ long _x4tmp = (long) (x4); \ -+ LOAD_ARGS_4 (x0, x1, x2, x3) \ -+ register long _x4 asm ("x4") = _x4tmp; -+#define ASM_ARGS_5 ASM_ARGS_4, "r" (_x4) -+#define LOAD_ARGS_6(x0, x1, x2, x3, x4, x5) \ -+ long _x5tmp = (long) (x5); \ -+ LOAD_ARGS_5 (x0, x1, x2, x3, x4) \ -+ register long _x5 asm ("x5") = _x5tmp; -+#define ASM_ARGS_6 ASM_ARGS_5, "r" (_x5) -+#define LOAD_ARGS_7(x0, x1, x2, x3, x4, x5, x6) \ -+ long _x6tmp = (long) (x6); \ -+ LOAD_ARGS_6 (x0, x1, x2, x3, x4, x5) \ -+ register long _x6 asm ("x6") = _x6tmp; -+#define ASM_ARGS_7 ASM_ARGS_6, "r" (_x6) -+ -+#undef INTERNAL_SYSCALL_NCS -+#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ -+ INTERNAL_SYSCALL_RAW (number, err, nr, args) -+ -+#endif /* __ASSEMBLER__ */ -+ -+/* Pointer mangling is not yet supported for AArch64. */ -+#define PTR_MANGLE(var) (void) (var) -+#define PTR_DEMANGLE(var) (void) (var) -+ -+#if !defined __NR_pread && defined __NR_pread64 -+# define __NR_pread __NR_pread64 -+#endif -+ -+#if !defined __NR_pwrite && defined __NR_pwrite64 -+# define __NR_pwrite __NR_pwrite64 -+#endif -+ -+#endif /* linux/aarch64/sysdep.h */ -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h glibc/ports/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h 2012-09-24 13:01:08.000000000 +0100 -@@ -0,0 +1,45 @@ -+/* Copyright (C) 2009-2012 Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#define SP_ALIGN_SIZE 15 -+ -+#define SP_ALIGN_MASK ~15 -+ -+/* Size of an X regiser in bytes. */ -+#define SZREG 8 -+ -+/* Size of a V register in bytes. */ -+#define SZVREG 16 -+ -+/* Number of integer parameter passing registers. */ -+#define NUMXREGARGS 8 -+ -+/* Number of FP parameter passing registers. */ -+#define NUMDREGARGS 8 -+ -+/* Size of named integer argument in bytes when passed on the -+ stack. */ -+#define SIZEOF_NAMED_INT 4 -+ -+/* Size of an anonymous integer argument in bytes when passed on the -+ stack. */ -+#define SIZEOF_ANONYMOUS_INT 8 -+ -+#define oX21 (oX0 + 21*8) -+#define oFP (oX0 + 29*8) -+#define oLR (oX0 + 30*8) -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym glibc/ports/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym 2012-09-24 12:41:10.000000000 +0100 -@@ -0,0 +1,54 @@ -+#include -+#include -+#include -+#include -+#include -+ -+#include "kernel_rt_sigframe.h" -+ -+SIG_BLOCK -+SIG_SETMASK -+ -+_NSIG8 (_NSIG / 8) -+ -+-- Offsets of the fields in the kernel rt_sigframe_t structure. -+#define rt_sigframe(member) offsetof (struct kernel_rt_sigframe, member) -+ -+RT_SIGFRAME_UCONTEXT rt_sigframe (uc) -+ -+RT_SIGFRAME_SIZE sizeof (struct kernel_rt_sigframe) -+FPSIMD_CONTEXT_SIZE sizeof (struct fpsimd_context) -+ -+#define ucontext(member) offsetof (ucontext_t, member) -+#define stack(member) ucontext (uc_stack.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_SIZE sizeof (ucontext_t) -+ -+STACK_SP stack (ss_sp) -+STACK_SIZE stack (ss_size) -+STACK_FLAGS stack (ss_flags) -+ -+oX0 mcontext (regs) -+oSP mcontext (sp) -+oPC mcontext (pc) -+oEXTENSION mcontext (__reserved) -+ -+#define fpsimd_context(member) offsetof (struct fpsimd_context, member) -+ -+oHEAD fpsimd_context (head) -+oV0 fpsimd_context (vregs) -+oFPSR fpsimd_context (fpsr) -+oFPCR fpsimd_context (fpcr) -+ -+#define aarch64_ctx(member) offsetof (struct _aarch64_ctx, member) -+ -+oMAGIC aarch64_ctx (magic) -+oSIZE aarch64_ctx (size) -+ -+FPSIMD_MAGIC -diff -x .git -uNr glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/vfork.S glibc/ports/sysdeps/unix/sysv/linux/aarch64/vfork.S ---- glibc.orig/ports/sysdeps/unix/sysv/linux/aarch64/vfork.S 1970-01-01 01:00:00.000000000 +0100 -+++ glibc/ports/sysdeps/unix/sysv/linux/aarch64/vfork.S 2012-09-24 13:01:26.000000000 +0100 -@@ -0,0 +1,50 @@ -+/* Copyright (C) 1999, 2002, 2003, 2005, 2009-2012 -+ Free Software Foundation, Inc. -+ -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public License as -+ published by the Free Software Foundation; either version 2.1 of the -+ License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ . */ -+ -+#include -+#define _ERRNO_H 1 -+#include -+#include -+ -+/* 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 -+ mov x0, #0x4111 /* CLONE_VM | CLONE_VFORK | SIGCHLD */ -+ mov x1, sp -+ DO_CALL (clone, 2) -+#ifdef RESTORE_PID -+ RESTORE_PID -+#endif -+ cmn x0, #4095 -+ b.cs 1f -+ RET -+1: -+ b PLTJMP(SYSCALL_ERROR) -+ -+PSEUDO_END (__vfork) -+libc_hidden_def (__vfork) -+ -+weak_alias (__vfork, vfork) diff --git a/meta/recipes-core/eglibc/eglibc-2.16/aarch64-glibc-v3-elf.patch b/meta/recipes-core/eglibc/eglibc-2.16/aarch64-glibc-v3-elf.patch deleted file mode 100644 index bad9feb12b..0000000000 --- a/meta/recipes-core/eglibc/eglibc-2.16/aarch64-glibc-v3-elf.patch +++ /dev/null @@ -1,47 +0,0 @@ -import http://sourceware.org/ml/libc-alpha/2012-11/msg00240.html - -Upstream-Status: merged into trunk - -diff --git a/elf/elf.h b/elf/elf.h -index 2524924..5a9b13f 100644 ---- a/elf/elf.h -+++ b/elf/elf.h -@@ -249,6 +249,7 @@ typedef struct - #define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */ - #define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */ - #define EM_XTENSA 94 /* Tensilica Xtensa Architecture */ -+#define EM_AARCH64 183 /* ARM AARCH64 */ - #define EM_TILEPRO 188 /* Tilera TILEPro */ - #define EM_TILEGX 191 /* Tilera TILE-Gx */ - #define EM_NUM 192 -@@ -631,6 +632,9 @@ typedef struct - #define NT_S390_LAST_BREAK 0x306 /* s390 breaking event address */ - #define NT_S390_SYSTEM_CALL 0x307 /* s390 system call restart data */ - #define NT_ARM_VFP 0x400 /* ARM VFP/NEON registers */ -+#define NT_ARM_TLS 0x401 /* ARM TLS register */ -+#define NT_ARM_HW_BREAK 0x402 /* ARM hardware breakpoint registers */ -+#define NT_ARM_HW_WATCH 0x403 /* ARM hardware watchpoint registers */ - - /* Legal values for the note segment descriptor types for object files. */ - -@@ -2306,6 +2310,20 @@ typedef Elf32_Addr Elf32_Conflict; - #define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) /* ARM attributes section. */ - - -+/* AArch64 specific declarations. */ -+ -+#define R_AARCH64_NONE 0 /* No relocation. */ -+#define R_AARCH64_ABS64 257 /* Direct 64 bit. */ -+#define R_AARCH64_ABS32 258 /* Direct 32 bit. */ -+#define R_AARCH64_COPY 1024 /* Copy symbol at runtime. */ -+#define R_AARCH64_GLOB_DAT 1025 /* Create GOT entry. */ -+#define R_AARCH64_JUMP_SLOT 1026 /* Create PLT entry. */ -+#define R_AARCH64_RELATIVE 1027 /* Adjust by program base. */ -+#define R_AARCH64_TLS_DTPMOD64 1028 /* Module number, 64 bit. */ -+#define R_AARCH64_TLS_DTPREL64 1029 /* Module-relative offset, 64 bit. */ -+#define R_AARCH64_TLS_TPREL64 1030 /* TP-relative offset, 64 bit. */ -+#define R_AARCH64_TLSDESC 1031 /* TLS Descriptor. */ -+ - /* ARM relocs. */ - - #define R_ARM_NONE 0 /* No reloc */ diff --git a/meta/recipes-core/eglibc/eglibc_2.16.bb b/meta/recipes-core/eglibc/eglibc_2.16.bb index 22abeb80b6..61e16bc9cd 100644 --- a/meta/recipes-core/eglibc/eglibc_2.16.bb +++ b/meta/recipes-core/eglibc/eglibc_2.16.bb @@ -27,8 +27,9 @@ SRC_URI = "http://downloads.yoctoproject.org/releases/eglibc/eglibc-${PV}-svnr21 file://0001-Add-name_to_handle_at-open_by_handle-etc.-to-PowerPC.patch \ file://fsl-ppc-no-fsqrt.patch \ file://0001-R_ARM_TLS_DTPOFF32.patch \ - file://aarch64-glibc-fsf-v1-eaf6f205.patch \ - file://aarch64-glibc-v3-elf.patch \ + file://aarch64-0001-glibc-fsf-v1-eaf6f205.patch \ + file://aarch64-0002-Synchronize-with-linux-elf.h.patch \ + file://aarch64-0003-Adding-AArch64-support-to-elf-elf.h.patch \ " SRC_URI[md5sum] = "88894fa6e10e58e85fbd8134b8e486a8" -- cgit 1.2.3-korg