[PATCH] D142740: [WIP] [WebAssembly] Enable MemorySanitizer for emscripten

Sam Clegg via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 27 08:54:00 PST 2023


sbc100 created this revision.
Herald added subscribers: Enna1, pmatos, asb, wingo, ecnelises, sunfish, hiraditya, jgravelle-google, dschuff.
Herald added a project: All.
sbc100 requested review of this revision.
Herald added subscribers: llvm-commits, cfe-commits, MaskRay, aheejin.
Herald added projects: clang, LLVM.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D142740

Files:
  clang/lib/Driver/ToolChains/WebAssembly.cpp
  llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp


Index: llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
===================================================================
--- llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
@@ -466,6 +466,22 @@
     0x100000000000, // OriginBase
 };
 
+// wasm32 Emscripten
+static const MemoryMapParams Emscripten_wasm32_MemoryMapParams = {
+    0x000080000000, // AndMask
+    0,              // XorMask (not used)
+    0,              // ShadowBase (not used)
+    0x000040000000, // OriginBase
+};
+
+// wasm64 Emscripten
+static const MemoryMapParams Emscripten_wasm64_MemoryMapParams = {
+    0,              // AndMask (not used)
+    0x500000000000, // XorMask
+    0,              // ShadowBase (not used)
+    0x100000000000, // OriginBase
+};
+
 static const PlatformMemoryMapParams Linux_X86_MemoryMapParams = {
     &Linux_I386_MemoryMapParams,
     &Linux_X86_64_MemoryMapParams,
@@ -506,6 +522,11 @@
     &NetBSD_X86_64_MemoryMapParams,
 };
 
+static const PlatformMemoryMapParams Emscripten_wasm_MemoryMapParams = {
+    &Emscripten_wasm32_MemoryMapParams,
+    &Emscripten_wasm64_MemoryMapParams,
+};
+
 namespace {
 
 /// Instrument functions of a module to detect uninitialized reads.
@@ -990,6 +1011,18 @@
         report_fatal_error("unsupported architecture");
       }
       break;
+    case Triple::Emscripten:
+      switch (TargetTriple.getArch()) {
+      case Triple::wasm32:
+        MapParams = Emscripten_wasm_MemoryMapParams.bits32;
+        break;
+      case Triple::wasm64:
+        MapParams = Emscripten_wasm_MemoryMapParams.bits64;
+        break;
+      default:
+        report_fatal_error("unsupported architecture");
+      }
+      break;
     default:
       report_fatal_error("unsupported operating system");
     }
Index: clang/lib/Driver/ToolChains/WebAssembly.cpp
===================================================================
--- clang/lib/Driver/ToolChains/WebAssembly.cpp
+++ clang/lib/Driver/ToolChains/WebAssembly.cpp
@@ -457,7 +457,10 @@
 SanitizerMask WebAssembly::getSupportedSanitizers() const {
   SanitizerMask Res = ToolChain::getSupportedSanitizers();
   if (getTriple().isOSEmscripten()) {
-    Res |= SanitizerKind::Vptr | SanitizerKind::Leak | SanitizerKind::Address;
+    Res |= SanitizerKind::Vptr;
+    Res |= SanitizerKind::Leak;
+    Res |= SanitizerKind::Address;
+    Res |= SanitizerKind::Memory;
   }
   return Res;
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D142740.492788.patch
Type: text/x-patch
Size: 2460 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230127/72876f9e/attachment-0001.bin>


More information about the llvm-commits mailing list