This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
PATCH: PR ld/12380: Assertion in linker script failed twice
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: binutils at sourceware dot org
- Date: Sun, 9 Jan 2011 10:06:12 -0800
- Subject: PATCH: PR ld/12380: Assertion in linker script failed twice
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
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;