PR ld/22832 on SPARC.
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Thu, 15 Feb 2018 14:55:11 +0000 (15:55 +0100)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Thu, 15 Feb 2018 14:57:50 +0000 (15:57 +0100)
The fix for PR ld/22727 on SPARC passed TRUE as the 'create' argument
in the call to bfd_link_hash_lookup.  It turns out this was a bad idea
because, if the symbol is created at this point, the link will abort
later in elf_link_output_extsym.  This changes the TRUE into a FALSE
and puts an assertion on the result of the call, making it easier to
debug the issue; that's exactly in keeping with what Gold does.

bfd/
* elfxx-sparc.c (_bfd_sparc_elf_check_relocs) <R_SPARC_TLS_GD_CALL>:
Pass FALSE instead of TRUE as 'create' argument to bfd_link_hash_lookup
and assert that the result of the call is not NULL.

bfd/ChangeLog
bfd/elfxx-sparc.c

index 78cb5def94f481bdd8eb22f61af7b24897e24866..aa1416936097f830d268bd89b7ae39ba1e20516b 100644 (file)
@@ -1,3 +1,10 @@
+2018-02-15  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR ld/22832
+       * elfxx-sparc.c (_bfd_sparc_elf_check_relocs) <R_SPARC_TLS_GD_CALL>:
+       Pass FALSE instead of TRUE as 'create' argument to bfd_link_hash_lookup
+       and assert that the result of the call is not NULL.
+
 2018-02-14  Nick Clifton  <nickc@redhat.com>
 
        PR 22823
index 83ead7570b3495fd11f418a7205d71e1442743c5..10c5acd104536cf5457a48d61c03faea996e5cbb 100644 (file)
@@ -1604,8 +1604,9 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 
          /* Essentially R_SPARC_WPLT30 relocs against __tls_get_addr.  */
          h = (struct elf_link_hash_entry *)
-              bfd_link_hash_lookup (info->hash, "__tls_get_addr", TRUE,
+              bfd_link_hash_lookup (info->hash, "__tls_get_addr", FALSE,
                                     FALSE, TRUE);
+         BFD_ASSERT (h != NULL);
          /* Fall through */
 
        case R_SPARC_WPLT30: