PATCH: PR ld/14170: ld: assertion fail bfd/linker.c:641
H.J. Lu
hongjiu.lu@intel.com
Sat May 26 14:59:00 GMT 2012
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
More information about the Binutils
mailing list