# Expect script for simple native Linux/x86 tests.
-# Copyright (C) 2018 Free Software Foundation, Inc.
+# Copyright (C) 2018-2020 Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
# MA 02110-1301, USA.
#
+# Linux/x86 tests.
+if { ![istarget "i?86-*-linux*"] \
+ && ![istarget "x86_64-*-linux*"] \
+ && ![istarget "amd64-*-linux*"] } {
+ return
+}
+
+run_ld_link_tests [list \
+ [list \
+ "Build pr24920.so" \
+ "-shared" \
+ "" \
+ "" \
+ {dummy.s} \
+ {} \
+ "pr24920.so" \
+ ] \
+ [list \
+ "Build pr24920" \
+ "-static " \
+ "-Bdynamic tmpdir/pr24920.so" \
+ "" \
+ {start.s} \
+ {{ld pr24920.err}} \
+ "pr24920" \
+ ] \
+]
+
# Test very simple native Linux/x86 programs with linux-x86.S.
-if { ![isnative] || [which $CC] == 0 \
- || (![istarget "i?86-*-linux*"] \
- && ![istarget "x86_64-*-linux*"] \
- && ![istarget "amd64-*-linux*"]) } {
+if { ![isnative] || ![check_compiler_available] } {
return
}
"Run PR ld/23428 test" \
"--no-dynamic-linker -z separate-code" \
"" \
- { linux-x86.S pr23428.c } \
+ { linux-x86.S pr23428.c dummy.s } \
"pr23428" \
"pass.out" \
"$NOPIE_CFLAGS -fno-asynchronous-unwind-tables" \
"asm" \
] \
]
+
+run_ld_link_tests [list \
+ [list \
+ "Build x86-feature-1" \
+ "-z separate-code -z shstk" \
+ "" \
+ "-mx86-used-note=yes" \
+ { start.s } \
+ {{readelf -n x86-feature-1a.rd}} \
+ "x86-feature-1" \
+ ] \
+]
+
+proc elfedit_test { options test output } {
+ global ELFEDIT
+ global READELF
+ global srcdir
+ global subdir
+
+ set test_name "elfedit $options"
+ send_log "$ELFEDIT $options tmpdir/$test\n"
+ set got [remote_exec host "$ELFEDIT $options tmpdir/$test" "" "/dev/null"]
+ if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
+ send_log "$got\n"
+ unresolved "$test_name"
+ }
+ send_log "$READELF -n $options tmpdir/$test > tmpdir/$output.out\n"
+ set got [remote_exec host "$READELF -n tmpdir/$test" "" "/dev/null" "tmpdir/$output.out"]
+ if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
+ send_log "$got\n"
+ unresolved "$test_name"
+}
+ if { [regexp_diff tmpdir/$output.out $srcdir/$subdir/$output.rd] } then {
+ fail "$test_name"
+ } else {
+ pass "$test_name"
+ }
+}
+
+elfedit_test "--enable-x86-feature ibt --disable-x86-feature shstk" \
+ x86-feature-1 x86-feature-1b
+elfedit_test "--enable-x86-feature ibt" x86-feature-1 x86-feature-1b
+elfedit_test "--disable-x86-feature shstk" x86-feature-1 x86-feature-1c
+elfedit_test "--disable-x86-feature ibt" x86-feature-1 x86-feature-1d
+elfedit_test "--enable-x86-feature ibt --enable-x86-feature shstk" \
+ x86-feature-1 x86-feature-1e