diff options
author | Filippo Arcidiacono <filippo.arcidiacono@st.com> | 2012-04-06 11:18:35 +0200 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2012-04-08 00:49:16 -0400 |
commit | 2e9c1dc78eedd055b5db779aadf0d09cf70c6710 (patch) | |
tree | 00e4c18b83175da48847eb47820ac20b202ab3c5 /ldso/ldso/dl-startup.c | |
parent | dd109669be4b2f5ac69cf38ee1b67d6be74b620d (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.c | 9 |
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. */ |