This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[SPARC] PR ld/22832
- From: Eric Botcazou <ebotcazou at adacore dot com>
- To: binutils at sourceware dot org
- Date: Thu, 15 Feb 2018 16:04:02 +0100
- Subject: [SPARC] PR ld/22832
- Authentication-results: sourceware.org; auth=none
In my fix for PR ld/22727 on SPARC, I 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 miserably abort later in
elf_link_output_extsym. So the attached patch 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.
Tested on SPARC64/Linux, applied on mainline and 2.30 branch as obvious.
2018-02-15 Eric Botcazou <ebotcazou@adacore.com>
PR ld/22832
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.
--
Eric Botcazou
diff --git a/bfd/elfxx-sparc.c b/bfd/elfxx-sparc.c
index 83ead7570b..10c5acd104 100644
--- a/bfd/elfxx-sparc.c
+++ b/bfd/elfxx-sparc.c
@@ -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: