From 44fff18b68e269021de49d37b066a9bd60ee413f Mon Sep 17 00:00:00 2001 From: Michal Nowak Date: Fri, 26 May 2023 10:50:58 +0200 Subject: [PATCH] Change images for TSAN jobs Fedora 38 and Debian "bullseye" images were "forked" to images used only for TSAN CI jobs. The new images contain TSAN-aware liburcu that does not fit well with ASAN CI jobs for which original images were also used. liburcu is not used in this branch, but images are shared among branches, and their use needs to be consistent in all maintained branches. (cherry picked from commit 04dda8661f50917e392f5237363a7c9a823e94df) --- .gitlab-ci.yml | 44 ++++++++++++++++--------- .reuse/dep5 | 2 +- tsan-suppressions.txt => .tsan-suppress | 0 3 files changed, 30 insertions(+), 16 deletions(-) rename tsan-suppressions.txt => .tsan-suppress (100%) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index baa65fa7ba..893e5f153f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,6 +18,7 @@ variables: CLANG_VERSION: 16 CLANG: "clang-${CLANG_VERSION}" SCAN_BUILD: "scan-build-${CLANG_VERSION}" + LLVM_SYMBOLIZER: "/usr/lib/llvm-${CLANG_VERSION}/bin/llvm-symbolizer" ASAN_SYMBOLIZER_PATH: "/usr/lib/llvm-${CLANG_VERSION}/bin/llvm-symbolizer" CLANG_FORMAT: "clang-format-${CLANG_VERSION}" @@ -25,7 +26,12 @@ variables: # Pass run-time flags to AddressSanitizer to get core dumps on error. ASAN_OPTIONS: abort_on_error=1:disable_coredump=0:unmap_shadow_on_exit=1 - TSAN_OPTIONS_COMMON: "disable_coredump=0 second_deadlock_stack=1 history_size=7 log_exe_name=true log_path=tsan" + + TSAN_OPTIONS_COMMON: "disable_coredump=0 second_deadlock_stack=1 atexit_sleep_ms=1000 history_size=7 log_exe_name=true log_path=tsan" + TSAN_SUPPRESSIONS: "suppressions=${CI_PROJECT_DIR}/.tsan-suppress" + TSAN_OPTIONS_DEBIAN: "${TSAN_OPTIONS_COMMON} ${TSAN_SUPPRESSIONS} external_symbolizer_path=${LLVM_SYMBOLIZER}" + TSAN_OPTIONS_FEDORA: "${TSAN_OPTIONS_COMMON} ${TSAN_SUPPRESSIONS} external_symbolizer_path=/usr/bin/llvm-symbolizer" + UBSAN_OPTIONS: "halt_on_error=1:abort_on_error=1:disable_coredump=0" TARBALL_EXTENSION: xz @@ -152,6 +158,10 @@ stages: image: "$CI_REGISTRY_IMAGE:debian-bullseye-amd64" <<: *linux_amd64 +.tsan-debian-bullseye-amd64: &tsan_debian_bullseye_amd64_image + image: "$CI_REGISTRY_IMAGE:tsan-debian-bullseye-amd64" + <<: *linux_amd64 + .debian-bullseye-amd64cross32: &debian_bullseye_amd64cross32_image image: "$CI_REGISTRY_IMAGE:debian-bullseye-amd64cross32" <<: *linux_amd64 @@ -168,6 +178,10 @@ stages: # Fedora +.tsan-fedora-38-amd64: &tsan_fedora_38_amd64_image + image: "$CI_REGISTRY_IMAGE:tsan-fedora-38-amd64" + <<: *linux_amd64 + .fedora-38-amd64: &fedora_38_amd64_image image: "$CI_REGISTRY_IMAGE:fedora-38-amd64" <<: *linux_amd64 @@ -1089,13 +1103,13 @@ gcc:tsan: CFLAGS: "${CFLAGS_COMMON} -fsanitize=thread" LDFLAGS: "-fsanitize=thread" EXTRA_CONFIGURE: "--with-libidn2 --enable-pthread-rwlock --without-jemalloc" - <<: *fedora_38_amd64_image + <<: *tsan_fedora_38_amd64_image <<: *build_job system:gcc:tsan: variables: - TSAN_OPTIONS: "${TSAN_OPTIONS_COMMON} external_symbolizer_path=/usr/bin/llvm-symbolizer" - <<: *fedora_38_amd64_image + TSAN_OPTIONS: "${TSAN_OPTIONS_FEDORA}" + <<: *tsan_fedora_38_amd64_image <<: *system_test_tsan_job needs: - job: gcc:tsan @@ -1103,15 +1117,15 @@ system:gcc:tsan: unit:gcc:tsan: variables: - TSAN_OPTIONS: "${TSAN_OPTIONS_COMMON} external_symbolizer_path=/usr/bin/llvm-symbolizer" - <<: *fedora_38_amd64_image + TSAN_OPTIONS: "${TSAN_OPTIONS_FEDORA}" + <<: *tsan_fedora_38_amd64_image <<: *unit_test_tsan_job needs: - job: gcc:tsan artifacts: true clang:tsan: - <<: *base_image + <<: *tsan_debian_bullseye_amd64_image <<: *build_job variables: CC: "${CLANG}" @@ -1121,8 +1135,8 @@ clang:tsan: system:clang:tsan: variables: - TSAN_OPTIONS: "${TSAN_OPTIONS_COMMON} external_symbolizer_path=/usr/lib/llvm-${CLANG_VERSION}/bin/llvm-symbolizer" - <<: *base_image + TSAN_OPTIONS: "${TSAN_OPTIONS_DEBIAN}" + <<: *tsan_debian_bullseye_amd64_image <<: *system_test_tsan_job needs: - job: clang:tsan @@ -1130,8 +1144,8 @@ system:clang:tsan: unit:clang:tsan: variables: - TSAN_OPTIONS: "${TSAN_OPTIONS_COMMON} external_symbolizer_path=/usr/lib/llvm-${CLANG_VERSION}/bin/llvm-symbolizer suppressions=$CI_PROJECT_DIR/tsan-suppressions.txt" - <<: *base_image + TSAN_OPTIONS: "${TSAN_OPTIONS_DEBIAN}" + <<: *tsan_debian_bullseye_amd64_image <<: *unit_test_tsan_job needs: - job: clang:tsan @@ -1370,14 +1384,14 @@ respdiff-short:asan: respdiff-short:tsan: <<: *respdiff_job <<: *default_triggering_rules - <<: *debian_bullseye_amd64_image + <<: *tsan_debian_bullseye_amd64_image variables: CC: gcc CFLAGS: "${CFLAGS_COMMON} -Og -fsanitize=thread" LDFLAGS: "-fsanitize=thread" EXTRA_CONFIGURE: "--enable-pthread-rwlock --without-jemalloc" MAX_DISAGREEMENTS_PERCENTAGE: "0.5" - TSAN_OPTIONS: "${TSAN_OPTIONS_COMMON} external_symbolizer_path=/usr/bin/llvm-symbolizer" + TSAN_OPTIONS: "${TSAN_OPTIONS_DEBIAN}" script: - bash respdiff.sh -s named -q "${PWD}/10k_a.txt" -c 3 -w "${PWD}/rspworkdir" "${CI_PROJECT_DIR}" "/usr/local/respdiff-reference-bind/sbin/named" after_script: @@ -1411,14 +1425,14 @@ respdiff-long:asan: respdiff-long:tsan: <<: *respdiff_job <<: *api_schedules_tags_triggers_web_triggering_rules - <<: *debian_bullseye_amd64_image + <<: *tsan_debian_bullseye_amd64_image variables: CC: gcc CFLAGS: "${CFLAGS_COMMON} -Og -fsanitize=thread" LDFLAGS: "-fsanitize=thread" EXTRA_CONFIGURE: "--enable-pthread-rwlock --without-jemalloc" MAX_DISAGREEMENTS_PERCENTAGE: "0.5" - TSAN_OPTIONS: "${TSAN_OPTIONS_COMMON} external_symbolizer_path=/usr/bin/llvm-symbolizer" + TSAN_OPTIONS: "${TSAN_OPTIONS_DEBIAN}" script: - bash respdiff.sh -s named -q "${PWD}/100k_mixed.txt" -c 3 -w "${PWD}/rspworkdir" "${CI_PROJECT_DIR}" "/usr/local/respdiff-reference-bind/sbin/named" after_script: diff --git a/.reuse/dep5 b/.reuse/dep5 index 2c752982cc..ee3ed178df 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -152,11 +152,11 @@ Files: **/.clang-format .gitlab-ci.yml .lgtm.yml .pylintrc + .tsan-suppress .uncrustify.cfg doc/misc/*.zoneopt doc/misc/options doc/misc/rndc.grammar - tsan-suppressions.txt sonar-project.properties Copyright: Internet Systems Consortium, Inc. ("ISC") License: CC0-1.0 diff --git a/tsan-suppressions.txt b/.tsan-suppress similarity index 100% rename from tsan-suppressions.txt rename to .tsan-suppress