From: Thomas Schwinge Date: Mon, 29 Mar 2010 22:13:53 +0000 (-0700) Subject: Handle platforms without aux vector X-Git-Tag: upstream/2.30~12924 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bc58236c652761240fbe52f946f4a5efdd503fab;p=external%2Fglibc.git Handle platforms without aux vector --- diff --git a/ChangeLog b/ChangeLog index 4587248..5b70500 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2010-03-28 Thomas Schwinge + + * sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): Adapt to auxv + changes in the generic code. + * elf/rtld.c (dl_main): Conditionalize the code that dereferences auxv + to [HAVE_AUX_VECTOR]. + 2010-03-27 Ulrich Drepper * sysdeps/unix/sysv/linux/getpagesize.c (__getpagesize): If diff --git a/elf/rtld.c b/elf/rtld.c index 3afb997..3c41446 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -928,8 +928,6 @@ dl_main (const ElfW(Phdr) *phdr, if (*user_entry == (ElfW(Addr)) ENTRY_POINT) { - ElfW(auxv_t) *av; - /* Ho ho. We are not the program interpreter! We are the program itself! This means someone ran ld.so as a command. Well, that might be convenient to do sometimes. We support it by @@ -1086,9 +1084,10 @@ of this helper program; chances are you did not intend to run this program.\n\ main_map->l_name = (char *) ""; *user_entry = main_map->l_entry; +#ifdef HAVE_AUX_VECTOR /* Adjust the on-stack auxiliary vector so that it looks like the binary was executed directly. */ - for (av = auxv; av->a_type != AT_NULL; av++) + for (ElfW(auxv_t) *av = auxv; av->a_type != AT_NULL; av++) switch (av->a_type) { case AT_PHDR: @@ -1101,6 +1100,7 @@ of this helper program; chances are you did not intend to run this program.\n\ av->a_un.a_val = *user_entry; break; } +#endif } else { diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c index 2440682..f87b6e0 100644 --- a/sysdeps/mach/hurd/dl-sysdep.c +++ b/sysdeps/mach/hurd/dl-sysdep.c @@ -1,5 +1,5 @@ /* Operating system support for run-time dynamic linker. Hurd version. - Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 + Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2010 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -116,7 +116,8 @@ static void fmh(void) { ElfW(Addr) _dl_sysdep_start (void **start_argptr, void (*dl_main) (const ElfW(Phdr) *phdr, ElfW(Word) phent, - ElfW(Addr) *user_entry)) + ElfW(Addr) *user_entry, + ElfW(auxv_t) *auxv))) { void go (intptr_t *argdata) { @@ -197,7 +198,7 @@ unfmh(); /* XXX */ up and leave us to transfer control to USER_ENTRY. */ (*dl_main) ((const ElfW(Phdr) *) _dl_hurd_data->phdr, _dl_hurd_data->phdrsz / sizeof (ElfW(Phdr)), - &_dl_hurd_data->user_entry); + &_dl_hurd_data->user_entry, NULLy); /* The call above might screw a few things up.