]> granicus.if.org Git - clang/commitdiff
[WebAssembly] Implement Address Sanitizer for Emscripten
authorGuanzhong Chen <gzchen@google.com>
Wed, 26 Jun 2019 20:16:14 +0000 (20:16 +0000)
committerGuanzhong Chen <gzchen@google.com>
Wed, 26 Jun 2019 20:16:14 +0000 (20:16 +0000)
Summary:
This diff enables address sanitizer on Emscripten.

On Emscripten, real memory starts at the value passed to --global-base.

All memory before this is used as shadow memory, and thus the shadow mapping
function is simply dividing by 8.

Reviewers: tlively, aheejin, sbc100

Reviewed By: sbc100

Subscribers: dschuff, sbc100, jgravelle-google, hiraditya, sunfish, cfe-commits, llvm-commits

Tags: #clang, #llvm

Differential Revision: https://reviews.llvm.org/D63742

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@364468 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/ToolChains/WebAssembly.cpp
test/Driver/wasm-toolchain.c

index a6a881873e20d7731cb8e2ad3a278bc27b5b9650..648e5b3a94c06778ec403020314699a770c3da83 100644 (file)
@@ -238,7 +238,7 @@ void WebAssembly::AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
 SanitizerMask WebAssembly::getSupportedSanitizers() const {
   SanitizerMask Res = ToolChain::getSupportedSanitizers();
   if (getTriple().isOSEmscripten()) {
-    Res |= SanitizerKind::Vptr | SanitizerKind::Leak;
+    Res |= SanitizerKind::Vptr | SanitizerKind::Leak | SanitizerKind::Address;
   }
   return Res;
 }
index 2ed94cee9b847bbe04807113bd9118f9cc56029d..910de4bd5950cccbff63ce09e360c74d2f57ac1f 100644 (file)
@@ -60,3 +60,7 @@
 // RUN:     --sysroot=/foo %s -pthread -mno-atomics 2>&1 \
 // RUN:   | FileCheck -check-prefix=PTHREAD_NO_ATOMICS %s
 // PTHREAD_NO_ATOMICS: invalid argument '-pthread' not allowed with '-mno-atomics'
+
+// RUN: %clang %s -### -fsanitize=address -target wasm32-unknown-emscripten 2>&1 | FileCheck -check-prefix=CHECK-ASAN-EMSCRIPTEN %s
+// CHECK-ASAN-EMSCRIPTEN: "-fsanitize=address"
+// CHECK-ASAN-EMSCRIPTEN: "-fsanitize-address-globals-dead-stripping"