mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-10 07:10:06 +00:00
Handle platforms without aux vector
This commit is contained in:
parent
8f4a5048ee
commit
bc58236c65
@ -1,3 +1,10 @@
|
|||||||
|
2010-03-28 Thomas Schwinge <thomas@schwinge.name>
|
||||||
|
|
||||||
|
* 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 <drepper@redhat.com>
|
2010-03-27 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/getpagesize.c (__getpagesize): If
|
* sysdeps/unix/sysv/linux/getpagesize.c (__getpagesize): If
|
||||||
|
@ -928,8 +928,6 @@ dl_main (const ElfW(Phdr) *phdr,
|
|||||||
|
|
||||||
if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
|
if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
|
||||||
{
|
{
|
||||||
ElfW(auxv_t) *av;
|
|
||||||
|
|
||||||
/* Ho ho. We are not the program interpreter! We are the program
|
/* Ho ho. We are not the program interpreter! We are the program
|
||||||
itself! This means someone ran ld.so as a command. Well, that
|
itself! This means someone ran ld.so as a command. Well, that
|
||||||
might be convenient to do sometimes. We support it by
|
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 *) "";
|
main_map->l_name = (char *) "";
|
||||||
*user_entry = main_map->l_entry;
|
*user_entry = main_map->l_entry;
|
||||||
|
|
||||||
|
#ifdef HAVE_AUX_VECTOR
|
||||||
/* Adjust the on-stack auxiliary vector so that it looks like the
|
/* Adjust the on-stack auxiliary vector so that it looks like the
|
||||||
binary was executed directly. */
|
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)
|
switch (av->a_type)
|
||||||
{
|
{
|
||||||
case AT_PHDR:
|
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;
|
av->a_un.a_val = *user_entry;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Operating system support for run-time dynamic linker. Hurd version.
|
/* 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.
|
Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
@ -116,7 +116,8 @@ static void fmh(void) {
|
|||||||
ElfW(Addr)
|
ElfW(Addr)
|
||||||
_dl_sysdep_start (void **start_argptr,
|
_dl_sysdep_start (void **start_argptr,
|
||||||
void (*dl_main) (const ElfW(Phdr) *phdr, ElfW(Word) phent,
|
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)
|
void go (intptr_t *argdata)
|
||||||
{
|
{
|
||||||
@ -197,7 +198,7 @@ unfmh(); /* XXX */
|
|||||||
up and leave us to transfer control to USER_ENTRY. */
|
up and leave us to transfer control to USER_ENTRY. */
|
||||||
(*dl_main) ((const ElfW(Phdr) *) _dl_hurd_data->phdr,
|
(*dl_main) ((const ElfW(Phdr) *) _dl_hurd_data->phdr,
|
||||||
_dl_hurd_data->phdrsz / sizeof (ElfW(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.
|
/* The call above might screw a few things up.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user