This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] i386: Support static PIE in start.S
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Date: Fri, 4 Aug 2017 06:20:21 -0700
- Subject: Re: [PATCH] i386: Support static PIE in start.S
- Authentication-results: sourceware.org; auth=none
- References: <20170802173332.GA13135@gmail.com>
On Wed, Aug 2, 2017 at 10:33 AM, H.J. Lu <hongjiu.lu@intel.com> wrote:
> 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.
>
> Any comments or objections?
I am checking it in today.
> H.J.
> ---
> * sysdeps/i386/start.S (_start): Check Check PIC instead of
> SHARED. Avoid dynamic relocation against main.
> ---
> sysdeps/i386/start.S | 11 +++++++++--
> 1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/sysdeps/i386/start.S b/sysdeps/i386/start.S
> index ccb1e2b38f..375a93c15a 100644
> --- a/sysdeps/i386/start.S
> +++ b/sysdeps/i386/start.S
> @@ -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
> --
> 2.13.3
>
--
H.J.