From 7d137fcf818e9a157a9f7ed9df61896f6cf97490 Mon Sep 17 00:00:00 2001 From: Joakim Tjernlund Date: Mon, 14 Mar 2005 13:25:07 +0000 Subject: Generalize optimized relative reloc procesing. Add elf_machine_dynamic() and elf_machine_load_address() for all archs. elf_machine_dynamic() replaces the #ifdef mess to get at the GOT. elf_machine_load_address() is needed to execute ldso directly, this is not complete yet. I probably broke one or two archs(only tested PPC) so please try and report problems. For a report to be useful you need to enable __SUPPORT_LD_DEBUG_EARLY__ and __SUPPORT_LD_DEBUG__ --- ldso/ldso/powerpc/elfinterp.c | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) (limited to 'ldso/ldso/powerpc/elfinterp.c') diff --git a/ldso/ldso/powerpc/elfinterp.c b/ldso/ldso/powerpc/elfinterp.c index d3dd269fe..e156aa355 100644 --- a/ldso/ldso/powerpc/elfinterp.c +++ b/ldso/ldso/powerpc/elfinterp.c @@ -421,7 +421,7 @@ _dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, int (*reloc_fnc) (struct elf_resolve *tpnt, struct dyn_elf *scope, ELF_RELOC *rpnt, Elf32_Sym *symtab, char *strtab)) { - unsigned int i, relative_count; + unsigned int i; char *strtab; Elf32_Sym *symtab; ELF_RELOC *rpnt; @@ -434,18 +434,6 @@ _dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope, symtab = (Elf32_Sym *)(intptr_t) (tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr); strtab = (char *) (tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); - relative_count = tpnt->dynamic_info[DT_RELCONT_IDX]; - if (relative_count) { /* Optimize the R_PPC_RELATIVE relocations if possible */ - Elf32_Addr loadaddr = tpnt->loadaddr; - rel_size -= relative_count; - --rpnt; - do { /* PowerPC handles pre increment/decrement better */ - Elf32_Addr *const reloc_addr = (void *) (loadaddr + (++rpnt)->r_offset); - - *reloc_addr = loadaddr + rpnt->r_addend; - } while (--relative_count); - } - for (i = 0; i < rel_size; i++, rpnt++) { int res; -- cgit v1.2.3