diff options
| author | Andy Caldwell <andrew.caldwell@metaswitch.com> | 2021-11-01 18:38:11 +0000 |
|---|---|---|
| committer | Andy Caldwell <andrew.caldwell@metaswitch.com> | 2021-11-01 18:38:11 +0000 |
| commit | 6a88311373bf18b272aed98d3032852cfcec4455 (patch) | |
| tree | 7555506ea1a720800d87b1f47b7d50b9a05e07e8 | |
| parent | b94da2bace66b4ba5485363ac7ba4fe85ad41578 (diff) | |
| download | rust-6a88311373bf18b272aed98d3032852cfcec4455.tar.gz rust-6a88311373bf18b272aed98d3032852cfcec4455.zip | |
Check for -static-pie support before testing support
| -rw-r--r-- | src/test/run-make/static-pie/Makefile | 17 | ||||
| -rwxr-xr-x | src/test/run-make/static-pie/check_clang_version.sh | 20 | ||||
| -rwxr-xr-x | src/test/run-make/static-pie/check_gcc_version.sh | 20 |
3 files changed, 49 insertions, 8 deletions
diff --git a/src/test/run-make/static-pie/Makefile b/src/test/run-make/static-pie/Makefile index f5fe4bc5afe..945ec1724ac 100644 --- a/src/test/run-make/static-pie/Makefile +++ b/src/test/run-make/static-pie/Makefile @@ -7,11 +7,12 @@ # How to manually run this # $ ./x.py test --target x86_64-unknown-linux-[musl,gnu] src/test/run-make/static-pie -all: - $(RUSTC) --target $(TARGET) -C target-feature=+crt-static test-aslr.rs - # Check that no dynamic interpreter is set - ! readelf -l $(call RUN_BINFILE,test-aslr) | $(CGREP) INTERP - # Check that we have a dynamic executable - readelf -l $(call RUN_BINFILE,test-aslr) | $(CGREP) DYNAMIC - # Check for address space layout randomization - $(call RUN,test-aslr) --test-aslr +all: test-clang test-gcc + +test-%: + if ./check_$*_version.sh; then\ + ${RUSTC} -Clinker=$* -Clinker-flavor=gcc --target ${TARGET} -C target-feature=+crt-static test-aslr.rs; \ + ! readelf -l $(call RUN_BINFILE,test-aslr) | $(CGREP) INTERP; \ + readelf -l $(call RUN_BINFILE,test-aslr) | $(CGREP) DYNAMIC; \ + $(call RUN,test-aslr) --test-aslr; \ + fi diff --git a/src/test/run-make/static-pie/check_clang_version.sh b/src/test/run-make/static-pie/check_clang_version.sh new file mode 100755 index 00000000000..b8e97c3da7d --- /dev/null +++ b/src/test/run-make/static-pie/check_clang_version.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +set -euo pipefail + +if command -v clang > /dev/null +then + CLANG_VERSION=$(echo __clang_major__ | clang -E -x c - | grep -v -e '^#' ) + echo "clang version $CLANG_VERSION detected" + if (( $CLANG_VERSION >= 9 )) + then + echo "clang supports -static-pie" + exit 0 + else + echo "clang too old to support -static-pie, skipping test" + exit 1 + fi +else + echo "No clang version detected" + exit 2 +fi diff --git a/src/test/run-make/static-pie/check_gcc_version.sh b/src/test/run-make/static-pie/check_gcc_version.sh new file mode 100755 index 00000000000..d07e1d151df --- /dev/null +++ b/src/test/run-make/static-pie/check_gcc_version.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +set -euo pipefail + +if command -v gcc > /dev/null +then + GCC_VERSION=$(echo __GNUC__ | gcc -E -x c - | grep -v -e '^#' ) + echo "gcc version $GCC_VERSION detected" + if (( $GCC_VERSION >= 8 )) + then + echo "gcc supports -static-pie" + exit 0 + else + echo "gcc too old to support -static-pie, skipping test" + exit 1 + fi +else + echo "No gcc version detected" + exit 2 +fi |
