diff --git a/ChangeLog.mips b/ChangeLog.mips index 0c2285f137..8a72ec5702 100644 --- a/ChangeLog.mips +++ b/ChangeLog.mips @@ -1,3 +1,7 @@ +2011-03-22 Joseph Myers + + * sysdeps/mips/dl-lookup.c: Update from generic version. + 2011-01-25 Joseph Myers * sysdeps/unix/sysv/linux/mips/bits/mman.h (MADV_HUGEPAGE, diff --git a/sysdeps/mips/dl-lookup.c b/sysdeps/mips/dl-lookup.c index 4090efeac1..50d42fcf96 100644 --- a/sysdeps/mips/dl-lookup.c +++ b/sysdeps/mips/dl-lookup.c @@ -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; }