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; }
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; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits