From 6901def689b5c77465d34f07822989ec67e80c1e Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 24 May 2016 08:44:10 -0700 Subject: Avoid an extra branch to PLT for -z now When --enable-bind-now is used to configure glibc build, we can avoid an extra branch to the PLT entry by using indirect branch via the GOT slot instead, which is similar to the first instructuon in the PLT entry. Changes in the shared library sizes in text sections: Shared library Before (bytes) After (bytes) libm.so 1060813 1060797 libmvec.so 160881 160805 libpthread.so 94992 94984 librt.so 25064 25048 * config.h.in (BIND_NOW): New. * configure.ac (BIND_NOW): New. Defined for --enable-bind-now. * configure: Regenerated. * sysdeps/x86_64/sysdep.h (JUMPTARGET)[BIND_NOW]: Defined to indirect branch via the GOT slot. --- sysdeps/x86_64/sysdep.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'sysdeps/x86_64/sysdep.h') diff --git a/sysdeps/x86_64/sysdep.h b/sysdeps/x86_64/sysdep.h index fbe3560588..75ac747be8 100644 --- a/sysdeps/x86_64/sysdep.h +++ b/sysdeps/x86_64/sysdep.h @@ -90,9 +90,13 @@ lose: \ #undef JUMPTARGET #ifdef PIC -#define JUMPTARGET(name) name##@PLT +# ifdef BIND_NOW +# define JUMPTARGET(name) *name##@GOTPCREL(%rip) +# else +# define JUMPTARGET(name) name##@PLT +# endif #else -#define JUMPTARGET(name) name +# define JUMPTARGET(name) name #endif /* Local label name for asm code. */ -- cgit 1.4.1