OSDN Git Service

Merge remote branch 'origin/master' into prelink
[uclinux-h8/uClibc.git] / ldso / ldso / xtensa / elfinterp.c
index 8eb6009..93edc1f 100644 (file)
@@ -56,7 +56,7 @@ _dl_linux_resolver (struct elf_resolve *tpnt, int reloc_entry)
        got_addr = (char **) (this_reloc->r_offset + tpnt->loadaddr);
 
        /* Get the address of the GOT entry.  */
-       new_addr = _dl_find_hash (symname, tpnt->symbol_scope, tpnt,
+       new_addr = _dl_find_hash (symname, &_dl_loaded_modules->symbol_scope, tpnt,
                                                          ELF_RTYPE_CLASS_PLT, NULL);
        if (unlikely (!new_addr)) {
                _dl_dprintf (2, "%s: can't resolve symbol '%s'\n",
@@ -82,9 +82,9 @@ _dl_linux_resolver (struct elf_resolve *tpnt, int reloc_entry)
 
 
 static int
-_dl_parse (struct elf_resolve *tpnt, struct dyn_elf *scope,
+_dl_parse (struct elf_resolve *tpnt, struct r_scope_elem *scope,
                   unsigned long rel_addr, unsigned long rel_size,
-                  int (*reloc_fnc) (struct elf_resolve *tpnt, struct dyn_elf *scope,
+                  int (*reloc_fnc) (struct elf_resolve *tpnt, struct r_scope_elem *scope,
                                                         ELF_RELOC *rpnt, Elf32_Sym *symtab, char *strtab))
 {
        unsigned int i;
@@ -140,7 +140,7 @@ _dl_parse (struct elf_resolve *tpnt, struct dyn_elf *scope,
 
 
 static int
-_dl_do_reloc (struct elf_resolve *tpnt, struct dyn_elf *scope,
+_dl_do_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope,
                          ELF_RELOC *rpnt, Elf32_Sym *symtab, char *strtab)
 {
        int reloc_type;
@@ -177,6 +177,9 @@ _dl_do_reloc (struct elf_resolve *tpnt, struct dyn_elf *scope,
                                                 _dl_progname, symname);
                        _dl_exit (1);
                }
+               if (_dl_trace_prelink)
+                       _dl_debug_lookup (symname, tpnt, &symtab[symtab_index],
+                                               &sym_ref, elf_machine_type_class(reloc_type));
        }
 
 #if defined (__SUPPORT_LD_DEBUG__)
@@ -223,7 +226,7 @@ _dl_do_reloc (struct elf_resolve *tpnt, struct dyn_elf *scope,
 
 
 static int
-_dl_do_lazy_reloc (struct elf_resolve *tpnt, struct dyn_elf *scope,
+_dl_do_lazy_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope,
                                   ELF_RELOC *rpnt, Elf32_Sym *symtab, char *strtab)
 {
        int reloc_type;
@@ -270,9 +273,10 @@ _dl_parse_lazy_relocation_information (struct dyn_elf *rpnt,
 
 int
 _dl_parse_relocation_information (struct dyn_elf *rpnt,
+                                                                 struct r_scope_elem *scope,
                                                                  unsigned long rel_addr,
                                                                  unsigned long rel_size)
 {
-       return _dl_parse (rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size,
+       return _dl_parse (rpnt->dyn, scope, rel_addr, rel_size,
                                          _dl_do_reloc);
 }