From 2711bc5895accc67e27232d9b75fc12c7994837f Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Tue, 19 Aug 2003 13:11:09 +0000 Subject: 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. --- ldso/ldso/dl-hash.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'ldso/ldso/dl-hash.c') 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; -- cgit v1.2.3