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-hash.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-hash.c')
-rw-r--r-- | ldso/ldso/dl-hash.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/ldso/ldso/dl-hash.c b/ldso/ldso/dl-hash.c index c10a5e837..863f8fb6e 100644 --- a/ldso/ldso/dl-hash.c +++ b/ldso/ldso/dl-hash.c @@ -57,7 +57,7 @@ struct dyn_elf *_dl_handles = NULL; /* This is the hash function that is used by the ELF linker to generate the * hash table that each executable and library is required to have. We need * it to decode the hash table. */ -unsigned long _dl_elf_hash(const unsigned char *name) +static inline unsigned long _dl_elf_hash(const unsigned char *name) { unsigned long hash = 0; unsigned long tmp; @@ -79,7 +79,7 @@ struct elf_resolve *_dl_check_hashed_files(const char *libname) for (tpnt = _dl_loaded_modules; tpnt; tpnt = tpnt->next) { if (_dl_strncmp(tpnt->libname, libname, len) == 0 && - (tpnt->libname[len] == '\0' || tpnt->libname[len] == '.')) + (tpnt->libname[len] == '\0' || tpnt->libname[len] == '.')) return tpnt; } @@ -119,7 +119,7 @@ struct elf_resolve *_dl_add_elf_hash_table(const char *libname, tpnt->libtype = loaded_file; if (dynamic_info[DT_HASH] != 0) { - hash_addr = (unsigned long *) (intptr_t)(dynamic_info[DT_HASH] + loadaddr); + hash_addr = (unsigned long *) (intptr_t)(dynamic_info[DT_HASH]); tpnt->nbucket = *hash_addr++; tpnt->nchain = *hash_addr++; tpnt->elf_buckets = hash_addr; @@ -172,8 +172,8 @@ char *_dl_find_hash(const char *name, struct dyn_elf *rpnt, struct elf_resolve * /* Avoid calling .urem here. */ do_rem(hn, elf_hash_number, tpnt->nbucket); - symtab = (Elf32_Sym *) (intptr_t) (tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr); - strtab = (char *) (tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); + symtab = (Elf32_Sym *) (intptr_t) (tpnt->dynamic_info[DT_SYMTAB]); + strtab = (char *) (tpnt->dynamic_info[DT_STRTAB]); for (si = tpnt->elf_buckets[hn]; si != STN_UNDEF; si = tpnt->chains[si]) { sym = &symtab[si]; |