about summary refs log tree commit diff
Commit message (Collapse)AuthorAgeFilesLines
* PowerPC64 ELFv2 ABI 5/6: LD_AUDIT interface changesUlrich Weigand2013-12-046-45/+186
| | | | | | | | | | | | | | | | | | | | | | | | The ELFv2 ABI changes the calling convention by passing and returning structures in registers in more cases than the old ABI: http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01145.html http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01147.html For the most part, this does not affect glibc, since glibc assembler files do not use structure parameters / return values. However, one place is affected: the LD_AUDIT interface provides a structure to the audit routine that contains all registers holding function argument and return values for the intercepted PLT call. Since the new ABI now sometimes uses registers to return values that were never used for this purpose in the old ABI, this structure has to be extended. To force audit routines to be modified for the new ABI if necessary, the patch defines v2 variants of the la_ppc64 types and routines. In addition, the patch contains two unrelated changes to the PLT trampoline routines: it fixes a bug where FPR return values were stored in the wrong place, and it removes the unnecessary save/restore of CR.
* PowerPC64 ELFv2 ABI 4/6: Stack frame layout changesUlrich Weigand2013-12-0415-150/+249
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This updates glibc for the changes in the ELFv2 relating to the stack frame layout. These are described in more detail here: http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01149.html http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01146.html Specifically, the "compiler and linker doublewords" were removed, which has the effect that the save slot for the TOC register is now at offset 24 rather than 40 to the stack pointer. In addition, a function may now no longer necessarily assume that its caller has set up a 64-byte register save area its use. To address the first change, the patch goes through all assembler files and replaces immediate offsets in instructions accessing the ABI-defined stack slots by symbolic offsets. Those already were defined in ucontext_i.sym and used in some of the context routines, but that doesn't really seem like the right place for those defines. The patch instead defines those symbolic offsets in sysdeps.h, in two variants for the old and new ABI, and uses them systematically in all assembler files, not just the context routines. The second change only affected a few assembler files that used the save area to temporarily store some registers. In those cases where this happens within a leaf function, this patch changes the code to store those registers to the "red zone" below the stack pointer. Otherwise, the functions already allocate a stack frame, and the patch changes them to add extra space in these frames as temporary space for the ELFv2 ABI.
* PowerPC64 ELFv2 ABI 3/6: PLT local entry point optimizationUlrich Weigand2013-12-044-2/+78
| | | | | | | | | | | | | | | | | | | | | | | | | This is a follow-on to the previous patch to support the ELFv2 ABI in the dynamic loader, split off into its own patch since it is just an optional optimization. In the ELFv2 ABI, most functions define both a global and a local entry point; the local entry requires r2 to be already set up by the caller to point to the callee's TOC; while the global entry does not require the caller to know about the callee's TOC, but it needs to set up r12 to the callee's entry point address. Now, when setting up a PLT slot, the dynamic linker will usually need to enter the target function's global entry point. However, if the linker can prove that the target function is in the same DSO as the PLT slot itself, and the whole DSO only uses a single TOC (which the linker will let ld.so know via a DT_PPC64_OPT entry), then it is possible to actually enter the local entry point address into the PLT slot, for a slight improvement in performance. Note that this uncovered a problem on the first call via _dl_runtime_resolve, because that routine neglected to restore the caller's TOC before calling the target function for the first time, since it assumed that function would always reload its own TOC anyway ...
* PowerPC64 ELFv2 ABI 2/6: Remove function descriptorsUlrich Weigand2013-12-0410-30/+189
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds support for the ELFv2 ABI feature to remove function descriptors. See this GCC patch for in-depth discussion: http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01141.html This mostly involves two types of changes: updating assembler source files to the new logic, and updating the dynamic loader. After the refactoring in the previous patch, most of the assembler source changes can be handled simply by providing ELFv2 versions of the macros in sysdep.h. One somewhat non-obvious change is in __GI__setjmp: this used to "fall through" to the immediately following __setjmp ENTRY point. This is no longer safe in the ELFv2 since ENTRY defines both a global and a local entry point, and you cannot simply fall through to a global entry point as it requires r12 to be set up. Also, makecontext needs to be updated to set up registers according to the new ABI for calling into the context's start routine. The dynamic linker changes mostly consist of removing special code to handle function descriptors. We also need to support the new PLT and glink format used by the the ELFv2 linker, see: https://sourceware.org/ml/binutils/2013-10/msg00376.html In addition, the dynamic linker now verifies that the dynamic libraries it loads match its own ABI. The hack in VDSO_IFUNC_RET to "synthesize" a function descriptor for vDSO routines is also no longer necessary for ELFv2.
* PowerPC64 ELFv2 ABI 1/6: Code refactoringUlrich Weigand2013-12-046-62/+57
| | | | | | | | | | | | | | This is the first patch to support the new ELFv2 ABI in glibc. As preparation, this patch simply refactors some of the powerpc64 assembler code to move all code related to creating function descriptors (.opd section) or using function descriptors (function pointer call) into a central place in sysdep.h. Note that most locations creating .opd entries were already using macros in sysdep.h, this patch simply extends this to the remaining places. No relevant change in generated code expected.
* PowerPC64: Add __private_ss field to TCB headerUlrich Weigand2013-12-042-0/+6
| | | | | | | | | | | | | | | The TCB header on Intel contains a field __private_ss that is used to efficiently implement the -fsplit-stack GCC feature. In order to prepare for a possible future implementation of that feature on powerpc64, we'd like to reserve a similar field in the TCB header as well. (It would be good if this went in with or before the ELFv2 patches to ensure that this field will be available always in the ELFv2 environment.) The field needs to be added at the front of tcbhead_t structure to avoid changing the ABI; see the recent discussion when adding the EBB fields.
* PowerPC64: Report overflow on @h and @ha relocationsAlan Modra2013-12-043-2/+47
| | | | | | | | | | | | | | | | | This patch updates glibc in accordance with the binutils patch checked in here: https://sourceware.org/ml/binutils/2013-10/msg00372.html This changes the various R_PPC64_..._HI and _HA relocations to report 32-bit overflows. The motivation is that existing uses of @h / @ha are to build up 32-bit offsets (for the "medium model" TOC access that GCC now defaults to), and we'd really like to see failures at link / load time rather than silent truncations. For those rare cases where a modifier is needed to build up a 64-bit constant, new relocations _HIGH / _HIGHA are supported. The patch also fixes a bug in overflow checking for the R_PPC64_ADDR30 and R_PPC64_ADDR32 relocations.
* PowerPC64: Fix incorrect CFI in *context routinesUlrich Weigand2013-12-043-0/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | The context established by "makecontext" has a link register pointing back to an error path within the makecontext routine. This is currently covered by the CFI FDE for makecontext itself, which is simply wrong for the stack frame *inside* the context. When trying to unwind (e.g. doing a backtrace) in a routine inside a context created by makecontext, this can lead to uninitialized stack slots being accessed, causing the unwinder to crash in the worst case. Similarly, during parts of the "setcontext" routine, when the stack pointer has already been switched to point to the new context, the address range is still covered by the CFI FDE for setcontext. When trying to unwind in that situation (e.g. backtrace from an async signal handler for profiling), it is again possible that the unwinder crashes. Theses are all problems in existing code, but the changes in stack frame layout appear to make the "worst case" much more likely in the ELFv2 ABI context. This causes regressions e.g. in the libgo testsuite on ELFv2. This patch fixes this by ending the makecontext/setcontext FDEs before those problematic parts of the assembler, similar to what is already done on other platforms. This fixes the libgo regression on ELFv2.
* Allow strptime read outputs from strftime. Fixes bug 4772.Ondřej Bílka2013-12-043-11/+18
|
* benchtests: skip over blank lines in benchmark input filesSiddhesh Poyarekar2013-12-042-2/+6
|
* Clarify documentation on how functions use timezone. Fixes bug 926.Paul Eggert2013-12-042-17/+27
|
* Update powerpc-fpu ULPs.Adhemerval Zanella2013-12-042-2/+264
|
* Refactor several debug routines.Ondřej Bílka2013-12-047-288/+16
| | | | | To simplify additions of debug routines we replace a custom function implementation by a simple call.
* Update MIPS dl-lookup.c from generic version.Joseph Myers2013-12-032-3/+6
|
* Fix exp missing underflows (bug 15268, bug 15425).Joseph Myers2013-12-037-13/+334
|
* Fix exp2 errno setting on underflow (bug 16283).Joseph Myers2013-12-037-97/+103
|
* Properly handle shm_open validation. Fixes bug 16274.Ondřej Bílka2013-12-033-37/+31
|
* Fix erfc errno setting on underflow (bug 6786).Joseph Myers2013-12-0311-28/+410
|
* Move TEST_f_f tests for [e-j]* functions from libm-test.inc to ↵Joseph Myers2013-12-037-211/+4752
| | | | auto-libm-test-in.
* Add bug number to ChangeLog and NEWSAurelien Jarno2013-12-032-1/+2
|
* locale: don't crash if locale-archive contains all zerosAurelien Jarno2013-12-032-0/+9
| | | | | | | | | In case of power failure followed by filesystem issues locale-archive can end-up containing all zeros. In that case all calls to setlocale() generate a SIGFPE. This renders a system with a default non-C locale unbootable. Avoid this by ignoring the locale instead of generating a SIGFPE.
* [BZ #16195] Fix build warnings from systemtap probes in non-systemtap ↵Siddhesh Poyarekar2013-12-033-9/+21
| | | | | | | | | | | | | | | | | | | | | | configurations Joseph pointed out in the bug report (and in an earlier thread) that systemtap probes cause build time warnings like the following: ../sysdeps/ieee754/dbl-64/e_atan2.c:602:4: warning: the address of 'p' will always evaluate as 'true' [-Waddress] due to the fact that we're now passing non-weak variables to LIBC_PROBE in the libm probes. This happens only on configurations that do not enable systemtap. The macro definition of LIBC_PROBE in this case only acts as a sanity checker to ensure that the number parameters passed to LIBC_PROBE is equal to the argument count parameter passed before it. This can be done in a much simpler manner by just adding a macro definition for each number of arguments. I am assuming here that we don't really want to bother with supporting LIBC_PROBE with an indeterminate number of arguments and if there is a need for a probe to have more data than what is currently supported (4 arguments), one could simply add an additional macro here.
* Document shm_open.Ondřej Bílka2013-12-022-0/+31
|
* Add ChangeLog entry for sqrt tests.Steve Ellcey2013-12-021-0/+6
|
* Benchmark test for sqrt function.Steve Ellcey2013-12-022-1/+12
|
* Remove redundant GAIH_OKIFUNSPEC and GAIH_EAI.Pavel Simerda2013-12-022-17/+20
| | | | | | | | | | | Only gaih_inet() and gaih_inet_serv() use a special bit flag denoted by the GAIH_OKIFUNSPEC macro. Only the return value of gaih_inet_serv() is actively checked for the bit flag which is redundant because it just copies the nonzero property of the value otherwise returned. The return value of gaih_inet() is only checked for being zero and then the bit flag is filtered out. As the bit flag is set only for otherwise nonzero return values, it doesn't affect the zero comparison. GAIH_EAI just an alias to ~GAIH_OKIFUNSPEC.
* getaddrinfo: remove dead codePavel Simerda2013-12-022-12/+5
|
* Use herrnop directlySiddhesh Poyarekar2013-12-022-2/+7
| | | | | H_ERRNO_ARGS is unnecessary since we this file is specifically for hosts lookup.
* Fix ChangeLog formattingSiddhesh Poyarekar2013-12-021-1/+1
|
* Return fixed version of breaking of RPATH when $ORIGIN contains colonsOndřej Bílka2013-12-021-10/+16
|
* Update powerpc-fpu ULPs.Adhemerval Zanella2013-12-022-34/+1203
|
* Add lang_name to various locales.Chris Leonard2013-12-0119-4/+57
|
* Move TEST_f_f tests for [a-c]* functions from libm-test.inc to ↵Joseph Myers2013-11-307-252/+6067
| | | | auto-libm-test-in.
* Fix exp10 errno setting on underflow (bug 6787).Joseph Myers2013-11-296-16/+26
|
* Fix x86 sqrt rounding (bug 14032).Joseph Myers2013-11-296-10/+3761
|
* Test sqrt in all rounding modes.Joseph Myers2013-11-292-0/+98
|
* Start generating libm tests automatically with MPFR.Joseph Myers2013-11-297-19/+2147
|
* Add 16214 to NEWSSiddhesh Poyarekar2013-11-291-1/+1
|
* [BZ #16214] S/390: Fix TLS GOT pointer setup.Andreas Krebbel2013-11-295-18/+60
|
* Document libm accuracy goals.Joseph Myers2013-11-282-4/+77
|
* Remove unused ldbl-96 functions (bug 15004).Joseph Myers2013-11-2818-1055/+27
|
* Add powerpc-nofpu/e500 support functions for atomic compound assignment and ↵Joseph Myers2013-11-2814-4/+371
| | | | FLT_ROUNDS.
* Document some libm error handling intents.Joseph Myers2013-11-282-7/+25
|
* Fix dbl-64 e_sqrt.c for non-default rounding modes (bug 16271).Joseph Myers2013-11-2831-5/+110
|
* Get canonical name in getaddrinfo from hosts file for AF_INET (fixes 16077)Siddhesh Poyarekar2013-11-284-252/+272
| | | | | | | | AF_INET lookup in hosts file uses _nss_files_gethostbyname2_r, which is not capable of returning a canonical name if it has found one. This change adds _nss_files_gethostbyname3_r, which wraps around _nss_files_gethostbyname2_r and then returns result.h_name as the canonical name.
* Make memset in calloc a tail call.Ondřej Bílka2013-11-282-2/+6
|
* Add lang_name to various locales.Chris Leonard2013-11-2716-6/+63
|
* MIPS: Fix RLIM64_INFINITY constant for O32 and N32 ABIsAurelien Jarno2013-11-278-30/+75
| | | | | | | Fix the RLIM64_INFINITY constant for O32 and N32 ABIs to match the kernel one. Change the getrlimit64/setrlimit64 into old compat symbols, and provide the Linux generic getrlimit64/setrlimit64 functions as GLIBC_2_19 version.
* MIPS: Add wrappers to get/setrlimit64 to fix RLIM64_INFINITY constantAurelien Jarno2013-11-273-0/+127
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | RLIM64_INFINITY was supposed to be a glibc convention rather than anything seen by the kernel, but it ended being passed to the kernel through the prlimit64 syscall. On O32 and N32 ABIs, we therefore end-up with different values on the userland and kernel side: * On the kernel side, the value is defined for all architectures as include/uapi/linux/resource.h: #define RLIM64_INFINITY (~0ULL) * On the GNU libc side, the value is defined in ports/sysdeps/unix/sysv/linux/mips/bits/resource.h: For the O32 and N32 ABI: # define RLIM64_INFINITY 0x7fffffffffffffffULL and for the N64 ABI: # define RLIM64_INFINITY 0xffffffffffffffffUL This was not a problem until the prlimit64 syscall was wired in the 2.6.36 kernel. Given the GLIBC uses the prlimit64 syscall to implement getrlimit64 and setrlimit64, pam_limits.so is setting the limits to a very big value instead of infinity. As a normal user process can later only decrease the value and not increase it, it will later get and EPERM error when trying to set the value to infinity with setrlimit. The GLIBC has this constant for more than 7 years, and as it is defined in a header file, it means a lot of binaries are in the wild. This patch fixes that by adding a wrapper to fix the value passed to or received from the kernel, before or after calling the prlimit64 syscall.
* Also remove benchtests/bench-strsep-ifunc.cOndřej Bílka2013-11-262-20/+1
|