binutils-gdb/ld/testsuite/ld-i386/i386.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

1532 lines
41 KiB
Plaintext

# Expect script for ld-i386 tests
# Copyright (C) 2002-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.
#
global ASFLAGS
set saved_ASFLAGS "$ASFLAGS"
if { [is_elf_format] \
&& ([istarget "i?86-*-*"] || [istarget "x86_64-*-*"]) } {
set ASFLAGS "$ASFLAGS -mx86-used-note=no"
}
# Test i386 linking; all types of relocs. This tests the assembler and
# tools like objdump as well as the linker.
if {[istarget "i?86-*-vxworks"]} {
set i386tests {
{"VxWorks shared library test 1"
"-shared -Tvxworks1.ld --hash-style=sysv" ""
"" {vxworks1-lib.s}
{{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
{readelf --symbols vxworks1-lib.nd} {readelf -d vxworks1-lib.td}}
"libvxworks1.so"}
{"VxWorks executable test 1 (dynamic)" \
"tmpdir/libvxworks1.so -Tvxworks1.ld --hash-style=sysv -q --force-dynamic" ""
"" {vxworks1.s}
{{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
"vxworks1"}
{"VxWorks executable test 2 (dynamic)" \
"-Tvxworks1.ld --hash-style=sysv -q --force-dynamic" ""
"" {vxworks2.s}
{{readelf --segments vxworks2.sd}}
"vxworks2"}
{"VxWorks executable test 2 (static)"
"-Tvxworks1.ld --hash-style=sysv" ""
"" {vxworks2.s}
{{readelf --segments vxworks2-static.sd}}
"vxworks2"}
}
run_ld_link_tests $i386tests
run_dump_test "vxworks1-static"
}
if [istarget "*-*-go32*"] {
run_ld_link_tests {{"go32 stub" "" "" "" {zero.s} {} "go32stub"}}
set src "tmpdir/go32stub"
set dest "tmpdir/go32stub-copy"
set test "go32 stub patch the source"
set fi [open $src r+]
fconfigure $fi -translation binary
if {[read $fi 2] != "MZ"} {
fail $test
} else {
pass $test
seek $fi 0x40
puts -nonewline $fi "objcopy-test-go32stub"
}
close $fi
set test "go32 stub objcopy"
set status [remote_exec build $OBJCOPY "$OBJCOPYFLAGS $src $dest"]
set exec_output [lindex $status 1]
set exec_output [prune_warnings $exec_output]
if [string match "" $exec_output] then {
pass $test
} else {
send_log "$exec_output\n"
verbose "$exec_output" 1
fail $test
}
# cmp would compare the whole files and some data after the initial exe
# stub could differ.
set test "go32 stub comparison after objcopy"
set fi [open $src]
fconfigure $fi -translation binary
set src_stub [read $fi 2048]
close $fi
set fi [open $dest]
fconfigure $fi -translation binary
set dest_stub [read $fi 2048]
close $fi
if {$src_stub == $dest_stub} {
pass $test
} else {
fail $test
}
}
if { !([istarget "i?86-*-elf*"]
|| [istarget "i?86-*-linux*"]
|| [istarget "i?86-*-gnu*"]
|| [istarget "i?86-*-nacl*"]
|| [istarget "x86_64-*-elf*"]
|| [istarget "x86_64-*-nacl*"]
|| [istarget "x86_64-*-linux*"]
|| [istarget "amd64-*-linux*"]) } {
return
}
# List contains test-items with 3 items followed by 2 lists:
# 0:name 1:ld early options 2:ld late options 3:assembler options
# 4:filenames of assembler files 5: action and options. 6: name of output file
# 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).
set i386tests {
{"Helper shared library (basic PLT test)"
"-shared -melf_i386" "" "--32" {pltlib.s} {} "libpltlib.so"}
{"basic PLT generation (non-PIC)"
"-melf_i386 tmpdir/libpltlib.so" "" "--32" {plt.s}
{{objdump -drj.plt plt.pd}} "plt"}
{"basic PLT generation (PIC)"
"-shared -melf_i386 tmpdir/libpltlib.so" "" "--32" {plt-pic.s}
{{objdump -drj.plt plt-pic.pd}} "libplt-pic.so"}
{"TLS -fpic -shared transitions"
"-shared -melf_i386 --no-ld-generated-unwind-info \
-z noseparate-code --hash-style=sysv" ""
"--32" {tlspic1.s tlspic2.s}
{{readelf -Ssrl tlspic.rd} {objdump -drj.text tlspic.dd}
{objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
"libtlspic.so"}
{"TLS -fpic -shared transitions without PLT"
"-shared -melf_i386 --no-ld-generated-unwind-info \
-z noseparate-code --hash-style=sysv" ""
"-mrelax-relocations=yes --32"
{tlspic3.s tlspic2.s}
{{readelf -Ssrl tlspic2.rd} {objdump -drj.text tlspic2.dd}
{objdump -sj.got tlspic2.sd} {objdump -sj.tdata tlspic2.td}}
"libtlspic2.so"}
{"TLS descriptor -fpic -shared transitions"
"-shared -melf_i386 --no-ld-generated-unwind-info \
-z noseparate-code --hash-style=sysv" ""
"--32" {tlsdesc.s tlspic2.s}
{{readelf -Ssrl tlsdesc.rd} {objdump -drj.text tlsdesc.dd}
{objdump "-s -j.got -j.got.plt" tlsdesc.sd} {objdump -sj.tdata tlsdesc.td}}
"libtlsdesc.so"}
{"Helper shared library" "-shared -melf_i386" ""
"--32" {tlslib.s} {} "libtlslib.so"}
{"TLS -fpic and -fno-pic exec transitions"
"-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info \
-z noseparate-code --hash-style=sysv" ""
"--32" {tlsbinpic.s tlsbin.s}
{{readelf -Ssrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
{objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
"tlsbin"}
{"TLS -fpic and -fno-pic exec transitions without PLT"
"-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info \
-z noseparate-code --hash-style=sysv" ""
"-mrelax-relocations=yes --32"
{tlsbinpic2.s tlsbin.s}
{{readelf -Ssrl tlsbin2.rd} {objdump -drj.text tlsbin2.dd}
{objdump -sj.got tlsbin2.sd} {objdump -sj.tdata tlsbin2.td}}
"tlsbin2"}
{"TLS descriptor -fpic and -fno-pic exec transitions"
"-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info \
-z noseparate-code --hash-style=sysv" ""
"--32" {tlsbindesc.s tlsbin.s}
{{readelf -Ssrl tlsbindesc.rd} {objdump -drj.text tlsbindesc.dd}
{objdump -sj.got tlsbindesc.sd} {objdump -sj.tdata tlsbindesc.td}}
"tlsbindesc"}
{"TLS -fno-pic -shared"
"-shared -melf_i386 --no-ld-generated-unwind-info \
-z noseparate-code --hash-style=sysv" ""
"--32" {tlsnopic1.s tlsnopic2.s}
{{readelf -Ssrl tlsnopic.rd} {objdump -drj.text tlsnopic.dd}
{objdump -sj.got tlsnopic.sd}} "libtlsnopic.so"}
{"TLS with global dynamic and descriptors"
"-shared -melf_i386 --no-ld-generated-unwind-info \
-z noseparate-code --hash-style=sysv" ""
"--32" {tlsgdesc.s}
{{readelf -Ssrl tlsgdesc.rd} {objdump -drj.text tlsgdesc.dd}}
"libtlsgdesc.so"}
{"TLS in debug sections" "-melf_i386" ""
"--32" {tlsg.s}
{{objdump -sj.debug_foobar tlsg.sd}} "tlsg"}
{"TLS @indntpoff with %eax" "-melf_i386" "" "--32" {tlsindntpoff.s}
{{objdump -drj.text tlsindntpoff.dd}} "tlsindntpoff"}
{"Reloc section order" "-shared -melf_i386 -z nocombreloc" "" "--32"
{reloc.s} {{objdump -hw reloc.d}} "reloc.so"}
{"Basic --emit-relocs support" "-shared -melf_i386 --emit-relocs" "" "--32"
{emit-relocs.s} {{readelf --relocs emit-relocs.rd}} "emit-relocs.so"}
{"-z combreloc relocation sections" "-shared -melf_i386 -z combreloc" ""
"--32" {combreloc.s} {{readelf -r combreloc.d}} "combreloc.so"}
{"TLS GD->LE transition" "-melf_i386" ""
"--32" {tlsgd1.s}
{{objdump -dwr tlsgd1.dd}} "tlsgd1"}
{"TLS GD->LE transition without PLT" "-melf_i386" ""
"-mrelax-relocations=yes --32"
{tlsgd3.s}
{{objdump -dwr tlsgd3.dd}} "tlsgd3"}
{"TLS LD->LE transition" "-melf_i386" ""
"--32" {tlsld1.s}
{{objdump -dwr tlsld1.dd}} "tlsld1"}
{"TLS LD->LE transition without PLT" "-melf_i386" ""
"-mrelax-relocations=yes --32"
{tlsld2.s}
{{objdump -dwr tlsld2.dd}} "tlsld2"}
{"TLS IE->LE transition" "-melf_i386" ""
"--32" {tlsie1.s}
{{objdump -dwr tlsie1.dd}} "tlsie1"}
{"PR ld/17313 (1)" "-melf_i386" ""
"--32 -mx86-used-note=yes" {zero.s} {} ""}
{"PR ld/17313 (2)" "-melf_i386 -shared --just-symbols=tmpdir/zero.o" ""
"--32 -mx86-used-note=yes" {lea1.s} {} "libpr17313.so"}
{"PR ld/17306 (1)" "-melf_i386" ""
"--32 -mx86-used-note=yes" {pr17306b.s} {} ""}
{"PR ld/17306 (2)" "-melf_i386 -shared -Bsymbolic --just-symbols=tmpdir/pr17306b.o" ""
"--32 -mx86-used-note=yes" {pr17306a.s} {} "libpr17306.so"}
{"PR ld/17709 (1)" "-melf_i386 -shared" ""
"--32 -mx86-used-note=yes" {pr17709a.s} {} "libpr17709.so"}
{"PR ld/17709 (2)" "-melf_i386 tmpdir/libpr17709.so" ""
"--32 -mx86-used-note=yes"
{pr17709b.s} {{readelf -r pr17709.rd}} "pr17709"}
{"Build pr19827a.o" "" ""
"--32 -mx86-used-note=yes" { pr19827a.S }}
{"Build pr19827b.so" "-melf_i386 -shared" ""
"--32 -mx86-used-note=yes"
{ pr19827b.S } {} "pr19827b.so"}
{"Build pr19827" "-melf_i386 -pie tmpdir/pr19827a.o tmpdir/pr19827b.so" ""
"--32 -mx86-used-note=yes"
{ dummy.s } {{readelf {-rW} pr19827.rd}} "pr19827"}
{"Build pr19827.so" "-melf_i386 -shared -Bsymbolic" ""
"--32 -mx86-used-note=yes"
{ pr19827a.S } {{readelf {-rW} pr19827.rd}} "pr19827.so"}
}
# So as to avoid rewriting every last test case here in a nacl variant,
# we use black magic to massage the generic cases into nacl-variant cases.
if [istarget "*-*-nacl*"] {
# Change all the -melf_i386 to -melf_i386_nacl so linking can succeed.
regsub -all elf_i386 $i386tests elf_i386_nacl i386tests
# Same, applied to all the run_dump_test cases.
set options_regsub(ld) {elf_i386 elf_i386_nacl}
# The section/segment layout differs too much for the vanilla
# readelf output files to match. So massage the cases so that
# they refer to a foo-nacl.rd file instead of a foo.rd file.
regsub -all {([a-z0-9]+)\.rd} $i386tests {\1-nacl.rd} i386tests
# Likewise for PLTs.
regsub -all -- {([a-z0-9]+)\.pd} $i386tests {\1-nacl.pd} i386tests
}
proc iamcu_tests {} {
if {[istarget "*-*-nacl*"]} then {
return
}
global as
global srcdir
global subdir
if ![ld_assemble $as "--32 -march=iamcu $srcdir/$subdir/start.s" tmpdir/startiamcu.o] {
unresolved "Build Intel MCU start.o"
return
}
if ![ld_assemble $as "--32 $srcdir/$subdir/start.s" tmpdir/start32.o] {
unresolved "Build ia32 start.o"
return
}
if ![ld_assemble $as "--32 -march=iamcu $srcdir/$subdir/foo.s" tmpdir/fooiamcu.o] {
unresolved "Build Intel MCU foo.o"
return
}
if ![ld_assemble $as "--32 $srcdir/$subdir/foo.s" tmpdir/foo32.o] {
unresolved "Build ia32 foo.o"
return
}
run_dump_test "abs-iamcu"
run_dump_test "iamcu-1"
run_dump_test "iamcu-2"
run_dump_test "iamcu-3"
run_dump_test "iamcu-4"
}
iamcu_tests
run_ld_link_tests $i386tests
run_dump_test "abs"
run_dump_test "pcrel8"
run_dump_test "pcrel16"
run_dump_test "pcrel16abs"
run_dump_test "alloc"
run_dump_test "warn1"
run_dump_test "tlsgd2"
run_dump_test "tlsgd4"
run_dump_test "tlsie2"
run_dump_test "tlsie3"
run_dump_test "tlsie4"
run_dump_test "tlsie5"
run_dump_test "hidden1"
run_dump_test "hidden2"
run_dump_test "hidden3"
run_dump_test "protected1"
run_dump_test "protected2"
run_dump_test "protected3"
run_dump_test "protected4"
run_dump_test "protected5"
run_dump_test "protected6a"
run_dump_test "protected6b"
run_dump_test "protected7"
run_dump_test "tlspie1"
run_dump_test "tlspie2"
run_dump_test "tlspie3a"
run_dump_test "tlspie3b"
run_dump_test "tlspie3c"
run_dump_test "nogot1"
run_dump_test "nogot2"
run_dump_test "discarded1"
run_dump_test "pr12718"
run_dump_test "pr12921"
run_dump_test "pr12570a"
run_dump_test "pr12570b"
run_dump_test "lea1a"
run_dump_test "lea1b"
run_dump_test "lea1c"
run_dump_test "lea1d"
run_dump_test "lea1e"
run_dump_test "lea1f"
run_dump_test "mov1a"
run_dump_test "mov1b"
run_dump_test "mov2a"
run_dump_test "mov2b"
run_dump_test "mov3"
run_dump_test "branch1"
run_dump_test "call1"
run_dump_test "call2"
run_dump_test "call3a"
run_dump_test "call3b"
run_dump_test "call3c"
run_dump_test "call3d"
run_dump_test "call3e"
run_dump_test "call3f"
run_dump_test "call3g"
run_dump_test "call3h"
run_dump_test "jmp1"
run_dump_test "jmp2"
run_dump_test "load1"
run_dump_test "load1-nacl"
run_dump_test "load2"
run_dump_test "load3"
run_dump_test "load4a"
run_dump_test "load4b"
run_dump_test "load5a"
run_dump_test "load5b"
run_dump_test "load6"
run_dump_test "load7"
run_dump_test "pr19175"
run_dump_test "pr19615"
run_dump_test "pr19636-1a"
run_dump_test "pr19636-1b"
run_dump_test "pr19636-1c"
run_dump_test "pr19636-1d"
run_dump_test "pr19636-1d-nacl"
run_dump_test "pr19636-1e"
run_dump_test "pr19636-1f"
run_dump_test "pr19636-1g"
run_dump_test "pr19636-1h"
run_dump_test "pr19636-1i"
run_dump_test "pr19636-1j"
run_dump_test "pr19636-1k"
run_dump_test "pr19636-1l"
run_dump_test "pr19636-2a"
run_dump_test "pr19636-2b"
run_dump_test "pr19636-2c"
run_dump_test "pr19636-2c-nacl"
run_dump_test "pr19636-2d"
run_dump_test "pr19636-2d-nacl"
run_dump_test "pr19636-2e"
run_dump_test "pr19636-2e-nacl"
run_dump_test "pr19636-3a"
run_dump_test "pr19636-3b"
run_dump_test "pr19636-3c"
run_dump_test "pr19636-3d"
run_dump_test "pr19636-3e"
run_dump_test "pr19636-3f"
run_dump_test "pr19636-3g"
run_dump_test "pr19636-3h"
run_dump_test "pr19636-3i"
run_dump_test "pr19636-4a"
run_dump_test "pr19636-4b"
run_dump_test "pr19636-4c"
run_dump_test "pr19636-4d"
run_dump_test "pr19645"
run_dump_test "pr19609-1a"
run_dump_test "pr19609-1b"
run_dump_test "pr19609-1c"
run_dump_test "pr19609-1d"
run_dump_test "pr19609-1e"
run_dump_test "pr19609-1f"
run_dump_test "pr19609-1g"
run_dump_test "pr19609-1h"
run_dump_test "pr19609-1i"
run_dump_test "pr19609-2a"
run_dump_test "pr19609-2b"
run_dump_test "pr19609-2c"
run_dump_test "undefweaka"
run_dump_test "undefweakb"
run_dump_test "pr19539"
run_dump_test "pr20117"
run_dump_test "pr20244-1a"
run_dump_test "pr20244-1b"
run_dump_test "pr20244-1c"
run_dump_test "pr20244-2a"
run_dump_test "pr20244-2b"
run_dump_test "pr20244-2c"
run_dump_test "pr20244-2d"
run_dump_test "pr20244-4a"
run_dump_test "pr20244-4b"
run_dump_test "pr20244-4c"
run_dump_test "pr20253-3"
run_dump_test "pr20253-4a"
run_dump_test "pr20253-4b"
run_dump_test "pr20253-4c"
run_dump_test "pr20253-5"
run_dump_test "pr20515"
run_dump_test "property-x86-3"
run_dump_test "property-x86-4a"
run_dump_test "property-x86-4b"
run_dump_test "property-x86-5"
run_dump_test "property-x86-ibt1a"
run_dump_test "property-x86-ibt1b"
run_dump_test "property-x86-ibt2"
run_dump_test "property-x86-ibt3a"
run_dump_test "property-x86-ibt3b"
run_dump_test "property-x86-ibt4"
run_dump_test "property-x86-ibt5"
run_dump_test "property-x86-shstk1a"
run_dump_test "property-x86-shstk1b"
run_dump_test "property-x86-shstk2"
run_dump_test "property-x86-shstk3a"
run_dump_test "property-x86-shstk3b"
run_dump_test "property-x86-shstk4"
run_dump_test "property-x86-shstk5"
run_dump_test "property-x86-cet1"
run_dump_test "property-x86-cet2a"
run_dump_test "property-x86-cet2b"
run_dump_test "property-x86-cet3a"
run_dump_test "property-x86-cet3b"
run_dump_test "property-x86-cet4a"
run_dump_test "property-x86-cet4b"
run_dump_test "property-x86-cet5a"
run_dump_test "property-x86-cet5b"
run_dump_test "property-x86-cet6"
run_dump_test "pie1"
run_dump_test "pie1-nacl"
run_dump_test "pr21884"
run_dump_test "pr21884-nacl"
run_dump_test "pr22115-1a"
run_dump_test "pr22115-1b"
run_dump_test "pr22115-1c"
run_dump_test "pr22115-1d"
run_dump_test "pr22135"
run_dump_test "pr22782"
run_dump_test "pr22929"
run_dump_test "pr23189"
run_dump_test "pr23194"
run_dump_test "pr23372a"
run_dump_test "pr23372b"
run_dump_test "pr23372c"
run_dump_test "pr23372d"
run_dump_test "pr23486a"
run_dump_test "pr23486b"
run_dump_test "pr23486c"
run_dump_test "pr23486d"
run_dump_test "pr23854"
run_dump_test "pr23930"
run_dump_test "pr24322a"
run_dump_test "pr24322b"
if { !([istarget "i?86-*-linux*"]
|| [istarget "i?86-*-gnu*"]
|| [istarget "i?86-*-nacl*"]
|| [istarget "x86_64-*-nacl*"]
|| [istarget "x86_64-*-linux*"]) } {
set ASFLAGS "$saved_ASFLAGS"
return
}
run_dump_test "compressed1"
run_dump_test "pr12627"
run_dump_test "pr13302"
run_dump_test "pr14215"
run_dump_test "pr17057"
run_dump_test "pr17935-1"
run_dump_test "pr17935-2"
run_dump_test "pr18801a"
run_dump_test "pr18801b"
run_dump_test "pr18815"
run_dump_test "pr19939a"
run_dump_test "pr19939b"
run_dump_test "tlsdesc2"
proc undefined_weak {cflags ldflags} {
set testname "Undefined weak symbol"
if { ![ string match "" $cflags$ldflags] } {
set testname "$testname ($cflags $ldflags)"
}
if { [string match "*-fPIE*" $cflags]
&& ![string match "*-z nodynamic-undefined-weak*" $ldflags] } {
set weak_symbol "Weak defined"
} else {
set weak_symbol "Weak undefined"
}
run_cc_link_tests [list \
[list \
"Build libpr19704a.so" \
"-shared -Wl,-soname,libpr19704.so" \
"-Wa,-mrelax-relocations=yes" \
{ dummy.s } \
{} \
"libpr19704a.so" \
] \
[list \
"Build libpr19704b.so" \
"-shared -Wl,-soname,libpr19704.so" \
"-fPIC -Wa,-mrelax-relocations=yes" \
{ pr19704b.c } \
{} \
"libpr19704b.so" \
] \
]
exec cp tmpdir/libpr19704a.so tmpdir/libpr19704.so
run_ld_link_exec_tests [list \
[list \
"Run pr19704" \
"$ldflags tmpdir/libpr19704.so -Wl,-R,tmpdir" \
"-Wa,-mrelax-relocations=yes" \
{ pr19704a.c } \
"pr19704" \
"pr19704.out" \
"$cflags" \
] \
]
exec cp tmpdir/libpr19704b.so tmpdir/libpr19704.so
set exec_output [run_host_cmd tmpdir/pr19704 ""]
if {![string match $weak_symbol $exec_output]} {
fail $testname
} else {
pass $testname
}
}
# Add $PLT_CFLAGS if PLT is expected.
global PLT_CFLAGS
# Must be Linux native with the C compiler
if { [isnative]
&& [istarget "i?86-*-linux*"]
&& [check_compiler_available] } {
run_cc_link_tests [list \
[list \
"Build plt-lib.so" \
"-shared" \
"-fPIC -Wa,-mrelax-relocations=yes" \
{ plt-lib.c } \
{} \
"libplt-lib.so" \
] \
[list \
"Build libplt-main1.a" \
"" \
"-fPIC -Wa,-mrelax-relocations=yes,-mrelax-relocations=yes" \
{ plt-main1.c } \
{{readelf {-Wr} plt-main1.rd}} \
"libplt-main1.a" \
] \
[list \
"Build libplt-main2.a" \
"" \
"-fPIC -Wa,-mrelax-relocations=yes,-mrelax-relocations=yes" \
{ plt-main2.c } \
{{readelf {-Wr} plt-main2.rd}} \
"libplt-main2.a" \
] \
[list \
"Build libplt-main3.a" \
"" \
"-fPIC -Wa,-mrelax-relocations=yes,-mrelax-relocations=yes $PLT_CFLAGS" \
{ plt-main3.c } \
{{readelf {-Wr} plt-main3.rd}} \
"libplt-main3.a" \
] \
[list \
"Build libplt-main4.a" \
"" \
"-fPIC -Wa,-mrelax-relocations=yes,-mrelax-relocations=yes $PLT_CFLAGS" \
{ plt-main4.c } \
{{readelf {-Wr} plt-main4.rd}} \
"libplt-main4.a" \
] \
[list \
"Build plt-main" \
"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
"-Wa,-mrelax-relocations=yes" \
{ plt-main5.c } \
{{readelf {-Wr} plt-main.rd}} \
"plt-main" \
] \
[list \
"Build plt-main with PIE" \
"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie" \
"-fPIC -Wa,-mrelax-relocations=yes" \
{ plt-main5.c } \
{{readelf {-Wr} plt-main.rd}} \
"plt-main" \
] \
[list \
"Build copyreloc-lib.so" \
"-shared" \
"-fPIC -Wa,-mrelax-relocations=yes" \
{ copyreloc-lib.c } \
{} \
"copyreloc-lib.so" \
] \
[list \
"Build libcopyreloc-main.a" \
"" \
"-Wa,-mrelax-relocations=yes" \
{ copyreloc-main.S } \
{} \
"libcopyreloc-main.a" \
] \
[list \
"Build copyreloc-main with PIE and GOTOFF (1)" \
"tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so -pie" \
"-Wa,-mrelax-relocations=yes" \
{ dummy.s } \
{{readelf {-Wr} copyreloc-main1.rd}} \
"copyreloc-main" \
] \
[list \
"Build copyreloc-main with PIE and GOTOFF (2)" \
"tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so -pie" \
"-Wa,-mrelax-relocations=yes" \
{ dummy.s } \
{{readelf {-Wr} copyreloc-main2.rd}} \
"copyreloc-main" \
] \
[list \
"Build pr17689.so" \
"-shared" \
"-fPIC -Wa,-mrelax-relocations=yes" \
{ pr17689a.c } \
{} \
"pr17689.so" \
] \
[list \
"Build pr17689.so with -z now" \
"-shared -Wl,-z,now" \
"-fPIC -Wa,-mrelax-relocations=yes" \
{ pr17689a.c } \
{{readelf {-Wr} pr17689now.rd}} \
"pr17689now.so" \
] \
[list \
"Build pr17689ver.so" \
"-shared -Wl,--version-script,pr17689a.t" \
"-fPIC -Wa,-mrelax-relocations=yes" \
{ pr17689a.c } \
{} \
"pr17689ver.so" \
] \
[list \
"Build pr17689.a" \
"" \
"-Wa,-mrelax-relocations=yes" \
{ pr17689b.S } \
{} \
"pr17689.a" \
] \
[list \
"Build pr17689 with PIE and GOTOFF" \
"tmpdir/pr17689b.o tmpdir/pr17689.so -pie" \
"-Wa,-mrelax-relocations=yes" \
{ dummy.c } \
{{readelf {-Wr} pr17689.rd}} \
"pr17689" \
] \
[list \
"Build pr17689 with PIE, -z now and GOTOFF" \
"tmpdir/pr17689b.o tmpdir/pr17689.so -pie -Wl,-z,now" \
"-Wa,-mrelax-relocations=yes" \
{ dummy.c } \
{{readelf {-Wr} pr17689now.rd}} \
"pr17689now" \
] \
[list \
"Build pr17689ver with PIE and GOTOFF" \
"tmpdir/pr17689b.o tmpdir/pr17689ver.so -pie" \
"-Wa,-mrelax-relocations=yes" \
{ dummy.c } \
{{readelf {-Wr} pr17689ver.rd}} \
"pr17689ver" \
] \
[list \
"Build pr17827 with PIE and GOTOFF" \
"tmpdir/pr17689b.o tmpdir/pr17689.so -pie" \
"-Wa,-mrelax-relocations=yes" \
{ dummy.c } \
{{readelf {-Wr} pr17827.rd}} \
"pr17827" \
] \
[list \
"Build pr18900.so" \
"-shared" \
"-fPIC -Wa,-mrelax-relocations=yes" \
{ pr18900a.c } \
"" \
"pr18900.so" \
] \
[list \
"Build pr18900.o" \
"-r -nostdlib" \
"-Wa,-mrelax-relocations=yes" \
{ pr18900b.c pr18900c.c } \
"" \
"pr18900.o" \
] \
[list \
"Build pr18900a" \
"tmpdir/pr18900.o tmpdir/pr18900.so" \
"-Wa,-mrelax-relocations=yes" \
{ dummy.s } \
{{readelf {-Wrd} pr18900a.rd}} \
"pr18900a" \
] \
[list \
"Build pr18900b" \
"-Wl,--as-needed tmpdir/pr18900.o tmpdir/pr18900.so" \
"-Wa,-mrelax-relocations=yes" \
{ dummy.s } \
{{readelf {-Wrd} pr18900b.rd}} \
"pr18900b" \
] \
[list \
"Build pr19031.so" \
"-shared" \
"-fPIC -Wa,-mrelax-relocations=yes" \
{ pr19031a.c } \
"" \
"pr19031.so" \
] \
[list \
"Build got1d.so" \
"-shared" \
"-Wa,-mrelax-relocations=yes" \
{ got1d.S } \
"" \
"got1d.so" \
] \
[list \
"Build gotpc1.o" \
"-r -nostdlib" \
"-Wa,-mrelax-relocations=yes" \
{ got1a.S got1b.c got1c.c } \
"" \
"gotpc1.o" \
] \
[list \
"Build gotpc1" \
"$NOPIE_LDFLAGS -Wl,--as-needed tmpdir/gotpc1.o tmpdir/got1d.so" \
"-Wa,-mx86-used-note=no" \
{ dummy.s } \
{{objdump {-dw} got1.dd}} \
"got1" \
] \
[list \
"Build pr19319.so" \
"-shared" \
"-Wa,-mx86-used-note=no" \
{ pr19319a.S } \
"" \
"pr19319.so" \
] \
[list \
"Build pr19319" \
"-pie -nostdlib -nostartfiles tmpdir/pr19319.so" \
"-Wa,-mrelax-relocations=yes" \
{ pr19319b.S } \
{{objdump {-dw} pr19319.dd}} \
"pr19319" \
] \
[list \
"Build pr24276.so" \
"-shared -nostdlib -nostartfiles \
-Ltmpdir $srcdir/$subdir/pr24276.dso" \
"-Wa,-mx86-used-note=yes" \
{ pr19319b.S } \
{{warning_output pr24276.warn}} \
"pr24276.so" \
] \
[list \
"Build property 1" \
"" \
"-Wa,-mx86-used-note=no" \
{pass.c property-no-copy.S} \
{{readelf {-n} property-1.r}} \
"property-1" \
] \
[list \
"Build property 1 (.o)" \
"-r -nostdlib" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-no-copy.S} \
{{readelf {-n} property-1a.r}} \
"property-1.o" \
] \
[list \
"Build property 1 (.so)" \
"-shared" \
"-fPIC -Wa,-mx86-used-note=no" \
{pass.c property-no-copy.S} \
{{readelf {-n} property-1.r}} \
"property-1.so" \
] \
[list \
"Build property 2" \
"" \
"-Wa,-mx86-used-note=no" \
{pass.c property-stack.S} \
{{readelf {-n} property-2.r}} \
"property-2" \
] \
[list \
"Build property 2 (.o)" \
"-r -nostdlib" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-stack.S} \
{{readelf {-n} property-2a.r}} \
"property-2.o" \
] \
[list \
"Build property 2 (.so)" \
"-shared" \
"-fPIC -Wa,-mx86-used-note=no" \
{pass.c property-stack.S} \
{{readelf {-n} property-2.r}} \
"property-2.so" \
] \
[list \
"Build property 3" \
"" \
"-Wa,-mx86-used-note=no" \
{pass.c property-stack.S property-x86-1.S} \
{{readelf {-n} property-3.r}} \
"property-3" \
] \
[list \
"Build property 3 (.o)" \
"-r -nostdlib" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-x86-1.S property-stack.S} \
{{readelf {-n} property-3a.r}} \
"property-3.o" \
] \
[list \
"Build property 3 (.so)" \
"-shared" \
"-fPIC -Wa,-mx86-used-note=no" \
{property-x86-1.S pass.c property-stack.S} \
{{readelf {-n} property-3.r}} \
"property-3.so" \
] \
[list \
"Build property 4" \
"" \
"-Wa,-mx86-used-note=no" \
{pass.c property-stack.S property-x86-1.S property-x86-2.S} \
{{readelf {-n} property-4.r}} \
"property-4" \
] \
[list \
"Build property 4 (.o)" \
"-r -nostdlib" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-x86-2.S property-x86-1.S property-stack.S} \
{{readelf {-n} property-4a.r}} \
"property-4.o" \
] \
[list \
"Build property 4 (.so)" \
"-shared" \
"-fPIC -Wa,-mx86-used-note=no" \
{property-x86-2.S property-x86-1.S pass.c property-stack.S} \
{{readelf {-n} property-4.r}} \
"property-4.so" \
] \
[list \
"Build property 4 (-Wl,-z,stack-size=0)" \
"-Wl,-z,stack-size=0" \
"-Wa,-mx86-used-note=no" \
{pass.c property-stack.S property-x86-1.S property-x86-2.S} \
{{readelf {-n} property-4.r}} \
"property-4" \
] \
[list \
"Build property 5" \
"-Wl,-z,stack-size=0x900000" \
"-Wa,-mx86-used-note=no" \
{pass.c property-stack.S property-x86-1.S property-x86-2.S} \
{{readelf {-n} property-5.r}} \
"property-5" \
] \
[list \
"Build property 5 (.o)" \
"-r -nostdlib -Wl,-z,stack-size=0x900000" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-x86-2.S property-x86-1.S property-stack.S} \
{{readelf {-n} property-5a.r}} \
"property-5.o" \
] \
[list \
"Build property 5 (.so)" \
"-shared -Wl,-z,stack-size=0x900000" \
"-fPIC -Wa,-mx86-used-note=no" \
{property-x86-2.S property-x86-1.S pass.c property-stack.S} \
{{readelf {-n} property-5.r}} \
"property-5.so" \
] \
[list \
"Build property-6.so" \
"-shared" \
"-fPIC -Wa,-mx86-used-note=no" \
{property-6a.c property-6c.S} \
{{readelf {-n} property-6.r}} \
"property-6.so" \
] \
[list \
"Build property-6.o" \
"-r -nostdlib" \
"-Wa,-mx86-used-note=yes" \
{property-6b.c property-stack.S} \
{{readelf {-n} property-2a.r}} \
"property-6.o" \
] \
[list \
"Build property-6" \
"-Wl,--as-needed tmpdir/property-6.o tmpdir/property-6.so" \
"-Wa,-mx86-used-note=no" \
{ dummy.s } \
{{readelf {-n} property-2.r}} \
"property-6" \
] \
[list \
"Build property 7a (.o)" \
"-r -nostdlib" \
"-Wa,-mx86-used-note=yes" \
{property-unsorted-1.S} \
{{readelf {-n} property-7a.r}} \
"property-7a.o" \
] \
[list \
"Build property 7b (.o)" \
"-r -nostdlib" \
"-Wa,-mx86-used-note=yes" \
{property-unsorted-2.S} \
{{readelf {-n} property-7a.r}} \
"property-7b.o" \
] \
]
run_ld_link_exec_tests [list \
[list \
"Run plt-main" \
"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
"-Wa,-mx86-used-note=yes" \
{ plt-main5.c } \
"plt-main" \
"plt-main.out" \
] \
[list \
"Run plt-main with PIE" \
"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie" \
"-Wa,-mx86-used-note=yes" \
{ plt-main5.c } \
"plt-main-pie" \
"plt-main.out" \
"-fPIC" \
] \
[list \
"Run copyreloc-main with PIE and GOTOFF" \
"-Wl,--as-needed tmpdir/copyreloc-main.o tmpdir/copyreloc-lib.so -pie" \
"-Wa,-mx86-used-note=yes" \
{ dummy.s } \
"copyreloc-main" \
"copyreloc-main.out" \
] \
[list \
"Run pr17689 with PIE and GOTOFF" \
"tmpdir/pr17689b.o tmpdir/pr17689.so -pie" \
"-Wa,-mx86-used-note=yes" \
{ dummy.c } \
"pr17689" \
"pr17689.out" \
] \
[list \
"Run pr17689 with PIE, -z now and GOTOFF" \
"tmpdir/pr17689b.o tmpdir/pr17689.so -pie -z now" \
"-Wa,-mx86-used-note=yes" \
{ dummy.c } \
"pr17689now" \
"pr17689.out" \
] \
[list \
"Run pr17689ver with PIE and GOTOFF" \
"tmpdir/pr17689b.o tmpdir/pr17689ver.so -pie" \
"-Wa,-mx86-used-note=yes" \
{ dummy.c } \
"pr17689ver" \
"pr17689.out" \
] \
[list \
"Run pr18900" \
"tmpdir/pr18900.o tmpdir/pr18900.so" \
"-Wa,-mx86-used-note=yes" \
{ dummy.s } \
"pr18900" \
"pr18900.out" \
] \
[list \
"Run pr19031" \
"$NOPIE_LDFLAGS tmpdir/pr19031.so" \
"-Wa,-mx86-used-note=yes" \
{ pr19031b.S pr19031c.c } \
"pr19031" \
"pr19031.out" \
"$NOPIE_CFLAGS" \
] \
[list \
"Run got1" \
"$NOPIE_LDFLAGS tmpdir/got1d.so" \
"-Wa,-mx86-used-note=yes" \
{ got1a.S got1b.c got1c.c } \
"got1" \
"got1.out" \
] \
[list \
"Run property 1" \
"" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-no-copy.S} \
"property-1" "pass.out" \
] \
[list \
"Run property 1 (PIE)" \
"-pie" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-no-copy.S} \
"property-1-pie" "pass.out" "-fPIE" \
] \
[list \
"Run property 1 (static)" \
"-static" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-no-copy.S} \
"property-1-static" "pass.out" \
] \
[list \
"Run property 2" \
"" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-stack.S} \
"property-2" "pass.out" \
] \
[list \
"Run property 2 (PIE)" \
"-pie" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-stack.S} \
"property-2-pie" "pass.out" "-fPIE" \
] \
[list \
"Run property 2 (static)" \
"-static" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-stack.S} \
"property-3-static" "pass.out" \
] \
[list \
"Run property 3" \
"" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-stack.S property-x86-1.S} \
"property-3" "pass.out" \
] \
[list \
"Run property 3 (PIE)" \
"-pie" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-x86-1.S property-stack.S} \
"property-3-pie" "pass.out" "-fPIE" \
] \
[list \
"Run property 3 (static)" \
"-static" \
"-Wa,-mx86-used-note=yes" \
{property-x86-1.S pass.c property-stack.S} \
"property-3-static" "pass.out" \
] \
[list \
"Run property 4" \
"" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-stack.S property-x86-1.S property-x86-2.S} \
"property-4" "pass.out" \
] \
[list \
"Run property 4 (PIE)" \
"-pie" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-x86-2.S property-x86-1.S property-stack.S} \
"property-4-pie" "pass.out" "-fPIE" \
] \
[list \
"Run property 4 (static)" \
"-static" \
"-Wa,-mx86-used-note=yes" \
{property-x86-2.S property-x86-1.S pass.c property-stack.S} \
"property-4-static" "pass.out" \
] \
[list \
"Run property 5" \
"-Wl,-z,stack-size=0x900000" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-stack.S property-x86-1.S property-x86-2.S} \
"property-5" "pass.out" \
] \
[list \
"Run property 5 (PIE)" \
"-pie -Wl,-z,stack-size=0x900000" \
"-Wa,-mx86-used-note=yes" \
{pass.c property-x86-2.S property-x86-1.S property-stack.S} \
"property-5-pie" "pass.out" "-fPIE" \
] \
[list \
"Run property 5 (static)" \
"-static -Wl,-z,stack-size=0x900000" \
"-Wa,-mx86-used-note=yes" \
{property-x86-2.S property-x86-1.S pass.c property-stack.S} \
"property-5-static" "pass.out" \
] \
]
undefined_weak "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS"
undefined_weak "-fPIE" "$NOPIE_LDFLAGS"
undefined_weak "-fPIE" "-pie"
undefined_weak "-fPIE" "-z nodynamic-undefined-weak $NOPIE_LDFLAGS"
undefined_weak "-fPIE" "-pie -z nodynamic-undefined-weak"
}
global NOPIE_CFLAGS NOPIE_LDFLAGS
# Must be native with the C compiler and working IFUNC support,
if { [isnative]
&& [check_ifunc_available]
&& [istarget "i?86-*-*"]
&& [check_compiler_available] } {
run_cc_link_tests [list \
[list \
"Build ifunc-1a.o ifunc-1b.o ifunc-1c.o ifunc-1d.o" \
"" \
"-fPIC -O2 -g -Wa,-mx86-used-note=yes" \
{ ifunc-1a.c ifunc-1b.S ifunc-1c.S ifunc-1d.S } \
] \
[list \
"Build pr21168a.o" \
"" \
"-Wa,-mx86-used-note=yes" \
{ pr21168a.c } \
] \
[list \
"Build pr21168.so" \
"-shared" \
"-Wa,-mx86-used-note=yes" \
{ pr21168b.S } \
"" \
"pr21168.so" \
] \
]
run_ld_link_exec_tests [list \
[list \
"Run ifunc-1a" \
"tmpdir/ifunc-1a.o tmpdir/ifunc-1b.o \
tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
"-Wa,-mx86-used-note=yes" \
{ dummy.c } \
"ifunc-1a" \
"pass.out" \
] \
[list \
"Run ifunc-1b" \
"--static tmpdir/ifunc-1a.o tmpdir/ifunc-1b.o \
tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
"-Wa,-mx86-used-note=yes" \
{ dummy.c } \
"ifunc-1b" \
"pass.out" \
] \
[list \
"Run pr21168" \
"tmpdir/pr21168a.o tmpdir/pr21168.so" \
"-Wa,-mx86-used-note=yes" \
{ dummy.c } \
"pr21168" \
"pass.out" \
] \
]
if { [istarget "i?86-*-linux*"] } {
run_cc_link_tests [list \
[list \
"Build pr21168.so with -z ibtplt" \
"-shared -Wl,-z,ibtplt" \
"-Wa,-mx86-used-note=yes" \
{ pr21168b.S } \
"" \
"pr21168-ibt.so" \
] \
[list \
"Build ifunc-1a with -z ibtplt" \
"-Wl,-z,ibtplt $NOPIE_LDFLAGS tmpdir/ifunc-1a.o \
tmpdir/ifunc-1b.o tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
"-Wa,-mx86-used-note=yes" \
{ dummy.c } \
{{objdump {-dw} plt-main-ibt.dd}} \
"ifunc-1a-ibt" \
] \
[list \
"Build ifunc-1a with PIE -z ibtplt" \
"-Wl,-z,ibtplt -pie tmpdir/ifunc-1a.o \
tmpdir/ifunc-1b.o tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
"-Wa,-mx86-used-note=yes" \
{ dummy.c } \
{{objdump {-dw} plt-pie-ibt.dd}} \
"ifunc-1a-pie-ibt" \
] \
]
run_ld_link_exec_tests [list \
[list \
"Run ifunc-1a with -z ibtplt" \
"-Wl,-z,ibtplt $NOPIE_LDFLAGS tmpdir/ifunc-1a.o \
tmpdir/ifunc-1b.o tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
"-Wa,-mx86-used-note=yes" \
{ dummy.c } \
"ifunc-1a-ibt" \
"pass.out" \
] \
[list \
"Run ifunc-1a with PIE -z ibtplt" \
"-Wl,-z,ibtplt -pie tmpdir/ifunc-1a.o \
tmpdir/ifunc-1b.o tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
"-Wa,-mx86-used-note=yes" \
{ dummy.c } \
"ifunc-1a-pie-ibt" \
"pass.out" \
] \
[list \
"Run pr21168 with -z ibtplt" \
"tmpdir/pr21168a.o tmpdir/pr21168-ibt.so" \
"-Wa,-mx86-used-note=yes" \
{ dummy.c } \
"pr21168-ibt" \
"pass.out" \
] \
]
}
}
# Must be native with the C compiler.
if { [isnative]
&& [istarget "i?86-*-*"]
&& [check_compiler_available] } {
run_cc_link_tests [list \
[list \
"Build pr22001-1.so" \
"-shared" \
"-Wa,-mx86-used-note=yes" \
{ pr22001-1a.c } \
{} \
"pr22001-1.so" \
] \
[list \
"Build pr21997-1.so" \
"-shared" \
"-Wa,-mx86-used-note=yes" \
{ property-stack.S property-no-copy.S pr21997-1a.S } \
{} \
"pr21997-1.so" \
] \
[list \
"Build pr22842.so" \
"-shared" \
"-fPIC -Wa,-mx86-used-note=yes" \
{ pr22842a.c } \
{} \
"pr22842.so" \
] \
]
run_ld_link_exec_tests [list \
[list \
"Run weakundef1 without PIE" \
"$NOPIE_LDFLAGS" \
"-Wa,-mx86-used-note=yes" \
{ weakundef1.c } \
"weakundef1pie" \
"pass.out" \
"$NOPIE_CFLAGS" \
] \
[list \
"Run pr22001-1" \
"$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
"-Wa,-mx86-used-note=yes" \
{ pr22001-1b.c } \
"pr22001-1" \
"pass.out" \
"$NOPIE_CFLAGS" \
] \
[list \
"Run pr22001-1 (PIE 1)" \
"$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
"-Wa,-mx86-used-note=yes" \
{ pr22001-1c.S } \
"pr22001-1-pie-1" \
"pass.out" \
] \
[list \
"Run pr22001-1 (PIE 2)" \
"-pie -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
"-Wa,-mx86-used-note=yes" \
{ pr22001-1c.S } \
"pr22001-1-pie-2" \
"pass.out" \
] \
[list \
"Run pr22001-1 (PIC 1)" \
"$NOPIE_LDFLAGS -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
"-Wa,-mx86-used-note=yes" \
{ pr22001-1b.c } \
"pr22001-1-pic-1" \
"pass.out" \
"-fPIC" \
] \
[list \
"Run pr22001-1 (PIC 2)" \
"-pie -Wl,-z,nocopyreloc,--no-as-needed tmpdir/pr22001-1.so" \
"-Wa,-mx86-used-note=yes" \
{ pr22001-1b.c } \
"pr22001-1-pic-2" \
"pass.out" \
"-fPIC" \
] \
[list \
"Run pr21997-1" \
"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr21997-1.so" \
"-Wa,-mx86-used-note=yes" \
{ pr21997-1b.c } \
"pr21997-1" \
"pass.out" \
"$NOPIE_CFLAGS" \
] \
[list \
"Run pr21997-1 (PIC 1)" \
"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr21997-1.so" \
"-Wa,-mx86-used-note=yes" \
{ pr21997-1b.c } \
"pr21997-1-pic-1" \
"pass.out" \
"-fPIC" \
] \
[list \
"Run pr21997-1 (PIC 2)" \
"-pie -Wl,--no-as-needed tmpdir/pr21997-1.so" \
"-Wa,-mx86-used-note=yes" \
{ pr21997-1b.c } \
"pr21997-1-pic-2" \
"pass.out" \
"-fPIC" \
] \
[list \
"Run pr21997-1 (PIE 1)" \
"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr21997-1.so" \
"-Wa,-mx86-used-note=yes" \
{ pr21997-1c.S } \
"pr21997-1-pie-1" \
"pass.out" \
] \
[list \
"Run pr21997-1 (PIE 2)" \
"-pie -Wl,--no-as-needed tmpdir/pr21997-1.so" \
"-Wa,-mx86-used-note=yes" \
{ pr21997-1c.S } \
"pr21997-1-pie-2" \
"pass.out" \
] \
[list \
"Build pr22842" \
"-pie -Wl,--no-as-needed tmpdir/pr22842.so" \
"-Wa,-mx86-used-note=yes" \
{ pr22842b.S } \
"pr22842" \
"pass.out" \
] \
[list \
"Run pr23997" \
"" \
"" \
{ ../ld-x86-64/pr23997a.s ../ld-x86-64/pr23997b.c \
../ld-x86-64/pr23997c.c } \
"pr23997" \
"pass.out" \
] \
]
if { [at_least_gcc_version 5 0] } {
run_ld_link_exec_tests [list \
[list \
"Run weakundef1 with PIE" \
"-pie" \
"-Wa,-mx86-used-note=yes" \
{ weakundef1.c } \
"weakundef1pie" \
"pass.out" \
"-fPIE" \
] \
]
}
}
if { !([istarget "i?86-*-linux*"]
|| [istarget "x86_64-*-linux*"]) } {
set ASFLAGS "$saved_ASFLAGS"
return
}
run_ld_link_tests [list \
[list \
"basic PLT generation (non-PIC, -z now)" \
"-z now -melf_i386 --hash-style=sysv \
-z noseparate-code tmpdir/libpltlib.so" \
"" \
"--32" \
{plt2.s} \
{{readelf -SW plt2.rd} {objdump -dwr plt2.dd}} \
"plt2" \
] \
[list \
"basic PLT generation (PIC, -z now)" \
"-z now -shared -melf_i386 tmpdir/libpltlib.so" \
"" \
"--32 -mx86-used-note=yes" \
{plt-pic.s} \
{{objdump -dwr plt-pic2.dd}} \
"plt-pic2.so" \
] \
[list \
"Build pr21626.so" \
"-shared -melf_i386" \
"" \
"--32 -mx86-used-note=yes" \
{property-x86-3.s} \
"" \
"pr21626.so" \
] \
[list \
"Build pr21626" \
"-melf_i386 tmpdir/pr21626.so" \
"" \
"--32 -mx86-used-note=yes" \
{start.s foo.s} \
"" \
"pr21626" \
] \
]
# Linux only tests
run_dump_test "pltgot-1"
run_dump_test "pltgot-2"
run_dump_test "pr20830"
run_dump_test "ibt-plt-1"
run_dump_test "ibt-plt-2a"
run_dump_test "ibt-plt-2b"
run_dump_test "ibt-plt-2c"
run_dump_test "ibt-plt-2d"
run_dump_test "ibt-plt-3a"
run_dump_test "ibt-plt-3b"
run_dump_test "ibt-plt-3c"
run_dump_test "ibt-plt-3d"
set ASFLAGS "$saved_ASFLAGS"