On Wed, Mar 26, 2014 at 02:31:11PM +0100, [email protected] wrote:
> If the dynamic linker is built with LDSO_STANDALONE_SUPPORT=y, it can
> load then run a dynamically linked program when explicitly invoked
> from the command line.  This is used for test and prelink purposes,
> and also by other tools like PRoot to force the kernel to load the
> right ELF interpreter.
> 
> This feature is currently broken on x86_64 since the number of command
> line arguments (ie. argc) passed from the kernel is an "elf_addr_t"
> (64 bit on x86_64), whereas it is read as an "unsigned int" (32 bit on
> x86_64).

so shouldn't this be ElfW(Addr) instead?
thanks,
> 
> Ref: https://github.com/cedric-vincent/PRoot/issues/45
> Signed-off-by: Cédric VINCENT <[email protected]>
> ---
>  ldso/ldso/ldso.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c
> index becabd3..89a0126 100644
> --- a/ldso/ldso/ldso.c
> +++ b/ldso/ldso/ldso.c
> @@ -526,8 +526,8 @@ void *_dl_get_ready_to_run(struct elf_resolve *tpnt, 
> DL_LOADADDR_TYPE load_addr,
>  
>  #ifdef __LDSO_STANDALONE_SUPPORT__
>       if (_start == (void *) auxvt[AT_ENTRY].a_un.a_val) {
> -             unsigned int *aux_dat = (unsigned int *) argv;
> -             int argc = aux_dat[-1];
> +             unsigned long *aux_dat = (unsigned long *) argv;
> +             long argc = aux_dat[-1];
>  
>               tpnt->libname = argv[0];
>               while (argc > 1)
> -- 
> 1.8.4
> 
> _______________________________________________
> uClibc mailing list
> [email protected]
> http://lists.busybox.net/mailman/listinfo/uclibc
_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to