From 47319595bdfdc0dfc8eb5f51bc8bd055a6ea0a7f Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Wed, 5 Jul 2006 23:21:22 +0000 Subject: patch from Bernd Schmidt to abstract away initializing of relocation addresses --- ldso/ldso/dl-startup.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'ldso/ldso/dl-startup.c') diff --git a/ldso/ldso/dl-startup.c b/ldso/ldso/dl-startup.c index 4115f299c..a3764449e 100644 --- a/ldso/ldso/dl-startup.c +++ b/ldso/ldso/dl-startup.c @@ -186,14 +186,14 @@ static void * __attribute_used__ _dl_start(unsigned long args) _dl_exit(0); } SEND_STDERR_DEBUG("ELF header="); - SEND_ADDRESS_STDERR_DEBUG(load_addr, 1); + SEND_ADDRESS_STDERR_DEBUG(DL_LOADADDR_BASE(load_addr), 1); /* Locate the global offset table. Since this code must be PIC * we can take advantage of the magic offset register, if we * happen to know what that is for this architecture. If not, * we can always read stuff out of the ELF file to find it... */ got = elf_machine_dynamic(); - dpnt = (ElfW(Dyn) *) (got + load_addr); + dpnt = (ElfW(Dyn) *) DL_RELOC_ADDR(load_addr, got); SEND_STDERR_DEBUG("First Dynamic section entry="); SEND_ADDRESS_STDERR_DEBUG(dpnt, 1); _dl_memset(tpnt, 0, sizeof(struct elf_resolve)); @@ -259,9 +259,9 @@ static void * __attribute_used__ _dl_start(unsigned long args) rel_addr += relative_count * sizeof(ELF_RELOC); } - rpnt = (ELF_RELOC *) (rel_addr + load_addr); + rpnt = (ELF_RELOC *) DL_RELOC_ADDR(load_addr, rel_addr); for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) { - reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset); + reloc_addr = (unsigned long *) DL_RELOC_ADDR(load_addr, (unsigned long)rpnt->r_offset); symtab_index = ELF_R_SYM(rpnt->r_info); symbol_addr = 0; sym = NULL; @@ -272,7 +272,7 @@ static void * __attribute_used__ _dl_start(unsigned long args) symtab = (ElfW(Sym) *) tpnt->dynamic_info[DT_SYMTAB]; strtab = (char *) tpnt->dynamic_info[DT_STRTAB]; sym = &symtab[symtab_index]; - symbol_addr = load_addr + sym->st_value; + symbol_addr = (unsigned long) DL_RELOC_ADDR(load_addr, sym->st_value); SEND_STDERR_DEBUG("relocating symbol: "); SEND_STDERR_DEBUG(strtab + sym->st_name); -- cgit v1.2.3