diff options
-rw-r--r-- | ld/ChangeLog | 5 | ||||
-rw-r--r-- | ld/ldlang.c | 2 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-pie/pie.exp | 11 | ||||
-rw-r--r-- | ld/testsuite/ld-pie/start.d | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-pie/start.s | 4 |
6 files changed, 35 insertions, 3 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index a0bc21c..2eefd16 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -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 diff --git a/ld/ldlang.c b/ld/ldlang.c index 9f62e9f..55d1043 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -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; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index f50755f..5a806ff 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -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 diff --git a/ld/testsuite/ld-pie/pie.exp b/ld/testsuite/ld-pie/pie.exp index 064d9cd..1f4effc 100644 --- a/ld/testsuite/ld-pie/pie.exp +++ b/ld/testsuite/ld-pie/pie.exp @@ -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 index 0000000..1ee22e0 --- /dev/null +++ b/ld/testsuite/ld-pie/start.d @@ -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 index 0000000..4a70181 --- /dev/null +++ b/ld/testsuite/ld-pie/start.s @@ -0,0 +1,4 @@ + .text + .globl foo +foo: + .byte 0 |