From 9855a12e730886e224de11964f36f359387f77c3 Mon Sep 17 00:00:00 2001 From: Joakim Tjernlund Date: Tue, 9 Jan 2007 22:30:16 +0000 Subject: Joseph S. Myers writes: ELF symbol names are arbitrary 0-terminated sequences of bytes, and the ELF hash function is defined in the ELF specification to use unsigned char. Thus uClibc's _dl_elf_hash, using plain char, breaks when char is signed and symbol names contain bytes with the high bit set, as with GCC's ucnid-* tests. This patch fixes this problem. --- ldso/ldso/dl-hash.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ldso/ldso/dl-hash.c') diff --git a/ldso/ldso/dl-hash.c b/ldso/ldso/dl-hash.c index 4fd7ba0b7..f44d0ec89 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. */ -static inline Elf_Symndx _dl_elf_hash(const char *name) +static inline Elf_Symndx _dl_elf_hash(const unsigned char *name) { unsigned long hash=0; unsigned long tmp; @@ -138,7 +138,7 @@ char *_dl_find_hash(const char *name, struct dyn_elf *rpnt, struct elf_resolve * const ElfW(Sym) *sym; char *weak_result = NULL; - elf_hash_number = _dl_elf_hash(name); + elf_hash_number = _dl_elf_hash((const unsigned char *)name); for (; rpnt; rpnt = rpnt->next) { tpnt = rpnt->dyn; -- cgit v1.2.3