summaryrefslogtreecommitdiff
path: root/ldso/ldso/arm/elfinterp.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldso/ldso/arm/elfinterp.c')
-rw-r--r--ldso/ldso/arm/elfinterp.c15
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);