[PATCH] sh: Add PIC implementation for crt1.S

Carmelo AMOROSO carmelo.amoroso at st.com
Wed Apr 29 16:39:42 UTC 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Peter Griffin wrote:
>>From 90f15ce7cd344183086d4d6bf4e406cc06af71f5 Mon Sep 17 00:00:00 2001
> From: Peter Griffin <pgriffin at mpc-data.co.uk>
> Date: Wed, 29 Apr 2009 11:52:37 +0100
> Subject: [PATCH] sh: Add PIC implementation for crt1.S
> 
> ---
>  libc/sysdeps/linux/sh/crt1.S |   45
> ++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 45 insertions(+), 0 deletions(-)
> 
> diff --git a/libc/sysdeps/linux/sh/crt1.S b/libc/sysdeps/linux/sh/crt1.S
> index 1c3c544..a68cf8f 100644
> --- a/libc/sysdeps/linux/sh/crt1.S
> +++ b/libc/sysdeps/linux/sh/crt1.S
> @@ -56,6 +56,35 @@ _start:
>  	/* Push the stack_end, rtld_fini and fini func onto the stack */
>  	mov.l r6, at -r15
>  	mov.l r4, at -r15
> +
> +#ifdef __PIC__
> +	mova  L_got, r0
> +	mov.l L_got, r12
> +	add r0, r12
> +
> +	mov.l L_fini,r0
> +	add r12, r0
> +	mov.l r0, at -r15
> +
> +	/* Set up the main/init funcs that go in registers */
> +	mov.l L_main, r4
> +	add r12, r4
> +	mov.l L_init, r7
> +	add r12, r7
> +
> +	/* __uClibc_main (main, argc, argv, init, fini, rtld_fini, stack_end)
> */
> +
> +	/* Let the libc call main and exit with its return code.  */
> +	mov.l L_uClibc_main,r1
> +	add r12, r1
> +	jsr @r1
> +	nop
> +	/* We should not get here. */
> +	mov.l L_abort,r1
> +	add r12, r1
> +	jmp @r1
> +	nop
> +#else
>  	mov.l L_fini,r0
>  	mov.l r0, at -r15
>  
> @@ -73,10 +102,25 @@ _start:
>  	mov.l L_abort,r1
>  	jmp @r1
>  	nop
> +#endif
>  
>  	.size _start,.-_start
>  	.align	2
>  
> +#ifdef __PIC__
> +L_got:
> +	.long	_GLOBAL_OFFSET_TABLE_
> +L_main:
> +	.long	main at GOTOFF
> +L_init:
> +	.long   _init at GOTOFF
> +L_fini:
> +	.long   _fini at GOTOFF
> +L_uClibc_main:
> +	.long   __uClibc_main at GOTOFF
> +L_abort:
> +	.long   abort at GOTOFF
> +#else
>  L_main:
>  	.long   main
>  L_init:
> @@ -87,6 +131,7 @@ L_uClibc_main:
>  	.long   __uClibc_main
>  L_abort:
>  	.long   abort
> +#endif
>  
>  /* Define a symbol for the first piece of initialized data.  */
>  	.data
Hi Peter,
where is it supposed to be required to be PIC... for PIE programs?
Indeed I'm seeing a problem with dbus due to TEXTREL that are not
allowed by ld.so for sh4... and I've seen that the relocations are
from crt1.S related to uCLibc_main and abort... so I'm thinking that
your patch will solve my issue too ;-)

cheers,
carmelo
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org

iEYEARECAAYFAkn4gs4ACgkQoRq/3BrK1s9EUgCgsBDgy4ESTtcLKhlR/ONaMtj8
NJgAoPWviAOrR2+V7Lmf1triEfie8NcR
=Y6YE
-----END PGP SIGNATURE-----


More information about the uClibc mailing list