RFC: Fix -Bsymbolic-functions for SPARC
Nick Clifton
nickc@redhat.com
Thu Oct 1 16:47:00 GMT 2015
Hi David,
The linker test that checks the -Bsymbolic-functions option is failing
for SPARC targets. The test fails because the linker creates an
R_SPARC_32 reloc against "fun" rather than a RELATIVE reloc or an ADDR
reloc against .text.
Tracing the problem back through the linker lead me to the code in
_bfd_sparc_elf_relocate_section where it checks to see if a reloc
should be preserved or converted. This then lead to the following
patch. It works for the linker test, but I am not familiar enough
with the SPARC API to know if there might be a problem with the
change.
The patch itself is simple enough - it replaces the "! is_plt" part of
the check with a test for PC relative relocs. This matches the
behaviour of the x86_64 version of the same function, but is it
correct for the SPARC ?
Cheers
Nick
diff --git a/bfd/elfxx-sparc.c b/bfd/elfxx-sparc.c
index db0d4f18..f85703e 100644
--- a/bfd/elfxx-sparc.c
+++ b/bfd/elfxx-sparc.c
@@ -3470,7 +3470,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd,
become local. */
else if (h != NULL &&
h->dynindx != -1
- && (! is_plt
+ && (_bfd_sparc_elf_howto_table[r_type].pc_relative
|| !bfd_link_pic (info)
|| !SYMBOLIC_BIND (info, h)
|| !h->def_regular))
More information about the Binutils
mailing list