[SPARC] PR ld/22832

Message ID 3653815.qDaleWQDBq@polaris
State New
Headers show
  • [SPARC] PR ld/22832
Related show

Commit Message

Eric Botcazou Feb. 15, 2018, 3:04 p.m.
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
	* 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: