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