aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2014-04-30ARM: Fix R_ARM_IRELATIVE RELA relocations.Julian Brown
This patch fixes what I believe to be a bug in the handling of R_ARM_IRELATIVE RELA relocations. At present, these are handled the same as REL relocations: i.e. the addend is loaded from the relocation address. Most of the time this isn't a problem because RELA relocations aren't used on ARM (GNU/Linux at least) anyway, but it causes problems with prelink, which uses RELA on all targets for its conflict table. (Support for ifunc prelinking requires a prelink patch, not yet posted.) Anyway, this patch works, though I'm not 100% sure if it is correct: I notice that this code path received attention last year: https://sourceware.org/ml/libc-ports/2013-07/msg00000.html I'm not sure under what circumstances that patch would have had an effect, nor if my patch conflicts with that case. No regressions using Mentor's usual glibc cross-testing infrastructure. [BZ #16888] * sysdeps/arm/dl-machine.h (elf_machine_rela): Fix R_ARM_IRELATIVE handling.
2014-04-30Increase minimum Linux kernel version to 2.6.32.Joseph Myers
This patch increases the minimum Linux kernel version for glibc to 2.6.32, as discussed in the thread starting at <https://sourceware.org/ml/libc-alpha/2014-01/msg00511.html>. This patch just does the minimal change to arch_minimum_kernel settings (and LIBC_LINUX_VERSION, which determines the minimum kernel headers version, as it doesn't make sense for that to be older than the minimum kernel that can be used at runtime). Followups would be expected to do, roughly and not necessarily precisely in this order: * Remove __LINUX_KERNEL_VERSION checks in kernel-features.h files where those checks are always true / always false for kernels 2.6.32 and above. * Otherwise simplify/improve conditionals in those files (for example, where defining once in the main file then undefining in architecture-specific files makes things clearer than having lots of separate definitions of the same macro), possibly fixing in the process cases where a macro should optimally have been defined for a given architecture but wasn't. (In the review in preparation for this version increase I checked what the right conditions should be for all macros in the main kernel-features.h whose definitions there would have been affected by the increase - but I only fixed that subset of the issues found where --enable-kernel=2.6.32 would have caused a kernel feature to be wrongly assumed to be present, not any cases where a feature is not assumed but could be assumed.) * Remove conditionals on __ASSUME_* where they can now be taken to be always-true, and the definitions when the macros are only used in Linux-specific files. * Split more architectures out of the main kernel-features.h (like ex-ports architectures), once various of the architecture conditionals there have been eliminated so the new architecture-specific files are no larger than actually necessary. Tested x86_64. 2014-03-27 Joseph Myers <joseph@codesourcery.com> [BZ #9894] * sysdeps/unix/sysv/linux/configure.ac (LIBC_LINUX_VERSION): Change to 2.6.32. (arch_minimum_kernel): Change all 2.6.16 settings to 2.6.32. * sysdeps/unix/sysv/linux/configure: Regenerated. * sysdeps/unix/sysv/linux/microblaze/configure.ac: Remove file. * sysdeps/unix/sysv/linux/microblaze/configure: Likewise. * sysdeps/unix/sysv/linux/tile/configure.ac: Likewise. * sysdeps/unix/sysv/linux/tile/configure: Likewise. * README: Update reference to required Linux kernel version. * manual/install.texi (Linux): Update reference to required Linux kernel headers version. * INSTALL: Regenerated.
2014-04-30conformtest: clean up POSIX expectations for stdlib.h, string.h.Joseph Myers
Continuing the series of patches to clean up conformtest expectations for "POSIX" (1995/6) based on review of the expectations against the standard, this patch cleans up expectations for stdlib.h and string.h. Tested x86_64; no new XFAILs needed. * conform/data/stdlib.h-data [POSIX] (stddef.h): Do not allow header inclusion. [POSIX] (limits.h): Likewise. [POSIX] (math.h): Likewise. [POSIX] (sys/wait.h): Likewise. * conform/data/string.h-data [POSIX || UNIX98] (strtok_r): Require function. [POSIX] (stddef.h): Do not allow header inclusion.
2014-04-30ChangeLog cleanupAndreas Schwab
2014-04-30More fixes for unsafe compiler optimizationAdhemerval Zanella
GCC 4.9 -ftree-loop-distribute-patterns now may transform loops in memcpy. Add the alias to internal GLIBC symbol to avoid PLT creation.
2014-04-30Fix lll_unlock twice in pthread_cond_broadcastYang Yingliang
lll_unlock() will be called again if it goes to "wake_all" in pthread_cond_broadcast(). This may make another thread which is waiting for lock in pthread_cond_timedwait() unlock. So there are more than one threads get the lock, it will break the shared data. It's introduced by commit 8313cb997d2d("FUTEX_*_REQUEUE_PI support for non-x86 code")
2014-04-30Initialize all of datahead structure in nscd (BZ #16791)Siddhesh Poyarekar
The datahead structure has an unused padding field that remains uninitialized. Valgrind prints out a warning for it on querying a netgroups entry. This is harmless, but is a potential data leak since it would result in writing out an uninitialized byte to the cache file. Besides, this happens only when there is a cache miss, so we're not adding computation to any fast path.
2014-04-30Consolidate code to initialize nscd dataset headerSiddhesh Poyarekar
This patch consolidates the code to initialize the header of a dataset into a single set of functions (one for positive and another for negative datasets) primarily to reduce repetition of code. The secondary reason is to simplify Patch 2/2 which fixes the problem of an uninitialized byte in the header by initializing an unused field in the structure and hence preventing a possible data leak into the cache file.
2014-04-30Do not fail if one of the two responses to AF_UNSPEC fails (BZ #14308)Siddhesh Poyarekar
[Fixes BZ #14308, #12994, #13651] AF_UNSPEC results in sending two queries in parallel, one for the A record and the other for the AAAA record. If one of these is a referral, then the query fails, which is wrong. It should return at least the one successful response. The fix has two parts. The first part makes the referral fall back to the SERVFAIL path, which results in using the successful response. There is a bug in that path however, due to which the second part is necessary. The bug here is that if the first response is a failure and the second succeeds, __libc_res_nsearch does not detect that and assumes a failure. The case where the first response is a success and the second fails, works correctly. This condition is produced by buggy routers, so here's a crude interposable library that can simulate such a condition. The library overrides the recvfrom syscall and modifies the header of the packet received to reproduce this scenario. It has two key variables: mod_packet and first_error. The mod_packet variable when set to 0, results in odd packets being modified to be a referral. When set to 1, even packets are modified to be a referral. The first_error causes the first response to be a failure so that a domain-appended search is performed to test the second part of the __libc_nsearch fix. The driver for this fix is a simple getaddrinfo program that does an AF_UNSPEC query. I have omitted this since it should be easy to implement. I have tested this on x86_64. The interceptor library source: /* Override recvfrom and modify the header of the first DNS response to make it a referral and reproduce bz #845218. We have to resort to this ugly hack because we cannot make bind return the buggy response of a referral for the AAAA record and an authoritative response for the A record. */ #define _GNU_SOURCE #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <stdbool.h> #include <endian.h> #include <dlfcn.h> #include <stdlib.h> /* Lifted from resolv/arpa/nameser_compat.h. */ typedef struct { unsigned id :16; /*%< query identification number */ #if BYTE_ORDER == BIG_ENDIAN /* fields in third byte */ unsigned qr: 1; /*%< response flag */ unsigned opcode: 4; /*%< purpose of message */ unsigned aa: 1; /*%< authoritive answer */ unsigned tc: 1; /*%< truncated message */ unsigned rd: 1; /*%< recursion desired */ /* fields * in * fourth * byte * */ unsigned ra: 1; /*%< recursion available */ unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */ unsigned ad: 1; /*%< authentic data from named */ unsigned cd: 1; /*%< checking disabled by resolver */ unsigned rcode :4; /*%< response code */ #endif #if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN /* fields * in * third * byte * */ unsigned rd :1; /*%< recursion desired */ unsigned tc :1; /*%< truncated message */ unsigned aa :1; /*%< authoritive answer */ unsigned opcode :4; /*%< purpose of message */ unsigned qr :1; /*%< response flag */ /* fields * in * fourth * byte * */ unsigned rcode :4; /*%< response code */ unsigned cd: 1; /*%< checking disabled by resolver */ unsigned ad: 1; /*%< authentic data from named */ unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */ unsigned ra :1; /*%< recursion available */ #endif /* remaining * bytes * */ unsigned qdcount :16; /*%< number of question entries */ unsigned ancount :16; /*%< number of answer entries */ unsigned nscount :16; /*%< number of authority entries */ unsigned arcount :16; /*%< number of resource entries */ } HEADER; static int done = 0; /* Packets to modify. 0 for the odd packets and 1 for even packets. */ static const int mod_packet = 0; /* Set to true if the first request should result in an error, resulting in a search query. */ static bool first_error = true; static ssize_t (*real_recvfrom) (int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); void __attribute__ ((constructor)) init (void) { real_recvfrom = dlsym (RTLD_NEXT, "recvfrom"); if (real_recvfrom == NULL) { printf ("Failed to get reference to recvfrom: %s\n", dlerror ()); printf ("Cannot simulate test\n"); abort (); } } /* Modify the second packet that we receive to set the header in a manner as to reproduce BZ #845218. */ static void mod_buf (HEADER *h, int port) { if (done % 2 == mod_packet || (first_error && done == 1)) { printf ("(Modifying header)"); if (first_error && done == 1) h->rcode = 3; else h->rcode = 0; /* NOERROR == 0. */ h->ancount = 0; h->aa = 0; h->ra = 0; h->arcount = 0; } done++; } ssize_t recvfrom (int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen) { ssize_t ret = real_recvfrom (sockfd, buf, len, flags, src_addr, addrlen); int port = htons (((struct sockaddr_in *) src_addr)->sin_port); struct in_addr addr = ((struct sockaddr_in *) src_addr)->sin_addr; const char *host = inet_ntoa (addr); printf ("\n*** From %s:%d: ", host, port); mod_buf (buf, port); printf ("returned %zd\n", ret); return ret; }
2014-04-29Final update to ports ChangeLog.Carlos O'Donell
Indicate the removal of the README and carry out the final update to the ports/ChangeLog.
2014-04-29Remove ports README and update machine ChangeLogs.Carlos O'Donell
This patch removes the ports/README now that ports is no longer being used. It also adds a header to all ChangeLogs for all machines that were moved to the main libc tree. The header indicates that the ChangeLog is no longer used.
2014-04-292014-04-29 Steve Ellcey <sellcey@mips.com>Steve Ellcey
* iconf/skeleton.c (ONE_DIRECTION): Set default value if not set.
2014-04-29Mention BZ16823 in NEWSStefan Liebler
2014-04-29[BZ #16823] Fix log1pl returning wrong infinity signStefan Liebler
2014-04-29FixAdhemerval Zanella
2014-04-29PowerPC: Suppress unnecessary FPSCR writeAdhemerval Zanella
This patch optimizes the FPSCR update on exception and rounding change functions by just updating its value if new value if different from current one. It also optimizes fedisableexcept and feenableexcept by removing an unecessary FPSCR read.
2014-04-29Relocate hppa from ports to libc.Carlos O'Donell
2014-04-29hppa: Update lowlevellock.h.Carlos O'Donell
Cleanup and remove old lll_private_futex_wake macro and add generic support for PI-aware futexes.
2014-04-29hppa: Use lll_futex_wake.Carlos O'Donell
The lll_private_futex_wake function no longer exists. Instead use lll_futex_make with LLL_PRIVATE as the last argument.
2014-04-29hppa: Use r25 as second input to __longjmp.Carlos O'Donell
The generated assembly is simplified if we use r25, the expected second argument to the function given the calling convention.
2014-04-28Fix types of stream hook functions in manual.Ondřej Bílka
2014-04-28Fix recvmmsg comment.Ondřej Bílka
2014-04-28[ARM] Add support for fenv_private on ARM.Wilco Dijkstra
2014-04-25Replace __int128 with __int128_t in bits/link.hH.J. Lu
__int128 was added in GCC 4.6 and __int128_t was added before x86-64 was supported. This patch replaces __int128 with __int128_t so that the installed bits/link.h can be used with older GCC. * sysdeps/x86/bits/link.h (La_x86_64_regs): Replace __int128 with __int128_t. (La_x86_64_retval): Likewise.
2014-04-24[AArch64] Suppress unnecessary FPSR and FPCR writes.Ian Bolton
2014-04-23Use test-skeleton.c in tst-sem3 and tst-sem4Siddhesh Poyarekar
2014-04-22Fix sigaction conform test failures on sparc.David S. Miller
* sysdeps/unix/sysv/linux/sparc/bits/sigaction.h (struct sigaction): New struct member __glibc_reserved0, change type of sa_flags to int.
2014-04-22[AArch64] Use GCC builtins to count leading/tailing zeros.Yufeng Zhang
2014-04-22Include atomic.h in sem_wait.c and sem_trywait.cSiddhesh Poyarekar
2014-04-22aarch64: Add setjmp and longjmp SystemTap probesVenkataramanan Kumar
Add setjmp, longjmp and longjmp_target SystemTap probes. ChangeLog: 2014-04-22 Will Newton <will.newton@linaro.org> Venkataramanan Kumar <venkataramanan.kumar@linaro.org> * sysdeps/aarch64/__longjmp.S: Include stap-probe.h. (__longjmp): Add longjmp and longjmp_target SystemTap probes. * sysdeps/aarch64/setjmp.S: Include stap-probe.h. (__sigsetjmp): Add setjmp SystemTap probe.
2014-04-17manual: Sort overview listing by manual order.Carlos O'Donell
In the glibc manual we have a "Roadmap to the manual" section at the end of the "Introduction" chapter. The introductory text says "Here is an overview of the contents of the remaining chapters of this manual.", but then proceeds to list chapters out of order and some chapter are never referenced. This commit reorders the overview to correctly match the manual order. See: https://sourceware.org/ml/libc-alpha/2014-02/msg00823.html
2014-04-17PowerPC: Sync pthread_once with default implementationAdhemerval Zanella
This patch removes the arch specific powerpc implementation and instead uses the linux default one. Although the current powerpc implementation already constains the required memory barriers for correct initialization, the default implementation shows a better performance on newer chips.
2014-04-17PowerPC: Add fenv macros for long doubleAdhemerval Zanella
This patch add the missing libc_<function>l_ctx macros for long double. Similar for float, they point to default double versions.
2014-04-17Add fenv test support for AArch64.Ian Bolton
2014-04-17Detect if AVX2 is usableSihai Yao
This patch checks and sets bit_AVX2_Usable in __cpu_features.feature. * sysdeps/x86_64/multiarch/ifunc-defines.sym (COMMON_CPUID_INDEX_7): New. * sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features): Check and set bit_AVX2_Usable. * sysdeps/x86_64/multiarch/init-arch.h (bit_AVX2_Usable): New macro. (bit_AVX2): Likewise. (index_AVX2_Usable): Likewise. (CPUID_AVX2): Likewise. (HAS_AVX2): Likewise.
2014-04-17manual/setjmp.texi: Clarify setcontext and signal handlers textWill Newton
Calling setcontext from a signal handler can be done safely so it is sufficient to note that it is not recommended. Also mention in setcontext documentation that the behaviour of setcontext when restoring a context created by a call to a signal handler is unspecified. 2014-04-17 Will Newton <will.newton@linaro.org> * manual/setjmp.texi (System V contexts): Add note that calling setcontext on a context created by a call to a signal handler is undefined. Update text to note that setcontext from a signal handler is possible but not recommended.
2014-04-17stdlib/tst-setcontext.c: Check for clobbering of signal stackWill Newton
On aarch64 calling swapcontext clobbers the state of the signal stack (BZ #16629). Check that the address and size of the signal stack before and after the call to swapcontext remains the same. ChangeLog: 2014-04-17 Will Newton <will.newton@linaro.org> [BZ #16629] * stdlib/tst-setcontext.c: Include signal.h. (main): Check that the signal stack before and after swapcontext is the same.
2014-04-17aarch64: Re-implement setcontext without rt_sigreturn syscallWill Newton
The current implementation of setcontext uses rt_sigreturn to restore the contents of registers. This contrasts with the way most other architectures implement setcontext: powerpc64, mips, tile: Call rt_sigreturn if context was created by a call to a signal handler, otherwise restore in user code. powerpc32: Call swapcontext system call and don't call sigreturn or rt_sigreturn. x86_64, sparc, hppa, sh, ia64, m68k, s390, arm: Only support restoring "synchronous" contexts, that is contexts created by getcontext, and restoring in user code and don't call sigreturn or rt_sigreturn. alpha: Call sigreturn (but not rt_sigreturn) in all cases to do the restore. The text of the setcontext manpage suggests that the requirement to be able to restore a signal handler created context has been dropped from SUSv2: If the context was obtained by a call to a signal handler, then old standard text says that "program execution continues with the program instruction following the instruction interrupted by the signal". However, this sentence was removed in SUSv2, and the present verdict is "the result is unspecified". Implementing setcontext by calling rt_sigreturn unconditionally causes problems when used with sigaltstack as in BZ #16629. On this basis it seems that aarch64 is broken and that new ports should only support restoring contexts created with getcontext and do not need to call rt_sigreturn at all. This patch re-implements the aarch64 setcontext function to restore the context in user code in a similar manner to x86_64 and other ports. ChangeLog: 2014-04-17 Will Newton <will.newton@linaro.org> [BZ #16629] * sysdeps/unix/sysv/linux/aarch64/setcontext.S (__setcontext): Re-implement to restore registers in user code and avoid rt_sigreturn system call.
2014-04-17Add fenv test support for targets which don't have FP traps.Wilco
2014-04-17[AArch64] Define HAVE_RM_CTX and related hooks.Ian Bolton
2014-04-17[AArch64] Provide initial implementation of math_private.h.Ian Bolton
2014-04-16alpha: Remove alpha-linux pthread_once.cRichard Henderson
2014-04-16alpha: Enable unwind tables for backtrace.cRichard Henderson
2014-04-16alpha: Fix __pointer_chk_guard definition for the testsuiteRichard Henderson
2014-04-16alpha: Regenerate sysdeps/alpha/libm-test-ulpsRichard Henderson
2014-04-16[AArch64] Regenerate libm-test-ulps.Marcus Shawcroft
2014-04-16Save/restore bound registers for _dl_runtime_profileIgor Zamyatin
This patch saves and restores bound registers in x86-64 PLT for ld.so profile and LD_AUDIT: * sysdeps/x86_64/bits/link.h (La_x86_64_regs): Add lr_bnd. (La_x86_64_retval): Add lrv_bnd0 and lrv_bnd1. * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Save Intel MPX bound registers before _dl_profile_fixup. * sysdeps/x86_64/dl-trampoline.h: Restore Intel MPX bound registers after _dl_profile_fixup. Save and restore bound registers bnd0/bnd1 when calling _dl_call_pltexit. * sysdeps/x86_64/link-defines.sym (BND_SIZE): New. (LR_BND_OFFSET): Likewise. (LRV_BND0_OFFSET): Likewise. (LRV_BND1_OFFSET): Likewise.
2014-04-16hurd: Add i386 fields to TLS structureSamuel Thibault
* sysdeps/mach/hurd/i386/tls.h (tcbhead_t): Add multiple_threads, sysinfo, stack_guard, pointer_guard, gscope_flag, private_futex, __private_tm, __private_ss fields.
2014-04-16hurd: Move dtv, dtv_t, tcbhead_t declaration to per-arch file.Samuel Thibault
2014-04-16hurd: Do not allow unmapping address 0Samuel Thibault
* sysdeps/mach/munmap.c (__munmap): Return EINVAL if `addr' is 0.