The dynamic linker can and does compute the kind of hash table ("sysv" or "gnu") present in the ELF, and works accordingly.
Unfortunately, you see that gnu hash section support was NOT ported to an earlier version of the dynamic linker used on your system.
A similar situation exists when binaries created for RHEL5 / FC6 do NOT work with RHEL4 / FC5 .
Why is .gnu.hash incompatible with .hash (sysv)?
Generating ELF using the gnu hash section imposes certain restrictions (additional rules) on the construction of a table of dynamic symbols.
Using the GNU hash, the dynamic symbol table is divided into two parts. The first part accepts characters that can be excluded from the hash table. GNU's anger does not impose any specific order for the characters in this part of the dynamic symbol table.
The second part of the dynamic symbol table accepts the characters available from the hash table. These characters must be sorted by increasing the (hash% nbuckets) value using the GNU hash function described above. The number of hash codes (nbuckets) is recorded in the hash section of the GNU file, described below. As a result, the characters that will be found in the same hash chain are contiguous in memory, which leads to increased cache performance.
Link: blogs.oracle.com/ali/entry/gnu_hash_elf_sections
source share