Adhemerval Zanella [Fri, 13 Dec 2013 19:38:17 +0000 (14:38 -0500)]
PowerPC: multiarch strlen for PowerPC64
Adhemerval Zanella [Fri, 13 Dec 2013 19:37:26 +0000 (14:37 -0500)]
PowerPC: multiarch rawmemchr for PowerPC64
Adhemerval Zanella [Fri, 13 Dec 2013 19:36:50 +0000 (14:36 -0500)]
PowerPC: multiarch memrchr for PowerPC64
Adhemerval Zanella [Fri, 13 Dec 2013 19:35:28 +0000 (14:35 -0500)]
PowerPC: multiarch memchr for PowerPC64
Adhemerval Zanella [Fri, 13 Dec 2013 19:34:06 +0000 (14:34 -0500)]
PowerPC: multiarch mempcpy for PowerPC64
Adhemerval Zanella [Fri, 13 Dec 2013 19:33:16 +0000 (14:33 -0500)]
PowerPC: multiarch memset/bzero for PowerPC64
Adhemerval Zanella [Fri, 13 Dec 2013 19:32:31 +0000 (14:32 -0500)]
PowerPC: multirach memcmp for PowerPC64
Adhemerval Zanella [Fri, 13 Dec 2013 19:31:41 +0000 (14:31 -0500)]
PowerPC: multiarch memcpy for PowerPC64
Adhemerval Zanella [Fri, 13 Dec 2013 19:29:27 +0000 (14:29 -0500)]
PowerPC: Adjust multiarch Implies for PowerPC64
This patch adds Implies files on multiarch folder for POWER chips so
multirach is enabled when building with --with-cpu and powerN
option.
Kaz Kojima [Thu, 12 Dec 2013 23:45:01 +0000 (08:45 +0900)]
Use $$ver instead of $ver.
Toke Høiland-Jørgensen [Thu, 12 Dec 2013 20:24:06 +0000 (15:24 -0500)]
Update NEWS
Toke Høiland-Jørgensen [Thu, 12 Dec 2013 19:47:25 +0000 (14:47 -0500)]
Add entries for U00D8 and U00F8.
Adhemerval Zanella [Wed, 11 Dec 2013 18:10:35 +0000 (12:10 -0600)]
PowerPC: Add DSO and TAR fields to TLS
Carlos O'Donell [Thu, 12 Dec 2013 05:44:29 +0000 (00:44 -0500)]
Add test case for pthread_[sg]etname_np.
This commit adds a testcase for pthread_setname_np
and pthread_getname_np. The testcase itself has
four tests to validate that these functions work
as expected. The test is only enabled for Linux
since it requires access to an alternate method
for validating the functions work.
Siddhesh Poyarekar [Thu, 12 Dec 2013 04:01:53 +0000 (09:31 +0530)]
benchmark inputs for exp2, log2, log and tan
Marko Myllynen [Thu, 12 Dec 2013 03:54:35 +0000 (09:24 +0530)]
Fix Charset comment in fi_FI, fi_FI@euro
Roland McGrath [Wed, 11 Dec 2013 18:00:32 +0000 (10:00 -0800)]
ChangeLog whitespace fix.
Marcus Shawcroft [Wed, 11 Dec 2013 16:19:34 +0000 (16:19 +0000)]
[AArch64] Regenerate libm-test-ulps.
Siddhesh Poyarekar [Wed, 11 Dec 2013 06:38:19 +0000 (12:08 +0530)]
Consolidate definition of constant t22
Siddhesh Poyarekar [Wed, 11 Dec 2013 05:54:25 +0000 (11:24 +0530)]
Use double constants instead of the struct number
Ondřej Bílka [Tue, 10 Dec 2013 18:36:28 +0000 (19:36 +0100)]
Expand MALLOC_COPY and MALLOC_ZERO to memcpy and memset.
Ondřej Bílka [Tue, 10 Dec 2013 16:56:59 +0000 (17:56 +0100)]
Drop PER_THREAD conditionals from malloc.
Adhemerval Zanella [Mon, 9 Dec 2013 23:44:10 +0000 (17:44 -0600)]
Add GLIBC_2.3 and GLIBC_2.19 in Versions.def
This patch adds GLIBC_2.3 and GLIBC_2.19 mark on Version.def so they are always
define in abi-versions.h. This fixes a build issue with fe_nomask.c in PPC64
LE where neither GLIBC_2_3 or GLIBC_2_19 are defined for SHLIB_COMPAT, resulting
in a wrong evaluation in the macro.
Andreas Schwab [Mon, 9 Dec 2013 23:08:12 +0000 (00:08 +0100)]
m68k: use math_force_eval in nextafterl
Andreas Schwab [Wed, 4 Dec 2013 00:41:08 +0000 (01:41 +0100)]
m68k: add support for PI futexes
Andreas Schwab [Wed, 4 Dec 2013 00:35:01 +0000 (01:35 +0100)]
m68k: don't assume PI futexes before 3.10
Andreas Schwab [Mon, 9 Dec 2013 23:03:47 +0000 (00:03 +0100)]
ChangeLog fix
Ondřej Bílka [Mon, 9 Dec 2013 16:25:19 +0000 (17:25 +0100)]
Simplify perturb_byte logic.
Ondřej Bílka [Mon, 9 Dec 2013 16:14:12 +0000 (17:14 +0100)]
Replace malloc force_reg by atomic_forced_read.
Andreas Schwab [Tue, 26 Nov 2013 11:22:58 +0000 (12:22 +0100)]
Fix CFI annotations in pthread_cond_timedwait for i486+
Adhemerval Zanella [Mon, 9 Dec 2013 12:52:04 +0000 (06:52 -0600)]
Update powerpc-fpu ULPs.
Markus Trippelsdorf [Mon, 9 Dec 2013 05:36:11 +0000 (11:06 +0530)]
Update x86_64 ULps for AMD K10
Joseph Myers [Sun, 8 Dec 2013 23:56:28 +0000 (23:56 +0000)]
Move tests of lgamma from libm-test.inc to auto-libm-test-in.
Richard Henderson [Fri, 6 Dec 2013 20:17:01 +0000 (06:17 +1000)]
alpha: Convert <bits/mman.h> to <bits/mman-linux.h>
Adhemerval Zanella [Fri, 22 Nov 2013 12:38:45 +0000 (06:38 -0600)]
PowerPC: Optimized mpn functions for PowerPC64/POWER7
This patch add optimized __mpn_add_n/__mpn_sub_n for PowerPC64/POWER7.
They are originally from GMP with adjustments for GLIBC.
Adhemerval Zanella [Fri, 22 Nov 2013 12:38:03 +0000 (06:38 -0600)]
PowerPC: Optimized mpn functions for PowerPC64
This patch add optimized __mpn_addmul, __mpn_addsub, __mpn_lshift, and
__mpn_mul_1 implementations for PowerPC64. They are originally from GMP
with adjustments for GLIBC.
Fernando J. V. da Silva [Fri, 6 Dec 2013 17:04:10 +0000 (18:04 +0100)]
Fix BZ #15089: malloc_trim always trim for large padding.
Adhemerval Zanella [Fri, 6 Dec 2013 11:53:49 +0000 (05:53 -0600)]
PowerPC: Update NEWS with ppc32/power4+ STT_GNU_IFUNC support
Adhemerval Zanella [Wed, 16 Oct 2013 11:33:03 +0000 (06:33 -0500)]
PowerPC: Adjust multiarch Implies for PowerPC32
This patch adds Implies files on multiarch folder for POWER chips so
multirach is enabled when building with --with-cpu and powerN option.
Adhemerval Zanella [Tue, 15 Oct 2013 11:52:35 +0000 (06:52 -0500)]
PowerPC: multiarch __ieee754_hypot[f] for PowerPC32
Adhemerval Zanella [Tue, 15 Oct 2013 03:01:36 +0000 (22:01 -0500)]
PowerPC: multiarch logb/logbf/logbl for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 21:32:24 +0000 (16:32 -0500)]
PowerPC: multiarch modf/modff for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 21:18:27 +0000 (16:18 -0500)]
PowerPC: multiarch lrint/lrintf for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 21:14:09 +0000 (16:14 -0500)]
PowerPC: multiarch lround/lrounf for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 21:02:38 +0000 (16:02 -0500)]
PowerPC: multiarch copysign/copysignf for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 20:51:20 +0000 (15:51 -0500)]
PowerPC: multiarch trunc/truncf for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 20:38:51 +0000 (15:38 -0500)]
PowerPC: multiarch round/roundf for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 20:32:46 +0000 (15:32 -0500)]
PowerPC: multiarch floor/floorf for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 20:26:50 +0000 (15:26 -0500)]
PowerPC: multiarch ceil/ceilf for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 20:18:42 +0000 (15:18 -0500)]
PowerPC: multiarch finite/finitef for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 20:05:53 +0000 (15:05 -0500)]
PowerPC: multiarch isinf/isinff for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 18:28:13 +0000 (13:28 -0500)]
PowerPC: multiarch isnan/isnanf for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 17:45:00 +0000 (12:45 -0500)]
PowerPC: multiarch sqrt/sqrtf for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 17:40:27 +0000 (12:40 -0500)]
PowerPC: multiarch llround/llroundf for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 17:09:28 +0000 (12:09 -0500)]
PowerPC: multiarch llrint/llrintf for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 16:43:48 +0000 (11:43 -0500)]
PowerPC: change sysdeps fpu folder
This patch makes the fpu/multiarch folder appears in front of the
powerpc/fpu folder.
Adhemerval Zanella [Mon, 14 Oct 2013 14:59:59 +0000 (09:59 -0500)]
PowerPC: multiarch wordcopy routines for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 14:43:31 +0000 (09:43 -0500)]
PowerPC: multiarch wcscpy for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 14:26:07 +0000 (09:26 -0500)]
PowerPC: multiarch wcsrchr for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 14:23:12 +0000 (09:23 -0500)]
PowerPC: multiarch wcschr for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 14:14:43 +0000 (09:14 -0500)]
PowerPC: multiarch strchr for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 14:14:06 +0000 (09:14 -0500)]
PowerPC: multiarch strchrnul for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 13:58:17 +0000 (08:58 -0500)]
PowerPC: multiarch strncasecmp for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 13:49:53 +0000 (08:49 -0500)]
PowerPC: multiarch strcasecmp for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 13:31:17 +0000 (08:31 -0500)]
PowerPC: multiarch strncmp for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 13:17:44 +0000 (08:17 -0500)]
PowerPC: multiarch strnlen for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 13:12:13 +0000 (08:12 -0500)]
PowerPC: multiarch strlen for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 13:08:51 +0000 (08:08 -0500)]
PowerPC: multiarch rawmemchr for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 13:02:41 +0000 (08:02 -0500)]
PowerPC: multiarch memrchr for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 12:57:14 +0000 (07:57 -0500)]
PowerPC: multiarch memchr for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 12:40:52 +0000 (07:40 -0500)]
PowerPC: multiarch mempcpy for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 12:37:14 +0000 (07:37 -0500)]
PowerPC: multiarch memset/bzero for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 12:30:04 +0000 (07:30 -0500)]
PowerPC: multiarch memcmp for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 12:24:12 +0000 (07:24 -0500)]
PowerPC: multiarch memcpy for PowerPC32
Adhemerval Zanella [Mon, 14 Oct 2013 11:55:28 +0000 (06:55 -0500)]
PowerPC: initial support for multilib for PowerPC32
This patch add a empty Makefile, the C IFUNC helper macros, and a empty
available IFUNC implementation enumeration.
Siddhesh Poyarekar [Fri, 6 Dec 2013 03:32:19 +0000 (09:02 +0530)]
benchtests: Append volatile keyword to type instead of prepending
`volatile int` means the same as 'int volatile', but that's not the
case for 'volatile char *' and 'char * volatile'. We won't need a
'char volatile *' or other complicated semantics for now.
Kaz Kojima [Thu, 5 Dec 2013 23:22:22 +0000 (08:22 +0900)]
Add SH implementation of sotruss-lib.c and c++-types.data.
Adhemerval Zanella [Thu, 5 Dec 2013 17:20:06 +0000 (11:20 -0600)]
Update powerpc-fpu ULPs.
Joseph Myers [Thu, 5 Dec 2013 14:01:41 +0000 (14:01 +0000)]
Fix tgamma errno setting on underflow (bug 6810).
Joseph Myers [Thu, 5 Dec 2013 13:54:50 +0000 (13:54 +0000)]
Move TEST_f_f tests for [l-y]* functions from libm-test.inc to auto-libm-test-in.
Adhemerval Zanella [Thu, 5 Dec 2013 13:47:34 +0000 (07:47 -0600)]
Revert wrong commit.
Adhemerval Zanella [Fri, 22 Nov 2013 12:36:54 +0000 (06:36 -0600)]
PowerPC: Add systemtap static probe points in setjmp/longjmp
This patch add static probes for setjmp/longjmp in the way gdb expects,fixing
the gdb.base/longjmp.exp gdb testcases.
It changes the symbol_name and use macros to to avoid change the probe names
and ending up adding more logic on GDB (since with the expected name
GDB work seamlessly).
Adhemerval Zanella [Fri, 22 Nov 2013 12:36:09 +0000 (06:36 -0600)]
Fix elf/get-dynamic-info.h for AT
Siddhesh Poyarekar [Thu, 5 Dec 2013 04:42:59 +0000 (10:12 +0530)]
Accept output arguments to benchmark functions
This patch adds the ability to accept output arguments to functions
being benchmarked, by nesting the argument type in <> in the args
directive. It includes the sincos implementation as an example, where
the function would have the following args directive:
## args: double:<double *>:<double *>
This simply adds a definition for a static variable whose pointer gets
passed into the function, so it's not yet possible to pass something
more complicated like a pre-allocated string or array. That would be
a good feature to add if a function needs it.
The values in the input file will map only to the input arguments. So
if I had a directive like this for a function foo:
## args: int:<int *>:int:<int *>
and I have a value list like this:
1, 2
3, 4
5, 6
then the function calls generated would be:
foo (1, &out1, 2, &out2);
foo (3, &out1, 4, &out2);
foo (5, &out1, 6, &out2);
Siddhesh Poyarekar [Thu, 5 Dec 2013 04:28:58 +0000 (09:58 +0530)]
Remove unused variables in __stpncpy_chk
Siddhesh Poyarekar [Thu, 5 Dec 2013 04:08:47 +0000 (09:38 +0530)]
Fix ChangeLog formatting
Siddhesh Poyarekar [Thu, 5 Dec 2013 04:04:58 +0000 (09:34 +0530)]
BZ #15941: Fix INSTALL file regeneration failure with makeinfo 5.x
I have skipped regenerating the INSTALL file because we want to
continue using the 4.x generator for now.
Joseph Myers [Wed, 4 Dec 2013 17:40:43 +0000 (17:40 +0000)]
Update longlong.h from GCC.
Ondřej Bílka [Wed, 4 Dec 2013 15:45:26 +0000 (16:45 +0100)]
Add bug numbers 926, 4772 and 16274 to NEWS.
Joseph Myers [Wed, 4 Dec 2013 15:06:37 +0000 (15:06 +0000)]
Add missing bug numbers (12486, 15915, 16038) to NEWS.
Joseph Myers [Wed, 4 Dec 2013 14:39:37 +0000 (14:39 +0000)]
Fix Bessel function error handling (bug 6807, bug 15901).
Ulrich Weigand [Wed, 4 Dec 2013 13:08:48 +0000 (07:08 -0600)]
PowerPC64 ELFv2 ABI 6/6: Bump ld.so soname version number
To avoid having a ELFv2 binary accidentally picking up an old ABI ld.so,
this patch bumps the soname to ld64.so.2.
In theory (or for testing purposes) this will also allow co-installing
ld.so versions for both ABIs on the same system. Note that the kernel
will already be able to load executables of both ABIs. However, there
is currently no plan to use that theoretical possibility in a any
supported distribution environment ...
Note that in order to check which ABI to use, we need to invoke the
compiler to check the _CALL_ELF macro; this is done in a new configure
check in sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac,
replacing the hard-coded value of default-abi in the Makefile.
Ulrich Weigand [Wed, 4 Dec 2013 12:59:37 +0000 (06:59 -0600)]
PowerPC64 ELFv2 ABI 5/6: LD_AUDIT interface changes
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.
Ulrich Weigand [Wed, 4 Dec 2013 12:55:03 +0000 (06:55 -0600)]
PowerPC64 ELFv2 ABI 4/6: Stack frame layout changes
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.
Ulrich Weigand [Wed, 4 Dec 2013 12:52:40 +0000 (06:52 -0600)]
PowerPC64 ELFv2 ABI 3/6: PLT local entry point optimization
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 ...
Ulrich Weigand [Wed, 4 Dec 2013 12:51:11 +0000 (06:51 -0600)]
PowerPC64 ELFv2 ABI 2/6: Remove function descriptors
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.
Ulrich Weigand [Wed, 4 Dec 2013 12:49:15 +0000 (06:49 -0600)]
PowerPC64 ELFv2 ABI 1/6: Code refactoring
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.
Ulrich Weigand [Wed, 4 Dec 2013 12:45:56 +0000 (06:45 -0600)]
PowerPC64: Add __private_ss field to TCB header
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.
Alan Modra [Wed, 4 Dec 2013 12:44:06 +0000 (06:44 -0600)]
PowerPC64: Report overflow on @h and @ha relocations
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.
Ulrich Weigand [Wed, 4 Dec 2013 12:41:52 +0000 (06:41 -0600)]
PowerPC64: Fix incorrect CFI in *context routines
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.