Tue, 23 Dec 2025 10:14:13 +0100
add ubsan feature (for debugging)
| configure | file | annotate | diff | comparison | revisions | |
| make/project.xml | file | annotate | diff | comparison | revisions |
--- a/configure Tue Dec 23 10:00:02 2025 +0100 +++ b/configure Tue Dec 23 10:14:13 2025 +0100 @@ -156,6 +156,7 @@ --enable-api-docs run Doxygen during build --enable-coverage test coverage with gcov --enable-asan address sanitizer + --enable-ubsan undefined behavior sanitizer --disable-cxx-tests the check-cxx makefile target --disable-szmul-builtin use custom implementation, instead --disable-memrchr @@ -306,6 +307,8 @@ "--disable-coverage") unset FEATURE_COVERAGE ;; "--enable-asan") FEATURE_ASAN=on ;; "--disable-asan") unset FEATURE_ASAN ;; + "--enable-ubsan") FEATURE_UBSAN=on ;; + "--disable-ubsan") unset FEATURE_UBSAN ;; "--enable-cxx-tests") FEATURE_CXX_TESTS=on ;; "--disable-cxx-tests") unset FEATURE_CXX_TESTS ;; "--enable-szmul-builtin") FEATURE_SZMUL_BUILTIN=on ;; @@ -594,6 +597,26 @@ dep_checked_no_coverage=1 return 0 } +dependency_error_ubsan() +{ + print_check_msg "$dep_checked_ubsan" "checking for ubsan... " + # dependency ubsan toolchain="gnuc" + while true + do + if notistoolchain "gnuc"; then + break + fi + TEMP_CFLAGS="$TEMP_CFLAGS -fsanitize=undefined" + TEMP_LDFLAGS="$TEMP_LDFLAGS -fsanitize=undefined" + print_check_msg "$dep_checked_ubsan" "yes\n" + dep_checked_ubsan=1 + return 1 + done + + print_check_msg "$dep_checked_ubsan" "no\n" + dep_checked_ubsan=1 + return 0 +} dependency_error_qsort_r() { print_check_msg "$dep_checked_qsort_r" "checking for qsort_r... " @@ -826,6 +849,26 @@ else : fi +if [ -n "$FEATURE_UBSAN" ]; then + # check dependency + if dependency_error_ubsan ; then + # "auto" features can fail and are just disabled in this case + if [ "$FEATURE_UBSAN" = "auto" ]; then + DISABLE_FEATURE_UBSAN=1 + else + DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ubsan " + ERROR=1 + fi + fi + if [ -n "$DISABLE_FEATURE_UBSAN" ]; then + unset FEATURE_UBSAN + fi +fi +if [ -n "$FEATURE_UBSAN" ]; then + : +else + : +fi if [ -n "$FEATURE_CXX_TESTS" ]; then # check dependency if dependency_error_cxx ; then @@ -983,6 +1026,12 @@ else echo 'off' fi +printf ' %-16s' 'ubsan:' +if [ -n "$FEATURE_UBSAN" ]; then + echo 'on' +else + echo 'off' +fi printf ' %-16s' 'cxx-tests:' if [ -n "$FEATURE_CXX_TESTS" ]; then echo 'on'
--- a/make/project.xml Tue Dec 23 10:00:02 2025 +0100 +++ b/make/project.xml Tue Dec 23 10:14:13 2025 +0100 @@ -94,6 +94,11 @@ <ldflags>-fsanitize=address</ldflags> </dependency> + <dependency name="ubsan" toolchain="gnuc"> + <cflags>-fsanitize=undefined</cflags> + <ldflags>-fsanitize=undefined</ldflags> + </dependency> + <dependency name="no_coverage"> <test>test -z "$FEATURE_COVERAGE"</test> </dependency> @@ -125,6 +130,10 @@ <desc>address sanitizer</desc> <dependencies>asan</dependencies> </feature> + <feature name="ubsan"> + <desc>undefined behavior sanitizer</desc> + <dependencies>ubsan</dependencies> + </feature> <feature name="cxx-tests" default="true"> <dependencies>cxx</dependencies> <desc>the check-cxx makefile target</desc>