binutils-gdb/ld/testsuite/ld-elf/compress.exp
Sandra Loosemore 44ed80923a Use better test for usable compiler in ld testsuite.
The ld testsuite includes numerous tests that depend on being able to
compile and link programs with the C compiler.  Some of these tests
use [which $CC] to check for the presence of the compiler before
proceeding with the test, but run_ld_link_exec_tests and run_cc_link_tests
give ERRORs if compilation fails.  Also, even if $CC is defined and present,
it may not be usable due to missing libraries, etc.

This patch adds a new procedure check_compiler_available that attempts
to build an empty program and caches the result.  Uses of [which $CC]
are replaced with calls to this procedure, and run_ld_link_exec_tests
and run_cc_link_tests now also guard attempts to use $CC.

2019-04-24  Sandra Loosemore  <sandra@codesourcery.com>

	ld/
	* testsuite/config/default.exp: Use [check_compiler_available]
	instead of [which $CC].
	* testsuite/ld-auto-import/auto-import.exp: Likewise.
	* testsuite/ld-cygwin/exe-export.exp: Likewise.
	* testsuite/ld-elf/audit.exp: Likewise.
	* testsuite/ld-elf/compress.exp: Likewise.
	* testsuite/ld-elf/dwarf.exp: Likewise.
	* testsuite/ld-elf/elf.exp: Likewise.
	* testsuite/ld-elf/indirect.exp: Likewise.
	* testsuite/ld-elf/linux-x86.exp: Likewise.
	* testsuite/ld-elf/shared.exp: Likewise.
	* testsuite/ld-elf/tls.exp: Likewise.
	* testsuite/ld-elf/wrap.exp: Likewise.
	* testsuite/ld-elfcomm/elfcomm.exp: Likewise.
	* testsuite/ld-elfvers/vers.exp: Likewise.
	* testsuite/ld-elfvsb/elfvsb.exp: Likewise.
	* testsuite/ld-elfweak/elfweak.exp: Likewise.
	* testsuite/ld-gc/gc.exp: Likewise.
	* testsuite/ld-i386/i386.exp: Likewise.
	* testsuite/ld-i386/no-plt.exp: Likewise.
	* testsuite/ld-i386/tls.exp: Likewise.
	* testsuite/ld-ifunc/ifunc.exp: Likewise.
	* testsuite/ld-mn10300/mn10300.exp: Likewise.
	* testsuite/ld-pe/pe-compile.exp: Likewise.
	* testsuite/ld-pe/pe-run.exp: Likewise.
	* testsuite/ld-pe/pe-run2.exp: Likewise.
	* testsuite/ld-pie/pie.exp: Likewise.
	* testsuite/ld-plugin/lto.exp: Likewise.
	* testsuite/ld-plugin/plugin.exp: Likewise.
	* testsuite/ld-scripts/crossref.exp: Likewise.
	* testsuite/ld-sh/sh.exp: Likewise.
	* testsuite/ld-shared/shared.exp: Likewise.
	* testsuite/ld-size/size.exp: Likewise.
	* testsuite/ld-srec/srec.exp: Likewise.
	* testsuite/ld-undefined/undefined.exp: Likewise.
	* testsuite/ld-unique/unique.exp: Likewise.
	* testsuite/ld-x86-64/mpx.exp: Likewise.
	* testsuite/ld-x86-64/no-plt.exp: Likewise.
	* testsuite/ld-x86-64/tls.exp: Likewise.
	* testsuite/ld-x86-64/x86-64.exp: Likewise.
	* testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Call
	check_compiler_available before trying to use the compiler.
	(run_cc_link_tests): Likewise.
	(check_compiler_available): New.  Use it instead of [which $CC].
2019-04-24 12:14:56 -07:00

260 lines
10 KiB
Plaintext

# Expect script for ELF compressed debug section tests.
# Copyright (C) 2010-2019 Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
#
# Exclude non-ELF targets.
if ![is_elf_format] {
return
}
# Skip targets where -shared is not supported
if ![check_shared_lib_support] {
return
}
# Check if compiler works
if { ![check_compiler_available] } {
return
}
global as
if { ![ld_assemble $as "--compress-debug-sections $srcdir/$subdir/empty.s" tmpdir/empty.o ] } {
fail "linker compressed debug sections"
}
if { ![ld_assemble $as "--compress-debug-sections=zlib-gabi $srcdir/$subdir/empty.s" tmpdir/emptyzlib.o ] } {
fail "linker compressed debug sections"
}
set build_tests {
{"Build libfoo.so with compressed debug sections"
"-shared" "-fPIC -ggdb3 -Wa,--compress-debug-sections"
{foo.c} {} "libfoo.so"}
{"Build libbar.so with compressed debug sections"
"-shared -Wl,--compress-debug-sections=none"
"-fPIC -ggdb3 -Wa,--compress-debug-sections"
{begin.c end.c} {} "libbar.so"}
{"Build libfoozlib.so with compressed debug sections with zlib-gabi"
"-shared" "-fPIC -ggdb3 -Wa,--compress-debug-sections=zlib-gabi"
{foo.c} {} "libfoozlib.so"}
{"Build libbarzlib.so with compressed debug sections with zlib-gabi"
"-shared" "-fPIC -ggdb3 -Wa,--compress-debug-sections=zlib-gabi"
{begin.c end.c} {} "libbarzlib.so"}
{"Build libzlibfoo.so with zlib compressed debug sections"
"-shared -Wl,--compress-debug-sections=zlib"
"-fPIC -ggdb3 -Wa,--compress-debug-sections=zlib"
{foo.c} {} "libzlibfoo.so"}
{"Build libgnufoo.so with zlib-gnu compressed debug sections"
"-shared -Wl,--compress-debug-sections=zlib-gnu"
"-fPIC -ggdb3 -Wa,--compress-debug-sections=zlib-gnu"
{foo.c} {} "libgnufoo.so"}
{"Build libgabifoo.so with zlib-gabi compressed debug sections"
"-shared -Wl,--compress-debug-sections=zlib-gabi"
"-fPIC -ggdb3 -Wa,--compress-debug-sections=zlib-gabi"
{foo.c} {} "libgabifoo.so"}
{"Build zlibbegin.o with zlib compressed debug sections"
"-r -nostdlib -Wl,--compress-debug-sections=zlib"
"-ggdb3 -Wa,--compress-debug-sections=zlib"
{begin.c} {} "zlibbegin.o"}
{"Build gnubegin.o with zlib-gnu compressed debug sections"
"-r -nostdlib -Wl,--compress-debug-sections=zlib-gnu"
"-ggdb3 -Wa,--compress-debug-sections=zlib-gnu"
{begin.c} {} "gnubegin.o"}
{"Build gabiend.o with zlib-gabi compressed debug sections"
"-r -nostdlib -Wl,--compress-debug-sections=zlib-gabi"
"-ggdb3 -Wa,--compress-debug-sections=zlib-gnu"
{end.c} {} "gabiend.o"}
}
set run_tests {
{"Run normal with libfoo.so with compressed debug sections"
"tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" ""
{main.c} "normal" "normal.out" "-Wa,--compress-debug-sections"}
{"Run normal with libfoozlib.so with compressed debug sections with zlib-gabi"
"tmpdir/begin.o tmpdir/libfoozlib.so tmpdir/end.o" ""
{main.c} "normal" "normal.out" "-Wa,--compress-debug-sections=zlib-gabi"}
{"Run zlibnormal with libzlibfoo.so with zlib compressed debug sections"
"tmpdir/begin.o tmpdir/libzlibfoo.so tmpdir/end.o -Wl,--compress-debug-sections=zlib" ""
{main.c} "zlibnormal" "normal.out" "-Wa,--compress-debug-sections=zlib"}
{"Run zlibnormal with libfoozlib.so with zlib compressed debug sections"
"tmpdir/begin.o tmpdir/libfoozlib.so tmpdir/end.o -Wl,--compress-debug-sections=zlib" ""
{main.c} "zlibnormal" "normal.out" "-Wa,--compress-debug-sections=zlib"}
{"Run gnunormal with libgnufoo.so with zlib-gnu compressed debug sections"
"tmpdir/gnubegin.o tmpdir/libgnufoo.so tmpdir/end.o -Wl,--compress-debug-sections=zlib-gnu" ""
{main.c} "gnunormal" "normal.out" "-Wa,--compress-debug-sections=zlib-gnu"}
{"Run gnunormal with libfoozlib.so with zlib-gnu compressed debug sections"
"tmpdir/gnubegin.o tmpdir/libfoozlib.so tmpdir/end.o -Wl,--compress-debug-sections=zlib-gnu" ""
{main.c} "gnunormal" "normal.out" "-Wa,--compress-debug-sections=zlib-gnu"}
{"Run gabinormal with libgabifoo.so with zlib-gabi compressed debug sections"
"tmpdir/zlibbegin.o tmpdir/libgabifoo.so tmpdir/gabiend.o -Wl,--compress-debug-sections=zlib-gabi" ""
{main.c} "gabinormal" "normal.out" "-Wa,--compress-debug-sections=zlib-gabi"}
{"Run gabinormal with libfoozlib.so with zlib-gabi compressed debug sections"
"tmpdir/zlibbegin.o tmpdir/libfoozlib.so tmpdir/gabiend.o -Wl,--compress-debug-sections=zlib-gabi" ""
{main.c} "gabinormal" "normal.out" "-Wa,--compress-debug-sections=zlib-gabi"}
}
run_cc_link_tests $build_tests
run_ld_link_exec_tests $run_tests
set test_name "Link with zlib-gabi compressed debug input"
send_log "cmp tmpdir/libfoo.so tmpdir/libfoozlib.so\n"
if { [catch {exec cmp tmpdir/libfoo.so tmpdir/libfoozlib.so}] } then {
send_log "tmpdir/libfoo.so tmpdir/libfoozlib.so differ.\n"
fail "$test_name"
} else {
pass "$test_name"
}
global READELF
set test_name "Link -r with zlib compressed debug output"
set test zlibbegin
send_log "$READELF -S -W tmpdir/$test.o > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -S -W tmpdir/$test.o" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
send_log "$got\n"
unresolved "$test_name"
}
if { [regexp_diff tmpdir/$test.out $srcdir/$subdir/$test.rS] } then {
fail "$test_name"
} else {
pass "$test_name"
}
set test_name "Link -r with zlib-gnu compressed debug output"
set test gnubegin
send_log "$READELF -S -W tmpdir/$test.o > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -S -W tmpdir/$test.o" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
send_log "$got\n"
unresolved "$test_name"
}
if { [regexp_diff tmpdir/$test.out $srcdir/$subdir/$test.rS] } then {
fail "$test_name"
} else {
pass "$test_name"
}
set test_name "Link -r with zlib-gabi compressed debug output"
set test gabiend
send_log "$READELF -t -W tmpdir/$test.o > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -t -W tmpdir/$test.o" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
send_log "$got\n"
unresolved "$test_name"
}
if { [regexp_diff tmpdir/$test.out $srcdir/$subdir/$test.rt] } then {
fail "$test_name"
} else {
pass "$test_name"
}
set test_name "Link with zlib compressed debug output 1"
set test normal
send_log "$READELF -w tmpdir/$test > tmpdir/$test.out\n"
set got [remote_exec host [concat sh -c [list "$READELF -w tmpdir/$test > tmpdir/$test.out"]] "" "/dev/null"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
send_log "$got\n"
unresolved "$test_name"
}
set test_name "Link with zlib compressed debug output 2"
set test zlibnormal
send_log "$READELF -w tmpdir/$test | sed -e \"s/.zdebug_/.debug_/\" > tmpdir/$test.out\n"
set got [remote_exec host [concat sh -c [list "$READELF -w tmpdir/$test | sed -e \"s/.zdebug_/.debug_/\" > tmpdir/$test.out"]] "" "/dev/null"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
send_log "$got\n"
unresolved "$test_name"
}
if { [catch {exec cmp tmpdir/normal.out tmpdir/$test.out}] } then {
send_log "tmpdir/normal.out tmpdir/$test.out differ.\n"
fail "$test_name"
} else {
pass "$test_name"
}
set test_name "Link with zlib compressed debug output 3"
send_log "$READELF -S -W tmpdir/$test' > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -S -W tmpdir/$test" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
send_log "$got\n"
unresolved "$test_name"
}
if { [regexp_diff tmpdir/$test.out $srcdir/$subdir/$test.rS] } then {
fail "$test_name"
} else {
pass "$test_name"
}
set test_name "Link with zlib-gnu compressed debug output 1"
set test gnunormal
send_log "$READELF -w tmpdir/$test | sed -e \"s/.zdebug_/.debug_/\" > tmpdir/$test.out\n"
set got [remote_exec host [concat sh -c [list "$READELF -w tmpdir/$test | sed -e \"s/.zdebug_/.debug_/\" > tmpdir/$test.out"]] "" "/dev/null"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
send_log "$got\n"
unresolved "$test_name"
}
if { [catch {exec cmp tmpdir/normal.out tmpdir/$test.out}] } then {
send_log "tmpdir/normal.out tmpdir/$test.out differ.\n"
fail "$test_name"
} else {
pass "$test_name"
}
set test_name "Link with zlib-gnu compressed debug output 2"
send_log "$READELF -S -W tmpdir/$test' > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -S -W tmpdir/$test" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
send_log "$got\n"
unresolved "$test_name"
}
if { [regexp_diff tmpdir/$test.out $srcdir/$subdir/$test.rS] } then {
fail "$test_name"
} else {
pass "$test_name"
}
set test gabinormal
set test_name "Link with zlib-gabi compressed debug output 1"
send_log "$READELF -w tmpdir/$test > tmpdir/$test.out\n"
set got [remote_exec host [concat sh -c [list "$READELF -w tmpdir/$test > tmpdir/$test.out"]] "" "/dev/null"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
send_log "$got\n"
unresolved "$test_name"
}
if { [catch {exec cmp tmpdir/normal.out tmpdir/$test.out}] } then {
send_log "tmpdir/normal.out tmpdir/$test.out differ.\n"
fail "$test_name"
} else {
pass "$test_name"
}
set test_name "Link with zlib-gabi compressed debug output 2"
send_log "$READELF -t -W tmpdir/$test > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -t -W tmpdir/$test" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
send_log "$got\n"
unresolved "$test_name"
}
if { [regexp_diff tmpdir/$test.out $srcdir/$subdir/$test.rt] } then {
fail "$test_name"
} else {
pass "$test_name"
}