_dl_elf_hash should use unsigned char
Joseph S. Myers
joseph at codesourcery.com
Mon Jan 8 23:05:27 UTC 2007
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.
Index: ldso/ldso/dl-hash.c
===================================================================
--- ldso/ldso/dl-hash.c (revision 17202)
+++ ldso/ldso/dl-hash.c (working copy)
@@ -57,7 +57,7 @@
/* 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 @@
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;
--
Joseph S. Myers
joseph at codesourcery.com
More information about the uClibc
mailing list