about summary refs log tree commit diff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2018-05-14 09:23:55 -0700
committerH.J. Lu <hjl.tools@gmail.com>2018-05-14 09:24:06 -0700
commita15529fda8d132621328c3fe32997a3d9c55aef4 (patch)
treed1f18df73a78ab291842b0f91f5f939627eafc48
parent98ee36c7a44e140e2a85a2c4306e06176fb9e395 (diff)
downloadglibc-a15529fda8d132621328c3fe32997a3d9c55aef4.tar.gz
glibc-a15529fda8d132621328c3fe32997a3d9c55aef4.tar.xz
glibc-a15529fda8d132621328c3fe32997a3d9c55aef4.zip
i386: Replace PREINIT_FUNCTION@PLT with *%eax in call
Since we have loaded address of PREINIT_FUNCTION into %eax, we can
avoid extra branch to PLT slot.

	* sysdeps/i386/crti.S (_init): Replace PREINIT_FUNCTION@PLT
	with *%eax in call.

Acked-by: Christian Brauner (Ubuntu) <christian@brauner.io>
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/i386/crti.S2
2 files changed, 6 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 1db9747b3a..46114b4187 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2018-05-14  H.J. Lu  <hongjiu.lu@intel.com>
 
+	* sysdeps/i386/crti.S (_init): Replace PREINIT_FUNCTION@PLT
+	with *%eax in call.
+
+2018-05-14  H.J. Lu  <hongjiu.lu@intel.com>
+
 	* sysdeps/i386/ldsodefs.h: Removed.
 	* sysdeps/x86_64/ldsodefs.h: Moved to ...
 	* sysdeps/x86/ldsodefs.h: This.
diff --git a/sysdeps/i386/crti.S b/sysdeps/i386/crti.S
index c0422f9ce3..065460b813 100644
--- a/sysdeps/i386/crti.S
+++ b/sysdeps/i386/crti.S
@@ -68,7 +68,7 @@ _init:
 	movl PREINIT_FUNCTION@GOT(%ebx), %eax
 	testl %eax, %eax
 	je .Lno_weak_fn
-	call PREINIT_FUNCTION@PLT
+	call *%eax
 .Lno_weak_fn:
 #else
 	call PREINIT_FUNCTION