test: Prepare the test scripts for testing native Windows tools via WSL

Use the TOOLEXT variable in run-tests.sh in the same way as in the
Makefile. The Makefile sets this variable automatically if invoked
by mingw32-make, but if running run-tests.sh in WSL with native
Windows compilers, then we need to set TOOLEXT manually when calling
run-tests.sh.

Allow skipping the cfguard failure tests when run in such a
configuration, since Linux make in WSL can't easily run cmd.exe
like in MSYS2.
This commit is contained in:
Martin Storsjö committed 2023-01-21 23:48:24 +02:00
1 parent 9d96e5745f
commit 241a1cd148
2 files changed
+7 -3

No files matched your search

+3 -3
View File
@@ -52,14 +52,14 @@ cat<<EOF > is-ucrt.c
#endif
EOF
ANY_ARCH=$(echo $ARCHS | awk '{print $1}')
if ! $ANY_ARCH-w64-mingw32-gcc -E is-ucrt.c > /dev/null 2>&1; then
if ! $ANY_ARCH-w64-mingw32-gcc$TOOLEXT -E is-ucrt.c > /dev/null 2>&1; then
# If the default CRT isn't UCRT, we can't build for mingw32uwp.
unset HAVE_UWP
fi
rm -f is-ucrt.c
if (echo "int main(){}" | $ANY_ARCH-w64-mingw32-clang -x c++ - -o has-cfguard-test.exe -mguard=cf); then
if llvm-readobj --coff-load-config has-cfguard-test.exe | grep -q 'CF_INSTRUMENTED (0x100)'; then
if (echo "int main(){}" | $ANY_ARCH-w64-mingw32-clang$TOOLEXT -x c++ - -o has-cfguard-test.exe -mguard=cf); then
if llvm-readobj$TOOLEXT --coff-load-config has-cfguard-test.exe | grep -q 'CF_INSTRUMENTED (0x100)'; then
HAVE_CFGUARD=1
elif [ -n "$HAVE_CFGUARD" ]; then
echo "error: Toolchain doesn't seem to include Control Flow Guard support." 1>&2
+4
View File
@@ -252,8 +252,12 @@ ifeq ($(CMD),)
FAILURE_TEST_TARGETS = $(addprefix .failtested., $(FAILURE_TESTS))
CUSTOM1_FAILURE_TEST_TARGETS = .customtest1.bufferoverflow-fortify$(EXEEXT)
ifneq ($(HAVE_CFGUARD),)
ifeq ($(WSL),)
# These tests do special calling of cmd.exe, which don't quite
# work when running with Linux make in WSL.
CUSTOM2_FAILURE_TEST_TARGETS = .customtest2.cfguard-test$(EXEEXT)
endif
endif
endif
endif