diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp index 070915a791d6055e1ebc29262c8bccfbb7f9d764..dcbb52e0cdd4aa24c09ed2a5a21084f1bcca7eac 100644 --- a/ld/testsuite/ld-elf/shared.exp +++ b/ld/testsuite/ld-elf/shared.exp @@ -327,9 +327,6 @@ set build_tests { {"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"} @@ -370,6 +367,17 @@ set build_tests { run_cc_link_tests $build_tests +set rdynamic_build_tests { + {"Build rdynamic-1" + "-rdynamic -Wl,--gc-sections" "-ffunction-sections" + {rdynamic-1.c} {{readelf {-s} rdynamic-1.rd}} "rdynamic-1"} +} + +# Only build them when -rdynamic is supported by compiler. +if [check_rdynamic_available] { + run_cc_link_tests $rdynamic_build_tests +} + set run_tests [list \ [list "Run normal with libfoo.so" \ "-Wl,--no-as-needed tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" "" \ diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp index 42cfe1c824f7f40249baf694295f9f8e501e543a..7fb7efb2bc1297aca8228ee94aefd5dd2eec7bcc 100644 --- a/ld/testsuite/lib/ld-lib.exp +++ b/ld/testsuite/lib/ld-lib.exp @@ -2210,3 +2210,36 @@ proc check_libdl_available { } { } return $libdl_available_saved } + +# Return true if compiler driver support -rdynamic. + +proc check_rdynamic_available { } { + global rdynamic_available_saved + global CC + + if {![info exists rdynamic_available_saved]} { + if { [which $CC] == 0 } { + set rdynamic_available_saved 0 + return 0 + } + + set basename "tmpdir/rdynamic_avail_test[pid]" + set src ${basename}.c + set output ${basename}.out + set f [open $src "w"] + # Sample test file. + puts $f "int main (void)" + puts $f "{" + puts $f " return 0; " + puts $f "}" + close $f + if [is_remote host] { + set src [remote_download host $src] + } + set rdynamic_available_saved [run_host_cmd_yesno "$CC" "$src -o $output -rdynamic"] + remote_file host delete $src + remote_file host delete $output + file delete $src + } + return $rdynamic_available_saved +}