diff options
author | Joakim Tjernlund <joakim.tjernlund@transmode.se> | 2005-03-29 13:47:21 +0000 |
---|---|---|
committer | Joakim Tjernlund <joakim.tjernlund@transmode.se> | 2005-03-29 13:47:21 +0000 |
commit | e6816a15ab7d7dbf3ffe75a9a22b4a37909aaf57 (patch) | |
tree | ffd16f946ea203cf14cc44c7aaae730cc1032d01 /ldso/ldso/sh64/elfinterp.c | |
parent | 223b81b2e707ff3cb99fdf49b7cb6bd1da7f6d21 (diff) |
Moved the addition of load address from the fast path
where possible. This will also make ldso smaller.
However the patch touches all archs and I have only tested PPC and x86.
Diffstat (limited to 'ldso/ldso/sh64/elfinterp.c')
-rw-r--r-- | ldso/ldso/sh64/elfinterp.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/ldso/ldso/sh64/elfinterp.c b/ldso/ldso/sh64/elfinterp.c index 82d66552a..7b5aaee7d 100644 --- a/ldso/ldso/sh64/elfinterp.c +++ b/ldso/ldso/sh64/elfinterp.c @@ -166,15 +166,14 @@ unsigned long _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry) unsigned long instr_addr; char *symname; - rel_addr = (char *)(tpnt->dynamic_info[DT_JMPREL] + tpnt->loadaddr); + rel_addr = (char *)tpnt->dynamic_info[DT_JMPREL]; this_reloc = (ELF_RELOC *)(intptr_t)(rel_addr + reloc_entry); reloc_type = ELF32_R_TYPE(this_reloc->r_info); symtab_index = ELF32_R_SYM(this_reloc->r_info); - symtab = (Elf32_Sym *)(intptr_t) - (tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr); - strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); + symtab = (Elf32_Sym *)(intptr_t)tpnt->dynamic_info[DT_SYMTAB]; + strtab = (char *)tpnt->dynamic_info[DT_STRTAB]; symname = strtab + symtab[symtab_index].st_name; if (unlikely(reloc_type != R_SH_JMP_SLOT)) { @@ -233,12 +232,11 @@ static int _dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, int symtab_index; /* Now parse the relocation information */ - rpnt = (ELF_RELOC *)(intptr_t)(rel_addr + tpnt->loadaddr); + rpnt = (ELF_RELOC *)(intptr_t)rel_addr; rel_size = rel_size / sizeof(ELF_RELOC); - symtab = (Elf32_Sym *)(intptr_t) - (tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr); - strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); + symtab = (Elf32_Sym *)(intptr_t)tpnt->dynamic_info[DT_SYMTAB]; + strtab = (char *)tpnt->dynamic_info[DT_STRTAB]; for (i = 0; i < rel_size; i++, rpnt++) { int res; |