Commit Graph

19 Commits

Author SHA1 Message Date
Joseph Myers
b168057aaa Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
Allan McRae
d4697bc93d Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
Ulrich Weigand
61cd8fe401 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.
2013-12-04 07:41:39 -06:00
Ulrich Weigand
8b8a692cfd 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.
2013-12-04 07:41:39 -06:00
Ulrich Weigand
122b66defd 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 ...
2013-12-04 07:41:38 -06:00
Ulrich Weigand
d31beafa8e 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.
2013-12-04 07:41:38 -06:00
Joseph Myers
568035b787 Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
Andreas Schwab
37fb1dc057 Avoid runtime GOT relocations in ld.so on powerpc 2012-05-18 12:00:22 +02:00
Paul Eggert
59ba27a63a Replace FSF snail mail address with URLs. 2012-02-09 23:18:22 +00:00
Alan Modra
bebff237c5 PowerPC64 ABI fixes 2010-08-12 09:19:19 -07:00
Roland McGrath
3e7e947f6b * sysdeps/powerpc/powerpc32/fpu/fprsave.S: Add cfi_offset for spilling
of non-volatile floating-point registers to the stack (fp14-fp31).
	* sysdeps/powerpc/powerpc32/gprsave0.S: Add cfi_offset for spilling of
	non-volatile general-purpose registers to the stack (gpr13-gpr31).
	* sysdeps/powerpc/powerpc64/dl-trampoline.S: Add cfi_offset
	for non-volatiles gpr30 - grp31 spilled to the stack.
	* sysdeps/powerpc/powerpc64/memcpy.S: Add cfi_offset for non-volatile
	gpr31 spill to the stack.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S:
	Add cfi_offset for non-volatile gpr31 spill to the stack.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S: Add cfi_offset
	for non-volatiles gpr28 - grp31 spilled to the stack.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S: Add
	cfi_adjust_cfa_offset when a frame is stacked.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S:
	(__novec_setcontext) : Add cfi_offset for non-volatile gpr31 spill
	add LR saved to the stack.  Add cfi_adjust_cfa_offset when frame is
	stacked.
	(__setcontext) : Add cfi_offset for non-volatile gpr31 spill to
	the stack.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S:
	(__novec_swapcontext) : Add cfi_offset for non-volatile gpr31 spill
	add LR saved to the stack.
	(__swapcontext) : Add cfi_offset for non-volatile gpr31 spill add LR
	saved to the stack.  Add cfi_adjust_cfa_offset when frame is stacked.
2006-03-16 11:49:03 +00:00
Ulrich Drepper
a7e915610a * elf/tst-tls8.c (do_test): Use $ORIGIN in module names.
2006-01-03  Steven Munroe  <sjmunroe@us.ibm.com>

	* sysdeps/generic/sysdep.h (cfi_same_value): Define macro.

	* sysdeps/powerpc/powerpc32/dl-trampoline.S (_dl_runtime_resolve,
	_dl_profile_resolve): Add CFI directives for stack and LR save.
	Save LR in LRSAVE of previous frame per ABI.
	* sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S: Add CFI directives
	for LR save.
	* sysdeps/powerpc/powerpc32/lshift.S: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S
	(__makecontext, __novec_makecontext): Likewise.
	* sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Add CFI directive
	for LR save to register.
	* sysdeps/powerpc/powerpc32/fpu/s_ceilf.S: Likewise.
	* sysdeps/powerpc/powerpc32/fpu/s_floor.S: Likewise.
	* sysdeps/powerpc/powerpc32/fpu/s_floorf.S: Likewise.
	* sysdeps/powerpc/powerpc32/fpu/s_rint.S: Likewise.
	* sysdeps/powerpc/powerpc32/fpu/s_rintf.S: Likewise.
	* sysdeps/powerpc/powerpc32/fpu/s_round.S: Likewise.
	* sysdeps/powerpc/powerpc32/fpu/s_roundf.S: Likewise.
	* sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Likewise.
	* sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise.
	* sysdeps/powerpc/powerpc32/fpu/setjmp-common.S: Likewise.
	* sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Add CFI directive
	for stack.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S: Likewise.
	* sysdeps/powerpc/powerpc32/ppc-mcount.S: Add CFI directives for stack
	and LR save.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S:
	Likewise.
	* sysdeps/powerpc/powerpc32/fpu/s_lround.S:  Likewise.  Don't use
	negative stack addressing.

	* sysdeps/powerpc/powerpc64/dl-trampoline.S (_dl_runtime_resolve,
	_dl_profile_resolve): Add CFI directives for stack and LR save.
	* sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Add CFI directives
	for stack.
	* sysdeps/powerpc/powerpc64/ppc-mcount.S (_mcount): Add CFI
	directives for stack and LR save.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S (__brk): Add CFI
	directives for stack.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S (__clone): Add CFI
	directives for stack.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S
	(__getcontext, __novec_getcontext): Add CFI directives for stack
	and LR save.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S
	(__makecontext): Add CFI directives for stack and LR save.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S
	(__setcontext, __novec_setcontext): Add CFI directives for stack
	and LR save.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S
	(__swapcontext, __novec_swapcontext):  Add CFI directives for stack
	and LR save.
2006-01-07 03:58:05 +00:00
Ulrich Drepper
9f0d7b6df9 * elf/dl-reloc.c [PROF] (_dl_relocate_object): Define
consider_profiling always to zero.  Don't count of compiler to
	remove unreached if block.
	* sysdeps/x86_64/dl-trampoline.S [PROF] (_dl_runtime_profile):
	Don't compile.
	* sysdeps/i386/dl-trampoline.S [PROF] (_dl_runtime_profile): Likewise.
	* sysdeps/ia64/dl-trampoline.S [PROF] (_dl_runtime_profile): Likewise.
	* sysdeps/s390/s390-64/dl-trampoline.S [PROF] (_dl_runtime_profile):
	Likewise.
	* sysdeps/s390/s390-32/dl-trampoline.S [PROF] (_dl_runtime_profile):
	Likewise.
	* sysdeps/powerpc/powerpc64/dl-trampoline.S [PROF]
	(_dl_profile_resolve): Likewise.
	* sysdeps/powerpc/powerpc32/dl-trampoline.S [PROF]
	(_dl_profile_resolve): Likewise.
	* gmon/Makefile: Add rules to build and run tst-profile-static.
	* gmon/tst-profile-static.c: New file.
	* Makeconfig (+link-static): Allow passing program-specific flags.
2005-07-07 02:39:45 +00:00
Ulrich Drepper
bb4bb82b13 * sysdeps/powerpc/bits/link.h (La_ppc64_regs): Add lr_vrsave.
(La_ppc64_retval): Correct size of lrc_fp.
	* sysdeps/powerpc/powerpc64/dl-trampoline.S (_dl_profile_resolve):
	Fix up ABI problems and complete function.
2005-03-19 02:49:03 +00:00
Ulrich Drepper
4e2d549137 Update.
* sysdeps/powerpc/powerpc64/dl-machine.h
	(elf_machine_runtime_setup): If profile != 0 does not anymore mean
	GLRO(dl_profile) != NULL.
	* sysdeps/powerpc/powerpc64/bits/link.h (struct la_ppc64_regs): Add
	padding.
	* sysdeps/powerpc/powerpc64/dl-trampoline.S: (_dl_profile_resolve):
	Extend _dl_prof_resolve to add pass extra parameters to
	_dl_profile_fixup and set up structure with register content.
2005-01-08 07:10:00 +00:00
Ulrich Drepper
85555eeb7b Update.
* sysdeps/powerpc/powerpc32/dl-trampoline.S (_dl_prof_resolve):
	Extend _dl_prof_resolve to add pass extra parameters to
	_dl_profile_fixup and set up structure with register content.
2005-01-08 05:41:58 +00:00
Ulrich Drepper
8222199266 Update.
2005-01-07  Ulrich Drepper  <drepper@redhat.com>

	* elf/rtld.c [!DONT_USE_BOOTSTRAP_MAP] (_dl_start_final): Initialize
	l_relocated of rtld map.
	* sysdeps/powerpc/powerpc64/dl-trampoline.S: New file.
	* sysdeps/powerpc/powerpc64/dl-machine.h: Remove trampoline code here.
	Define ARCH_LA_PLTENTER and ARCH_LA_PLTEXIT.
	* sysdeps/generic/ldsodefs.h (struct audif_ifaces): Add ppc64 variants.
	* elf/tst-auditmod1.c: Add ppc64 support.
	* sysdeps/powerpc/powerpc64/bits/link.h: New file.
2005-01-07 11:36:07 +00:00
Ulrich Drepper
a334319f65 (CFLAGS-tst-align.c): Add -mpreferred-stack-boundary=4. 2004-12-22 20:10:10 +00:00
Jakub Jelinek
0ecb606cb6 2.5-18.1 2007-07-12 18:26:36 +00:00