summaryrefslogtreecommitdiff
path: root/ldso/ldso/dl-hash.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2003-08-19 13:11:09 +0000
committerEric Andersen <andersen@codepoet.org>2003-08-19 13:11:09 +0000
commit2711bc5895accc67e27232d9b75fc12c7994837f (patch)
tree945cf31c093b07bbdc09222c405297b7951336d1 /ldso/ldso/dl-hash.c
parentbca6a155c79147f706242ed7c590a3538e407a40 (diff)
Cool. Found most of the problem. Turns out we were inadvertanly loading some
libraries multiple times, wasting memory and causing different libraries to use different symbol sets, some of which were not properly resolved. Continue scrubbing ld.so and converting it to use proper types.
Diffstat (limited to 'ldso/ldso/dl-hash.c')
-rw-r--r--ldso/ldso/dl-hash.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/ldso/ldso/dl-hash.c b/ldso/ldso/dl-hash.c
index bd7ac7708..1eb7c5dd9 100644
--- a/ldso/ldso/dl-hash.c
+++ b/ldso/ldso/dl-hash.c
@@ -123,7 +123,7 @@ struct elf_resolve *_dl_add_elf_hash_table(const char *libname,
tpnt->next = NULL;
tpnt->init_flag = 0;
tpnt->libname = _dl_strdup(libname);
- tpnt->dynamic_addr = dynamic_addr;
+ tpnt->dynamic_addr = (ElfW(Dyn) *)dynamic_addr;
tpnt->dynamic_size = dynamic_size;
tpnt->libtype = loaded_file;
@@ -135,7 +135,7 @@ struct elf_resolve *_dl_add_elf_hash_table(const char *libname,
hash_addr += tpnt->nbucket;
tpnt->chains = hash_addr;
}
- tpnt->loadaddr = loadaddr;
+ tpnt->loadaddr = (ElfW(Addr))loadaddr;
for (i = 0; i < 24; i++)
tpnt->dynamic_info[i] = dynamic_info[i];
#ifdef __mips__
@@ -285,15 +285,14 @@ char *_dl_find_hash(const char *name, struct dyn_elf *rpnt1,
ELF32_ST_TYPE(symtab[si].st_info)
== STT_NOTYPE)
{ /* nakao */
- data_result = tpnt->loadaddr +
+ data_result = (char *)tpnt->loadaddr +
symtab[si].st_value; /* nakao */
break; /* nakao */
} else /* nakao */
- return tpnt->loadaddr + symtab[si].st_value;
+ return (char*)tpnt->loadaddr + symtab[si].st_value;
case STB_WEAK:
if (!weak_result)
- weak_result =
- tpnt->loadaddr + symtab[si].st_value;
+ weak_result = (char *)tpnt->loadaddr + symtab[si].st_value;
break;
default: /* Do local symbols need to be examined? */
break;