summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaksim Rayskiy <mrayskiy@broadcom.com>2011-04-15 10:25:40 -0700
committerCarmelo Amoroso <carmelo.amoroso@st.com>2011-04-18 08:44:16 +0200
commitb228ddac5b221b7c474ed902bad124934e61a527 (patch)
tree09f1b235b60a802ce4b98a3807bc85de2f93c076
parentf6450b67cc92027352367be299cc28dd29cd8486 (diff)
MIPS LDSO: pass sym_ref parameter to _dl_find_hash() to support PROTECTED symbols
_dl_find_hash() relies on sym_ref parameter to check if the looked-up symbol is protected. The code fixes a case when _dl_perform_mips_global_got_relocations() was calling _dl_find_hash() without providing sym_ref parameter. The bug was causing hangs if a library exporting non-protected symbol was earlier in link order than library with the same symbol declared as protected. Signed-off-by: Maksim Rayskiy <mrayskiy@broadcom.com> Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
-rw-r--r--ldso/ldso/mips/elfinterp.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/ldso/ldso/mips/elfinterp.c b/ldso/ldso/mips/elfinterp.c
index 2886f333d..82f740d53 100644
--- a/ldso/ldso/mips/elfinterp.c
+++ b/ldso/ldso/mips/elfinterp.c
@@ -378,8 +378,11 @@ void _dl_perform_mips_global_got_relocations(struct elf_resolve *tpnt, int lazy)
*got_entry += (unsigned long) tpnt->loadaddr;
}
else {
+ struct symbol_ref sym_ref;
+ sym_ref.sym = sym;
+ sym_ref.tpnt = NULL;
*got_entry = (unsigned long) _dl_find_hash(strtab +
- sym->st_name, tpnt->symbol_scope, tpnt, ELF_RTYPE_CLASS_PLT, NULL);
+ sym->st_name, tpnt->symbol_scope, tpnt, ELF_RTYPE_CLASS_PLT, &sym_ref);
}
got_entry++;