aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2017-09-28hurd: Fix `revoke' symbol exposition from `unlockpt'Samuel Thibault
`revoke' is MISC only, it should not be exposed along `unlockpt' which is XOPEN. * include/unistd.h (__revoke): New declaration. * misc/revoke.c (revoke): Rename to __revoke, and redefine as weak alias. * sysdeps/mach/hurd/revoke.c (revoke): Likewise. * sysdeps/unix/bsd/unlockpt.c (unlockpt): Use __revoke instead of revoke.
2017-09-28hurd: Fix dirfd symbol exposition from ftwSamuel Thibault
dirfd is XOPEN2K8 only, it should not be exposed along ftw which is earlier. * include/dirent.h (__dirfd): New declaration. * dirent/dirfd.c (dirfd): Rename to __dirfd, and redefine as weak alias. * sysdeps/posix/dirfd/dirfd.c (dirfd): Likewise. * sysdeps/mach/hurd/dirfd.c (dirfd): Likewise. * io/ftw.c (open_dir_stream, ftw_dir): Use __dirfd instead of dirfd.
2017-09-26Mark __dso_handle as hidden [BZ #18822]H.J. Lu
Since __dso_handle is always defined by either crtbegin.o from GCC or dso_handle.c, it should be marked as hidden and be passed directly. [BZ #18822] * dlfcn/modatexit.c (foo): Remove __dso_handle check. * dlfcn/modcxaatexit.c: Include <dso_handle.h>. (__dso_handle): Remove declaration. * dlfcn/tstatexit.c (__dso_handle): Removed. (main): Don't check __dso_handle. * dlfcn/tstcxaatexit.c (__dso_handle): Removed. (main): Don't check __dso_handle. * include/dso_handle.h: New file. * malloc/mtrace.c: Include <dso_handle.h>. (mtrace): Pass __dso_handle directly. * nptl/pthread_atfork.c: Include <dso_handle.h>. (__dso_handle): Remove declaration. (__pthread_atfork): Pass __dso_handle directly. * nptl/tst-atfork2mod.c: Include <dso_handle.h>. (__dso_handle): Removed. * posix/wordexp-test.c: Include <dso_handle.h>. (__dso_handle): Remove declaration. (__app_register_atfork): Pass __dso_handle directly. * stdlib/at_quick_exit.c: Include <dso_handle.h>. (__dso_handle): Remove declaration. (at_quick_exit): Pass __dso_handle directly. * stdlib/atexit.c: Include <dso_handle.h>. (__dso_handle): Remove declaration. (atexit): Pass __dso_handle directly. * stdlib/tst-tls-atexit-lib.c: Include <dso_handle.h>. (__dso_handle): Removed.
2017-09-26Fix make-syscalls.sh VDSO support for GCC 8.Joseph Myers
sysdeps/unix/make-syscalls.sh has support, used only by x32, for generating IFUNCs for kernel VDSO symbols. This support creates IFUNCs by setting symbol types manually, which is bad for debug info and does not work with current GCC mainline because it results in errors from the checks on types of function aliases. This patch fixes it to use the common __ifunc macro, which uses the ifunc attribute when available and so works with GCC mainline. Note however that the original error resulted from an indirect inclusion of a header declaring __gettimeofday from the generated sources, and using __ifunc now relies on such an indirect inclusion remaining as it means use of __typeof to determine the correct types. If glibc's headers change in such a way as to remove that indirect inclusion, it will become necessary to change the syscalls.list syntax for VDSO syscalls so the name of the header to include can be specified. Tested (compilation only) with build-many-glibcs.py that this fixes the build for x32 with GCC mainline. * sysdeps/unix/make-syscalls.sh: Use __ifunc to define symbols using VDSO.
2017-09-27Fix range check in do_tunable_update_valAlexey Makhalov
Current implementation of tunables does not set arena_max and arena_test values. Any value provided by glibc.malloc.arena_max and glibc.malloc.arena_test parameters is ignored. These tunables have minval value set to 1 (see elf/dl-tunables.list file) and undefined maxval value. In that case default value (which is 0. see scripts/gen-tunables.awk) is being used to set maxval. For instance, generated tunable_list[] entry for arena_max is: (gdb) p *cur $1 = {name = 0x7ffff7df6217 "glibc.malloc.arena_max", type = {type_code = TUNABLE_TYPE_SIZE_T, min = 1, max = 0}, val = {numval = 0, strval = 0x0}, initialized = false, security_level = TUNABLE_SECLEVEL_SXID_IGNORE, env_alias = 0x7ffff7df622e "MALLOC_ARENA_MAX"} As a result, any value of glibc.malloc.arena_max is ignored by TUNABLE_SET_VAL_IF_VALID_RANGE macro __type min = (__cur)->type.min; <- initialized to 1 __type max = (__cur)->type.max; <- initialized to 0! if (min == max) <- false { min = __default_min; max = __default_max; } if ((__type) (__val) >= min && (__type) (val) <= max) <- false { (__cur)->val.numval = val; (__cur)->initialized = true; } Assigning correct min/max values at a build time fixes a problem. Plus, a bit of optimization: Setting of default min/max values for the given type at a run time might be eliminated. * elf/dl-tunables.c (do_tunable_update_val): Range checking fix. * scripts/gen-tunables.awk: Set unspecified minval and/or maxval values to correct default value for given type.
2017-09-26Skip PT_DYNAMIC segment with p_filesz == 0 [BZ #22101]H.J. Lu
ELF objects generated with "objcopy --only-keep-debug" have Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align DYNAMIC 0x0+e28 0x0+200e40 0x0+200e40 0x0+ 0x0+1a0 RW 0x8 with 0 file size. ld.so should skip such PT_DYNAMIC segments. Without a PT_DYNAMIC segment the loading of the shared object will fail, and therefore ldd on such objects will also fail instead of crashing. This provides better diagnostics for tooling that is attempting to inspect the invalid shared objects which may just contain debug information. [BZ #22101] * elf/Makefile (tests): Add tst-debug1. ($(objpfx)tst-debug1): New. ($(objpfx)tst-debug1.out): Likewise. ($(objpfx)tst-debug1mod1.so): Likewise. * elf/dl-load.c (_dl_map_object_from_fd): Skip PT_DYNAMIC segment with p_filesz == 0. * elf/tst-debug1.c: New file. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2017-09-26Use generic __ifunc for SPARC.Joseph Myers
glibc fails to build with GCC mainline for SPARC because of the use of manually-created IFUNCs, which fail the tests of compatibility of function alias types. This patch changes sparc-ifunc.h to use the generic __ifunc in defining sparc_libm_ifunc. The generic __ifunc can use the GCC ifunc attribute when available, so ensuring type-correctness as well as better debug info than when setting symbol types in asm statements. Note that for this to fix the build with GCC mainline the GCC patch <https://gcc.gnu.org/ml/gcc-patches/2017-09/msg01779.html>, or building GCC with --enable-gnu-indirect-function, is also needed. Tested (compilation only) with build-many-glibcs.py (sparc64-linux-gnu and sparcv9-linux-gnu, with GCC 8 with the above patch, and also with GCC 7). * sysdeps/sparc/sparc-ifunc.h [!__ASSEMBLER__] (sparc_libm_ifunc): Define using __ifunc.
2017-09-26powerpc: Regenerate ULPs for expf() and exp2f()Tulio Magno Quites Machado Filho
Remove all entries for expf() and exp2f() and regenerate them. * sysdeps/powerpc/fpu/libm-test-ulps: Regenerate expf() and exp2f() values.
2017-09-26Fix ia64 executable stack default (bug 22156).Joseph Myers
As per https://gcc.gnu.org/ml/gcc-patches/2017-09/msg01220.html ia64 defaults to non-executable stacks in the Linux kernel (furthermore, the use of function descriptors means that trampolines for nested function pointers never need an executable stack). glibc however defines DEFAULT_STACK_PERMS to include PF_X for that architecture, meaning (a) elf/check-execstack fails and (b) (from code inspection, not tested, but this is why I think this is a user-visible bug) thread stacks are unnecessarily mapped with execute permission. This patch fixes the DEFAULT_STACK_PERMS definition in question. Tested (compilation only) with build-many-glibcs.py for ia64. This fixes the check-execstack failure. [BZ #22156] * sysdeps/ia64/stackinfo.h (DEFAULT_STACK_PERMS): Likewise.
2017-09-26resolv/Makefile: Fix typo in commentFlorian Weimer
2017-09-26resolv/nss_dns/dns-host.c: Fix typo in commentFlorian Weimer
And only the resolv/map*.h actually contain implementations.
2017-09-25scratch_buffer: use union for internal bufferAdhemerval Zanella
Problem reported by Florian Weimer [1] and solution suggested by Andreas Schwab [2]. It also set the same buffer size independent of architecture max_align_t size. Checked on x86_64-linux-gnu and i686-linux-gnu. * lib/malloc/scratch_buffer.h (struct scratch_buffer): Use an union instead of a max_align_t array for __space, so that __space is the same size on all platforms. * malloc/scratch_buffer_grow_preserve.c (__libc_scratch_buffer_grow_preserve): Likewise. [1] https://sourceware.org/ml/libc-alpha/2017-09/msg00693.html [2] https://sourceware.org/ml/libc-alpha/2017-09/msg00695.html
2017-09-25posix: Add compat glob symbol to not follow dangling symbolsAdhemerval Zanella
This patch follows commit 5554304f0 (posix: Allow glob to match dangling symlinks [BZ #866]) by adding a compat symbol that follow previous semantic of not following dangling symlinks and thus avoiding call gl_lstat with GLOB_ALTDIRFUNC. It avoids failure with old binaries that not set the alternate function pointer for lstat (GNUmake for instance). The following scenario, for instance, fails with current GNUmake because glibc will access unitialized memory when calling gl_lstat: $ cat src/t/t.c int main () { return 0; } $ cat Makefile SRC = $(wildcard src/*/t.c) OBJ = $(patsubst src/%.c, obj/%.o, $(SRC)) prog: $(OBJ) $(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) $(OBJ) -o prog obj/%.o: src/%.c $(CC) $(CFLAGS) -c $< -o $@ $ make This works as expected with the patch applied. Since it is for generic ABI, default compat symbols are added with override for Linux due LFS. Now we have two compat symbols for glob on Linux: 1. sysdeps/unix/sysv/linux/oldglob.c which implements glob64 with the old dirent layout. For this implementation I also set it to not follow dangling symlinks (which is the safest path). 2. sysdeps/unix/sysv/linux/glob{64}-lstat-compat.c which implements the compat symbol for dangling symlinks. As for generic glob, the implementation uses XSTAT_IS_XSTAT64 to define whether both __glob_lstat_compat and __glob64_lstat_compat should be different implementations. For archictures that define XSTAT_IS_XSTAT64, __glob_lstat_compat is aliased to __glob64_lstat_compat. 3. sysdeps/unix/sysv/linux/alpha/oldglob.c with a different glob_t layout. As for 1. this patch changes it to not follow dangling symlinks. The patch also bumps _GNU_GLOB_INTERFACE_VERSION to 2 to advertise the new semantic. On GNUmake, for instance, it will force to it use its internal glob implementation instead and avoiding triggering the same failure on builds against newer GLIBCs. Checked on x86_64-linux-gnu and i686-linux-gnu. I also checked with a build against the major ABIs required to check for the abilist. The changes should also work on gnulib (I run gnulib-tool.py check glob and it shown no regressions). [BZ #22183] * include/gnu-versions.h (_GNU_GLOB_INTERFACE_VERSION): Increase version to 2. * posix/Makefile (routines): Add glob-lstat-compat and glob64-lstat-compat. * posix/Versions (GLIBC_2.27, glob, glob64): Add symbol version. * posix/glob-lstat-compat.c: New file. * posix/glob64-lstat-compat.c: Likewise. * posix/tst-glob_lstat_compat.c: Likewise. * sysdeps/unix/sysv/linux/glob-lstat-compat.c: Likewise. * sysdeps/unix/sysv/linux/alpha/glob-lstat-compat.c: Likewise. * sysdeps/unix/sysv/linux/glob64-lstat-compat.c: Likewise. * sysdeps/unix/sysv/linux/alpha/glob.c: Remove file. * posix/glob.c (glob_lstat): New function. (glob): Rename to __glob and add versioned symbol to 2.27. (glob_in_dir): Use glob_lstat. * posix/glob64.c (glob64): Add GLOB_ATTRIBUTE. * sysdeps/unix/sysv/linux/arm/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/glob.c (glob): Add versioned symbol for 2.27. * sysdeps/unix/sysv/linux/glob64.c (glob64): Likewise. * sysdeps/unix/sysv/linux/oldglob.c (GLOB_NO_LSTAT): Define. * sysdeps/unix/sysv/linux/alpha/oldglob.c (__old_glob): Do not use gl_lstat on glob call. * sysdeps/unix/sysv/linux/aarch64/libc.abilist: Add GLIBC_2.27 glob and glob64 symbols. * sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/hppa/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/i386/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/microblaze/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/nios2/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist: Likewise. * sysdeps/unix/linux/powerpc/powerpc32/nofpu/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/sh/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.
2017-09-25Update configure.ac for binutils 2.25H.J. Lu
Commit 073e8fa7739ed453d6854b834f290c263a6cdb9f requires binutils 2.25 or later to build glibc: * configure.ac (AS): Require binutils 2.25 or later. (LD): Likewise. But it only updated LD version check in configure.ac. This patch adds the missing AS version check. * configure.ac (AS): Require binutils 2.25 or later. * configure: Regenerated.
2017-09-25Reduce total memory required to create all threads to 128MiB. This fixesPaul Pluzhnikov
intermittent failure in stdlib/test-{atexit,at_quick_exit,...} tests (Bug 22207).
2017-09-25nscd: Release read lock after resetting timeout.DJ Delorie
[BZ #22161] * nscd/netgroupcache.c (addinnetgrX): Release read lock after resetting timeout. Reviewed-by: Jonathan Nieder <jrnieder@gmail.com> Reviewed-by: Andreas Schwab <schwab@suse.de> A lock is held by mempool_allocate() when CACHEABLE is true; we must release this lock if we exit early.
2017-09-25Revert "resolv_test.c: also cope with CONNREFUSED errors returned by recvfrom"Samuel Thibault
This reverts commit 6174537c24cfe324d6e8f5a2a421883df12b8b6a.
2017-09-25Fix typo in sincos32.h inclusion guard.Stefan Liebler
This patch fixes a typo in inclusion guard in sincos32.h. ChangeLog: * sysdeps/ieee754/dbl-64/sincos32.h [SINCCOS32_H]: Remove define. [SINCOS32_H]: Define.
2017-09-25New expf and exp2f version without SVID compat wrapperSzabolcs Nagy
This patch changes the expf and exp2f error handling semantics to only set errno accoring to POSIX rules. New symbol version is introduced at GLIBC_2.27. The old wrappers are kept for compat symbols. Internal calls to __expf now get the new error semantics, this seems to only affect sysdeps/i386/fpu/s_expm1f.S where the errno-only behaviour should be correct. ia64 needed assembly change to have the new and compat versioned symbol map to the same function. All linux libm abilists are updated. * math/Versions (expf): New libm symbol at GLIBC_2.27. (exp2f): Likewise. * math/w_exp2f.c: New file. * math/w_expf.c: New file. * math/w_exp2f_compat.c (__exp2f_compat): For compat symbol only. * math/w_expf_compat.c (__expf_compat): Likewise. * sysdeps/ia64/fpu/e_exp2f.S: Add versioned symbols. * sysdeps/ia64/fpu/e_expf.S: Likewise. * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update. * sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2017-09-25Optimized generic expf and exp2f with wrappersSzabolcs Nagy
Based on new expf and exp2f code from https://github.com/ARM-software/optimized-routines/ with wrapper on aarch64: expf reciprocal-throughput: 2.3x faster expf latency: 1.7x faster without wrapper on aarch64: expf reciprocal-throughput: 3.3x faster expf latency: 1.7x faster without wrapper on aarch64: exp2f reciprocal-throughput: 2.8x faster exp2f latency: 1.3x faster libm.so size on aarch64: .text size: -152 bytes .rodata size: -1740 bytes expf/exp2f worst case nearest rounding error: 0.502 ulp worst case non-nearest rounding error: 1 ulp Error checks are inline and errno setting is in separate tail called functions, but the wrappers are kept in this patch to handle the _LIB_VERSION==_SVID_ case. (So e.g. errno is set twice for expf calls and once for __expf_finite calls on targets where the new code is used.) Double precision arithmetics is used which is expected to be faster on most targets (including soft-float) than using single precision and it is easier to get good precision result with it. Const data is kept in a separate translation unit which complicates maintenance a bit, but is expected to give good code for literal loads on most targets and allows sharing data across expf, exp2f and powf. (This data is disabled on i386, m68k and ia64 which have their own expf, exp2f and powf code.) Some details may need target specific tweaks: - best convert and round to int operation in the arg reduction may be different across targets. - code was optimized on fma target, optimal polynomial eval may be different without fma. - gcc does not always generate good code for fp bit representation access via unions or it may be inherently slow on some targets. The libm-test-ulps will need adjustment because.. - The argument reduction ideally uses nearest rounded rint, but that is not efficient on most targets, so the polynomial can get evaluated on a wider interval in non-nearest rounding mode making 1 ulp errors common in that case. - The polynomial is evaluated such that it may have 1 ulp error on negative tiny inputs with upward rounding. * math/Makefile (type-float-routines): Add math_errf and e_exp2f_data. * sysdeps/aarch64/fpu/math_private.h (TOINT_INTRINSICS): Define. (roundtoint, converttoint): Likewise. * sysdeps/ieee754/flt-32/e_expf.c: New implementation. * sysdeps/ieee754/flt-32/e_exp2f.c: New implementation. * sysdeps/ieee754/flt-32/e_exp2f_data.c: New file. * sysdeps/ieee754/flt-32/math_config.h: New file. * sysdeps/ieee754/flt-32/math_errf.c: New file. * sysdeps/ieee754/flt-32/t_exp2f.h: Remove. * sysdeps/i386/fpu/e_exp2f_data.c: New file. * sysdeps/i386/fpu/math_errf.c: New file. * sysdeps/ia64/fpu/e_exp2f_data.c: New file. * sysdeps/ia64/fpu/math_errf.c: New file. * sysdeps/m68k/m680x0/fpu/e_exp2f_data.c: New file. * sysdeps/m68k/m680x0/fpu/math_errf.c: New file.
2017-09-25hurd: Fix exposition of s/gettimeofday through timespec_s/getSamuel Thibault
conform/ISO11/time.h/linknamespace complains that using timespec_get exposes gettimeofday. conform/POSIX/time.h/linknamespace complains that using clock_settime exposes settimeofday. * sysdeps/unix/clock_gettime.c (realtime_gettime, __clock_gettime): Use __gettimeofday instead of gettimeofday. * sysdeps/unix/clock_settime.c (__clock_settime): Use __settimeofday instead of settimeofday.
2017-09-25resolv_test.c: also cope with CONNREFUSED errors returned by recvfromSamuel Thibault
server_thread_udp_process_one already takes care of calling sendto() instead of xsendto to be able to ignore the case where the client has closed the socket. Depending on the TCP/IP stack behavior, this error could be notified later through recvfrom(), so we need to ignore it there too. * support/resolv_test.c (server_thread_udp_process_one): Call recvfrom instead of xrecvfrom, and ignore ECONNREFUSED errors.
2017-09-24hurd: Fix bits/socket.h conformitySamuel Thibault
* sysdeps/mach/hurd/bits/socket.h: Include <bits/wordsize.h> instead of <limits.h> (__need_NULL): Do not define. (__ss_aligntype): Use __WORDSIZE instead of ULONG_MAX to determine alignment. [!__USE_MISC] (pseudo_AF_XTP, pseudo_AF_RTIP, pseudo_AF_PIP, CMGROUP_MAX, cmsgcred): Do not define. (CMSG_FIRSTHDR, __cmsg_nxthdr): Use (struct cmsghdr *) 0 instead of NULL. * bits/socket.h: Likewise.
2017-09-24hurd: Make sure dl-sysdep.c defines proper symbol namesSamuel Thibault
* sysdeps/mach/hurd/dl-sysdep.c (check_no_hidden): New macro. (__open, __close, __libc_read, __libc_write, __writev, __libc_lseek64, __mmap, __fxstat64, __xstat64, __access, __access_noerrno, __getpid, __getcwd, __sbrk, __strtoul_internal, _exit, abort): Use check_no_hidden to make sure that these symbols are defined.
2017-09-22Use libm_alias_float in flt-32.Joseph Myers
This patch makes flt-32 libm functions use libm_alias_float to define public interfaces (in cases where _Float32 aliases of those interfaces would be appropriate, so not for finitef / isinff / isnanf). Tested for x86_64. Also tested with build-many-glibcs.py that installed stripped shared libraries are unchanged by the patch. * sysdeps/ieee754/flt-32/s_asinhf.c: Include <libm-alias-float.h>. (asinhf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_atanf.c: Include <libm-alias-float.h>. (atanf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_cbrtf.c: Include <libm-alias-float.h>. (cbrtf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_ceilf.c: Include <libm-alias-float.h>. (ceilf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_copysignf.c: Include <libm-alias-float.h>. (copysignf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_cosf.c: Include <libm-alias-float.h>. (cosf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_erff.c: Include <libm-alias-float.h>. (erff): Define using libm_alias_float. (erfcf): Likewise. * sysdeps/ieee754/flt-32/s_expm1f.c: Include <libm-alias-float.h>. (expm1f): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_fabsf.c: Include <libm-alias-float.h>. (fabsf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_floorf.c: Include <libm-alias-float.h>. (floorf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_frexpf.c: Include <libm-alias-float.h>. (frexpf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_fromfpf.c (fromfpf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_fromfpf_main.c: Include <libm-alias-float.h>. * sysdeps/ieee754/flt-32/s_fromfpxf.c (fromfpxf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_getpayloadf.c: Include <libm-alias-float.h>. (getpayloadf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_llrintf.c: Include <libm-alias-float.h>. (llrintf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_llroundf.c: Include <libm-alias-float.h>. (llroundf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_logbf.c: Include <libm-alias-float.h>. (logbf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_lrintf.c: Include <libm-alias-float.h>. (lrintf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_lroundf.c: Include <libm-alias-float.h>. (lroundf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_modff.c: Include <libm-alias-float.h>. (modff): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_nearbyintf.c: Include <libm-alias-float.h>. (nearbyintf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_nextafterf.c: Include <libm-alias-float.h>. (nextafterf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_nextupf.c: Include <libm-alias-float.h>. (nextupf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_remquof.c: Include <libm-alias-float.h>. (remquof): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_rintf.c: Include <libm-alias-float.h>. (rintf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_roundevenf.c: Include <libm-alias-float.h>. (roundevenf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_roundf.c: Include <libm-alias-float.h>. (roundf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_setpayloadf.c (setpayloadf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_setpayloadf_main.c: Include <libm-alias-float.h>. * sysdeps/ieee754/flt-32/s_setpayloadsigf.c (setpayloadsigf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_sincosf.c: Include <libm-alias-float.h>. (sincosf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_sinf.c: Include <libm-alias-float.h>. (sinf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_tanf.c: Include <libm-alias-float.h>. (tanf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_tanhf.c: Include <libm-alias-float.h>. (tanhf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_totalorderf.c: Include <libm-alias-float.h>. (totalorderf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_totalordermagf.c: Include <libm-alias-float.h>. (totalordermagf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_truncf.c: Include <libm-alias-float.h>. (truncf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_ufromfpf.c (ufromfpf): Define using libm_alias_float. * sysdeps/ieee754/flt-32/s_ufromfpxf.c (ufromfpxf): Define using libm_alias_float.
2017-09-22Let fpclassify use the builtin when optimizing for size in C++ mode (bug 22146)Gabriel F. T. Gomes
When optimization for size is on (-Os), fpclassify does not use the type-generic __builtin_fpclassify builtin, instead it uses __MATH_TG. However, when library support for float128 is available, __MATH_TG uses __builtin_types_compatible_p, which is not available in C++ mode. On the other hand, libstdc++ undefines (in cmath) many macros from math.h, including fpclassify, so that it can provide its own functions. However, during its configure tests, libstdc++ just tests for the availability of the macros (it does not undefine them, nor does it provide its own functions). Finally, when libstdc++ is configured with optimization for size enabled, its configure tests include math.h and get the definition of fpclassify that uses __MATH_TG (and __builtin_types_compatible_p). Since libstdc++ does not undefine the macros during its configure tests, they fail. This patch lets fpclassify use the builtin in C++ mode, even when optimization for size is on. This allows the configure test in libstdc++ to work. Tested for powerpc64le and x86_64. [BZ #22146] math/math.h: Let fpclassify use the builtin in C++ mode, even when optimazing for size.
2017-09-22Remove Banner mechanism.Joseph Myers
This patch removes the Banner mechanism, with the last remaining Banner file replaced by a contrib.texi entry. This accords with the principle that the output of running libc.so.6 is not the place to credit particular contributions (the manual is), and with all other configuration options not mentioned there, it doesn't seem appropriate to focus there on the one question of whether the one remaining piece configured as an add-on was enabled or not. Tested for x86_64. * csu/Makefile (generated): Do not add version-info.h. (before-compile): Likewise. (all-Banner-files): Remove variable. ($(objpfx)version-info.h): Remove rule. * csu/version.c (banner): Do not include "version-info.h". * libidn/Banner: Remove. * manual/contrib.texi (Simon Josefsson): New entry.
2017-09-21Remove conditional on LDBL_MANT_DIG from e_lgammal_r.cGabriel F. T. Gomes
The IEEE 754 implementation of lgammal in sysdeps/ieee754/ldbl-128/ used to be shared by IBM's implementation in sysdeps/ieee754/ldbl-128ibm/ (by an inclusion of the source file). In order for the algorithm to work for IBM's implementation, a check for LDBL_MANT_DIG was required. Since the source file is no longer shared, the requirement for the check is gone. This patch removes the conditionals. Tested for powerpc64le and s390x. * sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r): Remove conditionals on LDBL_MANT_DIG. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c (__ieee754_lgammal_r): Likewise.
2017-09-21ldbl-128ibm: Automatic replacing of _Float128 and L()Gabriel F. T. Gomes
The ldbl-128ibm implementation of j0l, j1l, lgammal_r, and cbrtl, as well as the tables used by expl were copied from ldbl-128. However, the original files used _Float128 for the type and L() for the literal suffix. This patch uses the following sed command to rewrite _Float128 as long double and L(x) as xL (for e_expl.c, e_j0l.c, e_j1l.c, e_lgammal_r.c, and t_expl.h): sed -i <filename> \ -e "/^#define _Float128 long double/d" \ -e "/^#define L(x) x ## L/d" \ -e "/L(/s/)/L/" \ -e "/L(/s/L(//" \ -e "s/_Float128/long double/g" For sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c, this sed command incorrectly replaces a few occurrences of L(), so the following command is used instead: sed -i sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c \ -e "/^#define _Float128 long double/d" \ -e "/^#define L(x) x ## L/d" \ -e "s/L(0\.3\{40\})/0.3333333333333333333333333333333333333333L/" \ -e "s/L(3\.7568280825958912391243e-1)/3.7568280825958912391243e-1L/" \ -e "/L(/s/)/L/" \ -e "/L(/s/L(//" \ -e "s/_Float128/long double/g" Tested for powerpc64le with patched [1] and unpatched gcc. [1] https://gcc.gnu.org/ml/gcc-patches/2017-08/msg01028.html * sysdeps/ieee754/ldbl-128ibm/e_expl.c: Remove definitions of _Float128 and L(). * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: Remove definitions of _Float128 and L(). Replace _Float128 with long double and L(x) with xL, throughout the file. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/t_expl.h: Likewise.
2017-09-21ldbl-128ibm: Copy implementations from ldbl-128 instead of including themGabriel F. T. Gomes
Some files under sysdeps/ieee754/ldbl-128ibm/ are able to reuse the implementation in sysdeps/ieee754/ldbl-128/ by defining _Float128 to long double. This relied on compiler support for _Float128 being disabled. On powerpc, such support was disabled by default, however, it got enabled by default [1] in GCC 8. This patch copies the implementations from ldbl-128 to ldbl-128ibm. The uses of _Float128 and L() are kept intact in this patch and are replaced with a script in a subsequent patch. [1] https://gcc.gnu.org/ml/gcc-patches/2017-08/msg01028.html Tested for powerpc64 and powerpc64le. * sysdeps/ieee754/ldbl-128ibm/e_expl.c: Include tables from sysdeps/ieee754/ldbl-128ibm. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c: Copy contents from the equivalent implementation in sysdeps/ieee754/ldbl-128/ instead of including it. Keep _Float128 and L() intact. These will be reviewed by a separate patch. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/t_expl.h: Likewise.
2017-09-21powerpc: Add redirection for finitef128, isinf128, and isnanf128Gabriel F. T. Gomes
On powerpc64le, compiler support for float128 is not enabled by default on gcc. To enable it, the flag -mfloat128 must be passed as a command line option to the compiler. This means that only the few files that actively have -mfloat128 passed as an argument get compiler support for float128, whereas all other files don't. When -mfloat128 becomes enabled by default on powerpc [1], all the files that do not currently have compiler support for float128 enabled during their compilation, will start to have it. This will lead to build errors in s_finite.c, s_isinf.c, and s_isnan.c. The errors are due to the unintended macro expansion of __finitef128 to __redirect_finitef128 in math/bits/mathcalls-helper-functions.h. In that header, __MATHDECL_1 takes '__finite' and 'f128' as arguments and concatenates them. However, since '__finite' has been redefined in s_finite.c, the function declaration becomes __redirect_finitef128: extern int __redirect___finitef128 (_Float128 __value) __attribute__ ((__nothrow__ )) __attribute__ ((__const__)); This declaration itself is OK. The problem arises when include/math.h creates the hidden prototype ('hidden_proto (__finitef128)'), which expands to: extern __typeof (__finitef128) __finitef128 __attribute__ ((visibility ("hidden"))); Since __finitef128 is not declared, __typeof fails. This effect was already true for the 'float' and 'long double' versions and is now true for float128. Likewise for isinsff128 and isnanf128. This patch defines __finitef128 as __redirect___finitef128 in sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c, similarly to what's done for the float and long double versions of these functions, to get rid of the build error. Likewise for isinff128 and isnanf128. [1] https://gcc.gnu.org/ml/gcc-patches/2017-08/msg01028.html Tested for powerpc64 and powerpc64le. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c (__finitef128): Define to __redirect___finitef128. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf.c (__isinff128): Define to __redirect___isinff128. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan.c (__isnanf128): Define to __redirect___isnanf128.
2017-09-21powerpc64le: Add -mfloat128 to tst-strtod-nan-locale testcaseGabriel F. T. Gomes
On powerpc64le, not all files can have the flag -mfloat128 passed as an option on the compile command, since that could conflict with other flags, such as -mno-vsx. Each file that needs the flag, gets it through a CFLAGS-filename variable on sysdeps/powerpc/powerpc64le/Makefile. The test cases tst-strtod-nan-locale and tst-wcstod-nan-locale are missing this flag. Tested for powerpc64le. * sysdeps/powerpc/powerpc64le/Makefile (CFLAGS-tst-strtod-nan-locale.c): New variable. (CFLAGS-tst-wcstod-nan-locale.c): New variable.
2017-09-21Fix BZ# 22180.Paul Pluzhnikov
POSIX requires that dlclose() and exit() be thread safe, therefore you can have one thread in the middle of dlclose() and another thread executing exit() without causing any undefined behaviour on the part of the implementation. The existing implementation had a flaw that exit() exit handler processing did not consider a concurrent dlclose() and would not mark already run exit handlers using the ef_free flavour. The consequence of this is that a concurrent exit() with dlclose() will run all the exit handlers that dlclose() had not yet run, but then will block on the loader lock. The concurrent dlclose() will continue to run all the exit handlers again (twice) in violation of the Itanium C++ ABI requirements for __cxa_atexit(). This commit fixes this by having exit() mark all handlers with ef_free to ensure that concurrent dlclose() won't re-run registered exit handlers that have already run.
2017-09-21Remove non-add-on Banner files.Joseph Myers
Various subdirectories of glibc include Banner files to put some text in the output of executing libc.so.6, under "Available extensions". Some of those subdirectories (e.g. crypt) may originally have been add-ons (and so optional, so a particular glibc build might or might not have included them), but except for libidn they aren't now (or if only included in some builds, in the case of soft-fp, the inclusion depends on the architecture for which glibc is configured rather than having any glibc configuration for which it's an optional feature), and it doesn't seem useful for the libc.so.6 output to call out a few features like that. This patch removes the non-add-on Banner files, updating contrib.texi where they noted contributions not otherwise mentioned there. Tested for x86_64. * crypt/Banner: Remove file. * nptl/Banner: Likewise. * resolv/Banner: Likewise. * soft-fp/Banner: Likewise. * nptl/Makefile ($(objpfx)banner.h): Remove rule. ($(objpfx)version.d): Remove dependency on banner.h. ($(objpfx)version.os): Likewise. * nptl/version.c (banner): Do not include banner.h. * manual/contrib.texi: Update entries for Richard Henderson, Jakub Jelinek and BIND code.
2017-09-20Implement xdlopen, xdlsym and xdlclose routines which terminate testPaul Pluzhnikov
program with appropriate message if the corresponding dlfcn.h routine returns an error. Use them in stdlib/tst-tls-atexit.c
2017-09-20Add SSE4.1 trunc, truncf (bug 20142).Joseph Myers
This patch adds SSE4.1 versions of trunc and truncf, using the roundsd / roundss instructions, similar to the versions of ceil, floor, rint and nearbyint functions we already have. In my testing with the glibc benchtests these are about 30% faster than the C versions for double, 20% faster for float. Tested for x86_64. [BZ #20142] * sysdeps/x86_64/fpu/multiarch/Makefile (libm-sysdep_routines): Add s_trunc-c, s_truncf-c, s_trunc-sse4_1 and s_truncf-sse4_1. * sysdeps/x86_64/fpu/multiarch/s_trunc-c.c: New file. * sysdeps/x86_64/fpu/multiarch/s_trunc-sse4_1.S: Likewise. * sysdeps/x86_64/fpu/multiarch/s_trunc.c: Likewise. * sysdeps/x86_64/fpu/multiarch/s_truncf-c.c: Likewise. * sysdeps/x86_64/fpu/multiarch/s_truncf-sse4_1.S: Likewise. * sysdeps/x86_64/fpu/multiarch/s_truncf.c: Likewise.
2017-09-20Oops. stdlib/test-atexit-race-common.c should have been part of ↵Paul Pluzhnikov
26e70aec7028feeb196744eb97cd2dff3670b7aa
2017-09-20Fix BZ 14333Paul Pluzhnikov
2017-09-20Add exp2f and log2f benchmark traceSzabolcs Nagy
exp2f and log2f benchmark traces are just copies of the existing expf and logf traces from wrf_r. * benchtests/Makefile: Add exp2f and log2f benchmarks. * benchtests/exp2f-inputs: Copy of expf-inputs. * benchtests/log2f-inputs: Copy of logf-inputs.
2017-09-19Fix fexecve build where syscall macros call sizeof.Joseph Myers
The recent fexecve changes broke the build on (at least) alpha (maybe other configurations, that was the first breakage I saw in my build-many-glibcs.py run): In file included from ../sysdeps/unix/sysv/linux/alpha/sysdep.h:29:0, from ../sysdeps/alpha/nptl/tls.h:31, from ../include/errno.h:25, from ../sysdeps/unix/sysv/linux/fexecve.c:18: ../sysdeps/unix/sysv/linux/fexecve.c: In function 'fexecve': ../sysdeps/unix/alpha/sysdep.h:203:10: error: 'sizeof' on array function parameter 'argv' will return size of 'char * const*' [-Werror=sizeof-array-argument] (sizeof(arg) == 4 ? (long)(int)(long)(arg) : (long)(arg)) ^ ../sysdeps/unix/alpha/sysdep.h:302:26: note: in expansion of macro 'syscall_promote' register long _tmp_18 = syscall_promote (arg3); \ ^~~~~~~~~~~~~~~ ../sysdeps/unix/alpha/sysdep.h:173:2: note: in expansion of macro 'inline_syscall5' inline_syscall##nr(__NR_##name, args); \ ^~~~~~~~~~~~~~ ../sysdeps/unix/sysv/linux/alpha/sysdep.h:85:2: note: in expansion of macro 'INLINE_SYSCALL1' INLINE_SYSCALL1(name, nr, args); \ ^~~~~~~~~~~~~~~ ../sysdeps/unix/sysv/linux/fexecve.c:42:3: note: in expansion of macro 'INLINE_SYSCALL' INLINE_SYSCALL (execveat, 5, fd, "", argv, envp, AT_EMPTY_PATH); ^~~~~~~~~~~~~~ ../sysdeps/unix/sysv/linux/fexecve.c:33:30: note: declared here fexecve (int fd, char *const argv[], char *const envp[]) ^~~~ This patch fixes this similarly to previous fixes for such issues: use &argv[0] and &envp[0] as the syscall macro arguments. Tested (compilation only) for alpha-linux-gnu with build-many-glibcs.py. * sysdeps/unix/sysv/linux/fexecve.c (fexecve) [__NR_execveat]: Explicitly take address of first element of array arguments in call to INLINE_SYSCALL.
2017-09-19Use execveat syscall in fexecve (bug 22134)Andreas Schwab
By using execveat we no longer depend on /proc. The execveat syscall was introduced in 3.19, except for a few late comers.
2017-09-19Add logf traceWilco Dijkstra
Add a trace for logf. This is a reduced trace based on 2.8 billion samples extracted from wrf_r. * benchtests/Makefile: Add logf benchmark. * benchtests/logf-inputs: Add reduced trace from wrf_r.
2017-09-19Add expf traceWilco Dijkstra
Add a trace for expf. This is a reduced trace based on 2.4 billion samples extracted from wrf_r. * benchtests/Makefile: Add expf benchmark. * benchtests/expf-inputs: Add reduced trace from wrf_r.
2017-09-19Enable unwind info in libc-start.c and backtrace.cWilco Dijkstra
Add unwind info to __libc_start_main so that unwinding continues one extra level to _start. Similarly add unwind info to backtrace. Given many targets require this, do this in a general way. * csu/Makefile: Add -funwind-tables to libc-start.c. * debug/Makefile: Add -funwind-tables to backtrace.c. * sysdeps/aarch64/Makefile: Remove CFLAGS-backtrace.c. * sysdeps/arm/Makefile: Likewise. * sysdeps/i386/Makefile: Likewise. * sysdeps/m68k/Makefile: Likewise. * sysdeps/mips/Makefile: Likewise. * sysdeps/nios2/Makefile: Likewise. * sysdeps/sh/Makefile: Likewise. * sysdeps/sparc/Makefile: Likewise.
2017-09-19Add benchtests for trunc and truncf.Joseph Myers
This patch adds benchtests for the trunc and truncf functions. The inputs listed are fairly arbitrary; I do not assert they are representative of any particular application. * benchtests/Makefile (bench-math): Add trunc and truncf. (CFLAGS-bench-trunc.c): New variable. (CFLAGS-bench-truncf.c): Likewise. * benchtests/trunc-inputs: New file. * benchtests/truncf-inputs: Likewise.
2017-09-19powerpc: Avoid misaligned stores in memsetRajalakshmi Srinivasaraghavan
As per the section "3.1.4.2 Alignment Interrupts" of the "POWER8 Processor User's Manual for the Single-Chip Module", alignment interrupt is reported for misaligned stores in Caching-inhibited storage. As memset is used in some drivers for DMA (like xorg), this patch avoids misaligned stores for sizes less than 8 in memset.
2017-09-18Fix powerpc64le problem from last ldbl-opt patch.Joseph Myers
This patch fixes a problem on powerpc64le that I missed in initial testing of my last patch to ldbl-opt. In the specific case of powerpc64le, the weak aliases for exp10l and remainderl do not get defined in the generic wrappers because of how those wrappers undefine and redefine weak_alias. This patch restores those aliases in the ldbl-opt code. Tested (compilation only) for powerpc64le with build-many-glibcs.py. * sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c [LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_1)] (weak_alias): Undefine and redefine. [LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_1)] (exp10l): Define as weak alias. * sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c [LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_0)] (weak_alias): Undefine and redefine. [LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_0)] (remainderl): Define as weak alias.
2017-09-18Use libm_alias_ldouble in math/.Joseph Myers
This patch converts libm function implementations in math/ from using weak_alias to using libm_alias_ldouble to define public function names, in cases where it would be appropriate to define _Float128 / _Float64x aliases for those functions as well (in cases where either or both of those types exist and have the same ABI as long double). This eliminates many ldbl-opt wrappers round these function implementations. Tested for x86_64, and with build-many-glibcs.py. All installed stripped shared libraries are unchanged except for libm.so on powerpc64le. As noted for a previous patch, powerpc64le's use of ldbl-opt means various long double functions get defined using long_double_symbol which gives them an explicit symbol version in the object files, and this patch results in some such functions using weak_alias instead (because powerpc64le never had a previous version of these functions for long double = double); both produce a valid libm.so with the same public symbols at the same versions, but macros expanding to call weak_alias is cleaner in this case. * math/s_fmal.c: Include <libm-alias-ldouble.h>. (fmal): Define using libm_alias_ldouble. * math/w_acoshl_compat.c: Include <libm-alias-ldouble.h>. (acoshl): Define using libm_alias_ldouble. * math/w_acosl_compat.c: Include <libm-alias-ldouble.h>. (acosl): Define using libm_alias_ldouble. * math/w_asinl_compat.c: Include <libm-alias-ldouble.h>. (asinl): Define using libm_alias_ldouble. * math/w_atan2l_compat.c: Include <libm-alias-ldouble.h>. (atan2l): Define using libm_alias_ldouble. * math/w_atanhl_compat.c: Include <libm-alias-ldouble.h>. (atanhl): Define using libm_alias_ldouble. * math/w_coshl_compat.c: Include <libm-alias-ldouble.h>. (coshl): Define using libm_alias_ldouble. * math/w_exp10l_compat.c: Include <libm-alias-ldouble.h>. (exp10l): Define using libm_alias_ldouble. * math/w_exp2l_compat.c: Include <libm-alias-ldouble.h>. (exp2l): Define using libm_alias_ldouble. * math/w_expl_compat.c: Include <libm-alias-ldouble.h>. (expl): Define using libm_alias_ldouble. * math/w_fmodl_compat.c: Include <libm-alias-ldouble.h>. (fmodl): Define using libm_alias_ldouble. * math/w_hypotl_compat.c: Include <libm-alias-ldouble.h>. (hypotl): Define using libm_alias_ldouble. * math/w_j0l_compat.c: Include <libm-alias-ldouble.h>. (j0l): Define using libm_alias_ldouble. (y0l): Likewise. * math/w_j1l_compat.c: Include <libm-alias-ldouble.h>. (j1l): Define using libm_alias_ldouble. (y1l): Likewise. * math/w_jnl_compat.c: Include <libm-alias-ldouble.h>. (jnl): Define using libm_alias_ldouble. (ynl): Likewise. * math/w_log10l_compat.c: Include <libm-alias-ldouble.h>. (log10l): Define using libm_alias_ldouble. * math/w_log2l_compat.c: Include <libm-alias-ldouble.h>. (log2l): Define using libm_alias_ldouble. * math/w_logl_compat.c: Include <libm-alias-ldouble.h>. (logl): Define using libm_alias_ldouble. * math/w_powl_compat.c: Include <libm-alias-ldouble.h>. (powl): Define using libm_alias_ldouble. * math/w_remainderl_compat.c: Include <libm-alias-ldouble.h>. (remainderl): Define using libm_alias_ldouble. * math/w_sinhl_compat.c: Include <libm-alias-ldouble.h>. (sinhl): Define using libm_alias_ldouble. * math/w_sqrtl_compat.c: Include <libm-alias-ldouble.h>. (sqrtl): Define using libm_alias_ldouble. * math/w_tgammal_compat.c: Include <libm-alias-ldouble.h>. (tgammal): Define using libm_alias_ldouble. * sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c [LIBM_SVID_COMPAT] (exp10l): Do not use long_double_symbol here. * sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c [LIBM_SVID_COMPAT] (remainderl): Likewise. * sysdeps/ieee754/ldbl-opt/s_fmal.c: Remove. * sysdeps/ieee754/ldbl-opt/w_acoshl_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_acosl_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_asinl_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_atan2l_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_atanhl_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_coshl_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_expl_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_fmodl_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_hypotl_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_j0l_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_j1l_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_jnl_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_log10l_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_log2l_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_logl_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_powl_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_sinhl_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_sqrtl_compat.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_tgammal_compat.c: Likewise.
2017-09-18AArch64: use movz/movk instead of literal pools in start.SWang Boshi
eXecute-Only Memory (XOM) is a protection mechanism against some ROP attacks. XOM sets the code as executable and unreadable, so the access to any data, like literal pools, in the code section causes the fault with XOM. The compiler can disable literal pools for C source files, but not for assembly files, so I use movz/movk instead of literal pools in start.S for XOM. I add MOVL macro with movz/movk instructions like movl pseudo-instruction in armasm, and use the macro instead of literal pools. * sysdeps/aarch64/start.S: Use MOVL instead of literal pools. * sysdeps/aarch64/sysdep.h (MOVL): Add MOVL macro.
2017-09-17Add missing libc_hidden_weak/def callsSamuel Thibault
* io/read.c (read): Add libc_hidden_weak. * sysdeps/mach/hurd/read.c (read): Likewise. * io/write.c (write): Likewise. * sysdeps/mach/hurd/write.c (write): Likewise. * io/pread64.c (__pread64): Likewise. * sysdeps/mach/hurd/pread64.c (__pread64): Likewise. * posix/pread64.c (__pread64): Add libc_hidden_def.