Roman I Khimov wrote:
Fixes dltest with NPTL.

Signed-off-by: Roman I Khimov <[email protected]>
---
 ldso/ldso/x86_64/elfinterp.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/ldso/ldso/x86_64/elfinterp.c b/ldso/ldso/x86_64/elfinterp.c
index 54528d3..ec53c48 100644
--- a/ldso/ldso/x86_64/elfinterp.c
+++ b/ldso/ldso/x86_64/elfinterp.c
@@ -172,7 +172,9 @@ _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf 
*scope,
        symbol_addr = 0;
        symname = strtab + sym->st_name;
- if (symtab_index) {
+       if (symtab_index &&
+               (ELF64_ST_VISIBILITY(symtab[symtab_index].st_other)
+                != STV_PROTECTED)) {
                symbol_addr = (ElfW(Addr))_dl_find_hash(symname, scope, tpnt,
                                elf_machine_type_class(reloc_type), &tls_tpnt);
                /*
@@ -189,7 +191,11 @@ _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf 
*scope,
                /* Relocs against STN_UNDEF are usually treated as using a
                 * symbol value of zero, and using the module containing the
                 * reloc itself. */
-               symbol_addr = sym->st_value;
+               if (symtab_index)
+                       symbol_addr = DL_FIND_HASH_VALUE(tpnt, 
elf_machine_type_class(reloc_type),
+                                                        sym);
+               else
+                       symbol_addr = sym->st_value;
                tls_tpnt = tpnt;
        }

Joakim had a clean up patch for the above construct. See patch 1/2 of:
 http://lists.uclibc.org/pipermail/uclibc/2010-April/043840.html
(patch 2/2 there is wrong). See also rest of the thread.

For some reason that did not got merged yet. Austin, care to merge
that?

But otherwise looks good.

- Timo
_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to