1 //===- Transforms/Instrumentation/MemorySanitizer.h - MSan Pass -----------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file defines the memoy sanitizer pass. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef LLVM_TRANSFORMS_INSTRUMENTATION_MEMORYSANITIZER_H 14 #define LLVM_TRANSFORMS_INSTRUMENTATION_MEMORYSANITIZER_H 15 16 #include "llvm/IR/PassManager.h" 17 #include "llvm/Pass.h" 18 19 namespace llvm { 20 21 struct MemorySanitizerOptions { MemorySanitizerOptionsMemorySanitizerOptions22 MemorySanitizerOptions() : MemorySanitizerOptions(0, false, false){}; 23 MemorySanitizerOptions(int TrackOrigins, bool Recover, bool Kernel); 24 bool Kernel; 25 int TrackOrigins; 26 bool Recover; 27 }; 28 29 // Insert MemorySanitizer instrumentation (detection of uninitialized reads) 30 FunctionPass * 31 createMemorySanitizerLegacyPassPass(MemorySanitizerOptions Options = {}); 32 33 /// A function pass for msan instrumentation. 34 /// 35 /// Instruments functions to detect unitialized reads. This function pass 36 /// inserts calls to runtime library functions. If the functions aren't declared 37 /// yet, the pass inserts the declarations. Otherwise the existing globals are 38 /// used. 39 struct MemorySanitizerPass : public PassInfoMixin<MemorySanitizerPass> { MemorySanitizerPassMemorySanitizerPass40 MemorySanitizerPass(MemorySanitizerOptions Options) : Options(Options) {} 41 42 PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM); 43 PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); 44 45 private: 46 MemorySanitizerOptions Options; 47 }; 48 } 49 50 #endif /* LLVM_TRANSFORMS_INSTRUMENTATION_MEMORYSANITIZER_H */ 51