Handle platforms without aux vector
authorThomas Schwinge <thomas@schwinge.name>
Mon, 29 Mar 2010 22:13:53 +0000 (15:13 -0700)
committerUlrich Drepper <drepper@redhat.com>
Mon, 29 Mar 2010 22:13:53 +0000 (15:13 -0700)
ChangeLog
elf/rtld.c
sysdeps/mach/hurd/dl-sysdep.c

index 4587248..5b70500 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        * sysdeps/unix/sysv/linux/getpagesize.c (__getpagesize): If
index 3afb997..3c41446 100644 (file)
@@ -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
     {
index 2440682..f87b6e0 100644 (file)
@@ -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.