diff options
author | Ulrich Weigand <Ulrich.Weigand@de.ibm.com> | 2013-12-04 06:59:37 -0600 |
---|---|---|
committer | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2013-12-04 07:41:39 -0600 |
commit | 61cd8fe4017c251617dd300818917e61a12ab48e (patch) | |
tree | dfac7e867271b7a5889db22693883cd54b41e9ac /sysdeps/powerpc/powerpc64/tst-audit.h | |
parent | 8b8a692cfd7d80f1ee7c8b9ab356a259367dd187 (diff) | |
download | glibc-61cd8fe4017c251617dd300818917e61a12ab48e.tar.gz |
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.
Diffstat (limited to 'sysdeps/powerpc/powerpc64/tst-audit.h')
-rw-r--r-- | sysdeps/powerpc/powerpc64/tst-audit.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/sysdeps/powerpc/powerpc64/tst-audit.h b/sysdeps/powerpc/powerpc64/tst-audit.h index ad6545ed3a..0fbe1fec52 100644 --- a/sysdeps/powerpc/powerpc64/tst-audit.h +++ b/sysdeps/powerpc/powerpc64/tst-audit.h @@ -18,8 +18,16 @@ License along with the GNU C Library. If not, see <http://www.gnu.org/licenses/>. */ +#if _CALL_ELF != 2 #define pltenter la_ppc64_gnu_pltenter #define pltexit la_ppc64_gnu_pltexit #define La_regs La_ppc64_regs #define La_retval La_ppc64_retval #define int_retval lrv_r3 +#else +#define pltenter la_ppc64v2_gnu_pltenter +#define pltexit la_ppc64v2_gnu_pltexit +#define La_regs La_ppc64v2_regs +#define La_retval La_ppc64v2_retval +#define int_retval lrv_r3 +#endif |