Update MIPS dl-lookup.c from generic version.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 22 Mar 2011 20:42:13 +0000 (20:42 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 22 Mar 2011 20:42:13 +0000 (20:42 +0000)
ChangeLog.mips
sysdeps/mips/dl-lookup.c

index 0c2285f..8a72ec5 100644 (file)
@@ -1,3 +1,7 @@
+2011-03-22  Joseph Myers  <joseph@codesourcery.com>
+
+       * sysdeps/mips/dl-lookup.c: Update from generic version.
+
 2011-01-25  Joseph Myers  <joseph@codesourcery.com>
 
        * sysdeps/unix/sysv/linux/mips/bits/mman.h (MADV_HUGEPAGE,
index 4090efe..50d42fc 100644 (file)
@@ -1,7 +1,6 @@
 /* Look up a symbol in the loaded objects.
    MIPS/Linux version - special handling of non-PIC undefined symbol rules.
-   Copyright (C) 1995-2005, 2006, 2007, 2009, 2010
-   Free Software Foundation, Inc.
+   Copyright (C) 1995-2007, 2009, 2010, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -381,8 +380,19 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash,
                      if (entries[idx].hashval == new_hash
                          && strcmp (entries[idx].name, undef_name) == 0)
                        {
-                         result->s = entries[idx].sym;
-                         result->m = (struct link_map *) entries[idx].map;
+                         if ((type_class & ELF_RTYPE_CLASS_COPY) != 0)
+                           {
+                             /* We possibly have to initialize the central
+                                copy from the copy addressed through the
+                                relocation.  */
+                             result->s = sym;
+                             result->m = (struct link_map *) map;
+                           }
+                         else
+                           {
+                             result->s = entries[idx].sym;
+                             result->m = (struct link_map *) entries[idx].map;
+                           }
                          __rtld_lock_unlock_recursive (tab->lock);
                          return 1;
                        }