public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* Re: PR26978, Inconsistency for strong foo@v1 and weak foo@@v1
@ 2024-04-08  2:01 Alan Modra
  0 siblings, 0 replies; only message in thread
From: Alan Modra @ 2024-04-08  2:01 UTC (permalink / raw)
  To: binutils

Commit 726d7d1ecf opened a hole that allowed a u.i.link loop to be
created, resulting in _bfd_generic_link_add_one_symbol never
returning.  Fix that.  Note that the MIND case handles two types of
redefinition.  For a new indirect symbol we'll have string non-NULL.
For a new def, string will be NULL.  So moving the string comparison
earlier would work.  However, we've already looked up inh in the first
case so can dispense with name comparisons.  Either way, for a new def
we'll get to the defweak test and possibly cycle.  Which is what we
want here.

	PR 31615
	PR 26978
	* linker.c (_bfd_generic_link_add_one_symbol <MIND>): Test for
	exactly matching indirect symbols before cycling on a defweak.

diff --git a/bfd/linker.c b/bfd/linker.c
index eb42a78b622..111deecf55d 100644
--- a/bfd/linker.c
+++ b/bfd/linker.c
@@ -1678,6 +1678,8 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info,
 	case MIND:
 	  /* Multiple indirect symbols.  This is OK if they both point
 	     to the same symbol.  */
+	  if (h->u.i.link == inh)
+	    break;
 	  if (h->u.i.link->type == bfd_link_hash_defweak)
 	    {
 	      /* It is also OK to redefine a symbol that indirects to
@@ -1689,8 +1691,6 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info,
 	      cycle = true;
 	      break;
 	    }
-	  if (string != NULL && strcmp (h->u.i.link->root.string, string) == 0)
-	    break;
 	  /* Fall through.  */
 	case MDEF:
 	  /* Handle a multiple definition.  */

-- 
Alan Modra
Australia Development Lab, IBM

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-04-08  2:01 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-08  2:01 PR26978, Inconsistency for strong foo@v1 and weak foo@@v1 Alan Modra

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).