This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH: PR ld/12380: Assertion in linker script failed twice


Hi,

This patch avoids duplicated assert messages.  OK to install?

Thanks.


H.J.
----
2012-01-09  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/12380
	* ldexp.c (exp_fold_tree_1): Check and set issued for
	etree_assert.
	(exp_assert): Initalize issued to FALSE.

	* ldexp.h (etree_union): Add issued to assert_s.

diff --git a/ld/ldexp.c b/ld/ldexp.c
index 3261884..a5b8ad9 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -723,8 +723,13 @@ exp_fold_tree_1 (etree_type *tree)
 
     case etree_assert:
       exp_fold_tree_1 (tree->assert_s.child);
-      if (expld.phase == lang_final_phase_enum && !expld.result.value)
-	einfo ("%X%P: %s\n", tree->assert_s.message);
+      if (expld.phase == lang_final_phase_enum
+	  && !expld.result.value
+	  && !tree->assert_s.issued)
+	{
+	  einfo ("%X%P: %s\n", tree->assert_s.message);
+	  tree->assert_s.issued = TRUE;
+	}
       break;
 
     case etree_unary:
@@ -1009,6 +1014,7 @@ exp_assert (etree_type *exp, const char *message)
   n->assert_s.type.node_class = etree_assert;
   n->assert_s.child = exp;
   n->assert_s.message = message;
+  n->assert_s.issued = FALSE;
   return n;
 }
 
diff --git a/ld/ldexp.h b/ld/ldexp.h
index 31a06ac..74983bd 100644
--- a/ld/ldexp.h
+++ b/ld/ldexp.h
@@ -90,6 +90,7 @@ typedef union etree_union {
     node_type type;
     union etree_union *child;
     const char *message;
+    bfd_boolean issued;
   } assert_s;
 } etree_type;
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]