Add tests for PR ld/16452 and PR ld/16457
[platform/upstream/binutils.git] / ld / testsuite / ld-elf / shared.exp
index afc262c..219e721 100644 (file)
@@ -1,6 +1,5 @@
 # Expect script for various ELF tests.
-#   Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
-#   Free Software Foundation, Inc.
+#   Copyright (C) 2006-2014 Free Software Foundation, Inc.
 #
 # This file is part of the GNU Binutils.
 #
@@ -38,6 +37,11 @@ if { [which $CC] == 0 } {
     return
 }
 
+# Add -ldl to extralibs if needed
+if { ![istarget *-*-freebsd*]} {
+    set extralibs "-ldl"
+}
+
 set build_tests {
   {"Build libfoo.so"
    "-shared" "-fPIC"
@@ -218,12 +222,42 @@ set build_tests {
   {"Build needed2"
    "tmpdir/libneeded2c.o -Wl,--as-needed tmpdir/libneeded2a.so tmpdir/libneeded2b.so" ""
    {dummy.c} {} "needed2"}
+  {"Build libneeded3a.so"
+   "-shared -Wl,--no-add-needed" "-fPIC"
+   {needed1a.c} {} "libneeded3a.so"}
+  {"Build libneeded3b.so"
+   "-shared -Wl,--no-as-needed,--add-needed -Ltmpdir -lneeded1b" "-fPIC"
+   {dummy.c} {} "libneeded3b.so"}
+  {"Build needed3.o"
+   "-r -nostdlib" ""
+   {needed3.c} {} "libneeded3.so"}
+  {"Build needed3"
+   "tmpdir/needed3.o -Wl,--as-needed -Ltmpdir -lneeded3a -lneeded3b -lneeded1b" ""
+   {dummy.c} {} "needed3"}
   {"Build libpr2404a.so"
    "-shared" "-fPIC"
    {pr2404a.c} {} "libpr2404a.so"}
   {"Build libpr2404b.a"
    "" ""
    {pr2404b.c} {} "libpr2404b.a"}
+  {"Build rdynamic-1"
+   "-rdynamic -Wl,--gc-sections" "-ffunction-sections"
+   {rdynamic-1.c} {{readelf {-s} rdynamic-1.rd}} "rdynamic-1"}
+  {"Build dynamic-1"
+   "-Wl,--dynamic-list,dynamic-1.syms -Wl,--gc-sections" "-ffunction-sections"
+   {dynamic-1.c} {{readelf {-s} dynamic-1.rd}} "dynamic-1"}
+  {"Build libpr16452a.so"
+   "-shared -Wl,-soname,libpr16452a.so,--version-script=pr16452.map" "-fPIC"
+   {pr16452a.c} {} "libpr16452a.so"}
+  {"Build libpr16452b.so"
+   "-shared -Wl,-soname,libpr16452b.so,--no-as-needed tmpdir/libpr16452a.so" "-fPIC"
+   {dummy.c} {} "libpr16452b.so"}
+  {"Build pr16452"
+   "tmpdir/libpr16452b.so -Wl,-rpath=tmpdir" ""
+   {pr16452b.c} {{objdump {-p} pr16452.od}} "pr16452"}
+  {"Build pr16457"
+   "tmpdir/libpr16452b.so -Wl,-rpath=tmpdir" ""
+   {pr16452b.c} {{objdump {-p} pr16457.od}} "pr16457"}
 }
 
 run_cc_link_tests $build_tests
@@ -270,10 +304,10 @@ set run_tests {
      "tmpdir/libbarhfoov.so tmpdir/libfoov.so" ""
      {main.c} "hidden" "hidden.out"}
     {"Run dl1a with --dynamic-list=dl1.list and dlopen on libdl1.so"
-     "--dynamic-list=dl1.list -ldl" ""
+     "--dynamic-list=dl1.list $extralibs" ""
      {dl1main.c} "dl1a" "dl1.out"}
     {"Run dl1b with --dynamic-list-data and dlopen on libdl1.so"
-     "--dynamic-list-data -ldl" ""
+     "--dynamic-list-data $extralibs" ""
      {dl1main.c} "dl1b" "dl1.out"}
     {"Run with libdl2a.so"
      "tmpdir/libdl2a.so" ""
@@ -303,37 +337,37 @@ set run_tests {
      "tmpdir/libdl4f.so" ""
      {dl4main.c} "dl4f" "dl4a.out"}
     {"Run dl6a1 with --dynamic-list-data and dlopen on libdl6a.so"
-     "--dynamic-list-data -ldl" ""
+     "--dynamic-list-data $extralibs" ""
      {dl6amain.c} "dl6a1" "dl6a.out"}
     {"Run dl6a2 with -Bsymbolic-functions and dlopen on libdl6a.so"
-     "-Bsymbolic-functions -ldl" ""
+     "-Bsymbolic-functions $extralibs" ""
      {dl6amain.c} "dl6a2" "dl6b.out"}
     {"Run dl6a3 with -Bsymbolic and dlopen on libdl6a.so"
-     "-Bsymbolic -ldl" ""
+     "-Bsymbolic $extralibs" ""
      {dl6amain.c} "dl6a3" "dl6b.out"}
     {"Run dl6a4 with -Bsymbolic --dynamic-list-data and dlopen on libdl6a.so"
-     "-Bsymbolic --dynamic-list-data -ldl" ""
+     "-Bsymbolic --dynamic-list-data $extralibs" ""
      {dl6amain.c} "dl6a4" "dl6a.out"}
     {"Run dl6a5 with -Bsymbolic-functions --dynamic-list-cpp-new and dlopen on libdl6a.so"
-     "-Bsymbolic-functions --dynamic-list-cpp-new -ldl" ""
+     "-Bsymbolic-functions --dynamic-list-cpp-new $extralibs" ""
      {dl6amain.c} "dl6a5" "dl6b.out"}
     {"Run dl6a6 with --dynamic-list-cpp-new -Bsymbolic-functions and dlopen on libdl6a.so"
-     "--dynamic-list-cpp-new -Bsymbolic-functions -ldl" ""
+     "--dynamic-list-cpp-new -Bsymbolic-functions $extralibs" ""
      {dl6amain.c} "dl6a6" "dl6b.out"}
     {"Run dl6a7 with --dynamic-list-data -Bsymbolic and dlopen on libdl6a.so"
-     "--dynamic-list-data -Bsymbolic -ldl" ""
+     "--dynamic-list-data -Bsymbolic $extralibs" ""
      {dl6amain.c} "dl6a7" "dl6a.out"}
     {"Run dl6b1 with --dynamic-list-data and dlopen on libdl6b.so"
-     "--dynamic-list-data -ldl" ""
+     "--dynamic-list-data $extralibs" ""
      {dl6bmain.c} "dl6b1" "dl6a.out"}
     {"Run dl6b2 with dlopen on libdl6b.so"
-     "-ldl" ""
+     "$extralibs" ""
      {dl6bmain.c} "dl6b2" "dl6b.out"}
     {"Run dl6c1 with --dynamic-list-data and dlopen on libdl6c.so"
-     "--dynamic-list-data -ldl" ""
+     "--dynamic-list-data $extralibs" ""
      {dl6cmain.c} "dl6c1" "dl6b.out"}
     {"Run dl6d1 with --dynamic-list-data and dlopen on libdl6d.so"
-     "--dynamic-list-data -ldl" ""
+     "--dynamic-list-data $extralibs" ""
      {dl6dmain.c} "dl6d1" "dl6b.out"}
     {"Run with libdata1.so"
      "tmpdir/libdata1.so" ""
@@ -381,28 +415,28 @@ run_ld_link_exec_tests [list "*-*-netbsdelf*"] $run_tests
 
 # Check --no-add-needed and --no-copy-dt-needed-entries
 set testname "--no-add-needed"
-set exec_output [run_host_cmd "$CC" "$gcc_gas_flag $gcc_ld_flag tmpdir/libneeded1c.o -Wl,--no-add-needed,-rpath-link=tmpdir -Ltmpdir -lneeded1a"]
+set exec_output [run_host_cmd "$CC" "tmpdir/libneeded1c.o -Wl,--no-add-needed,-rpath-link=tmpdir -Ltmpdir -lneeded1a"]
 if { [ regexp "tmpdir/libneeded1b.so: .*: DSO missing" $exec_output ] } {
     pass $testname
 } {
     fail $testname
 }
 set testname "--no-copy-dt-needed-entries"
-set exec_output [run_host_cmd "$CC" "$gcc_gas_flag $gcc_ld_flag tmpdir/libneeded1c.o -Wl,--no-copy-dt-needed-entries,-rpath-link=tmpdir -Ltmpdir -lneeded1a"]
+set exec_output [run_host_cmd "$CC" "tmpdir/libneeded1c.o -Wl,--no-copy-dt-needed-entries,-rpath-link=tmpdir -Ltmpdir -lneeded1a"]
 if { [ regexp "tmpdir/libneeded1b.so: .*: DSO missing" $exec_output ] } {
     pass $testname
 } {
     fail $testname
 }
 set testname "--no-add-needed -shared"
-set exec_output [run_host_cmd "$CC" "$gcc_gas_flag $gcc_ld_flag -shared tmpdir/libneeded1pic.o -Wl,--no-add-needed,-z,defs -Ltmpdir -lneeded1a"]
+set exec_output [run_host_cmd "$CC" "-shared tmpdir/libneeded1pic.o -Wl,--no-add-needed,-z,defs -Ltmpdir -lneeded1a"]
 if { [ regexp "undefined reference to `bar'" $exec_output ] } {
     pass $testname
 } {
     fail $testname
 }
 set testname "--no-copy-dt-needed-entries -shared"
-set exec_output [run_host_cmd "$CC" "$gcc_gas_flag $gcc_ld_flag -shared tmpdir/libneeded1pic.o -Wl,--no-copy-dt-needed-entries,-z,defs -Ltmpdir -lneeded1a"]
+set exec_output [run_host_cmd "$CC" "-shared tmpdir/libneeded1pic.o -Wl,--no-copy-dt-needed-entries,-z,defs -Ltmpdir -lneeded1a"]
 if { [ regexp "undefined reference to `bar'" $exec_output ] } {
     pass $testname
 } {
@@ -453,3 +487,29 @@ set run_cxx_tests {
 
 run_cc_link_tests $build_cxx_tests
 run_ld_link_exec_tests [] $run_cxx_tests
+
+if { [istarget *-*-linux*]
+     || [istarget *-*-nacl*]
+     || [istarget *-*-gnu*] } {
+    run_cc_link_tests [list \
+       [list \
+           "Build libpr2404b.a with PIE" \
+           "" \
+           "-fPIE" \
+           { pr2404b.c } \
+           {} \
+           "libpr2404b.a" \
+       ] \
+    ]
+    run_ld_link_exec_tests [] [list \
+       [list \
+           "Run pr2404 with PIE" \
+           "-pie tmpdir/pr2404b.o tmpdir/libpr2404a.so" \
+           "" \
+           { dummy.c } \
+           "pr2404pie" \
+           "pr2404.out" \
+           "-fPIE" \
+       ] \
+    ]
+}