summaryrefslogtreecommitdiff
path: root/ldso/ldso/dl-startup.c
diff options
context:
space:
mode:
authorFilippo Arcidiacono <filippo.arcidiacono@st.com>2012-04-06 11:18:35 +0200
committerMike Frysinger <vapier@gentoo.org>2012-04-08 00:49:16 -0400
commit2e9c1dc78eedd055b5db779aadf0d09cf70c6710 (patch)
tree00e4c18b83175da48847eb47820ac20b202ab3c5 /ldso/ldso/dl-startup.c
parentdd109669be4b2f5ac69cf38ee1b67d6be74b620d (diff)
ldso: fix fdpic support broken from prelink patch
The fdpic support has been broken since the prelink support was added, because it didn't take into account DL_LOADADDR_TYPE could be a different type of ElfW(Addr). Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono@st.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'ldso/ldso/dl-startup.c')
-rw-r--r--ldso/ldso/dl-startup.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/ldso/ldso/dl-startup.c b/ldso/ldso/dl-startup.c
index 75ea564c2..4893409e9 100644
--- a/ldso/ldso/dl-startup.c
+++ b/ldso/ldso/dl-startup.c
@@ -203,7 +203,8 @@ DL_START(unsigned long args)
_dl_exit(0);
}
SEND_EARLY_STDERR_DEBUG("ELF header=");
- SEND_ADDRESS_STDERR_DEBUG(DL_LOADADDR_BASE(header), 1);
+ SEND_ADDRESS_STDERR_DEBUG(
+ DL_LOADADDR_BASE(DL_GET_RUN_ADDR(load_addr, header)), 1);
/* Locate the global offset table. Since this code must be PIC
* we can take advantage of the magic offset register, if we
@@ -278,11 +279,9 @@ DL_START(unsigned long args)
if (!indx && relative_count) {
rel_size -= relative_count * sizeof(ELF_RELOC);
- if (load_addr
#ifdef __LDSO_PRELINK_SUPPORT__
- || !tpnt->dynamic_info[DT_GNU_PRELINKED_IDX]
+ if (load_addr || !tpnt->dynamic_info[DT_GNU_PRELINKED_IDX])
#endif
- )
elf_machine_relative(load_addr, rel_addr, relative_count);
rel_addr += relative_count * sizeof(ELF_RELOC);
}
@@ -347,7 +346,7 @@ DL_START(unsigned long args)
__rtld_stack_end = (void *)(argv - 1);
_dl_elf_main = (int (*)(int, char **, char **))
- _dl_get_ready_to_run(tpnt, (DL_LOADADDR_TYPE) header, auxvt, envp, argv
+ _dl_get_ready_to_run(tpnt, load_addr, auxvt, envp, argv
DL_GET_READY_TO_RUN_EXTRA_ARGS);
/* Transfer control to the application. */