This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
PATCH: PR ld/14170: ld: assertion fail bfd/linker.c:641
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: binutils at sourceware dot org
- Date: Sat, 26 May 2012 07:59:37 -0700
- Subject: PATCH: PR ld/14170: ld: assertion fail bfd/linker.c:641
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
Hi,
We should use newdef to check new undefined symbol. In this case,
common symbol is treated as undefined. OK to install?
Thanks.
H.J.
----
bfd/
2012-05-26 H.J. Lu <hongjiu.lu@intel.com>
PR ld/14170
* elflink.c (_bfd_elf_merge_symbol): Use newdef to check new
undefined symbol.
ld/testsuite/
2012-05-26 H.J. Lu <hongjiu.lu@intel.com>
PR ld/14170
* ld-elf/elf.exp: Add a test for PR ld/14170.
* ld-elf/pr14170a.s: New file.
* ld-elf/pr14170b.s: Likewise.
* ld-elf/pr14170b.s: Likewise.
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 7f35e7f..adc0a67 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -1217,7 +1217,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
}
if ((h->root.u.undef.next || info->hash->undefs_tail == &h->root)
- && bfd_is_und_section (sec))
+ && !newdef)
{
/* If the new symbol is undefined and the old symbol was
also undefined before, we need to make sure
diff --git a/ld/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp
index eb909bc..f14498f 100644
--- a/ld/testsuite/ld-elf/elf.exp
+++ b/ld/testsuite/ld-elf/elf.exp
@@ -66,6 +66,14 @@ if { ![istarget hppa64*-hpux*] } {
#
# Only run the test on targets thats support creating shared libraries.
if { [check_shared_lib_support] } then {
+ run_ld_link_tests {
+ {"Build pr14170a.o" "" "" "pr14170a.s" {} "pr14170.a" }
+ {"Build shared library for pr14170"
+ "-shared" "" "pr14170b.s" {} "pr14170.so" }
+ {"PR ld/14170"
+ "tmpdir/pr14170a.o tmpdir/pr14170.so" "" "pr14170c.s"
+ { } "a.out" }
+ }
setup_xfail "tic6x-*-*"
run_ld_link_tests {
{"Build shared library for next test"
diff --git a/ld/testsuite/ld-elf/pr14170a.s b/ld/testsuite/ld-elf/pr14170a.s
new file mode 100644
index 0000000..6c01cae
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr14170a.s
@@ -0,0 +1,11 @@
+
+ .global start /* Used by SH targets. */
+start:
+ .global _start
+_start:
+ .global __start
+__start:
+ .global main /* Used by HPPA targets. */
+main:
+ .dc.a foo
+ .dc.a bar
diff --git a/ld/testsuite/ld-elf/pr14170b.s b/ld/testsuite/ld-elf/pr14170b.s
new file mode 100644
index 0000000..818f975
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr14170b.s
@@ -0,0 +1,11 @@
+ .data
+ .type foo,%object
+ .globl foo
+foo:
+ .dc.a 0
+ .size foo, . - foo
+ .type foo,%object
+ .globl bar
+bar:
+ .dc.a 0
+ .size bar, . - bar
diff --git a/ld/testsuite/ld-elf/pr14170c.s b/ld/testsuite/ld-elf/pr14170c.s
new file mode 100644
index 0000000..a47b67b
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr14170c.s
@@ -0,0 +1,2 @@
+ .hidden foo
+ .comm foo,4,4