[Git][ghc/ghc][master] 5 commits: rts: Fix TSAN_ENABLED CPP guard
Marge Bot (@marge-bot)
gitlab at gitlab.haskell.org
Tue Apr 2 16:51:06 UTC 2024
Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC
Commits:
c8a4c050 by Ben Gamari at 2024-04-02T12:50:35-04:00
rts: Fix TSAN_ENABLED CPP guard
This should be `#if defined(TSAN_ENABLED)`, not `#if TSAN_ENABLED`,
lest we suffer warnings.
- - - - -
e91dad93 by Cheng Shao at 2024-04-02T12:50:35-04:00
rts: fix errors when compiling with TSAN
This commit fixes rts compilation errors when compiling with TSAN:
- xxx_FENCE macros are redefined and trigger CPP warnings.
- Use SIZEOF_W. WORD_SIZE_IN_BITS is provided by MachDeps.h which
Cmm.h doesn't include by default.
- - - - -
a9ab9455 by Cheng Shao at 2024-04-02T12:50:35-04:00
rts: fix clang-specific errors when compiling with TSAN
This commit fixes clang-specific rts compilation errors when compiling
with TSAN:
- clang doesn't have -Wtsan flag
- Fix prototype of ghc_tsan_* helper functions
- __tsan_atomic_* functions aren't clang built-ins and
sanitizer/tsan_interface_atomic.h needs to be included
- On macOS, TSAN runtime library is
libclang_rt.tsan_osx_dynamic.dylib, not libtsan. -fsanitize-thread
as a link-time flag will take care of linking the TSAN runtime
library anyway so remove tsan as an rts extra library
- - - - -
865bd717 by Cheng Shao at 2024-04-02T12:50:35-04:00
compiler: fix github link to __tsan_memory_order in a comment
- - - - -
07cb627c by Cheng Shao at 2024-04-02T12:50:35-04:00
ci: improve TSAN CI jobs
- Run TSAN jobs with +thread_sanitizer_cmm which enables Cmm
instrumentation as well.
- Run TSAN jobs in deb12 which ships gcc-12, a reasonably recent gcc
that @bgamari confirms he's using in #GHC:matrix.org. Ideally we
should be using latest clang release for latest improvements in
sanitizers, though that's left as future work.
- Mark TSAN jobs as manual+allow_failure in validate pipelines. The
purpose is to demonstrate that we have indeed at least fixed
building of TSAN mode in CI without blocking the patch to land, and
once merged other people can begin playing with TSAN using their own
dev setups and feature branches.
- - - - -
8 changed files:
- .gitlab/generate-ci/gen_ci.hs
- .gitlab/jobs.yaml
- compiler/GHC/Cmm/ThreadSanitizer.hs
- rts/TSANUtils.c
- rts/include/Cmm.h
- rts/include/rts/TSANUtils.h
- rts/include/stg/SMP.h
- rts/rts.cabal
Changes:
=====================================
.gitlab/generate-ci/gen_ci.hs
=====================================
@@ -339,7 +339,7 @@ flavourString (Flavour base trans) = base_string base ++ concatMap (("+" ++) . f
flavour_string Llvm = "llvm"
flavour_string Dwarf = "debug_info"
flavour_string FullyStatic = "fully_static"
- flavour_string ThreadSanitiser = "thread_sanitizer"
+ flavour_string ThreadSanitiser = "thread_sanitizer_cmm"
flavour_string NoSplitSections = "no_split_sections"
flavour_string BootNonmovingGc = "boot_nonmoving_gc"
@@ -969,9 +969,9 @@ job_groups =
, validateBuilds Amd64 (Linux Debian10) nativeInt
, validateBuilds Amd64 (Linux Debian10) unreg
, fastCI (validateBuilds Amd64 (Linux Debian10) debug)
- , -- Nightly allowed to fail: #22520
+ , -- More work is needed to address TSAN failures: #22520
modifyNightlyJobs allowFailure
- (modifyValidateJobs manual tsan_jobs)
+ (modifyValidateJobs (allowFailure . manual) tsan_jobs)
, -- Nightly allowed to fail: #22343
modifyNightlyJobs allowFailure
(modifyValidateJobs manual (validateBuilds Amd64 (Linux Debian10) noTntc))
@@ -1039,7 +1039,7 @@ job_groups =
-- Haddock is large enough to make TSAN choke without massive quantities of
-- memory.
. addVariable "HADRIAN_ARGS" "--docs=none") $
- validateBuilds Amd64 (Linux Debian10) tsan
+ validateBuilds Amd64 (Linux Debian12) tsan
make_wasm_jobs cfg =
modifyJobs
@@ -1083,6 +1083,7 @@ platform_mapping = Map.map go combined_result
, "nightly-x86_64-linux-deb11-validate"
, "nightly-x86_64-linux-deb12-validate"
, "x86_64-linux-alpine3_18-wasm-cross_wasm32-wasi-release+fully_static"
+ , "x86_64-linux-deb12-validate+thread_sanitizer_cmm"
, "nightly-aarch64-linux-deb10-validate"
, "nightly-x86_64-linux-alpine3_12-validate"
, "nightly-x86_64-linux-deb10-validate"
=====================================
.gitlab/jobs.yaml
=====================================
@@ -1644,18 +1644,18 @@
"XZ_OPT": "-9"
}
},
- "nightly-x86_64-linux-deb10-validate+thread_sanitizer": {
+ "nightly-x86_64-linux-deb10-zstd-validate": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
".gitlab/ci.sh clean",
"cat ci_timings"
],
- "allow_failure": true,
+ "allow_failure": false,
"artifacts": {
"expire_in": "8 weeks",
"paths": [
- "ghc-x86_64-linux-deb10-validate+thread_sanitizer.tar.xz",
+ "ghc-x86_64-linux-deb10-zstd-validate.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -1698,17 +1698,15 @@
],
"variables": {
"BIGNUM_BACKEND": "gmp",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb10-validate+thread_sanitizer",
- "BUILD_FLAVOUR": "validate+thread_sanitizer",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
- "HADRIAN_ARGS": "--docs=none",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb10-zstd-validate",
+ "BUILD_FLAVOUR": "validate",
+ "CONFIGURE_ARGS": "--enable-ipe-data-compression --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
- "TEST_ENV": "x86_64-linux-deb10-validate+thread_sanitizer",
- "TSAN_OPTIONS": "suppressions=$CI_PROJECT_DIR/rts/.tsan-suppressions",
+ "TEST_ENV": "x86_64-linux-deb10-zstd-validate",
"XZ_OPT": "-9"
}
},
- "nightly-x86_64-linux-deb10-zstd-validate": {
+ "nightly-x86_64-linux-deb11-cross_aarch64-linux-gnu-validate": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
@@ -1719,7 +1717,7 @@
"artifacts": {
"expire_in": "8 weeks",
"paths": [
- "ghc-x86_64-linux-deb10-zstd-validate.tar.xz",
+ "ghc-x86_64-linux-deb11-cross_aarch64-linux-gnu-validate.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -1729,14 +1727,14 @@
"when": "always"
},
"cache": {
- "key": "x86_64-linux-deb10-$CACHE_REV",
+ "key": "x86_64-linux-deb11-$CACHE_REV",
"paths": [
"cabal-cache",
"toolchain"
]
},
"dependencies": [],
- "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV",
+ "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb11:$DOCKER_REV",
"needs": [
{
"artifacts": false,
@@ -1762,15 +1760,17 @@
],
"variables": {
"BIGNUM_BACKEND": "gmp",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb10-zstd-validate",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-cross_aarch64-linux-gnu-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-ipe-data-compression --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CROSS_EMULATOR": "qemu-aarch64 -L /usr/aarch64-linux-gnu",
+ "CROSS_TARGET": "aarch64-linux-gnu",
"RUNTEST_ARGS": "",
- "TEST_ENV": "x86_64-linux-deb10-zstd-validate",
+ "TEST_ENV": "x86_64-linux-deb11-cross_aarch64-linux-gnu-validate",
"XZ_OPT": "-9"
}
},
- "nightly-x86_64-linux-deb11-cross_aarch64-linux-gnu-validate": {
+ "nightly-x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
@@ -1781,7 +1781,7 @@
"artifacts": {
"expire_in": "8 weeks",
"paths": [
- "ghc-x86_64-linux-deb11-cross_aarch64-linux-gnu-validate.tar.xz",
+ "ghc-x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -1823,18 +1823,19 @@
"x86_64-linux"
],
"variables": {
- "BIGNUM_BACKEND": "gmp",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-cross_aarch64-linux-gnu-validate",
+ "BIGNUM_BACKEND": "native",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate",
"BUILD_FLAVOUR": "validate",
"CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
- "CROSS_EMULATOR": "qemu-aarch64 -L /usr/aarch64-linux-gnu",
- "CROSS_TARGET": "aarch64-linux-gnu",
+ "CONFIGURE_WRAPPER": "emconfigure",
+ "CROSS_EMULATOR": "js-emulator",
+ "CROSS_TARGET": "javascript-unknown-ghcjs",
"RUNTEST_ARGS": "",
- "TEST_ENV": "x86_64-linux-deb11-cross_aarch64-linux-gnu-validate",
+ "TEST_ENV": "x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate",
"XZ_OPT": "-9"
}
},
- "nightly-x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate": {
+ "nightly-x86_64-linux-deb11-validate": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
@@ -1845,7 +1846,7 @@
"artifacts": {
"expire_in": "8 weeks",
"paths": [
- "ghc-x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate.tar.xz",
+ "ghc-x86_64-linux-deb11-validate.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -1887,19 +1888,16 @@
"x86_64-linux"
],
"variables": {
- "BIGNUM_BACKEND": "native",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate",
+ "BIGNUM_BACKEND": "gmp",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
- "CONFIGURE_WRAPPER": "emconfigure",
- "CROSS_EMULATOR": "js-emulator",
- "CROSS_TARGET": "javascript-unknown-ghcjs",
+ "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
- "TEST_ENV": "x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate",
+ "TEST_ENV": "x86_64-linux-deb11-validate",
"XZ_OPT": "-9"
}
},
- "nightly-x86_64-linux-deb11-validate": {
+ "nightly-x86_64-linux-deb11-validate+boot_nonmoving_gc": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
@@ -1910,7 +1908,7 @@
"artifacts": {
"expire_in": "8 weeks",
"paths": [
- "ghc-x86_64-linux-deb11-validate.tar.xz",
+ "ghc-x86_64-linux-deb11-validate+boot_nonmoving_gc.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -1953,15 +1951,15 @@
],
"variables": {
"BIGNUM_BACKEND": "gmp",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-validate",
- "BUILD_FLAVOUR": "validate",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-validate+boot_nonmoving_gc",
+ "BUILD_FLAVOUR": "validate+boot_nonmoving_gc",
"CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
- "RUNTEST_ARGS": "",
- "TEST_ENV": "x86_64-linux-deb11-validate",
+ "RUNTEST_ARGS": "--way=nonmoving --way=nonmoving_thr --way=nonmoving_thr_sanity",
+ "TEST_ENV": "x86_64-linux-deb11-validate+boot_nonmoving_gc",
"XZ_OPT": "-9"
}
},
- "nightly-x86_64-linux-deb11-validate+boot_nonmoving_gc": {
+ "nightly-x86_64-linux-deb12-validate": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
@@ -1972,7 +1970,7 @@
"artifacts": {
"expire_in": "8 weeks",
"paths": [
- "ghc-x86_64-linux-deb11-validate+boot_nonmoving_gc.tar.xz",
+ "ghc-x86_64-linux-deb12-validate.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -1982,14 +1980,14 @@
"when": "always"
},
"cache": {
- "key": "x86_64-linux-deb11-$CACHE_REV",
+ "key": "x86_64-linux-deb12-$CACHE_REV",
"paths": [
"cabal-cache",
"toolchain"
]
},
"dependencies": [],
- "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb11:$DOCKER_REV",
+ "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:$DOCKER_REV",
"needs": [
{
"artifacts": false,
@@ -2015,15 +2013,15 @@
],
"variables": {
"BIGNUM_BACKEND": "gmp",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-validate+boot_nonmoving_gc",
- "BUILD_FLAVOUR": "validate+boot_nonmoving_gc",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb12-validate",
+ "BUILD_FLAVOUR": "validate",
"CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
- "RUNTEST_ARGS": "--way=nonmoving --way=nonmoving_thr --way=nonmoving_thr_sanity",
- "TEST_ENV": "x86_64-linux-deb11-validate+boot_nonmoving_gc",
+ "RUNTEST_ARGS": "",
+ "TEST_ENV": "x86_64-linux-deb12-validate",
"XZ_OPT": "-9"
}
},
- "nightly-x86_64-linux-deb12-validate": {
+ "nightly-x86_64-linux-deb12-validate+llvm": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
@@ -2034,7 +2032,7 @@
"artifacts": {
"expire_in": "8 weeks",
"paths": [
- "ghc-x86_64-linux-deb12-validate.tar.xz",
+ "ghc-x86_64-linux-deb12-validate+llvm.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -2077,26 +2075,26 @@
],
"variables": {
"BIGNUM_BACKEND": "gmp",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb12-validate",
- "BUILD_FLAVOUR": "validate",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb12-validate+llvm",
+ "BUILD_FLAVOUR": "validate+llvm",
"CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
- "TEST_ENV": "x86_64-linux-deb12-validate",
+ "TEST_ENV": "x86_64-linux-deb12-validate+llvm",
"XZ_OPT": "-9"
}
},
- "nightly-x86_64-linux-deb12-validate+llvm": {
+ "nightly-x86_64-linux-deb12-validate+thread_sanitizer_cmm": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
".gitlab/ci.sh clean",
"cat ci_timings"
],
- "allow_failure": false,
+ "allow_failure": true,
"artifacts": {
"expire_in": "8 weeks",
"paths": [
- "ghc-x86_64-linux-deb12-validate+llvm.tar.xz",
+ "ghc-x86_64-linux-deb12-validate+thread_sanitizer_cmm.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -2139,11 +2137,13 @@
],
"variables": {
"BIGNUM_BACKEND": "gmp",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb12-validate+llvm",
- "BUILD_FLAVOUR": "validate+llvm",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb12-validate+thread_sanitizer_cmm",
+ "BUILD_FLAVOUR": "validate+thread_sanitizer_cmm",
"CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "HADRIAN_ARGS": "--docs=none",
"RUNTEST_ARGS": "",
- "TEST_ENV": "x86_64-linux-deb12-validate+llvm",
+ "TEST_ENV": "x86_64-linux-deb12-validate+thread_sanitizer_cmm",
+ "TSAN_OPTIONS": "suppressions=$CI_PROJECT_DIR/rts/.tsan-suppressions",
"XZ_OPT": "-9"
}
},
@@ -5090,7 +5090,7 @@
"TEST_ENV": "x86_64-linux-deb10-validate+debug_info"
}
},
- "x86_64-linux-deb10-validate+thread_sanitizer": {
+ "x86_64-linux-deb10-zstd-validate": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
@@ -5101,7 +5101,7 @@
"artifacts": {
"expire_in": "2 weeks",
"paths": [
- "ghc-x86_64-linux-deb10-validate+thread_sanitizer.tar.xz",
+ "ghc-x86_64-linux-deb10-zstd-validate.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -5127,9 +5127,8 @@
],
"rules": [
{
- "allow_failure": true,
- "if": "((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
- "when": "manual"
+ "if": "(($CI_MERGE_REQUEST_LABELS =~ /.*IPE.*/)) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
+ "when": "on_success"
}
],
"script": [
@@ -5145,16 +5144,14 @@
],
"variables": {
"BIGNUM_BACKEND": "gmp",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb10-validate+thread_sanitizer",
- "BUILD_FLAVOUR": "validate+thread_sanitizer",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
- "HADRIAN_ARGS": "--docs=none",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb10-zstd-validate",
+ "BUILD_FLAVOUR": "validate",
+ "CONFIGURE_ARGS": "--enable-ipe-data-compression --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
- "TEST_ENV": "x86_64-linux-deb10-validate+thread_sanitizer",
- "TSAN_OPTIONS": "suppressions=$CI_PROJECT_DIR/rts/.tsan-suppressions"
+ "TEST_ENV": "x86_64-linux-deb10-zstd-validate"
}
},
- "x86_64-linux-deb10-zstd-validate": {
+ "x86_64-linux-deb11-cross_aarch64-linux-gnu-validate": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
@@ -5165,7 +5162,7 @@
"artifacts": {
"expire_in": "2 weeks",
"paths": [
- "ghc-x86_64-linux-deb10-zstd-validate.tar.xz",
+ "ghc-x86_64-linux-deb11-cross_aarch64-linux-gnu-validate.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -5175,14 +5172,14 @@
"when": "always"
},
"cache": {
- "key": "x86_64-linux-deb10-$CACHE_REV",
+ "key": "x86_64-linux-deb11-$CACHE_REV",
"paths": [
"cabal-cache",
"toolchain"
]
},
"dependencies": [],
- "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV",
+ "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb11:$DOCKER_REV",
"needs": [
{
"artifacts": false,
@@ -5191,7 +5188,7 @@
],
"rules": [
{
- "if": "(($CI_MERGE_REQUEST_LABELS =~ /.*IPE.*/)) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
+ "if": "((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
"when": "on_success"
}
],
@@ -5208,14 +5205,16 @@
],
"variables": {
"BIGNUM_BACKEND": "gmp",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb10-zstd-validate",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-cross_aarch64-linux-gnu-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-ipe-data-compression --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CROSS_EMULATOR": "qemu-aarch64 -L /usr/aarch64-linux-gnu",
+ "CROSS_TARGET": "aarch64-linux-gnu",
"RUNTEST_ARGS": "",
- "TEST_ENV": "x86_64-linux-deb10-zstd-validate"
+ "TEST_ENV": "x86_64-linux-deb11-cross_aarch64-linux-gnu-validate"
}
},
- "x86_64-linux-deb11-cross_aarch64-linux-gnu-validate": {
+ "x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
@@ -5226,7 +5225,7 @@
"artifacts": {
"expire_in": "2 weeks",
"paths": [
- "ghc-x86_64-linux-deb11-cross_aarch64-linux-gnu-validate.tar.xz",
+ "ghc-x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -5252,7 +5251,7 @@
],
"rules": [
{
- "if": "((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
+ "if": "((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*javascript.*/)) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
"when": "on_success"
}
],
@@ -5268,17 +5267,18 @@
"x86_64-linux"
],
"variables": {
- "BIGNUM_BACKEND": "gmp",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-cross_aarch64-linux-gnu-validate",
+ "BIGNUM_BACKEND": "native",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate",
"BUILD_FLAVOUR": "validate",
"CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
- "CROSS_EMULATOR": "qemu-aarch64 -L /usr/aarch64-linux-gnu",
- "CROSS_TARGET": "aarch64-linux-gnu",
+ "CONFIGURE_WRAPPER": "emconfigure",
+ "CROSS_EMULATOR": "js-emulator",
+ "CROSS_TARGET": "javascript-unknown-ghcjs",
"RUNTEST_ARGS": "",
- "TEST_ENV": "x86_64-linux-deb11-cross_aarch64-linux-gnu-validate"
+ "TEST_ENV": "x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate"
}
},
- "x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate": {
+ "x86_64-linux-deb11-validate+boot_nonmoving_gc": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
@@ -5289,7 +5289,7 @@
"artifacts": {
"expire_in": "2 weeks",
"paths": [
- "ghc-x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate.tar.xz",
+ "ghc-x86_64-linux-deb11-validate+boot_nonmoving_gc.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -5315,7 +5315,7 @@
],
"rules": [
{
- "if": "((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*javascript.*/)) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
+ "if": "(($CI_MERGE_REQUEST_LABELS =~ /.*non-moving GC.*/)) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
"when": "on_success"
}
],
@@ -5331,18 +5331,15 @@
"x86_64-linux"
],
"variables": {
- "BIGNUM_BACKEND": "native",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate",
- "BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
- "CONFIGURE_WRAPPER": "emconfigure",
- "CROSS_EMULATOR": "js-emulator",
- "CROSS_TARGET": "javascript-unknown-ghcjs",
- "RUNTEST_ARGS": "",
- "TEST_ENV": "x86_64-linux-deb11-int_native-cross_javascript-unknown-ghcjs-validate"
+ "BIGNUM_BACKEND": "gmp",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-validate+boot_nonmoving_gc",
+ "BUILD_FLAVOUR": "validate+boot_nonmoving_gc",
+ "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "RUNTEST_ARGS": "--way=nonmoving --way=nonmoving_thr --way=nonmoving_thr_sanity",
+ "TEST_ENV": "x86_64-linux-deb11-validate+boot_nonmoving_gc"
}
},
- "x86_64-linux-deb11-validate+boot_nonmoving_gc": {
+ "x86_64-linux-deb12-validate+llvm": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
@@ -5353,7 +5350,7 @@
"artifacts": {
"expire_in": "2 weeks",
"paths": [
- "ghc-x86_64-linux-deb11-validate+boot_nonmoving_gc.tar.xz",
+ "ghc-x86_64-linux-deb12-validate+llvm.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -5363,14 +5360,14 @@
"when": "always"
},
"cache": {
- "key": "x86_64-linux-deb11-$CACHE_REV",
+ "key": "x86_64-linux-deb12-$CACHE_REV",
"paths": [
"cabal-cache",
"toolchain"
]
},
"dependencies": [],
- "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb11:$DOCKER_REV",
+ "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:$DOCKER_REV",
"needs": [
{
"artifacts": false,
@@ -5379,7 +5376,7 @@
],
"rules": [
{
- "if": "(($CI_MERGE_REQUEST_LABELS =~ /.*non-moving GC.*/)) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
+ "if": "(($CI_MERGE_REQUEST_LABELS =~ /.*LLVM backend.*/)) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
"when": "on_success"
}
],
@@ -5396,25 +5393,25 @@
],
"variables": {
"BIGNUM_BACKEND": "gmp",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb11-validate+boot_nonmoving_gc",
- "BUILD_FLAVOUR": "validate+boot_nonmoving_gc",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb12-validate+llvm",
+ "BUILD_FLAVOUR": "validate+llvm",
"CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
- "RUNTEST_ARGS": "--way=nonmoving --way=nonmoving_thr --way=nonmoving_thr_sanity",
- "TEST_ENV": "x86_64-linux-deb11-validate+boot_nonmoving_gc"
+ "RUNTEST_ARGS": "",
+ "TEST_ENV": "x86_64-linux-deb12-validate+llvm"
}
},
- "x86_64-linux-deb12-validate+llvm": {
+ "x86_64-linux-deb12-validate+thread_sanitizer_cmm": {
"after_script": [
".gitlab/ci.sh save_cache",
".gitlab/ci.sh save_test_output",
".gitlab/ci.sh clean",
"cat ci_timings"
],
- "allow_failure": false,
+ "allow_failure": true,
"artifacts": {
"expire_in": "2 weeks",
"paths": [
- "ghc-x86_64-linux-deb12-validate+llvm.tar.xz",
+ "ghc-x86_64-linux-deb12-validate+thread_sanitizer_cmm.tar.xz",
"junit.xml",
"unexpected-test-output.tar.gz"
],
@@ -5440,8 +5437,9 @@
],
"rules": [
{
- "if": "(($CI_MERGE_REQUEST_LABELS =~ /.*LLVM backend.*/)) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
- "when": "on_success"
+ "allow_failure": true,
+ "if": "((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
+ "when": "manual"
}
],
"script": [
@@ -5457,11 +5455,13 @@
],
"variables": {
"BIGNUM_BACKEND": "gmp",
- "BIN_DIST_NAME": "ghc-x86_64-linux-deb12-validate+llvm",
- "BUILD_FLAVOUR": "validate+llvm",
+ "BIN_DIST_NAME": "ghc-x86_64-linux-deb12-validate+thread_sanitizer_cmm",
+ "BUILD_FLAVOUR": "validate+thread_sanitizer_cmm",
"CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "HADRIAN_ARGS": "--docs=none",
"RUNTEST_ARGS": "",
- "TEST_ENV": "x86_64-linux-deb12-validate+llvm"
+ "TEST_ENV": "x86_64-linux-deb12-validate+thread_sanitizer_cmm",
+ "TSAN_OPTIONS": "suppressions=$CI_PROJECT_DIR/rts/.tsan-suppressions"
}
},
"x86_64-linux-fedora33-release": {
=====================================
compiler/GHC/Cmm/ThreadSanitizer.hs
=====================================
@@ -184,7 +184,7 @@ saveRestoreCallerRegs us platform =
restore = blockFromList restore_nodes
-- | Mirrors __tsan_memory_order
--- <https://github.com/llvm-mirror/compiler-rt/blob/master/include/sanitizer/tsan_interface_atomic.h#L32>
+-- <https://github.com/llvm/llvm-project/blob/main/compiler-rt/include/sanitizer/tsan_interface_atomic.h#L34>
memoryOrderToTsanMemoryOrder :: Env -> MemoryOrdering -> CmmExpr
memoryOrderToTsanMemoryOrder env mord =
mkIntExpr (platform env) n
@@ -294,4 +294,3 @@ tsanAtomicRMW env mord op w addr val dest =
AMO_Or -> "fetch_or"
AMO_Xor -> "fetch_xor"
fn = fsLit $ "__tsan_atomic" ++ show (widthInBits w) ++ "_" ++ op'
-
=====================================
rts/TSANUtils.c
=====================================
@@ -2,7 +2,7 @@
#if defined(TSAN_ENABLED)
-uint64_t ghc_tsan_atomic64_compare_exchange(uint64_t *ptr, uint64_t expected, uint64_t new_value, int success_memorder, int failure_memorder)
+__tsan_atomic64 ghc_tsan_atomic64_compare_exchange(volatile __tsan_atomic64 *ptr, __tsan_atomic64 expected, __tsan_atomic64 new_value, int success_memorder, int failure_memorder)
{
__tsan_atomic64_compare_exchange_strong(
ptr, &expected, new_value,
@@ -10,7 +10,7 @@ uint64_t ghc_tsan_atomic64_compare_exchange(uint64_t *ptr, uint64_t expected, ui
return expected;
}
-uint32_t ghc_tsan_atomic32_compare_exchange(uint32_t *ptr, uint32_t expected, uint32_t new_value, int success_memorder, int failure_memorder)
+__tsan_atomic32 ghc_tsan_atomic32_compare_exchange(volatile __tsan_atomic32 *ptr, __tsan_atomic32 expected, __tsan_atomic32 new_value, int success_memorder, int failure_memorder)
{
__tsan_atomic32_compare_exchange_strong(
ptr, &expected, new_value,
@@ -18,7 +18,7 @@ uint32_t ghc_tsan_atomic32_compare_exchange(uint32_t *ptr, uint32_t expected, ui
return expected;
}
-uint16_t ghc_tsan_atomic16_compare_exchange(uint16_t *ptr, uint16_t expected, uint16_t new_value, int success_memorder, int failure_memorder)
+__tsan_atomic16 ghc_tsan_atomic16_compare_exchange(volatile __tsan_atomic16 *ptr, __tsan_atomic16 expected, __tsan_atomic16 new_value, int success_memorder, int failure_memorder)
{
__tsan_atomic16_compare_exchange_strong(
ptr, &expected, new_value,
@@ -26,7 +26,7 @@ uint16_t ghc_tsan_atomic16_compare_exchange(uint16_t *ptr, uint16_t expected, ui
return expected;
}
-uint8_t ghc_tsan_atomic8_compare_exchange(uint8_t *ptr, uint8_t expected, uint8_t new_value, int success_memorder, int failure_memorder)
+__tsan_atomic8 ghc_tsan_atomic8_compare_exchange(volatile __tsan_atomic8 *ptr, __tsan_atomic8 expected, __tsan_atomic8 new_value, int success_memorder, int failure_memorder)
{
__tsan_atomic8_compare_exchange_strong(
ptr, &expected, new_value,
=====================================
rts/include/Cmm.h
=====================================
@@ -698,11 +698,11 @@
#define ACQUIRE_FENCE prim %fence_acquire();
#define SEQ_CST_FENCE prim %fence_seq_cst();
-#if TSAN_ENABLED
+#if defined(TSAN_ENABLED)
// This is may be efficient than a fence but TSAN can reason about it.
-#if WORD_SIZE_IN_BITS == 64
+#if SIZEOF_W == 8
#define ACQUIRE_FENCE_ON(x) if (1) { W_ tmp; (tmp) = prim %load_acquire64(x); }
-#elif WORD_SIZE_IN_BITS == 32
+#elif SIZEOF_W == 4
#define ACQUIRE_FENCE_ON(x) if (1) { W_ tmp; (tmp) = prim %load_acquire32(x); }
#endif
#else
=====================================
rts/include/rts/TSANUtils.h
=====================================
@@ -98,10 +98,18 @@ void AnnotateBenignRaceSized(const char *file,
#define TSAN_ANNOTATE_BENIGN_RACE(addr,desc) \
TSAN_ANNOTATE_BENIGN_RACE_SIZED((void*)(addr), sizeof(*addr), desc)
+#if defined(TSAN_ENABLED) && defined(__clang__)
+#include <sanitizer/tsan_interface_atomic.h>
+#else
+typedef char __tsan_atomic8;
+typedef short __tsan_atomic16;
+typedef int __tsan_atomic32;
+typedef long __tsan_atomic64;
+#endif
-uint64_t ghc_tsan_atomic64_compare_exchange(uint64_t *ptr, uint64_t expected, uint64_t new_value, int success_memorder, int failure_memorder);
-uint32_t ghc_tsan_atomic32_compare_exchange(uint32_t *ptr, uint32_t expected, uint32_t new_value, int success_memorder, int failure_memorder);
-uint16_t ghc_tsan_atomic16_compare_exchange(uint16_t *ptr, uint16_t expected, uint16_t new_value, int success_memorder, int failure_memorder);
-uint8_t ghc_tsan_atomic8_compare_exchange(uint8_t *ptr, uint8_t expected, uint8_t new_value, int success_memorder, int failure_memorder);
+__tsan_atomic64 ghc_tsan_atomic64_compare_exchange(volatile __tsan_atomic64 *ptr, __tsan_atomic64 expected, __tsan_atomic64 new_value, int success_memorder, int failure_memorder);
+__tsan_atomic32 ghc_tsan_atomic32_compare_exchange(volatile __tsan_atomic32 *ptr, __tsan_atomic32 expected, __tsan_atomic32 new_value, int success_memorder, int failure_memorder);
+__tsan_atomic16 ghc_tsan_atomic16_compare_exchange(volatile __tsan_atomic16 *ptr, __tsan_atomic16 expected, __tsan_atomic16 new_value, int success_memorder, int failure_memorder);
+__tsan_atomic8 ghc_tsan_atomic8_compare_exchange(volatile __tsan_atomic8 *ptr, __tsan_atomic8 expected, __tsan_atomic8 new_value, int success_memorder, int failure_memorder);
#endif
=====================================
rts/include/stg/SMP.h
=====================================
@@ -549,9 +549,14 @@ busy_wait_nop(void)
#define SEQ_CST_FENCE() __atomic_thread_fence(__ATOMIC_SEQ_CST)
#if defined(TSAN_ENABLED)
+#if !defined(__clang__)
+#undef ACQUIRE_FENCE
+#undef RELEASE_FENCE
+#undef SEQ_CST_FENCE
#define ACQUIRE_FENCE() NO_WARN(-Wtsan, __atomic_thread_fence(__ATOMIC_ACQUIRE);)
#define RELEASE_FENCE() NO_WARN(-Wtsan, __atomic_thread_fence(__ATOMIC_RELEASE);)
#define SEQ_CST_FENCE() NO_WARN(-Wtsan, __atomic_thread_fence(__ATOMIC_SEQ_CST);)
+#endif
#define ACQUIRE_FENCE_ON(x) (void)ACQUIRE_LOAD(x)
#else
#define ACQUIRE_FENCE_ON(x) __atomic_thread_fence(__ATOMIC_ACQUIRE)
=====================================
rts/rts.cabal
=====================================
@@ -184,7 +184,6 @@ library
if flag(thread-sanitizer)
cc-options: -fsanitize=thread
ld-options: -fsanitize=thread
- extra-libraries: tsan
if os(linux)
-- the RTS depends upon libc. while this dependency is generally
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/efab3649b685d92b1856a62532b343ef70777612...07cb627c8232f573bd6a8ea1b7c110ff3c1b5d22
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/efab3649b685d92b1856a62532b343ef70777612...07cb627c8232f573bd6a8ea1b7c110ff3c1b5d22
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20240402/09f95b4f/attachment-0001.html>
More information about the ghc-commits
mailing list