瀏覽代碼

Khem Raj <kraj@mvista.com> writes:
While compiling trunk on ARM with GCC 4.2 and enabling LDSO_GNU_HASH_SUPPORT I stumbled upon this problem.
GCC made a call to libgcc function __aeabi_uidivmod()->__div0()->__raise() and raise is not yet compiled in at the time of compiling ldso
so I got well known undefined symbol __raise problem

This patch uses the do_rem () macro to do the same operation.

Carmelo Amoroso 16 年之前
父節點
當前提交
da9b57abbc
共有 1 個文件被更改,包括 3 次插入2 次删除
  1. 3 2
      ldso/ldso/dl-hash.c

+ 3 - 2
ldso/ldso/dl-hash.c

@@ -204,11 +204,12 @@ _dl_lookup_gnu_hash(struct elf_resolve *tpnt, ElfW(Sym) *symtab, unsigned long h
 
 	unsigned int hashbit1 = hash & (__ELF_NATIVE_CLASS - 1);
 	unsigned int hashbit2 = ((hash >> tpnt->l_gnu_shift) & (__ELF_NATIVE_CLASS - 1));
-
+	unsigned long rem;
+	do_rem (rem, hash, tpnt->nbucket);
 	_dl_assert (bitmask != NULL);
 
 	if (unlikely((bitmask_word >> hashbit1) & (bitmask_word >> hashbit2) & 1)) {
-		Elf32_Word bucket = tpnt->l_gnu_buckets[hash % tpnt->nbucket];
+		Elf32_Word bucket = tpnt->l_gnu_buckets[rem];
 
 		if (bucket != 0) {
 			const Elf32_Word *hasharr = &tpnt->l_gnu_chain_zero[bucket];