[git commit prelink] MIPS LDSO: pass sym_ref parameter to _dl_find_hash() to support PROTECTED symbols

Maksim Rayskiy mrayskiy at broadcom.com
Wed May 4 06:33:33 UTC 2011


commit: http://git.uclibc.org/uClibc/commit/?id=b228ddac5b221b7c474ed902bad124934e61a527
branch: http://git.uclibc.org/uClibc/commit/?id=refs/heads/prelink

_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 at broadcom.com>
Signed-off-by: Carmelo Amoroso <carmelo.amoroso at st.com>
---
 ldso/ldso/mips/elfinterp.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/ldso/ldso/mips/elfinterp.c b/ldso/ldso/mips/elfinterp.c
index 2886f33..82f740d 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++;
-- 
1.7.3.4



More information about the uClibc-cvs mailing list