diff options
author | Joakim Tjernlund <joakim.tjernlund@transmode.se> | 2005-03-29 13:47:21 +0000 |
---|---|---|
committer | Joakim Tjernlund <joakim.tjernlund@transmode.se> | 2005-03-29 13:47:21 +0000 |
commit | e6816a15ab7d7dbf3ffe75a9a22b4a37909aaf57 (patch) | |
tree | ffd16f946ea203cf14cc44c7aaae730cc1032d01 /ldso/ldso/dl-elf.c | |
parent | 223b81b2e707ff3cb99fdf49b7cb6bd1da7f6d21 (diff) |
Moved the addition of load address from the fast path
where possible. This will also make ldso smaller.
However the patch touches all archs and I have only tested PPC and x86.
Diffstat (limited to 'ldso/ldso/dl-elf.c')
-rw-r--r-- | ldso/ldso/dl-elf.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c index bcf83346e..089fca986 100644 --- a/ldso/ldso/dl-elf.c +++ b/ldso/ldso/dl-elf.c @@ -307,7 +307,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt, if (tpnt->libtype == elf_executable) { pnt = (char *) tpnt->dynamic_info[DT_RPATH]; if (pnt) { - pnt += (unsigned long) tpnt->loadaddr + tpnt->dynamic_info[DT_STRTAB]; + pnt += (unsigned long) tpnt->dynamic_info[DT_STRTAB]; #if defined (__SUPPORT_LD_DEBUG__) if(_dl_debug) _dl_dprintf(_dl_debug_file, "\tsearching RPATH='%s'\n", pnt); #endif @@ -651,7 +651,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, dpnt = (Elf32_Dyn *) dynamic_addr; _dl_memset(dynamic_info, 0, sizeof(dynamic_info)); - _dl_parse_dynamic_info(dpnt, dynamic_info, NULL); + _dl_parse_dynamic_info(dpnt, dynamic_info, NULL, libaddr); /* If the TEXTREL is set, this means that we need to make the pages writable before we perform relocations. Do this now. They get set back again later. */ @@ -702,8 +702,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, lpnt = (unsigned long *) dynamic_info[DT_PLTGOT]; if (lpnt) { - lpnt = (unsigned long *) (dynamic_info[DT_PLTGOT] + - ((int) libaddr)); + lpnt = (unsigned long *) (dynamic_info[DT_PLTGOT]); INIT_GOT(lpnt, tpnt); }; @@ -881,9 +880,9 @@ char *_dl_strdup(const char *string) return retval; } -void _dl_parse_dynamic_info(Elf32_Dyn *dpnt, unsigned long dynamic_info[], void *debug_addr) +void _dl_parse_dynamic_info(Elf32_Dyn *dpnt, unsigned long dynamic_info[], void *debug_addr, Elf32_Addr load_off) { - __dl_parse_dynamic_info(dpnt, dynamic_info, debug_addr); + __dl_parse_dynamic_info(dpnt, dynamic_info, debug_addr, load_off); } #ifdef __USE_GNU #if ! defined LIBDL || (! defined PIC && ! defined __PIC__) |