Undefined behavior warnings caught by ROCPROFILER_DEFAULT_FAIL_REGEX (#23)

* Add regex for undefined behavior to ROCPROFILER_DEFAULT_FAIL_REGEX

- add UBSAN_OPTIONS to setup-sanitizer-env.sh

* Improve ROCPROFILER_DEFAULT_FAIL_REGEX

* Use -fno-sanitize-recover=undefined flag

- this compiler flag causes all undefined behavior errors to exit

* Revert ROCPROFILER_DEFAULT_FAIL_REGEX

* fix for shift overflow

---------

Co-authored-by: Jonathan R. Madsen <jonathanrmadsen@gmail.com>
Co-authored-by: Manjunath-Jakaraddi <manjunath.jakaraddi@amd.com>

[ROCm/rocprofiler-sdk commit: e743bf5a93]
Этот коммит содержится в:
Madsen, Jonathan
2025-02-06 08:55:57 -06:00
коммит произвёл GitHub
родитель 6bd6bb1aec
Коммит e677801859
16 изменённых файлов: 88 добавлений и 42 удалений
+8 -6
Просмотреть файл
@@ -13,11 +13,12 @@ endif()
set_property(CACHE ROCPROFILER_MEMCHECK PROPERTY STRINGS "${ROCPROFILER_MEMCHECK_TYPES}")
function(rocprofiler_add_memcheck_flags _TYPE _FLAG _LIB_BASE)
function(rocprofiler_add_memcheck_flags _TYPE _LIB_BASE _FLAG)
target_compile_options(
rocprofiler-sdk-memcheck
INTERFACE $<BUILD_INTERFACE:-g3 -Og -fno-omit-frame-pointer
-fno-optimize-sibling-calls -fno-inline-functions -fsanitize=${_FLAG}>)
-fno-optimize-sibling-calls -fno-inline-functions -fsanitize=${_FLAG}
${ARGN}>)
target_link_options(rocprofiler-sdk-memcheck INTERFACE
$<BUILD_INTERFACE:-fsanitize=${_FLAG} -Wl,--no-undefined>)
@@ -87,18 +88,19 @@ else()
endif()
if(ROCPROFILER_MEMCHECK STREQUAL "AddressSanitizer")
rocprofiler_add_memcheck_flags("${ROCPROFILER_MEMCHECK}" "address" "asan")
rocprofiler_add_memcheck_flags("${ROCPROFILER_MEMCHECK}" "asan" "address")
rocprofiler_set_memcheck_env("${ROCPROFILER_MEMCHECK}" "asan"
${AddressSanitizer_SOVERSION})
elseif(ROCPROFILER_MEMCHECK STREQUAL "LeakSanitizer")
rocprofiler_add_memcheck_flags("${ROCPROFILER_MEMCHECK}" "leak" "lsan")
rocprofiler_add_memcheck_flags("${ROCPROFILER_MEMCHECK}" "lsan" "leak")
rocprofiler_set_memcheck_env("${ROCPROFILER_MEMCHECK}" "lsan")
elseif(ROCPROFILER_MEMCHECK STREQUAL "ThreadSanitizer")
rocprofiler_add_memcheck_flags("${ROCPROFILER_MEMCHECK}" "thread" "tsan")
rocprofiler_add_memcheck_flags("${ROCPROFILER_MEMCHECK}" "tsan" "thread")
rocprofiler_set_memcheck_env("${ROCPROFILER_MEMCHECK}" "tsan"
${ThreadSanitizer_SOVERSION})
elseif(ROCPROFILER_MEMCHECK STREQUAL "UndefinedBehaviorSanitizer")
rocprofiler_add_memcheck_flags("${ROCPROFILER_MEMCHECK}" "undefined" "ubsan")
rocprofiler_add_memcheck_flags("${ROCPROFILER_MEMCHECK}" "ubsan" "undefined"
"-fno-sanitize-recover=undefined")
rocprofiler_set_memcheck_env("${ROCPROFILER_MEMCHECK}" "ubsan")
elseif(NOT ROCPROFILER_MEMCHECK STREQUAL "")
message(FATAL_ERROR "Unsupported ROCPROFILER_MEMCHECK type: ${ROCPROFILER_MEMCHECK}")
+2 -2
Просмотреть файл
@@ -61,8 +61,8 @@ mark_as_advanced(libdw_INCLUDE_DIR libdw_LIBRARY)
# default FAIL_REGULAR_EXPRESSION for tests
set(ROCPROFILER_DEFAULT_FAIL_REGEX
"threw an exception|Permission denied|Could not create logging file"
CACHE STRING "Default FAIL_REGULAR_EXPRESSION for tests")
"threw an exception|Permission denied|Could not create logging file|failed with error code"
CACHE INTERNAL "Default FAIL_REGULAR_EXPRESSION for tests")
# build flags
add_library(rocprofiler-sdk-samples-build-flags INTERFACE)
+4 -2
Просмотреть файл
@@ -23,8 +23,10 @@ gtest_add_tests(
TEST_LIST codeobj-library-test_TESTS
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_tests_properties(${codeobj-library-test_TESTS} PROPERTIES TIMEOUT 10 LABELS
"unittests")
set_tests_properties(
${codeobj-library-test_TESTS}
PROPERTIES TIMEOUT 10 LABELS "unittests" FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}")
target_compile_definitions(codeobj-library-test
PRIVATE -DCODEOBJ_BINARY_DIR=\"${CMAKE_CURRENT_BINARY_DIR}/\")
+3 -1
Просмотреть файл
@@ -25,4 +25,6 @@ gtest_add_tests(
TEST_LIST aql-test_TESTS
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_tests_properties(${aql-test_TESTS} PROPERTIES TIMEOUT 45 LABELS "unittests")
set_tests_properties(
${aql-test_TESTS} PROPERTIES TIMEOUT 45 LABELS "unittests" FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}")
+3 -3
Просмотреть файл
@@ -86,8 +86,7 @@ rocprofiler::counters::set_dim_in_rec(rocprofiler_counter_instance_id_t&
rocprofiler_profile_counter_instance_types dim,
size_t value)
{
size_t bit_length = DIM_BIT_LENGTH / ROCPROFILER_DIMENSION_LAST;
int64_t mask = (MAX_64 >> (64 - bit_length)) << ((dim - 1) * bit_length);
size_t bit_length = DIM_BIT_LENGTH / ROCPROFILER_DIMENSION_LAST;
if(dim == ROCPROFILER_DIMENSION_NONE)
{
@@ -100,7 +99,8 @@ rocprofiler::counters::set_dim_in_rec(rocprofiler_counter_instance_id_t&
// Reset bits to 0 for dimension. Does so by getting the bit length as F's then
// shifiting that into the position of dim. Not's that value and then and's it
// with id.
id = (id & ~(mask));
uint64_t mask = (MAX_64 >> (64 - bit_length)) << ((dim - 1) * bit_length);
id = (id & ~(mask));
// Set the value for the dimenstion
id = id | (value << ((dim - 1) * bit_length));
}
+4 -1
Просмотреть файл
@@ -20,4 +20,7 @@ gtest_add_tests(
TEST_LIST parser-tests_TESTS
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_tests_properties(${parser-tests_TESTS} PROPERTIES TIMEOUT 45 LABELS "unittests")
set_tests_properties(
${parser-tests_TESTS}
PROPERTIES TIMEOUT 45 LABELS "unittests" FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}")
+6 -1
Просмотреть файл
@@ -90,6 +90,8 @@ set_tests_properties(
45
LABELS
"unittests"
FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}"
SKIP_REGULAR_EXPRESSION
"Running non-intercept test(.*)could not be locked for profiling due to lack of permissions.*"
)
@@ -110,4 +112,7 @@ gtest_add_tests(
TEST_LIST consumer-tests_TESTS
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_tests_properties(${consumer-tests_TESTS} PROPERTIES TIMEOUT 45 LABELS "unittests")
set_tests_properties(
${consumer-tests_TESTS}
PROPERTIES TIMEOUT 45 LABELS "unittests" FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}")
+9 -9
Просмотреть файл
@@ -100,15 +100,15 @@ class CounterAQLPacket : public AQLPacket
{
using desc_t = aqlprofile_buffer_desc_flags_t;
hsa_agent_t gpu_agent;
hsa_amd_memory_pool_t cpu_pool_;
hsa_amd_memory_pool_t kernarg_pool_;
decltype(hsa_amd_memory_pool_allocate)* allocate_fn;
decltype(hsa_amd_agents_allow_access)* allow_access_fn;
decltype(hsa_amd_memory_pool_free)* free_fn;
decltype(hsa_amd_memory_fill)* fill_fn;
decltype(hsa_memory_copy)* api_copy_fn;
bool bIgnoreKernArg;
hsa_agent_t gpu_agent = {.handle = 0};
hsa_amd_memory_pool_t cpu_pool_ = {.handle = 0};
hsa_amd_memory_pool_t kernarg_pool_ = {.handle = 0};
decltype(hsa_amd_memory_pool_allocate)* allocate_fn = nullptr;
decltype(hsa_amd_agents_allow_access)* allow_access_fn = nullptr;
decltype(hsa_amd_memory_pool_free)* free_fn = nullptr;
decltype(hsa_amd_memory_fill)* fill_fn = nullptr;
decltype(hsa_memory_copy)* api_copy_fn = nullptr;
bool bIgnoreKernArg = false;
static void Free(void* ptr, void* data);
static hsa_status_t Alloc(void** ptr, size_t size, desc_t flags, void* data);
+11 -3
Просмотреть файл
@@ -28,7 +28,10 @@ gtest_add_tests(
TEST_LIST pcs_gfx9_test_TESTS
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_tests_properties(${pcs_gfx9_test_TESTS} PROPERTIES TIMEOUT 45 LABELS "unittests")
set_tests_properties(
${pcs_gfx9_test_TESTS}
PROPERTIES TIMEOUT 45 LABELS "unittests" FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}")
add_executable(pcs_id_test)
@@ -47,7 +50,9 @@ gtest_add_tests(
TEST_LIST pcs_id_test_TESTS
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_tests_properties(${pcs_id_test_TESTS} PROPERTIES TIMEOUT 45 LABELS "unittests")
set_tests_properties(
${pcs_id_test_TESTS} PROPERTIES TIMEOUT 45 LABELS "unittests" FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}")
add_executable(pcs_bench_test)
@@ -80,4 +85,7 @@ gtest_add_tests(
TEST_LIST pcs_thread_test_TESTS
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_tests_properties(${pcs_thread_test_TESTS} PROPERTIES TIMEOUT 75 LABELS "unittests")
set_tests_properties(
${pcs_thread_test_TESTS}
PROPERTIES TIMEOUT 75 LABELS "unittests" FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}")
+4 -2
Просмотреть файл
@@ -26,5 +26,7 @@ gtest_add_tests(
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_tests_properties(
${pcs-tests_TESTS} PROPERTIES TIMEOUT 45 LABELS "unittests;pc-sampling"
SKIP_REGULAR_EXPRESSION "PC sampling unavailable")
${pcs-tests_TESTS}
PROPERTIES TIMEOUT 45 LABELS "unittests;pc-sampling" SKIP_REGULAR_EXPRESSION
"PC sampling unavailable" FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}")
+7 -3
Просмотреть файл
@@ -41,7 +41,9 @@ gtest_add_tests(
TEST_LIST lib_TESTS
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_tests_properties(${lib_TESTS} PROPERTIES TIMEOUT 30 LABELS "unittests")
set_tests_properties(
${lib_TESTS} PROPERTIES TIMEOUT 30 LABELS "unittests" FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}")
# -------------------------------------------------------------------------------------- #
#
@@ -76,5 +78,7 @@ set(rocprofiler-sdk-lib-tests-env
"LD_LIBRARY_PATH=${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}:$ENV{LD_LIBRARY_PATH}")
set_tests_properties(
${shared_lib_TESTS} PROPERTIES TIMEOUT 120 LABELS "unittests" ENVIRONMENT
"${rocprofiler-sdk-lib-tests-env}")
${shared_lib_TESTS}
PROPERTIES TIMEOUT 120 LABELS "unittests" ENVIRONMENT
"${rocprofiler-sdk-lib-tests-env}" FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}")
+4 -2
Просмотреть файл
@@ -25,5 +25,7 @@ gtest_add_tests(
TEST_LIST thread-trace-packet-test_TESTS
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_tests_properties(${thread-trace-packet-test_TESTS} PROPERTIES TIMEOUT 10 LABELS
"unittests")
set_tests_properties(
${thread-trace-packet-test_TESTS}
PROPERTIES TIMEOUT 10 LABELS "unittests" FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}")
+4 -1
Просмотреть файл
@@ -21,4 +21,7 @@ gtest_add_tests(
TEST_LIST buffering-tests_TESTS
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_tests_properties(${buffering-tests_TESTS} PROPERTIES TIMEOUT 360 LABELS "unittests")
set_tests_properties(
${buffering-tests_TESTS}
PROPERTIES TIMEOUT 360 LABELS "unittests" FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}")
+4 -1
Просмотреть файл
@@ -21,4 +21,7 @@ gtest_add_tests(
TEST_LIST common-tests_TESTS
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_tests_properties(${common-tests_TESTS} PROPERTIES TIMEOUT 45 LABELS "unittests")
set_tests_properties(
${common-tests_TESTS}
PROPERTIES TIMEOUT 45 LABELS "unittests" FAIL_REGULAR_EXPRESSION
"${ROCPROFILER_DEFAULT_FAIL_REGEX}")
+13 -3
Просмотреть файл
@@ -11,16 +11,23 @@
SUPPR_DIR=$(cd $(dirname ${BASH_SOURCE[0]}) &> /dev/null && pwd)
for i in $(seq 20 -1 8)
do
find-symbolizer()
{
set +e
SYMBOLIZER=$(which llvm-symbolizer-${i})
SYMBOLIZER=$(which ${1})
set -e
if [ -n "${SYMBOLIZER}" ]; then
: ${EXTERNAL_SYMBOLIZER_PATH:="${SYMBOLIZER}"}
fi
}
for i in $(seq 20 -1 8)
do
find-symbolizer llvm-symbolizer-${i}
done
find-symbolizer llvm-symbolizer
if [ -n "${EXTERNAL_SYMBOLIZER_PATH}" ]; then
EXTERNAL_SYMBOLIZER=" external_symbolizer_path=${EXTERNAL_SYMBOLIZER_PATH}"
fi
@@ -28,11 +35,14 @@ fi
: ${ASAN_OPTIONS="detect_leaks=0 use_sigaltstack=0 suppressions=${SUPPR_DIR}/address-sanitizer-suppr.txt"}
: ${LSAN_OPTIONS="suppressions=${SUPPR_DIR}/leak-sanitizer-suppr.txt"}
: ${TSAN_OPTIONS="history_size=5 detect_deadlocks=0 suppressions=${SUPPR_DIR}/thread-sanitizer-suppr.txt${EXTERNAL_SYMBOLIZER}"}
: ${UBSAN_OPTIONS="print_stacktrace=1 suppressions=${SUPPR_DIR}/undef-behavior-sanitizer-suppr.txt${EXTERNAL_SYMBOLIZER}"}
export ASAN_OPTIONS
export LSAN_OPTIONS
export TSAN_OPTIONS
export UBSAN_OPTIONS
echo "ASAN_OPTIONS=\"${ASAN_OPTIONS}\""
echo "LSAN_OPTIONS=\"${LSAN_OPTIONS}\""
echo "TSAN_OPTIONS=\"${TSAN_OPTIONS}\""
echo "UBSAN_OPTIONS=\"${UBSAN_OPTIONS}\""
+2 -2
Просмотреть файл
@@ -9,8 +9,8 @@ set(FETCHCONTENT_BASE_DIR ${PROJECT_BINARY_DIR}/external)
# default FAIL_REGULAR_EXPRESSION for tests
set(ROCPROFILER_DEFAULT_FAIL_REGEX
"threw an exception|Permission denied|Could not create logging file"
CACHE STRING "Default FAIL_REGULAR_EXPRESSION for tests")
"threw an exception|Permission denied|Could not create logging file|failed with error code"
CACHE INTERNAL "Default FAIL_REGULAR_EXPRESSION for tests")
set(DEFAULT_GPU_TARGETS
"gfx900"