OSDN Git Service

avr32: common do_rem is good for it
[uclinux-h8/uClibc.git] / ldso / ldso / dl-hash.c
index 2ec883a..2c659dc 100644 (file)
@@ -115,6 +115,15 @@ struct elf_resolve *_dl_add_elf_hash_table(const char *libname,
        tpnt->dynamic_addr = (ElfW(Dyn) *)dynamic_addr;
        tpnt->libtype = loaded_file;
 
+#ifdef __DSBT__
+       if (dynamic_info[DT_DSBT_BASE_IDX] != 0)
+               tpnt->dsbt_table = (void *)dynamic_info[DT_DSBT_BASE_IDX];
+       if (dynamic_info[DT_DSBT_SIZE_IDX] != 0)
+               tpnt->dsbt_size = dynamic_info[DT_DSBT_SIZE_IDX];
+       if (dynamic_info[DT_DSBT_INDEX_IDX] != 0)
+               tpnt->dsbt_index = dynamic_info[DT_DSBT_INDEX_IDX];
+#endif /* __DSBT__ */
+
 #ifdef __LDSO_GNU_HASH_SUPPORT__
        if (dynamic_info[DT_GNU_HASH_IDX] != 0) {
                Elf32_Word *hash32 = (Elf_Symndx*)dynamic_info[DT_GNU_HASH_IDX];
@@ -188,6 +197,10 @@ check_match (const ElfW(Sym) *sym, char *strtab, const char* undef_name, int typ
                 */
                return NULL;
 #endif
+#ifdef ARCH_SKIP_RELOC
+       if (ARCH_SKIP_RELOC(type_class, sym))
+               return NULL;
+#endif
        if (_dl_strcmp(strtab + sym->st_name, undef_name) != 0)
                return NULL;
 
@@ -351,7 +364,6 @@ char *_dl_find_hash(const char *name, struct r_scope_elem *scope, struct elf_res
 #if defined(USE_TLS) && USE_TLS
                if (ELF_ST_TYPE(sym->st_info) == STT_TLS) {
                        _dl_assert(sym_ref != NULL);
-                       sym_ref->tpnt = tpnt;
                        return (char *)sym->st_value;
                }
 #endif