"-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" ""
+ "-shared -melf_x86_64 --no-ld-generated-unwind-info --hash-style=sysv" ""
"--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 -fpic -shared transitions with r15 as GOT base"
- "-shared -melf_x86_64 --no-ld-generated-unwind-info" ""
+ "-shared -melf_x86_64 --no-ld-generated-unwind-info --hash-style=sysv" ""
"--64 -mrelax-relocations=yes"
{tlspic3.s tlspic2.s}
{{readelf -WSsrl tlspic2.rd} {objdump -drj.text\ -Mintel64 tlspic2.dd}
{objdump -sj.got tlspic2.sd} {objdump -sj.tdata tlspic2.td}}
"libtlspic2.so"}
{"TLS descriptor -fpic -shared transitions"
- "-shared -melf_x86_64 --no-ld-generated-unwind-info" ""
+ "-shared -melf_x86_64 --no-ld-generated-unwind-info --hash-style=sysv" ""
"--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}
{"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" ""
+ "-melf_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info --hash-style=sysv" ""
"--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 -fpic and -fno-pic exec transitions without PLT"
- "-melf_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info" ""
+ "-melf_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info --hash-style=sysv" ""
"-mrelax-relocations=yes --64" {tlsbinpic2.s tlsbin.s}
{{readelf -WSsrl 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_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info" ""
+ "-melf_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info --hash-style=sysv" ""
"--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" ""
+ "-shared -melf_x86_64 --no-ld-generated-unwind-info --hash-style=sysv" ""
"--64" {tlsgdesc.s}
{{readelf -WSsrl tlsgdesc.rd} {objdump -drj.text\ -Mintel64 tlsgdesc.dd}}
"libtlsgdesc.so"}
run_dump_test "gotplt1"
run_dump_test "pie1"
run_dump_test "pie2"
+run_dump_test "pie3"
+run_dump_test "pie3-nacl"
run_dump_test "pic1"
run_dump_test "largecomm-1a"
run_dump_test "largecomm-1b"
run_dump_test "property-x86-3-x32"
run_dump_test "property-x86-4a-x32"
run_dump_test "property-x86-4b-x32"
+run_dump_test "property-x86-ibt1a"
+run_dump_test "property-x86-ibt1b"
+run_dump_test "property-x86-ibt1a-x32"
+run_dump_test "property-x86-ibt1b-x32"
+run_dump_test "property-x86-ibt2"
+run_dump_test "property-x86-ibt2-x32"
+run_dump_test "property-x86-ibt3a"
+run_dump_test "property-x86-ibt3b"
+run_dump_test "property-x86-ibt3a-x32"
+run_dump_test "property-x86-ibt3b-x32"
+run_dump_test "property-x86-ibt4"
+run_dump_test "property-x86-ibt4-x32"
+run_dump_test "property-x86-ibt5"
+run_dump_test "property-x86-ibt5-x32"
+run_dump_test "property-x86-shstk1a"
+run_dump_test "property-x86-shstk1b"
+run_dump_test "property-x86-shstk1a-x32"
+run_dump_test "property-x86-shstk1b-x32"
+run_dump_test "property-x86-shstk2"
+run_dump_test "property-x86-shstk2-x32"
+run_dump_test "property-x86-shstk3a"
+run_dump_test "property-x86-shstk3b"
+run_dump_test "property-x86-shstk3a-x32"
+run_dump_test "property-x86-shstk3b-x32"
+run_dump_test "property-x86-shstk4"
+run_dump_test "property-x86-shstk4-x32"
+run_dump_test "property-x86-shstk5"
+run_dump_test "property-x86-shstk5-x32"
+run_dump_test "pr21884"
if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} {
return
] \
[list \
"Build gotpcrel1" \
- "-Wl,--as-needed tmpdir/gotpcrel1a.o tmpdir/gotpcrel1b.o tmpdir/gotpcrel1c.o tmpdir/gotpcrel1d.so" \
+ "$NOPIE_LDFLAGS -Wl,--as-needed tmpdir/gotpcrel1a.o \
+ tmpdir/gotpcrel1b.o tmpdir/gotpcrel1c.o \
+ tmpdir/gotpcrel1d.so" \
{ dummy.s } \
"" \
{{objdump {-dw} gotpcrel1.dd}} \
] \
[list \
"Run pr19031" \
- "-Wl,--no-as-needed tmpdir/pr19031.so" \
+ "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/pr19031.so" \
"" \
{ pr19031b.S pr19031c.c } \
"pr19031" \
"pr19031.out" \
+ "$NOPIE_CFLAGS" \
] \
[list \
"Run gotpcrel1" \
}
}
+ if { [istarget "x86_64-*-linux*"] } {
+ if { [istarget "x86_64-*-linux*-gnux32"] } {
+ set pltdump {{objdump {-drw} plt-main-ibt-x32.dd}}
+ set pltsecdump {{readelf {-SW} plt-main-ibt-now.rd} {objdump {-drw} plt-main-ibt-x32.dd}}
+ } else {
+ set pltdump {{objdump {-drw} plt-main-ibt.dd}}
+ set pltsecdump {{readelf {-SW} plt-main-ibt-now.rd} {objdump {-drw} plt-main-ibt.dd}}
+ }
+ run_cc_link_tests [list \
+ [list \
+ "Build plt-main with -z ibtplt" \
+ "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so -z ibtplt" \
+ "" \
+ { plt-main5.c } \
+ $pltdump \
+ "plt-main-ibt" \
+ ] \
+ [list \
+ "Build plt-main with PIE and -z ibtplt" \
+ "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so -z ibtplt -pie" \
+ "-fPIC" \
+ { plt-main5.c } \
+ $pltdump \
+ "plt-main-pie-ibt" \
+ ] \
+ [list \
+ "Build plt-main with -z ibtplt -z now" \
+ "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so -z ibtplt -z now" \
+ "" \
+ { plt-main5.c } \
+ $pltsecdump \
+ "plt-main-ibt-now" \
+ ] \
+ [list \
+ "Build plt-main with PIE and -z ibtplt -z now" \
+ "tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
+ tmpdir/plt-main4.o tmpdir/libplt-lib.so -z ibtplt -z now -pie" \
+ "-fPIC" \
+ { plt-main5.c } \
+ $pltsecdump \
+ "plt-main-pie-ibt-now" \
+ ] \
+ [list \
+ "Build libibtplt-lib.so with -z ibtplt" \
+ "-shared -z ibtplt" \
+ "-fPIC" \
+ { plt-main1.c plt-main2.c plt-main3.c plt-main4.c} \
+ $pltdump \
+ "libibtplt-lib.so" \
+ ] \
+ [list \
+ "Build libibtplt--now-lib.so with -z ibtplt -z now" \
+ "-shared -z ibtplt -z now" \
+ "-fPIC" \
+ { plt-main1.c plt-main2.c plt-main3.c plt-main4.c} \
+ $pltdump \
+ "libibtplt-now-lib.so" \
+ ] \
+ ]
+
+ run_ld_link_exec_tests [list \
+ [list \
+ "Run plt-main with -z ibtplt" \
+ "-Wl,--no-as-needed,-z,ibtplt 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-ibt" \
+ "plt-main.out" \
+ ] \
+ [list \
+ "Run plt-main with PIE and -z ibtplt" \
+ "-Wl,--no-as-needed,-z,ibtplt -pie 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-pie-ibt" \
+ "plt-main.out" \
+ "-fPIC" \
+ ] \
+ [list \
+ "Run plt-main with -z ibtplt -z now" \
+ "-Wl,--no-as-needed,-z,ibtplt,-z,now 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-ibt-now" \
+ "plt-main.out" \
+ ] \
+ [list \
+ "Run plt-main with PIE and -z ibtplt -z now" \
+ "-Wl,--no-as-needed,-z,ibtplt,-z,now -pie 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-pie-ibt-now" \
+ "plt-main.out" \
+ "-fPIC" \
+ ] \
+ [list \
+ "Run plt-main with libibtplt-lib.so -z ibtplt" \
+ "-Wl,--no-as-needed,-z,ibtplt tmpdir/libibtplt-lib.so \
+ tmpdir/libplt-lib.so" \
+ "" \
+ { plt-main5.c } \
+ "plt-main-ibt-lib" \
+ "plt-main.out" \
+ ] \
+ [list \
+ "Run plt-main with libibtplt-lib.so -z ibtplt -z now" \
+ "-Wl,--no-as-needed,-z,ibtplt,-z,now \
+ tmpdir/libibtplt-now-lib.so tmpdir/libplt-lib.so" \
+ "" \
+ { plt-main5.c } \
+ "plt-main-ibt-now-lib" \
+ "plt-main.out" \
+ ] \
+ ]
+
+ if { [check_ifunc_attribute_available] } {
+ run_ld_link_exec_tests [list \
+ [list \
+ "Run pr21481a" \
+ "$NOPIE_LDFLAGS -Wl,-z,ibtplt" \
+ "" \
+ { pr21481a.c pr21481b.S } \
+ "pr21481a" \
+ "pass.out" \
+ "$NOPIE_CFLAGS" \
+ ] \
+ [list \
+ "Run pr21481b" \
+ "$NOPIE_LDFLAGS -Wl,-z,ibtplt,-z,now" \
+ "" \
+ { pr21481a.c pr21481b.S } \
+ "pr21481b" \
+ "pass.out" \
+ "$NOPIE_CFLAGS" \
+ ] \
+ ]
+ }
+ }
+
undefined_weak "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS"
undefined_weak "-fPIE" ""
undefined_weak "-fPIE" "-pie"
run_ld_link_tests [list \
[list \
"basic PLT generation (-z now)" \
- "-z now -melf_x86_64 tmpdir/libpltlib.so" \
+ "-z now -melf_x86_64 --hash-style=sysv tmpdir/libpltlib.so" \
"" \
"--64" \
{plt2.s} \
{{readelf -SW plt2.rd} {objdump -dwr plt2.dd}} \
"plt2" \
] \
+ [list \
+ "Build pr21626.so" \
+ "-shared -melf_x86_64" \
+ "" \
+ "--64 -defsym __64_bit__=1" \
+ {property-x86-3.s} \
+ "" \
+ "pr21626.so" \
+ ] \
+ [list \
+ "Build pr21626" \
+ "-melf_x86_64 tmpdir/pr21626.so" \
+ "" \
+ "--64" \
+ {start.s foo.s} \
+ "" \
+ "pr21626" \
+ ] \
]
# Linux only tests
-run_dump_test "pr17618"
+global LD_CLASS
+if { "$LD_CLASS" == "64bit" } then {
+ # This test needs 64-bit linker.
+ run_dump_test "pr17618"
+}
run_dump_test "pltgot-1"
run_dump_test "pltgot-2"
run_dump_test "pr20830a"
run_dump_test "pr21038a-now"
run_dump_test "pr21038b-now"
run_dump_test "pr21038c-now"
+run_dump_test "ibt-plt-1"
+run_dump_test "ibt-plt-1-x32"
+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-2a-x32"
+run_dump_test "ibt-plt-2b-x32"
+run_dump_test "ibt-plt-2c-x32"
+run_dump_test "ibt-plt-2d-x32"
+run_dump_test "ibt-plt-3a"
+run_dump_test "ibt-plt-3b"
+run_dump_test "ibt-plt-3c"
+run_dump_test "ibt-plt-3d"
+run_dump_test "ibt-plt-3a-x32"
+run_dump_test "ibt-plt-3b-x32"
+run_dump_test "ibt-plt-3c-x32"
+run_dump_test "ibt-plt-3d-x32"