2005-10-04 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 4 Oct 2005 19:54:08 +0000 (19:54 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 4 Oct 2005 19:54:08 +0000 (19:54 +0000)
PR ld/1396
* ld-scripts/cross3.t: New file.
* ld-scripts/cross4.c: Likewise.

* ld-scripts/crossref.exp: Add a new test for "ld -r".

ld/testsuite/ChangeLog
ld/testsuite/ld-scripts/cross3.t [new file with mode: 0644]
ld/testsuite/ld-scripts/cross4.c [new file with mode: 0644]
ld/testsuite/ld-scripts/crossref.exp

index 3fdfa9e8e165481ea9437a6202ca8850c430b221..684b7d3dd0f7d1222dbc5e1151f90458b6c28c86 100644 (file)
@@ -1,3 +1,11 @@
+2005-10-04  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/1396
+       * ld-scripts/cross3.t: New file.
+       * ld-scripts/cross4.c: Likewise.
+
+       * ld-scripts/crossref.exp: Add a new test for "ld -r".
+
 2005-09-30  H.J. Lu  <hongjiu.lu@intel.com>
 
        * ld-elf/sec64k.exp: Enabled for all ELF targets.
diff --git a/ld/testsuite/ld-scripts/cross3.t b/ld/testsuite/ld-scripts/cross3.t
new file mode 100644 (file)
index 0000000..5411b9b
--- /dev/null
@@ -0,0 +1,10 @@
+NOCROSSREFS(.nocrossrefs .text)
+
+SECTIONS
+{
+  .text : { *(.text) }
+  .nocrossrefs : { *(.nocrossrefs) }
+  .data : { *(.data) }
+  .bss : { *(.bss) *(COMMON) }
+  /DISCARD/ : { *(*) }
+}
diff --git a/ld/testsuite/ld-scripts/cross4.c b/ld/testsuite/ld-scripts/cross4.c
new file mode 100644 (file)
index 0000000..aef8dfd
--- /dev/null
@@ -0,0 +1,7 @@
+__attribute__ ((section (".nocrossrefs")))
+static void
+foo ()
+{
+}
+
+void (*dummy) () = foo;
index 7c5fcbe65f97f37113d7b22b872a2ca4146a0b88..686b327318fbd9bea40fe5b0fb525dc5da272fcf 100644 (file)
 
 set test1 "NOCROSSREFS 1"
 set test2 "NOCROSSREFS 2"
+set test3 "NOCROSSREFS 3"
 
 if { [which $CC] == 0 } {
     untested $test1
     untested $test2
+    untested $test3
     return
 }
 
@@ -94,3 +96,30 @@ if [string match "" $exec_output] then {
        fail $test2
     }
 }
+
+# Check cross references for ld -r
+
+if { ![ld_compile $CC "$srcdir/$subdir/cross4.c" tmpdir/cross4.o] } {
+    unresolved $test3
+    return
+}
+
+if ![ld_relocate $ld tmpdir/cross3-partial.o "tmpdir/cross1.o tmpdir/cross4.o"] {
+    unresolved $test3
+    return
+}
+
+verbose -log "$ld $flags -o tmpdir/cross3 -T $srcdir/$subdir/cross3.t tmpdir/cross3-partial.o tmpdir/cross2.o"
+
+catch "exec $ld $flags -o tmpdir/cross3 -T $srcdir/$subdir/cross3.t tmpdir/cross3-partial.o tmpdir/cross2.o" exec_output
+
+set exec_output [prune_warnings $exec_output]
+
+regsub -all "(^|\n)($ld: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output
+
+if [string match "" $exec_output] then {
+    pass $test3
+} else {
+    verbose -log "$exec_output"
+    fail $test3
+}