# Expect script for ld-version tests
-# Copyright (C) 1997-2020 Free Software Foundation, Inc.
+# Copyright (C) 1997-2021 Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
&& ![istarget i?86-*-elf*]
&& ![istarget i?86-*-linux*]
&& ![istarget i?86-*-gnu*]
- && ![istarget i?86-*-nacl*]
&& ![istarget ia64-*-elf*]
&& ![istarget ia64-*-linux*]
&& ![istarget m68k-*-linux*]
&& ![istarget alpha*-*-linux*]
&& ![istarget s390*-*-linux*]
&& ![istarget sh\[34\]*-*-linux*]
- && ![istarget x86_64-*-linux*]
- && ![istarget x86_64-*-nacl*] } {
- return
-}
-
-if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
+ && ![istarget x86_64-*-linux*] } {
return
}
verbose "# Diff'ing: $expectfile $tmpdir/objdump.out" 2
set eof -1
- set differences 0
+ set list_a {}
+ set list_b {}
while { [gets $file_a line] != $eof } {
if [regexp "^#.*$" $line] then {
set line_a [lindex $list_a $i]
set line_b [lindex $list_b $i]
-
verbose "\t$expectfile: $i: $line_a" 3
verbose "\t/tmp/objdump.out: $i: $line_b" 3
if [regexp $line_a $line_b] then {
verbose -log "Line count"
return 0
}
+ return 1
- if $differences<1 then {
- return 1
- }
-
- return 0
} else {
verbose -log "$exec_output"
return 0
}
-
}
#
verbose "# Diff'ing: $expectfile $tmpdir/objdump.out" 2
set eof -1
- set differences 0
+ set list_a {}
+ set list_b {}
while { [gets $file_a line] != $eof } {
if [regexp "^#.*$" $line] then {
}
close $file_b
- # Support empty files.
- if { ![info exists list_a] } then {
- if { ![info exists list_b] } then {
- return 1
- }
- verbose -log "\t$tmpdir/objdump.out: $list_b"
- return 0
- }
-
for { set i 0 } { $i < [llength $list_b] } { incr i } {
set line_b [lindex $list_b $i]
verbose -log "Line count"
return 0
}
+ return 1
- if $differences<1 then {
- return 1
- }
-
- return 0
} else {
verbose -log "$exec_output"
return 0
}
-
}
#
global CC
global CFLAGS
global script
+ global NOSANITIZE_CFLAGS
+ global NOLTO_CFLAGS
- if ![ld_compile "$CC -S $pic $CFLAGS" $srcdir/$subdir/$source $tmpdir/$libname.s] {
+ if ![ld_compile "$CC -S $pic $CFLAGS $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" $srcdir/$subdir/$source $tmpdir/$libname.s] {
unresolved "$test"
return
}
global shared
# Make sure that PLT is used since PLT is expected.
global PLT_CFLAGS
- build_binary $shared $PLT_CFLAGS $test $source $libname $other $mapfile $verexp $versymexp $symexp ""
+ build_binary "$shared -z notext" $PLT_CFLAGS $test $source $libname $other $mapfile $verexp $versymexp $symexp ""
}
proc build_vers_lib_pic { test source libname other mapfile verexp versymexp symexp } {
global as
global CC
global CFLAGS
+ global NOLTO_CFLAGS
- if ![ld_compile "$CC -S $flag $CFLAGS" $srcdir/$subdir/$source $tmpdir/$execname.s] {
+ if ![ld_compile "$CC -S $flag $CFLAGS $NOLTO_CFLAGS" $srcdir/$subdir/$source $tmpdir/$execname.s] {
unresolved "$test"
return
}
global tmpdir
global objdump
+ if {! [file exists $tmpdir/$srclib] } then {
+ fail "$test ($tmpdir/$srclib does not exist)"
+ return
+ }
verbose -log "cp $tmpdir/$srclib $tmpdir/$libname.so"
exec cp $tmpdir/$srclib $tmpdir/$libname.so
global objdump
global CC
global CFLAGS
+ global NOSANITIZE_CFLAGS
+ global NOLTO_CFLAGS
set shared "--shared --no-undefined-version"
set script --version-script
- if ![ld_compile "$CC -S $CFLAGS" $srcdir/$subdir/$source $tmpdir/$execname.s] {
+
+ # Disable LTO for these tests.
+ set cc_cmd "$CC -S $CFLAGS"
+ if {[check_lto_available]} {
+ append cc_cmd " -fno-lto"
+ }
+
+ # Disable all sanitizers and LTO.
+ append cc_cmd " $NOSANITIZE_CFLAGS $NOLTO_CFLAGS"
+
+ if ![ld_compile $cc_cmd $srcdir/$subdir/$source $tmpdir/$execname.s] {
unresolved "$test"
return
}
build_exec "vers19" vers19.c vers19 "-Wl,--no-as-needed,-rpath,.,-rpath-link,." vers18.so vers19.ver vers19.dsym ""
build_vers_lib_no_pic "vers20a" vers20.c vers20a "" vers20.map vers20a.ver vers20.dsym ""
-exec cp $tmpdir/vers20a.so $tmpdir/vers20b.so
-build_vers_lib_no_pic "vers20" vers20.c vers20 "vers20a.so vers20b.so" vers20.map vers20.ver vers20.dsym ""
+if {! [file exists $tmpdir/vers20a.so] } then {
+ fail "Building vers20a.so"
+} else {
+ exec cp $tmpdir/vers20a.so $tmpdir/vers20b.so
+ build_vers_lib_no_pic "vers20" vers20.c vers20 "vers20a.so vers20b.so" vers20.map vers20.ver vers20.dsym ""
+}
# Test .symver override.
build_vers_lib_pic "vers21" vers21.c vers21 "" vers21.map vers21.ver vers21.dsym vers21.sym
build_vers_lib_no_pic "vers27c1" vers27c.c vers27c1 "vers27b.o vers27a.so" "" vers27c.ver vers27c.dsym ""
build_vers_lib_no_pic "vers27c2" vers27c.c vers27c2 "vers27a.so vers27b.o" "" vers27c.ver vers27c.dsym ""
build_vers_lib_pic "vers27d1" vers27d1.c vers27d1 "" vers27a.map vers27d.ver vers27d.dsym vers27d.sym
- build_vers_lib_pic "vers27d2" vers27d2.c vers27d2 "" "" vers27b.ver vers27b.dsym ""
+ build_vers_lib_pic "vers27d2" vers27d2.c vers27d2 "" "" vers27b.ver vers27b.dsym ""
build_executable "vers27d3" vers27d3.c vers27d3 "vers27b.o vers27d2.so vers27d1.so" "" vers27b.ver vers27b.dsym ""
build_vers_lib_pic "vers27d4" vers27d2.c vers27d4 "vers27a.so" "" vers27d4.ver vers27d4.dsym ""
build_executable "vers27d5" vers27d3.c vers27d5 "vers27d4.so vers27b.o vers27a.so" "" vers27b.ver vers27b.dsym ""