diff options
| -rw-r--r-- | libc/sysdeps/linux/i386/crt1.S | 16 | 
1 files changed, 6 insertions, 10 deletions
| diff --git a/libc/sysdeps/linux/i386/crt1.S b/libc/sysdeps/linux/i386/crt1.S index fa9174f3e..b5c684998 100644 --- a/libc/sysdeps/linux/i386/crt1.S +++ b/libc/sysdeps/linux/i386/crt1.S @@ -89,14 +89,14 @@ _start:  #if defined L_Scrt1  	/* Load PIC register.  */ -	call 1f -	addl $_GLOBAL_OFFSET_TABLE_, %ebx +	call .L0 +.L0: +	pop %ebx +	addl $_GLOBAL_OFFSET_TABLE_+[.-.L0],%ebx  	/* Push address of our own entry points to .fini and .init.  */ -	leal _fini@GOTOFF(%ebx), %eax -	pushl %eax -	leal _init@GOTOFF(%ebx), %eax -	pushl %eax +	pushl _fini@GOT(%ebx) +	pushl _init@GOT(%ebx)  	pushl %ecx		/* Push second argument: argv.  */  	pushl %esi		/* Push first argument: argc.  */ @@ -123,10 +123,6 @@ _start:  	hlt			/* Crash if somehow `exit' does return.  */ -#if defined L_Scrt1 -1:	movl	(%esp), %ebx -	ret -#endif  /* Define a symbol for the first piece of initialized data.  */  	.data  	.globl __data_start | 
