mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 23:00:07 +00:00
i386: Support static PIE in start.S
Since start.o may be compiled as PIC, we should check PIC instead of SHARED. Also avoid dynamic relocation against main in static PIE since _start is the entry point before the executable is relocated. * sysdeps/i386/start.S (_start): Check Check PIC instead of SHARED. Avoid dynamic relocation against main in static PIE.
This commit is contained in:
parent
e13daad7ac
commit
1e8e527dd9
@ -1,3 +1,8 @@
|
||||
2017-08-04 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* sysdeps/i386/start.S (_start): Check Check PIC instead of
|
||||
SHARED. Avoid dynamic relocation against main in static PIE.
|
||||
|
||||
2017-08-04 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
[BZ #21815]
|
||||
|
@ -81,7 +81,7 @@ _start:
|
||||
pushl %edx /* Push address of the shared library
|
||||
termination function. */
|
||||
|
||||
#ifdef SHARED
|
||||
#ifdef PIC
|
||||
/* Load PIC register. */
|
||||
call 1f
|
||||
addl $_GLOBAL_OFFSET_TABLE_, %ebx
|
||||
@ -95,7 +95,14 @@ _start:
|
||||
pushl %ecx /* Push second argument: argv. */
|
||||
pushl %esi /* Push first argument: argc. */
|
||||
|
||||
# ifdef SHARED
|
||||
pushl main@GOT(%ebx)
|
||||
# else
|
||||
/* Avoid relocation in static PIE since _start is called before
|
||||
it is relocated. */
|
||||
leal main@GOTOFF(%ebx), %eax
|
||||
pushl %eax
|
||||
# endif
|
||||
|
||||
/* Call the user's main function, and exit with its value.
|
||||
But let the libc call main. */
|
||||
@ -117,7 +124,7 @@ _start:
|
||||
|
||||
hlt /* Crash if somehow `exit' does return. */
|
||||
|
||||
#ifdef SHARED
|
||||
#ifdef PIC
|
||||
1: movl (%esp), %ebx
|
||||
ret
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user