PR12760 plugin vs. warning syms

Alan Modra amodra@gmail.com
Mon May 16 00:55:00 GMT 2011


I've committed this version of HJ's patch to fix the segfault caused
by having a NULL u.undef.abfd.  I think this should be done even
though it's not a full fix for warning symbols.

	PR ld/12760
	* plugin.c (plugin_notice): Set u.undef.abfd for symbols made
	undefweak.

Index: ld/plugin.c
===================================================================
RCS file: /cvs/src/src/ld/plugin.c,v
retrieving revision 1.33
diff -u -p -r1.33 plugin.c
--- ld/plugin.c	24 Apr 2011 10:02:14 -0000	1.33
+++ ld/plugin.c	15 May 2011 13:18:27 -0000
@@ -912,6 +912,8 @@ plugin_notice (struct bfd_link_info *inf
 {
   if (h != NULL)
     {
+      bfd *sym_bfd;
+
       /* No further processing if this def/ref is from an IR dummy BFD.  */
       if (is_ir_dummy_bfd (abfd))
 	return TRUE;
@@ -928,10 +930,13 @@ plugin_notice (struct bfd_link_info *inf
 	 to be undefined.  */
       else if (((h->type == bfd_link_hash_defweak
 		 || h->type == bfd_link_hash_defined)
-		&& is_ir_dummy_bfd (h->u.def.section->owner))
+		&& is_ir_dummy_bfd (sym_bfd = h->u.def.section->owner))
 	       || (h->type == bfd_link_hash_common
-		   && is_ir_dummy_bfd (h->u.c.p->section->owner)))
-	h->type = bfd_link_hash_undefweak;
+		   && is_ir_dummy_bfd (sym_bfd = h->u.c.p->section->owner)))
+	{
+	  h->type = bfd_link_hash_undefweak;
+	  h->u.undef.abfd = sym_bfd;
+	}
     }
 
   /* Continue with cref/nocrossref/trace-sym processing.  */

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Binutils mailing list