From 7c7bcf3634e44cf7e001aaa302138c1ee0e58f8c Mon Sep 17 00:00:00 2001 From: Tulio Magno Quites Machado Filho Date: Fri, 10 Jul 2020 19:41:06 -0300 Subject: powerpc64: Fix calls when r2 is not used [BZ #26173] Teach the linker that __mcount_internal, __sigjmp_save_symbol, __syscall_error and __GI_exit do not use r2, so that it does not need to recover r2 after the call. Test at configure time if the assembler supports @notoc and define USE_PPC64_NOTOC. --- sysdeps/powerpc/powerpc64/sysdep.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'sysdeps/powerpc/powerpc64/sysdep.h') diff --git a/sysdeps/powerpc/powerpc64/sysdep.h b/sysdeps/powerpc/powerpc64/sysdep.h index d6616ac..d557098 100644 --- a/sysdeps/powerpc/powerpc64/sysdep.h +++ b/sysdeps/powerpc/powerpc64/sysdep.h @@ -278,7 +278,7 @@ LT_LABELSUFFIX(name,_name_end): ; \ #ifdef SHARED #define TAIL_CALL_SYSCALL_ERROR \ - b JUMPTARGET(__syscall_error) + b JUMPTARGET (NOTOC (__syscall_error)) #else /* Static version might be linked into a large app with a toc exceeding 64k. We can't put a toc adjusting stub on a plain branch, so can't @@ -366,6 +366,12 @@ LT_LABELSUFFIX(name,_name_end): ; \ lwz rOUT,0(rOUT) #endif +#ifdef USE_PPC64_NOTOC +# define NOTOC(l) l@notoc +#else +# define NOTOC(l) l +#endif + #else /* !__ASSEMBLER__ */ #if _CALL_ELF != 2 -- cgit v1.1