0cb4071ef9
The x86 relax relocations introduced in binutils 2.26 aren't supported by linker on Solaris older than Solaris 12. To use x86 assembler with older Solaris linker, this patch adds 1. A command line option -mrelax-relocations= to x86 assembler to control whether to generate relax relocations. 2. A configure option --enable-x86-relax-relocations to decide whether x86 assembler should generate relax relocations by default. It is defaulted to yes, except for x86 Solaris targets older than Solaris 12. gas/ PR gas/19520 * NEWS: Mention new command line option -mrelax-relocations and new configure option --enable-x86-relax-relocations for x86 target. * config.in: Regenerated. * configure.ac: Add --enable-x86-relax-relocations. (ac_default_x86_relax_relocations): New. Default to 1 except for x86 Solaris targets older than Solaris 12. (DEFAULT_GENERATE_X86_RELAX_RELOCATIONS): Define. * configure: Likewise. * config/tc-i386.c (generate_relax_relocations): New. (OPTION_MRELAX_RELOCATIONS): Likewise. (output_disp): Don't generate relax relocations if generate_relax_relocations is 0. (md_longopts): Add -mrelax-relocations. (md_show_usage): Likewise. (md_parse_option): Handle OPTION_MRELAX_RELOCATIONS. * doc/c-i386.texi: Document -mrelax-relocations=. * testsuite/gas/i386/got-no-relax.d: New file. * testsuite/gas/i386/x86-64-gotpcrel-no-relax.d: Likewise. * testsuite/gas/i386/got.d: Pass -mrelax-relocations=yes to as. * testsuite/gas/i386/localpic.d: Likewise. * testsuite/gas/i386/mixed-mode-reloc32.d: Likewise. * testsuite/gas/i386/reloc32.d: Likewise. * testsuite/gas/i386/x86-64-gotpcrel.d: Likewise. * testsuite/gas/i386/x86-64-localpic.d: Likewise. * testsuite/gas/i386/ilp32/x86-64-gotpcrel.d: Likewise. * testsuite/gas/i386/ilp32/x86-64-localpic.d: Likewise. * testsuite/gas/i386/i386.exp: Run got-no-relax and x86-64-gotpcrel-no-relax. ld/ PR gas/19520 * testsuite/ld-i386/branch1.d: Pass -mrelax-relocations=yes to as. * testsuite/ld-i386/call1.d: Likewise. * testsuite/ld-i386/call2.d: Likewise. * testsuite/ld-i386/call3a.d: Likewise. * testsuite/ld-i386/call3b.d: Likewise. * testsuite/ld-i386/call3c.d: Likewise. * testsuite/ld-i386/call3d.d: Likewise. * testsuite/ld-i386/call3e.d: Likewise. * testsuite/ld-i386/call3f.d: Likewise. * testsuite/ld-i386/call3g.d: Likewise. * testsuite/ld-i386/call3h.d: Likewise. * testsuite/ld-i386/jmp1.d: Likewise. * testsuite/ld-i386/jmp2.d: Likewise. * testsuite/ld-i386/lea1c.d: Likewise. * testsuite/ld-i386/load1.d: Likewise. * testsuite/ld-i386/load2.d: Likewise. * testsuite/ld-i386/load3.d: Likewise. * testsuite/ld-i386/load4a.d: Likewise. * testsuite/ld-i386/load5a.d: Likewise. * testsuite/ld-i386/mov2b.d: Likewise. * testsuite/ld-i386/mov3.d: Likewise. * testsuite/ld-ifunc/ifunc-21-x86-64.d: Likewise. * testsuite/ld-ifunc/ifunc-22-x86-64.d: Likewise. * testsuite/ld-ifunc/ifunc-5r-local-x86-64.d: Likewise. * testsuite/ld-x86-64/call1a.d: Likewise. * testsuite/ld-x86-64/call1b.d: Likewise. * testsuite/ld-x86-64/call1c.d: Likewise. * testsuite/ld-x86-64/call1d.d: Likewise. * testsuite/ld-x86-64/call1e.d: Likewise. * testsuite/ld-x86-64/call1f.d: Likewise. * testsuite/ld-x86-64/call1h.d: Likewise. * testsuite/ld-x86-64/call1i.d: Likewise. * testsuite/ld-x86-64/load1a.d: Likewise. * testsuite/ld-x86-64/load1b.d: Likewise. * testsuite/ld-i386/got1a.S: Load GOT into %ecx and use it. * testsuite/ld-i386/got1.dd: Updated. * testsuite/ld-i386/got1d.S (1): Removed. * testsuite/ld-i386/i386.exp: Add -Wa,-mrelax-relocations=yes. * testsuite/ld-x86-64/x86-64.exp: Likewise.
697 lines
19 KiB
Text
697 lines
19 KiB
Text
# Expect script for ld-x86_64 tests
|
|
# Copyright (C) 2002-2016 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.
|
|
#
|
|
|
|
# Test x86_64 linking; all types of relocs. This tests the assembler and
|
|
# tools like objdump as well as the linker.
|
|
|
|
if { !([istarget "x86_64-*-elf*"]
|
|
|| [istarget "x86_64-*-nacl*"]
|
|
|| [istarget "x86_64-*-linux*"]) } {
|
|
return
|
|
}
|
|
|
|
if [istarget "*-*-nacl*"] {
|
|
set emul "elf_x86_64_nacl"
|
|
} else {
|
|
set emul "elf_x86_64"
|
|
}
|
|
|
|
# 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 x86_64tests {
|
|
{"Helper shared library (basic PLT test)"
|
|
"-shared -melf_x86_64" "" "--64" {pltlib.s} {} "libpltlib.so"}
|
|
{"basic PLT generation"
|
|
"-melf_x86_64 tmpdir/libpltlib.so" "" "--64" {plt.s}
|
|
{{objdump -drj.plt plt.pd}} "plt"}
|
|
{"TLS -fpic -shared transitions"
|
|
"-shared -melf_x86_64 --no-ld-generated-unwind-info" ""
|
|
"--64" {tlspic1.s tlspic2.s}
|
|
{{readelf -WSsrl tlspic.rd} {objdump -drj.text\ -Mintel64 tlspic.dd}
|
|
{objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
|
|
"libtlspic.so"}
|
|
{"TLS descriptor -fpic -shared transitions"
|
|
"-shared -melf_x86_64 --no-ld-generated-unwind-info" ""
|
|
"--64" {tlsdesc.s tlspic2.s}
|
|
{{readelf -WSsrld tlsdesc.rd} {objdump -drj.text tlsdesc.dd}
|
|
{objdump "-s -j.got -j.got.plt" tlsdesc.sd} {objdump -sj.tdata tlsdesc.td}
|
|
{objdump -drj.plt tlsdesc.pd}} "libtlsdesc.so"}
|
|
{"Helper shared library" "-shared -melf_x86_64" ""
|
|
"--64" {tlslib.s} {} "libtlslib.so"}
|
|
{"TLS -fpic and -fno-pic exec transitions"
|
|
"-melf_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info" ""
|
|
"--64" {tlsbinpic.s tlsbin.s}
|
|
{{readelf -WSsrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
|
|
{objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
|
|
"tlsbin"}
|
|
{"TLS descriptor -fpic and -fno-pic exec transitions"
|
|
"-melf_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info" ""
|
|
"--64" {tlsbindesc.s tlsbin.s}
|
|
{{readelf -WSsrl tlsbindesc.rd} {objdump -drj.text tlsbindesc.dd}
|
|
{objdump -sj.got tlsbindesc.sd} {objdump -sj.tdata tlsbindesc.td}}
|
|
"tlsbindesc"}
|
|
{"TLS with global dynamic and descriptors"
|
|
"-shared -melf_x86_64 --no-ld-generated-unwind-info" ""
|
|
"--64" {tlsgdesc.s}
|
|
{{readelf -WSsrl tlsgdesc.rd} {objdump -drj.text\ -Mintel64 tlsgdesc.dd}}
|
|
"libtlsgdesc.so"}
|
|
{"TLS in debug sections" "-melf_x86_64" ""
|
|
"--64" {tlsg.s}
|
|
{{objdump -sj.debug_foobar tlsg.sd}} "tlsg"}
|
|
{"TLS GD->LE transition" "-melf_x86_64" ""
|
|
"--64" {tlsgd1.s}
|
|
{{objdump -dwr tlsgd1.dd}} "tlsgd1"}
|
|
{"TLS LD->LE transition" "-melf_x86_64" ""
|
|
"--64" {tlsld1.s}
|
|
{{objdump -dwr tlsld1.dd}} "tlsld1"}
|
|
{"TLS IE->LE transition" "-melf_x86_64" ""
|
|
"--64" {tlsie1.s}
|
|
{{objdump -dwr tlsie1.dd}} "tlsie1"}
|
|
{"Helper 64bit object 1" "-r -melf_x86_64" ""
|
|
"--64" {mixed1a.s} {} "libmixe1a.o"}
|
|
{"Helper 32bit object 1" "-r -melf_i386" ""
|
|
"--32" {mixed1b.s} {} "libmixe1b.o"}
|
|
{"Helper 64bit object 2" "-r -melf_x86_64" ""
|
|
"--64" {mixed2a.s} {} "libmixe2a.o"}
|
|
{"Helper 32bit object 2" "-r -melf_i386" ""
|
|
"--32" {mixed2b.s} {} "libmixe2b.o"}
|
|
{"Split by file with 'l' flag on section."
|
|
"-split-by-file -r -melf_x86_64" ""
|
|
"--64" {split-by-file1.s split-by-file2.s}
|
|
{{readelf -SW split-by-file.rd}} "split-by-file.o"}
|
|
{"TLS X32 IE->LE transition" "-melf32_x86_64" ""
|
|
"--x32" {tlsie4.s}
|
|
{{objdump -dwr tlsie4.dd}} "tlsie4"}
|
|
{"TLS X32 GD->LE transition" "-melf32_x86_64" ""
|
|
"--x32" {tlsgd4.s}
|
|
{{objdump -dwr tlsgd4.dd}} "tlsgd4"}
|
|
{"Helper TLS GD->IE transition DSO" "-shared -melf_x86_64" ""
|
|
"--64" {tlsgd5b.s} {} "libtlsgd5.so"}
|
|
{"TLS GD->IE transition" "-melf_x86_64 tmpdir/libtlsgd5.so" ""
|
|
"--64" {tlsgd5a.s}
|
|
{{objdump -dwr tlsgd5.dd}} "tlsgd5"}
|
|
{"Helper TLS X32 GD->IE transition DSO" "-shared -melf32_x86_64" ""
|
|
"--x32" {tlsgd6b.s} {} "libtlsgd6.so"}
|
|
{"TLS X32 GD->IE transition" "-melf32_x86_64 tmpdir/libtlsgd6.so" ""
|
|
"--x32" {tlsgd6a.s}
|
|
{{objdump -dwr tlsgd6.dd}} "tlsgd6"}
|
|
{"TLS X32 LD->LE transition" "-melf32_x86_64" ""
|
|
"--x32" {tlsld2.s}
|
|
{{objdump -dwr tlsld2.dd}} "tlsld2"}
|
|
{"TLS -mcmodel=large GD->LE transition" "-melf_x86_64" ""
|
|
"--64" {tlsgd7.s}
|
|
{{objdump -dwr tlsgd7.dd}} "tlsgd7"}
|
|
{"TLS -mcmodel=large LD->LE transition" "-melf_x86_64" ""
|
|
"--64" {tlsld3.s}
|
|
{{objdump -dwr tlsld3.dd}} "tlsld3"}
|
|
{"TLS -mcmodel=large GD->IE transition" "-melf_x86_64 tmpdir/libtlsgd5.so" ""
|
|
"--64" {tlsgd8.s}
|
|
{{objdump -dwrj.text tlsgd8.dd}} "tlsgd8"}
|
|
|
|
{"build 32-bit object with 33 locals" "-melf_x86_64 -e 0" "" "--32" {32bit.s} {{ ld incompatible.l }} "dummy" }
|
|
{"build 64-bit object" "-melf_x86_64 -e 0 --defsym foo=1" "" "--64" {64bit.s} {} "dummy" }
|
|
{"link mixed objects" "-melf_x86_64 -e 0 tmpdir/32bit.o tmpdir/64bit.o" "" "" {} { { ld incompatible.l } } "mixed"}
|
|
{"PR ld/17313 (1)" "-melf_x86_64" ""
|
|
"--64" {dummy.s} {} ""}
|
|
{"PR ld/17313 (2)" "-melf_x86_64 -shared --just-symbols=tmpdir/dummy.o" ""
|
|
"--64" {lea1.s} {} "libpr17313.so"}
|
|
{"PR ld/17306 (1)" "-melf_x86_64" ""
|
|
"--64" {pr17306b.s} {} ""}
|
|
{"PR ld/17306 (2)" "-melf_x86_64 -shared -Bsymbolic --just-symbols=tmpdir/pr17306b.o" ""
|
|
"--64" {pr17306a.s} {} "libpr17306.so"}
|
|
{"PR ld/17709 (1)" "-melf_x86_64 -shared" ""
|
|
"--64" {pr17709a.s} {} "libpr17709.so"}
|
|
{"PR ld/17709 (2)" "-melf_x86_64 tmpdir/libpr17709.so" ""
|
|
"--64" {pr17709b.s} {{readelf -rW pr17709.rd}} "pr17709"}
|
|
}
|
|
|
|
# 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*"] {
|
|
set emul elf_x86_64_nacl
|
|
|
|
set lhs {elf(32)?_(i386|x86_64)[[:>:]]}
|
|
set rhs {&_nacl}
|
|
|
|
# Change all the -melf_x86_64 to -melf_x86_64_nacl so linking can succeed.
|
|
regsub -all -- $lhs $x86_64tests $rhs x86_64tests
|
|
|
|
# Same, applied to all the run_dump_test cases.
|
|
set options_regsub(ld) [list $lhs $rhs]
|
|
|
|
# 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} $x86_64tests {\1-nacl.rd} x86_64tests
|
|
|
|
# Likewise for PLTs.
|
|
regsub -all -- {([a-z0-9]+)\.pd} $x86_64tests {\1-nacl.pd} x86_64tests
|
|
} else {
|
|
set emul elf_x86_64
|
|
}
|
|
|
|
run_ld_link_tests $x86_64tests
|
|
|
|
global link_output
|
|
global ld
|
|
|
|
set test_name "Mixed x86_64 and i386 input test 1"
|
|
set test mixed1
|
|
if { ![ld_simple_link $ld tmpdir/$test "-m$emul tmpdir/${test}a.o tmpdir/${test}b.o"] } {
|
|
if [string match "*i386* architecture of input file `tmpdir/${test}b.o' is incompatible with i386:x86-64* output*" $link_output] {
|
|
pass "$test_name"
|
|
} {
|
|
fail "$test_name"
|
|
}
|
|
}
|
|
|
|
set test_name "Mixed x86_64 and i386 input test 2"
|
|
set test mixed2
|
|
if { ![ld_simple_link $ld tmpdir/$test "-m$emul tmpdir/${test}a.o tmpdir/${test}b.o"] } {
|
|
if [string match "*i386* architecture of input file `tmpdir/${test}b.o' is incompatible with i386:x86-64* output*" $link_output] {
|
|
pass "$test_name"
|
|
} {
|
|
fail "$test_name"
|
|
}
|
|
}
|
|
|
|
run_dump_test "abs"
|
|
run_dump_test "abs-l1om"
|
|
run_dump_test "pcrel8"
|
|
run_dump_test "pcrel16"
|
|
run_dump_test "tlsgd2"
|
|
run_dump_test "tlsgd3"
|
|
run_dump_test "tlsie2"
|
|
run_dump_test "tlsie3"
|
|
run_dump_test "hidden1"
|
|
run_dump_test "hidden2"
|
|
run_dump_test "hidden3"
|
|
run_dump_test "hidden4"
|
|
run_dump_test "hidden5"
|
|
run_dump_test "protected1"
|
|
run_dump_test "protected2"
|
|
run_dump_test "protected2-l1om"
|
|
run_dump_test "protected3"
|
|
run_dump_test "protected3-l1om"
|
|
run_dump_test "protected4"
|
|
run_dump_test "protected5"
|
|
run_dump_test "protected6a"
|
|
run_dump_test "protected6b"
|
|
run_dump_test "protected7a"
|
|
run_dump_test "protected7b"
|
|
run_dump_test "tlsle1"
|
|
run_dump_test "tlspie1"
|
|
run_dump_test "unique1"
|
|
run_dump_test "nogot1"
|
|
run_dump_test "nogot2"
|
|
run_dump_test "discarded1"
|
|
run_dump_test "pr12718"
|
|
run_dump_test "pr12921"
|
|
run_dump_test "pr13947"
|
|
run_dump_test "pr12570a"
|
|
run_dump_test "pr12570b"
|
|
run_dump_test "pr14215"
|
|
run_dump_test "pr14207"
|
|
run_dump_test "gotplt1"
|
|
run_dump_test "pie1"
|
|
|
|
if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} {
|
|
return
|
|
}
|
|
|
|
if ![ld_assemble $as "--x32 $srcdir/$subdir/start.s" tmpdir/startx32.o] {
|
|
unresolved "Build ILP32 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 "--64 $srcdir/$subdir/start.s" tmpdir/start64.o] {
|
|
unresolved "Build LP64 start.o"
|
|
return
|
|
}
|
|
|
|
if ![ld_assemble $as "--x32 $srcdir/$subdir/foo.s" tmpdir/foox32.o] {
|
|
unresolved "Build ILP32 foo.o"
|
|
return
|
|
}
|
|
|
|
if ![ld_assemble $as "--32 $srcdir/$subdir/foo.s" tmpdir/foo32.o] {
|
|
unresolved "Build ia32 foo.o"
|
|
return
|
|
}
|
|
|
|
if ![ld_assemble $as "--64 $srcdir/$subdir/foo.s" tmpdir/foo64.o] {
|
|
unresolved "Build LP64 foo.o"
|
|
return
|
|
}
|
|
|
|
run_dump_test "compressed1"
|
|
run_dump_test "ilp32-1"
|
|
run_dump_test "ilp32-2"
|
|
run_dump_test "ilp32-3"
|
|
run_dump_test "ilp32-4"
|
|
run_dump_test "ilp32-4-nacl"
|
|
run_dump_test "ilp32-5"
|
|
run_dump_test "ilp32-6"
|
|
run_dump_test "ilp32-7"
|
|
run_dump_test "ilp32-8"
|
|
run_dump_test "ilp32-9"
|
|
run_dump_test "ilp32-10"
|
|
run_dump_test "ilp32-11"
|
|
run_dump_test "ia32-1"
|
|
run_dump_test "ia32-2"
|
|
run_dump_test "ia32-3"
|
|
run_dump_test "lp64-1"
|
|
run_dump_test "lp64-2"
|
|
run_dump_test "lp64-3"
|
|
run_dump_test "pr13082-1a"
|
|
run_dump_test "pr13082-1b"
|
|
run_dump_test "pr13082-2a"
|
|
run_dump_test "pr13082-2b"
|
|
run_dump_test "pr13082-3a"
|
|
run_dump_test "pr13082-3b"
|
|
run_dump_test "pr13082-4a"
|
|
run_dump_test "pr13082-4b"
|
|
run_dump_test "pr13082-5a"
|
|
run_dump_test "pr13082-5b"
|
|
run_dump_test "pr13082-6a"
|
|
run_dump_test "pr13082-6b"
|
|
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 "lea1g"
|
|
run_dump_test "lea1h"
|
|
run_dump_test "lea1i"
|
|
run_dump_test "lea1j"
|
|
run_dump_test "lea1k"
|
|
run_dump_test "lea1l"
|
|
run_dump_test "mov1a"
|
|
run_dump_test "mov1b"
|
|
run_dump_test "mov1c"
|
|
run_dump_test "mov1d"
|
|
run_dump_test "mov2a"
|
|
run_dump_test "mov2b"
|
|
run_dump_test "mov2c"
|
|
run_dump_test "mov2d"
|
|
run_dump_test "load1a"
|
|
run_dump_test "load1b"
|
|
run_dump_test "load1c"
|
|
run_dump_test "load1d"
|
|
run_dump_test "load1a-nacl"
|
|
run_dump_test "load1b-nacl"
|
|
run_dump_test "load1c-nacl"
|
|
run_dump_test "load1d-nacl"
|
|
run_dump_test "call1a"
|
|
run_dump_test "call1b"
|
|
run_dump_test "call1c"
|
|
run_dump_test "call1d"
|
|
run_dump_test "call1e"
|
|
run_dump_test "call1f"
|
|
run_dump_test "call1g"
|
|
run_dump_test "call1h"
|
|
run_dump_test "call1i"
|
|
run_dump_test "pr17935-1"
|
|
run_dump_test "pr17935-2"
|
|
run_dump_test "pr18160"
|
|
run_dump_test "pr18176"
|
|
run_dump_test "pr18801"
|
|
run_dump_test "pr18815"
|
|
run_dump_test "pr19013"
|
|
run_dump_test "pr19013-x32"
|
|
run_dump_test "pr19013-nacl"
|
|
run_dump_test "pr19162"
|
|
run_dump_test "pr19175"
|
|
run_dump_test "pr18591"
|
|
|
|
# Add $PLT_CFLAGS if PLT is expected.
|
|
global PLT_CFLAGS
|
|
|
|
# Must be native with the C compiler
|
|
if { [isnative] && [which $CC] != 0 } {
|
|
run_cc_link_tests {
|
|
{"Helper X32 DSO from x86-64 object" "" "-m64 -fPIC -g"
|
|
{simple.c} {} "libsimple.a"}
|
|
}
|
|
|
|
set convertx32 "$objcopy -O elf32-x86-64 tmpdir/simple.o tmpdir/simple-x32.o"
|
|
send_log "$convertx32\n"
|
|
set got [remote_exec host "$convertx32"]
|
|
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
|
|
send_log "$got\n"
|
|
fail "Convert x86-64 object to x32"
|
|
return
|
|
}
|
|
|
|
run_ld_link_tests {
|
|
{"X32 DSO from x86-64 object"
|
|
"-shared -melf32_x86_64 tmpdir/simple-x32.o" "" "--x32"
|
|
{dummy.s} {{readelf {-s --wide} x86-64-x32.rd}} "x86-64-x32"}
|
|
}
|
|
|
|
run_cc_link_tests [list \
|
|
[list \
|
|
"Build plt-lib.so" \
|
|
"-shared" \
|
|
"-fPIC" \
|
|
{ plt-lib.c } \
|
|
{} \
|
|
"libplt-lib.so" \
|
|
] \
|
|
[list \
|
|
"Build libplt-main1.a" \
|
|
"" \
|
|
"-fPIC -Wa,-mrelax-relocations=yes" \
|
|
{ plt-main1.c } \
|
|
{{readelf {-Wr} plt-main1.rd}} \
|
|
"libplt-main1.a" \
|
|
] \
|
|
[list \
|
|
"Build libplt-main2.a" \
|
|
"" \
|
|
"-fPIC -Wa,-mrelax-relocations=yes" \
|
|
{ plt-main2.c } \
|
|
{{readelf {-Wr} plt-main2.rd}} \
|
|
"libplt-main2.a" \
|
|
] \
|
|
[list \
|
|
"Build libplt-main3.a" \
|
|
"" \
|
|
"-fPIC -Wa,-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 $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" \
|
|
"" \
|
|
{ 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" \
|
|
{ plt-main5.c } \
|
|
{{readelf {-Wr} plt-main.rd}} \
|
|
"plt-main" \
|
|
] \
|
|
[list \
|
|
"Build copyreloc-lib.so" \
|
|
"-shared" \
|
|
"-fPIC" \
|
|
{ copyreloc-lib.c } \
|
|
{} \
|
|
"copyreloc-lib.so" \
|
|
] \
|
|
[list \
|
|
"Build copyreloc-main with PIE without -fPIE (1)" \
|
|
"tmpdir/copyreloc-lib.so -pie" \
|
|
"" \
|
|
{ copyreloc-main.S } \
|
|
{{readelf {-Wr} copyreloc-main1.rd}} \
|
|
"copyreloc-main" \
|
|
] \
|
|
[list \
|
|
"Build copyreloc-main with PIE without -fPIE (2)" \
|
|
"tmpdir/copyreloc-lib.so -pie" \
|
|
"" \
|
|
{ copyreloc-main.S } \
|
|
{{readelf {-Wr} copyreloc-main2.rd}} \
|
|
"copyreloc-main" \
|
|
] \
|
|
[list \
|
|
"Build pr17689.so" \
|
|
"-shared" \
|
|
"-fPIC" \
|
|
{ pr17689a.c } \
|
|
{} \
|
|
"pr17689.so" \
|
|
] \
|
|
[list \
|
|
"Build pr17689now.so with -z now" \
|
|
"-shared -Wl,-z,now" \
|
|
"-fPIC" \
|
|
{ pr17689a.c } \
|
|
{{readelf {-Wr} pr17689now.rd}} \
|
|
"pr17689now.so" \
|
|
] \
|
|
[list \
|
|
"Build pr17689 with PIE without -fPIE" \
|
|
"tmpdir/pr17689.so -pie" \
|
|
"" \
|
|
{ pr17689b.S } \
|
|
{{readelf {-Wr} pr17689.rd}} \
|
|
"pr17689" \
|
|
] \
|
|
[list \
|
|
"Build pr17689 with PIE -z now without -fPIE" \
|
|
"tmpdir/pr17689.so -pie -Wl,-z,now" \
|
|
"" \
|
|
{ pr17689b.S } \
|
|
{{readelf {-Wr} pr17689now.rd}} \
|
|
"pr17689now" \
|
|
] \
|
|
[list \
|
|
"Build pr17827 with PIE without -fPIE" \
|
|
"tmpdir/pr17689.so -pie" \
|
|
"" \
|
|
{ pr17689b.S } \
|
|
{{readelf {-Wr} pr17827.rd}} \
|
|
"pr17827" \
|
|
] \
|
|
[list \
|
|
"Build pr18900.so" \
|
|
"-shared" \
|
|
"-fPIC" \
|
|
{ pr18900a.c } \
|
|
"" \
|
|
"pr18900.so" \
|
|
] \
|
|
[list \
|
|
"Build pr18900a" \
|
|
"tmpdir/pr18900.so" \
|
|
"" \
|
|
{ pr18900b.c pr18900c.c } \
|
|
{{readelf {-Wrd} pr18900a.rd}} \
|
|
"pr18900a" \
|
|
] \
|
|
[list \
|
|
"Build pr18900b" \
|
|
"tmpdir/pr18900.so" \
|
|
"" \
|
|
{ pr18900b.c pr18900c.c } \
|
|
{{readelf {-Wrd} pr18900b.rd}} \
|
|
"pr18900b" \
|
|
] \
|
|
[list \
|
|
"Build pr19031.so" \
|
|
"-shared" \
|
|
"-fPIC" \
|
|
{ pr19031a.c } \
|
|
"" \
|
|
"pr19031.so" \
|
|
] \
|
|
[list \
|
|
"Build gotpcrel1d.so" \
|
|
"-shared" \
|
|
"" \
|
|
{ gotpcrel1d.S } \
|
|
"" \
|
|
"gotpcrel1d.so" \
|
|
] \
|
|
[list \
|
|
"Build gotpcrel1" \
|
|
"tmpdir/gotpcrel1d.so" \
|
|
"-Wa,-mrelax-relocations=yes" \
|
|
{ gotpcrel1a.S gotpcrel1b.c gotpcrel1c.c } \
|
|
{{objdump {-dw} gotpcrel1.dd}} \
|
|
"gotpcrel1" \
|
|
] \
|
|
[list \
|
|
"Build pr19319.so" \
|
|
"-shared" \
|
|
"" \
|
|
{ pr19319a.S } \
|
|
"" \
|
|
"pr19319.so" \
|
|
] \
|
|
[list \
|
|
"Build pr19319" \
|
|
"-pie -nostdlib -nostartfiles tmpdir/pr19319.so" \
|
|
"" \
|
|
{ pr19319b.S } \
|
|
{{objdump {-dw} pr19319.dd}} \
|
|
"pr19319" \
|
|
] \
|
|
]
|
|
|
|
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" \
|
|
"" \
|
|
{ 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" \
|
|
"" \
|
|
{ plt-main5.c } \
|
|
"plt-main-pie" \
|
|
"plt-main.out" \
|
|
"-fPIC" \
|
|
] \
|
|
[list \
|
|
"Run copyreloc-main with PIE without -fPIE" \
|
|
"tmpdir/copyreloc-lib.so -pie" \
|
|
"" \
|
|
{ copyreloc-main.S } \
|
|
"copyreloc-main" \
|
|
"copyreloc-main.out" \
|
|
] \
|
|
[list \
|
|
"Run pr17689 with PIE without -fPIE" \
|
|
"tmpdir/pr17689.so -pie" \
|
|
"" \
|
|
{ pr17689b.S } \
|
|
"pr17689" \
|
|
"pr17689.out" \
|
|
] \
|
|
[list \
|
|
"Run pr17689 with PIE -z now without -fPIE" \
|
|
"tmpdir/pr17689.so -pie -z now" \
|
|
"" \
|
|
{ pr17689b.S } \
|
|
"pr17689now" \
|
|
"pr17689.out" \
|
|
] \
|
|
[list \
|
|
"Run pr18900" \
|
|
"tmpdir/pr18900.so" \
|
|
"" \
|
|
{ pr18900b.c pr18900c.c } \
|
|
"pr18900" \
|
|
"pr18900.out" \
|
|
] \
|
|
[list \
|
|
"Run pr19031" \
|
|
"tmpdir/pr19031.so" \
|
|
"" \
|
|
{ pr19031b.S pr19031c.c } \
|
|
"pr19031" \
|
|
"pr19031.out" \
|
|
] \
|
|
[list \
|
|
"Run gotpcrel1" \
|
|
"tmpdir/gotpcrel1d.so" \
|
|
"" \
|
|
{ gotpcrel1a.S gotpcrel1b.c gotpcrel1c.c } \
|
|
"gotpcrel1" \
|
|
"gotpcrel1.out" \
|
|
] \
|
|
]
|
|
|
|
if { [istarget "x86_64-*-linux*"] \
|
|
&& ![istarget "x86_64-*-linux*-gnux32"]} {
|
|
|
|
run_cc_link_tests [list \
|
|
[list \
|
|
"Build plt-main with -z bndplt" \
|
|
"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
|
|
tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt" \
|
|
"" \
|
|
{ plt-main5.c } \
|
|
{{objdump {-drw} plt-main-bnd.dd}} \
|
|
"plt-main-bnd" \
|
|
] \
|
|
[list \
|
|
"Build plt-main with PIE and -z bndplt" \
|
|
"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
|
|
tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt -pie" \
|
|
"-fPIC" \
|
|
{ plt-main5.c } \
|
|
{{objdump {-drw} plt-main-bnd.dd}} \
|
|
"plt-main-pie-bnd" \
|
|
] \
|
|
]
|
|
|
|
run_ld_link_exec_tests [] [list \
|
|
[list \
|
|
"Run plt-main with -z bndplt" \
|
|
"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
|
|
tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt" \
|
|
"" \
|
|
{ plt-main5.c } \
|
|
"plt-main-bnd" \
|
|
"plt-main.out" \
|
|
] \
|
|
[list \
|
|
"Run plt-main with PIE and -z bndplt" \
|
|
"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
|
|
tmpdir/plt-main4.o tmpdir/libplt-lib.so -z bndplt -pie" \
|
|
"" \
|
|
{ plt-main5.c } \
|
|
"plt-main-pie-bnd" \
|
|
"plt-main.out" \
|
|
"-fPIC" \
|
|
] \
|
|
]
|
|
}
|
|
}
|
|
|
|
if { ![istarget "x86_64-*-linux*"]} {
|
|
return
|
|
}
|
|
|
|
# Linux only tests
|
|
run_dump_test "pr17618"
|
|
run_dump_test "pltgot-1"
|
|
run_dump_test "pltgot-2"
|