ld/
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 20 Mar 2009 17:39:04 +0000 (17:39 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 20 Mar 2009 17:39:04 +0000 (17:39 +0000)
2009-03-20  H.J. Lu  <hongjiu.lu@intel.com>

PR ld/9970
* ldlang.c (lang_end): Warn missing entry symbol for -pie.

ld/testsuite/

2009-03-20  H.J. Lu  <hongjiu.lu@intel.com>

PR ld/9970
* ld-pie/pie.exp: Use -fpie to compile.  Run *.d tests.

* ld-pie/start.d: New.
* ld-pie/start.s: Likewise.

ld/ChangeLog
ld/ldlang.c
ld/testsuite/ChangeLog
ld/testsuite/ld-pie/pie.exp
ld/testsuite/ld-pie/start.d [new file with mode: 0644]
ld/testsuite/ld-pie/start.s [new file with mode: 0644]

index a0bc21c25b48bdd946be3871e6a450ce89f1ddc3..2eefd162fb3d943301b38be071fa847508dab4fd 100644 (file)
@@ -1,3 +1,8 @@
+2009-03-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/9970
+       * ldlang.c (lang_end): Warn missing entry symbol for -pie.
+
 2009-03-19  Alan Modra  <amodra@bigpond.net.au>
 
        * emultempl/spuelf.em (spu_before_allocation): Report errors from
index 9f62e9f02cc75d76fa51803a5f1e4c0455ae13b0..55d1043a7003465a33db46c56d23848ef63a9fbb 100644 (file)
@@ -5417,7 +5417,7 @@ lang_end (void)
   bfd_boolean warn;
 
   if ((link_info.relocatable && !link_info.gc_sections)
-      || link_info.shared)
+      || (link_info.shared && !link_info.executable))
     warn = entry_from_cmdline;
   else
     warn = TRUE;
index f50755fc3b658e70a09bb12d0c7e61886f32ae5c..5a806ffac501e4805df4c56575503b90b273de5c 100644 (file)
@@ -1,3 +1,11 @@
+2009-03-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/9970
+       * ld-pie/pie.exp: Use -fpie to compile.  Run *.d tests.
+
+       * ld-pie/start.d: New.
+       * ld-pie/start.s: Likewise.
+
 2009-03-18  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/6766
index 064d9cd732c07c3f921308211f4e9fcba62fbc34..1f4effcbe7482e5479dffd076847310d601f49a4 100644 (file)
@@ -28,8 +28,8 @@ if { ![istarget *-*-linux*] } {
 }
 
 # Check if -pie is supported or not.
-send_log "$CC -pie $srcdir/$subdir/pie.c -o tmpdir/pie"
-catch "exec $CC -pie $srcdir/$subdir/pie.c -o tmpdir/pie" exec_output
+send_log "$CC -fpie -pie $srcdir/$subdir/pie.c -o tmpdir/pie"
+catch "exec $CC -fpie -pie $srcdir/$subdir/pie.c -o tmpdir/pie" exec_output
 send_log "$exec_output\n"
 if { ![string match "" $exec_output] } {
     return
@@ -41,3 +41,10 @@ set array_tests {
 }
 
 run_ld_link_exec_tests [] $array_tests
+
+set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
+foreach t $test_list {
+    # We need to strip the ".d", but can leave the dirname.
+    verbose [file rootname $t]
+    run_dump_test [file rootname $t]
+}
diff --git a/ld/testsuite/ld-pie/start.d b/ld/testsuite/ld-pie/start.d
new file mode 100644 (file)
index 0000000..1ee22e0
--- /dev/null
@@ -0,0 +1,8 @@
+#name: missing entry symbol
+#ld: -pie
+#warning: .*: warning: cannot find entry symbol .*
+#nm: -n
+
+#...
+[0-9a-f]+ T +foo
+#...
diff --git a/ld/testsuite/ld-pie/start.s b/ld/testsuite/ld-pie/start.s
new file mode 100644 (file)
index 0000000..4a70181
--- /dev/null
@@ -0,0 +1,4 @@
+       .text
+       .globl foo
+foo:
+       .byte 0