From 1ba3a7b727b49d61b4868a06f1258a54db4dc9e0 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Fri, 30 Jun 2006 02:55:57 +0000 Subject: Bernd Schmidt writes: abstract away addresses so we can support FDPIC ELFs --- ldso/include/dl-elf.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'ldso/include/dl-elf.h') diff --git a/ldso/include/dl-elf.h b/ldso/include/dl-elf.h index de404aec1..9e364d680 100644 --- a/ldso/include/dl-elf.h +++ b/ldso/include/dl-elf.h @@ -94,10 +94,12 @@ extern void _dl_protect_relro (struct elf_resolve *l); #define DYNAMIC_SIZE (DT_NUM+OS_NUM+ARCH_NUM) -extern void _dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[], void *debug_addr, ElfW(Addr) load_off); +extern void _dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[], void *debug_addr, + DL_LOADADDR_TYPE load_off); static __always_inline -void __dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[], void *debug_addr, ElfW(Addr) load_off) +void __dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[], void *debug_addr, + DL_LOADADDR_TYPE load_off) { for (; dpnt->d_tag; dpnt++) { if (dpnt->d_tag < DT_NUM) { @@ -139,7 +141,8 @@ void __dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[], void #define ADJUST_DYN_INFO(tag, load_off) \ do { \ if (dynamic_info[tag]) \ - dynamic_info[tag] += load_off; \ + dynamic_info[tag] = (unsigned long)DL_RELOC_ADDR (dynamic_info[tag], \ + load_off); \ } while(0) ADJUST_DYN_INFO(DT_HASH, load_off); ADJUST_DYN_INFO(DT_PLTGOT, load_off); -- cgit v1.2.3