From 151f6a3c5122bf577b4eedd2082b13a92b4f8d45 Mon Sep 17 00:00:00 2001 From: iakov Date: Fri, 7 Jun 2024 02:25:40 +0300 Subject: [PATCH 1/3] Always build with UBSan --- global.pri | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/global.pri b/global.pri index 5f010bcdb8..6e7c1fc42f 100644 --- a/global.pri +++ b/global.pri @@ -133,7 +133,7 @@ equals(TEMPLATE, lib) { CONFIG += sanitizer } -unix:!nosanitizers { +!nosanitizers { # seems like we want USan always, but are afraid of .... !CONFIG(sanitize_address):!CONFIG(sanitize_thread):!CONFIG(sanitize_memory):!CONFIG(sanitize_kernel_address) { @@ -143,20 +143,25 @@ unix:!nosanitizers { #LSan can be used without performance degrade even in release build - #But at the moment we can not, because of Qt problems - !macx-clang:CONFIG(debug):!CONFIG(sanitize_address):!CONFIG(sanitize_memory):!CONFIG(sanitize_thread) { CONFIG += sanitize_leak } + #But at the moment we can not, because of Qt and MinGW problems + !win32:!macx-clang:CONFIG(debug):!CONFIG(sanitize_address):!CONFIG(sanitize_memory):!CONFIG(sanitize_thread) { CONFIG += sanitize_leak } sanitize_leak { - QMAKE_CFLAGS += -fsanitize=leak - QMAKE_CXXFLAGS += -fsanitize=leak - QMAKE_LFLAGS += -fsanitize=leak + QMAKE_CFLAGS *= -fsanitize=leak + QMAKE_CXXFLAGS *= -fsanitize=leak + QMAKE_LFLAGS *= -fsanitize=leak } - sanitize_undefined:macx-clang { - # sometimes runtime is missing in clang. this hack allows to avoid runtime dependency. - #QMAKE_SANITIZE_UNDEFINED_CFLAGS += -fsanitize-trap=undefined - #QMAKE_SANITIZE_UNDEFINED_CXXFLAGS += -fsanitize-trap=undefined - #QMAKE_SANITIZE_UNDEFINED_LFLAGS += -fsanitize-trap=undefined + sanitize_undefined { + TRIK_SANITIZE_UNDEFINED_FLAGS += \ + -fsanitize=undefined,float-divide-by-zero,unsigned-integer-overflow,implicit-conversion,local-bounds + + # This hack allows to avoid runtime dependency. + win32:TRIK_SANITIZE_UNDEFINED_FLAGS += -fsanitize-trap=undefined + + QMAKE_SANITIZE_UNDEFINED_CFLAGS *= $$TRIK_SANITIZE_UNDEFINED_FLAGS + QMAKE_SANITIZE_UNDEFINED_CXXFLAGS *= $$TRIK_SANITIZE_UNDEFINED_FLAGS + QMAKE_SANITIZE_UNDEFINED_LFLAGS *= $$TRIK_SANITIZE_UNDEFINED_FLAGS } sanitize_memory { @@ -165,15 +170,16 @@ unix:!nosanitizers { } + unix { + QMAKE_CFLAGS_RELEASE += -fsanitize-recover=all + QMAKE_CXXFLAGS_RELEASE += -fsanitize-recover=all - QMAKE_CFLAGS_RELEASE += -fsanitize-recover=all - QMAKE_CXXFLAGS_RELEASE += -fsanitize-recover=all + QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -fno-sanitize-recover=all + QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -fno-sanitize-recover=all - QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -fno-sanitize-recover=all - QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -fno-sanitize-recover=all - - QMAKE_CFLAGS_DEBUG += -fno-sanitize-recover=all - QMAKE_CXXFLAGS_DEBUG += -fno-sanitize-recover=all + QMAKE_CFLAGS_DEBUG += -fno-sanitize-recover=all + QMAKE_CXXFLAGS_DEBUG += -fno-sanitize-recover=all + } } OBJECTS_DIR = .build/$$CONFIGURATION/obj From f43d35b0dd9e53309e4d30a461b9496a91a7473a Mon Sep 17 00:00:00 2001 From: iakov Date: Fri, 7 Jun 2024 02:29:07 +0300 Subject: [PATCH 2/3] Update azure-pipelines.yml --- azure-pipelines.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 182a60e3b7..2cdba8449c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -120,7 +120,7 @@ stages: matrix: LinuxRelease: imageName: 'ubuntu-latest' - QMAKE_EXTRA: "CONFIG+=noPch CONFIG+=ccache CONFIG+=no-sanitizers CONFIG+=silent CONFIG+=warn_off" + QMAKE_EXTRA: "CONFIG+=noPch CONFIG+=ccache CONFIG+=silent CONFIG+=warn_off" LinuxDebug: imageName: 'ubuntu-latest' QMAKE_EXTRA: "CONFIG+=noPch CONFIG+=ccache CONFIG+=silent CONFIG+=small_debug_info CONFIG+=sanitizer CONFIG+=sanitize_undefined CONFIG+=sanitize_address" @@ -145,7 +145,7 @@ stages: matrix: macOSRelease: imageName: 'macOS-11' - QMAKE_EXTRA: "CONFIG+=noPch CONFIG+=ccache CONFIG+=no-sanitizers CONFIG+=silent CONFIG+=warn_off" + QMAKE_EXTRA: "CONFIG+=noPch CONFIG+=ccache CONFIG+=silent CONFIG+=warn_off" EXECUTOR: "time" macOSDebug: imageName: 'macOS-11' @@ -172,10 +172,10 @@ stages: matrix: Linux release + tests: imageName: 'ubuntu-latest' - QMAKE_EXTRA: "CONFIG+=tests CONFIG+=noPch CONFIG+=ccache CONFIG+=no-sanitizers CONFIG+=silent CONFIG+=warn_off" + QMAKE_EXTRA: "CONFIG+=tests CONFIG+=noPch CONFIG+=ccache CONFIG+=silent CONFIG+=warn_off" Linux release with retired features: imageName: 'ubuntu-latest' - QMAKE_EXTRA: "CONFIG+=trik_retired_features CONFIG+=noPch CONFIG+=ccache CONFIG+=no-sanitizers CONFIG+=silent" + QMAKE_EXTRA: "CONFIG+=trik_retired_features CONFIG+=noPch CONFIG+=ccache CONFIG+=silent" Linux debug + tests: imageName: 'ubuntu-latest' QMAKE_EXTRA: "CONFIG+=tests CONFIG+=noPch CONFIG+=ccache CONFIG+=silent CONFIG+=small_debug_info CONFIG+=sanitizer CONFIG+=sanitize_undefined CONFIG+=sanitize_address" @@ -200,7 +200,7 @@ stages: matrix: MacOS release + tests: imageName: 'macOS-11' - QMAKE_EXTRA: "CONFIG+=tests CONFIG+=noPch CONFIG+=ccache CONFIG+=no-sanitizers CONFIG+=silent CONFIG+=warn_off" + QMAKE_EXTRA: "CONFIG+=tests CONFIG+=noPch CONFIG+=ccache CONFIG+=silent CONFIG+=warn_off" EXECUTOR: "time" macOS debug + tests: imageName: 'macOS-11' @@ -225,7 +225,7 @@ stages: - job: installer displayName: "Test, installer, deploy" variables: - QMAKE_EXTRA: "CONFIG+=noPch CONFIG+=ccache CONFIG+=no-sanitizers CONFIG+=silent CONFIG+=warn_off" + QMAKE_EXTRA: "CONFIG+=noPch CONFIG+=ccache CONFIG+=silent CONFIG+=warn_off" pool: vmImage: 'ubuntu-latest' @@ -246,7 +246,7 @@ stages: - job: installer displayName: "Test, installer, deploy" variables: - QMAKE_EXTRA: "CONFIG+=noPch CONFIG+=ccache CONFIG+=no-sanitizers CONFIG+=silent CONFIG+=warn_off" + QMAKE_EXTRA: "CONFIG+=noPch CONFIG+=ccache CONFIG+=silent CONFIG+=warn_off" EXECUTOR: "time" pool: vmImage: 'macOS-11' From b780312048a055de58105ad94f147ba4d4ccb831 Mon Sep 17 00:00:00 2001 From: iakov Date: Fri, 7 Jun 2024 02:40:20 +0300 Subject: [PATCH 3/3] Disable some advanced UBSan sub-options ... not recognized by GCC 8.1 --- global.pri | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/global.pri b/global.pri index 6e7c1fc42f..343ed5d849 100644 --- a/global.pri +++ b/global.pri @@ -153,11 +153,11 @@ equals(TEMPLATE, lib) { } sanitize_undefined { - TRIK_SANITIZE_UNDEFINED_FLAGS += \ - -fsanitize=undefined,float-divide-by-zero,unsigned-integer-overflow,implicit-conversion,local-bounds + #TRIK_SANITIZE_UNDEFINED_FLAGS += \ + #-fsanitize=undefined,float-divide-by-zero,unsigned-integer-overflow,implicit-conversion,local-bounds # This hack allows to avoid runtime dependency. - win32:TRIK_SANITIZE_UNDEFINED_FLAGS += -fsanitize-trap=undefined + win32:TRIK_SANITIZE_UNDEFINED_FLAGS += -fsanitize-trap=all QMAKE_SANITIZE_UNDEFINED_CFLAGS *= $$TRIK_SANITIZE_UNDEFINED_FLAGS QMAKE_SANITIZE_UNDEFINED_CXXFLAGS *= $$TRIK_SANITIZE_UNDEFINED_FLAGS