diff options
Diffstat (limited to 'ldso/ldso/arm/elfinterp.c')
-rw-r--r-- | ldso/ldso/arm/elfinterp.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/ldso/ldso/arm/elfinterp.c b/ldso/ldso/arm/elfinterp.c index 6b43464b3..93ae35e8b 100644 --- a/ldso/ldso/arm/elfinterp.c +++ b/ldso/ldso/arm/elfinterp.c @@ -188,8 +188,13 @@ _dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, Elf32_Sym *symtab; ELF_RELOC *rpnt; int symtab_index; - /* Now parse the relocation information */ + /* When the dynamic linker bootstrapped itself, it resolved some symbols. + Make sure we do not do them again */ + if (tpnt->libtype == program_interpreter) + return 0; + + /* Now parse the relocation information */ rpnt = (ELF_RELOC *) (rel_addr + tpnt->loadaddr); rel_size = rel_size / sizeof(ELF_RELOC); @@ -201,14 +206,6 @@ _dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, symtab_index = ELF32_R_SYM(rpnt->r_info); - /* When the dynamic linker bootstrapped itself, it resolved some symbols. - Make sure we do not do them again */ - if (!symtab_index && tpnt->libtype == program_interpreter) - continue; - if (symtab_index && tpnt->libtype == program_interpreter && - _dl_symbol(strtab + symtab[symtab_index].st_name)) - continue; - #if defined (__SUPPORT_LD_DEBUG__) debug_sym(symtab,strtab,symtab_index); debug_reloc(symtab,strtab,rpnt); |