diff options
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 9 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/shared.exp | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-plugin/lto.exp | 6 | ||||
-rw-r--r-- | ld/testsuite/lib/ld-lib.exp | 79 |
4 files changed, 84 insertions, 16 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index ee89792..8d49373 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2017-02-16 Andrew Burgess <andrew.burgess@embecosm.com> + + * testsuite/lib/ld-lib.exp (run_cc_link_tests): Add warning, + error, warning_output, and error_output actions. Remove separate + warnings parameter. + * testsuite/ld-elf/shared.exp (build_tests): Updated to use + 'warning' action. + * testsuite/ld-plugin/lto.exp (lto_link_tests): Likewise. + 2017-02-16 Alan Modra <amodra@gmail.com> * testsuite/ld-elf/check-ptr-eq.c (check_ptr_eq): Change params diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp index 2946262..9d5a9d9 100644 --- a/ld/testsuite/ld-elf/shared.exp +++ b/ld/testsuite/ld-elf/shared.exp @@ -103,8 +103,10 @@ set build_tests { {begin.c end.c} {} "libbar.so"} {"Build warn libbar.so" "-shared" "-fPIC" - {beginwarn.c end.c} {{readelf {-S --wide} libbarw.rd}} "libbarw.so" - "c" {^.*\): warning: function foo is deprecated$} } + {beginwarn.c end.c} + {{readelf {-S --wide} libbarw.rd} + {warning "^.*\\): warning: function foo is deprecated$"}} + "libbarw.so" "c"} {"Build hidden libbar.so" "-shared" "-fPIC" {begin.c endhidden.c} {} "libbarh.so"} diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp index c738895..80c084b 100644 --- a/ld/testsuite/ld-plugin/lto.exp +++ b/ld/testsuite/ld-plugin/lto.exp @@ -154,7 +154,8 @@ set lto_link_tests [list \ {pr12760b.c} {} "libpr12760.a"] \ [list "PR ld/12760" \ "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12760a.o -Wl,--start-group tmpdir/libpr12760.a -Wl,--end-group" "" \ - {dummy.c} {} "pr12760.exe" "c" "pr12760a.c:6: warning: Bad \\.?bar"] \ + {dummy.c} {{warning "pr12760a.c:6: warning: Bad \\.?bar"}} \ + "pr12760.exe" "c"] \ [list "Build libpr13183.a" \ "-T" "-flto -O2 $lto_fat" \ {pr13183a.c} {} "libpr13183.a"] \ @@ -205,7 +206,8 @@ set lto_link_tests [list \ {pr20267b.c} {} "libpr20267b.a"] \ [list "Build pr20321" \ "-flto -Wl,-plugin,$plug_so" "-flto" \ - {pr20321.c} {} "pr20321" "c" ".*: duplicated plugin"] \ + {pr20321.c} {{warning ".*: duplicated plugin"}} \ + "pr20321" "c"] \ ] if { [at_least_gcc_version 4 7] } { diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp index fece871..42cfe1c 100644 --- a/ld/testsuite/lib/ld-lib.exp +++ b/ld/testsuite/lib/ld-lib.exp @@ -1508,12 +1508,15 @@ proc run_ld_link_exec_tests { ldtests args } { # 4:action and options. # 5:name of output file # 6:language (optional) -# 7:linker warnings (optional) # # Actions: # objdump: Apply objdump options on result. Compare with regex (last arg). # nm: Apply nm options on result. Compare with regex (last arg). # readelf: Apply readelf options on result. Compare with regex (last arg). +# warning: Check linker output against regex (last arg). +# error: Like 'warning' but checking output in error case. +# warning_output: Check linker output against regex in a file (last arg). +# error_output: Like 'warning_output' but checking output in error case. # proc run_cc_link_tests { ldtests } { global nm @@ -1544,10 +1547,11 @@ proc run_cc_link_tests { ldtests } { set actions [lindex $testitem 4] set binfile tmpdir/[lindex $testitem 5] set lang [lindex $testitem 6] - set warnings [lindex $testitem 7] set objfiles {} set is_unresolved 0 set failed 0 + set check_ld(terminal) 0 + set check_ld(source) "" #verbose -log "testname is $testname" #verbose -log "ldflags is $ldflags" @@ -1556,7 +1560,37 @@ proc run_cc_link_tests { ldtests } { #verbose -log "actions is $actions" #verbose -log "binfile is $binfile" #verbose -log "lang is $lang" - #verbose -log "warnings is $warnings" + + foreach actionlist $actions { + set action [lindex $actionlist 0] + set progopts [lindex $actionlist 1] + + # Find actions related to error/warning processing. + switch -- $action { + error + { + set check_ld(source) "regexp" + set check_ld(regexp) $progopts + set check_ld(terminal) 1 + } + warning + { + set check_ld(source) "regexp" + set check_ld(regexp) $progopts + } + error_output + { + set check_ld(source) "file" + set check_ld(file) $progopts + set check_ld(terminal) 1 + } + warning_output + { + set check_ld(source) "file" + set check_ld(file) $progopts + } + } + } # Compile each file in the test. foreach src_file $src_files { @@ -1598,18 +1632,35 @@ proc run_cc_link_tests { ldtests } { set failed 1 } } else { - if { ![ld_link $cc_cmd $binfile "$board_cflags -L$srcdir/$subdir $ldflags $objfiles"] } { - set failed 1 - } + ld_link $cc_cmd $binfile "$board_cflags -L$srcdir/$subdir $ldflags $objfiles" + set ld_output "$exec_output" - # Check if exec_output is expected. - if { $warnings != "" } then { - verbose -log "returned with: <$exec_output>, expected: <$warnings>" - if { [regexp $warnings $exec_output] } then { - set failed 0 - } else { + if { $check_ld(source) == "regexp" } then { + # Match output against regexp argument. + verbose -log "returned with: <$ld_output>, expected: <$check_ld(regexp)>" + if { ![regexp $check_ld(regexp) $ld_output] } then { set failed 1 } + } elseif { $check_ld(source) == "file" } then { + # Match output against patterns in a file. + set_file_contents "tmpdir/ld.messages" "$ld_output" + verbose "ld.messages has '[file_contents tmpdir/ld.messages]'" + if { [regexp_diff "tmpdir/ld.messages" "$srcdir/$subdir/$check_ld(file)"] } then { + verbose "output is $ld_output" 2 + set failed 1 + } + } + + if { $check_ld(source) != "" } then { + if { $ld_output == "" } then { + verbose -log "Linker was expected to give error or warning" + set failed 1 + } + } else { + if { $ld_output != "" } then { + verbose -log "Unexpected linker warning or error" + set failed 1 + } } } @@ -1629,6 +1680,10 @@ proc run_cc_link_tests { ldtests } { { set dump_prog $nm } readelf { set dump_prog $READELF } + error {} + warning {} + error_output {} + warning_output {} default { perror "Unrecognized action $action" |