From b130df843227d151e1009687fc8c0ab7306022fd Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 30 Apr 2025 09:54:15 +0000 Subject: [PATCH 1/3] [wasm] Add WASI as a supported target for sanitizers --- lib/Option/SanitizerOptions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Option/SanitizerOptions.cpp b/lib/Option/SanitizerOptions.cpp index f8f8ccbb4bb19..df5c095341f86 100644 --- a/lib/Option/SanitizerOptions.cpp +++ b/lib/Option/SanitizerOptions.cpp @@ -168,7 +168,7 @@ OptionSet swift::parseSanitizerArgValues( } // Check that we're one of the known supported targets for sanitizers. - if (!(Triple.isOSDarwin() || Triple.isOSLinux() || Triple.isOSWindows())) { + if (!(Triple.isOSDarwin() || Triple.isOSLinux() || Triple.isOSWindows() || Triple.isOSWASI())) { SmallString<128> b; Diags.diagnose(SourceLoc(), diag::error_unsupported_opt_for_target, (A->getOption().getPrefixedName() + From 7fa5a3a1b46f02e52767ed294f75962e4b0902a9 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 7 May 2025 10:17:27 +0800 Subject: [PATCH 2/3] IRGen: Disable ASan for the auto dynamic replacement array --- lib/IRGen/GenDecl.cpp | 1 + test/IRGen/dynamic_replaceable.sil | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/IRGen/GenDecl.cpp b/lib/IRGen/GenDecl.cpp index b245c467ed55e..736051bc682c0 100644 --- a/lib/IRGen/GenDecl.cpp +++ b/lib/IRGen/GenDecl.cpp @@ -1992,6 +1992,7 @@ void IRGenerator::emitDynamicReplacements() { "\x01l_auto_dynamic_replacements", IGM.getPointerAlignment(), /*isConstant*/ true, llvm::GlobalValue::PrivateLinkage); autoReplVar->setSection(getDynamicReplacementSection(IGM)); + disableAddressSanitizer(IGM, autoReplVar); IGM.addUsedGlobal(autoReplVar); if (origFuncTypes.empty()) diff --git a/test/IRGen/dynamic_replaceable.sil b/test/IRGen/dynamic_replaceable.sil index 9e4022a38ee77..339bf7bc8e93c 100644 --- a/test/IRGen/dynamic_replaceable.sil +++ b/test/IRGen/dynamic_replaceable.sil @@ -24,7 +24,7 @@ // CHECK: @"\01l_auto_dynamic_replacements" = private constant { i32, i32, [2 x i32] } // CHECK-SAME: { i32 0, i32 1, // CHECK-SAME: [2 x i32] [{{.*}}@"\01l_unnamed_dynamic_replacements"{{.*}}, i32 0] -// CHECK-SAME: }, section "__TEXT, __swift5_replace, regular, no_dead_strip" +// CHECK-SAME: }, section "__TEXT, __swift5_replace, regular, no_dead_strip", no_sanitize_address // CHECK-LABEL: define swiftcc void @test_dynamically_replaceable() // CHECK-NEXT: entry: From 8a607aa5b774afead667f50818858bd3261f4016 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Fri, 9 May 2025 10:49:57 +0800 Subject: [PATCH 3/3] [wasm] Build sanitizer runtime libraries --- .../swift_build_support/products/wasisysroot.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/utils/swift_build_support/swift_build_support/products/wasisysroot.py b/utils/swift_build_support/swift_build_support/products/wasisysroot.py index 712a07e8377b4..6d7af143ff88e 100644 --- a/utils/swift_build_support/swift_build_support/products/wasisysroot.py +++ b/utils/swift_build_support/swift_build_support/products/wasisysroot.py @@ -168,8 +168,12 @@ def _build(self, host_target, enable_wasi_threads=False, self.cmake_options.define('COMPILER_RT_BAREMETAL_BUILD:BOOL', 'TRUE') self.cmake_options.define('COMPILER_RT_BUILD_XRAY:BOOL', 'FALSE') self.cmake_options.define('COMPILER_RT_BUILD_PROFILE:BOOL', 'TRUE') + self.cmake_options.define('COMPILER_RT_BUILD_SANITIZERS:BOOL', 'TRUE') self.cmake_options.define('COMPILER_RT_INCLUDE_TESTS:BOOL', 'FALSE') self.cmake_options.define('COMPILER_RT_HAS_FPIC_FLAG:BOOL', 'FALSE') + # At this point, CMake feature check for -fno-builtin always fails + # because compiler-rt itself is not built yet and failed to link executable. + self.cmake_options.define('COMPILER_RT_HAS_FNO_BUILTIN_FLAG:BOOL', 'TRUE') self.cmake_options.define('COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN:BOOL', 'FALSE') self.cmake_options.define('COMPILER_RT_OS_DIR:STRING', compiler_rt_os_dir)