From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nick Clifton To: binutils@sources.redhat.com Cc: Ian Lance Taylor Subject: elf_link_hash_entry vs generic_link_hash_entry Date: Wed, 22 Aug 2001 00:44:00 -0000 Message-id: References: X-SW-Source: 2001-08/msg00506.html Hi Guys, Ian Taylor has pointed out that my recent patch to elfxx-target.h has actually broken several elf based ports. (Specifically: pj, m88k, m68hc11, m68hc12, i960, d30v, arc, gen). The problem is that these ports uses the generic linker code to perform section relocation rather than having their own specific code. This breaks if the elf hash table structure (elf_link_hash_entry) is used instead of the generic_link_hash_entry structure, since the two structures are not compatable. The reason that my patch changed elfxx-target.h so that all elf backends would use elf_link_hash_entry is that several other parts of the elf linker rely upon using other fields which are only found in that structure. As I see there are three ways that we can fix this: 1. Require that all ELF backends define their own section relocation function and final link function. Make it a #error if they do not. Fix all the ports that currently do not do this. This is Ian's recommended solution. 2. Add the fields from generic_link_hash_entry to elf_link_hash_entry so that the generic functions can be used with the elf structure. This is my preferred solution, but as Ian points out, this will increase the size of the hash table and that is already a significant memory hog. 3. Go back to the old situation where elf ports that do not provide their own relocation backends use the generic linker hash table entry structure, but add code to the other elf routines to detect this and fail before they try to access fields in the hash structure that are not there. Any comments ? Cheers Nick