mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
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.
This commit is contained in:
parent
4c01126896
commit
6901def689
@ -1,3 +1,11 @@
|
||||
2016-05-24 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* 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.
|
||||
|
||||
2016-05-24 Stefan Liebler <stli@linux.vnet.ibm.com>
|
||||
|
||||
[BZ #19765]
|
||||
|
@ -87,6 +87,9 @@
|
||||
include/libc-symbols.h that avoid PLT slots in the shared objects. */
|
||||
#undef NO_HIDDEN
|
||||
|
||||
/* Define this to disable lazy relocations in DSOs. */
|
||||
#undef BIND_NOW
|
||||
|
||||
/* AArch64 big endian ABI */
|
||||
#undef HAVE_AARCH64_BE
|
||||
|
||||
|
4
configure
vendored
4
configure
vendored
@ -3416,6 +3416,10 @@ else
|
||||
fi
|
||||
|
||||
|
||||
if test "x$bindnow" = xyes; then
|
||||
$as_echo "#define BIND_NOW 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
# Check whether --enable-static-nss was given.
|
||||
if test "${enable_static_nss+set}" = set; then :
|
||||
|
@ -231,6 +231,9 @@ AC_ARG_ENABLE([bind-now],
|
||||
[bindnow=$enableval],
|
||||
[bindnow=no])
|
||||
AC_SUBST(bindnow)
|
||||
if test "x$bindnow" = xyes; then
|
||||
AC_DEFINE(BIND_NOW)
|
||||
fi
|
||||
|
||||
dnl On some platforms we cannot use dynamic loading. We must provide
|
||||
dnl static NSS modules.
|
||||
|
@ -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. */
|
||||
|
Loading…
Reference in New Issue
Block a user