mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-11-27 10:00:59 +00:00
enhance WAMR_BUILD_SANITIZER to support multiple sanitizers (#4489)
This commit is contained in:
parent
390e78030e
commit
e1ba1dde10
|
|
@ -143,25 +143,55 @@ if (NOT DEFINED WAMR_BUILD_SANITIZER)
|
||||||
set(WAMR_BUILD_SANITIZER $ENV{WAMR_BUILD_SANITIZER})
|
set(WAMR_BUILD_SANITIZER $ENV{WAMR_BUILD_SANITIZER})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT DEFINED WAMR_BUILD_SANITIZER)
|
if (NOT WAMR_BUILD_SANITIZER STREQUAL "")
|
||||||
set(WAMR_BUILD_SANITIZER "")
|
set(SUPPORTED_SANITIZERS "ubsan;asan;tsan;posan")
|
||||||
elseif (WAMR_BUILD_SANITIZER STREQUAL "ubsan")
|
string(REPLACE "," ";" SANITIZER_LIST "${WAMR_BUILD_SANITIZER}")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover=all -fno-sanitize=alignment" )
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
|
# Check uncompabile sanitizers
|
||||||
elseif (WAMR_BUILD_SANITIZER STREQUAL "asan")
|
if("tsan" IN_LIST SANITIZER_LIST AND "asan" IN_LIST SANITIZER_LIST)
|
||||||
if (NOT WAMR_BUILD_JIT EQUAL 1)
|
message(FATAL_ERROR "ThreadSanitizer (tsan) and AddressSanitizer (asan) cannot be used together!")
|
||||||
set (ASAN_OPTIONS "verbosity=2 debug=true ")
|
endif()
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=address -fno-sanitize-recover=all" )
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
|
# Check every sanitizer in the list
|
||||||
|
set(INVALID_SANITIZERS "")
|
||||||
|
list(REMOVE_DUPLICATES SANITIZER_LIST)
|
||||||
|
set(SANITIZER_FLAGS)
|
||||||
|
set(NO_SANITIZER_FLAGS)
|
||||||
|
foreach(sanitizer ${SANITIZER_LIST})
|
||||||
|
string(STRIP "${sanitizer}" sanitizer)
|
||||||
|
if(NOT sanitizer IN_LIST SUPPORTED_SANITIZERS)
|
||||||
|
list(APPEND INVALID_SANITIZERS "${sanitizer}")
|
||||||
|
elseif(sanitizer STREQUAL "ubsan")
|
||||||
|
list(APPEND SANITIZER_FLAGS "undefined")
|
||||||
|
list(APPEND NO_SANITIZER_FLAGS "alignment")
|
||||||
|
elseif(sanitizer STREQUAL "asan")
|
||||||
|
if (NOT WAMR_BUILD_JIT EQUAL 1)
|
||||||
|
set(ENV{ASAN_OPTIONS} "verbosity=2 debug=true")
|
||||||
|
list(APPEND SANITIZER_FLAGS "address")
|
||||||
|
else()
|
||||||
|
message(WARNING "AddressSanitizer is not supported in LLVM JIT mode, skip it")
|
||||||
|
endif()
|
||||||
|
elseif(sanitizer STREQUAL "tsan")
|
||||||
|
list(APPEND SANITIZER_FLAGS "thread")
|
||||||
|
elseif(sanitizer STREQUAL "posan")
|
||||||
|
list(APPEND SANITIZER_FLAGS "pointer-overflow")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if(INVALID_SANITIZERS)
|
||||||
|
message(FATAL_ERROR "Unsupported sanitizers: ${INVALID_SANITIZERS}")
|
||||||
|
endif()
|
||||||
|
# common flags for all sanitizers
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fno-sanitize-recover=all")
|
||||||
|
if(SANITIZER_FLAGS)
|
||||||
|
string(REPLACE ";" "," SANITIZER_FLAGS_STR "${SANITIZER_FLAGS}")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=${SANITIZER_FLAGS_STR}")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${SANITIZER_FLAGS_STR}")
|
||||||
|
endif()
|
||||||
|
if(NO_SANITIZER_FLAGS)
|
||||||
|
string(REPLACE ";" "," NO_SANITIZER_FLAGS_STR "${NO_SANITIZER_FLAGS}")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-sanitize=${NO_SANITIZER_FLAGS_STR}")
|
||||||
endif()
|
endif()
|
||||||
elseif (WAMR_BUILD_SANITIZER STREQUAL "tsan")
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=thread -fno-sanitize-recover=all" )
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread")
|
|
||||||
elseif (WAMR_BUILD_SANITIZER STREQUAL "posan")
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=pointer-overflow -fno-sanitize-recover=all" )
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=pointer-overflow")
|
|
||||||
elseif (NOT (WAMR_BUILD_SANITIZER STREQUAL "") )
|
|
||||||
message(SEND_ERROR "Unsupported sanitizer: ${WAMR_BUILD_SANITIZER}")
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (WAMR_BUILD_LINUX_PERF EQUAL 1)
|
if (WAMR_BUILD_LINUX_PERF EQUAL 1)
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,9 @@ function help()
|
||||||
echo "-F set the firmware path used by qemu"
|
echo "-F set the firmware path used by qemu"
|
||||||
echo "-C enable code coverage collect"
|
echo "-C enable code coverage collect"
|
||||||
echo "-j set the platform to test"
|
echo "-j set the platform to test"
|
||||||
echo "-T set sanitizer to use in tests(ubsan|tsan|asan|posan)"
|
echo "-T set the sanitizer(s) used during testing. It can be either a comma-separated list
|
||||||
|
(e.g., ubsan, asan) or a single option
|
||||||
|
(e.g., ubsan, tsan, asan, posan)."
|
||||||
echo "-A use the specified wamrc command instead of building it"
|
echo "-A use the specified wamrc command instead of building it"
|
||||||
echo "-N enable extended const expression feature"
|
echo "-N enable extended const expression feature"
|
||||||
echo "-r [requirement name] [N [N ...]] specify a requirement name followed by one or more"
|
echo "-r [requirement name] [N [N ...]] specify a requirement name followed by one or more"
|
||||||
|
|
@ -1066,26 +1068,9 @@ function trigger()
|
||||||
EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_TAIL_CALL=1"
|
EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_TAIL_CALL=1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "SANITIZER IS" $WAMR_BUILD_SANITIZER
|
if [[ -n "$WAMR_BUILD_SANITIZER" ]]; then
|
||||||
|
echo "Setting run with sanitizer(s): $WAMR_BUILD_SANITIZER"
|
||||||
if [[ "$WAMR_BUILD_SANITIZER" == "ubsan" ]]; then
|
EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_SANITIZER=$WAMR_BUILD_SANITIZER"
|
||||||
echo "Setting run with ubsan"
|
|
||||||
EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_SANITIZER=ubsan"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$WAMR_BUILD_SANITIZER" == "asan" ]]; then
|
|
||||||
echo "Setting run with asan"
|
|
||||||
EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_SANITIZER=asan"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$WAMR_BUILD_SANITIZER" == "tsan" ]]; then
|
|
||||||
echo "Setting run with tsan"
|
|
||||||
EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_SANITIZER=tsan"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$WAMR_BUILD_SANITIZER" == "posan" ]]; then
|
|
||||||
echo "Setting run with posan"
|
|
||||||
EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_SANITIZER=posan"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Make sure we're using the builtin WASI libc implementation
|
# Make sure we're using the builtin WASI libc implementation
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user