137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//===- InstrumentationBindings.cpp - instrumentation bindings -------------===// 237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// 337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// The LLVM Compiler Infrastructure 437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// 537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// This file is distributed under the University of Illinois Open Source 637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// License. See LICENSE.TXT for details. 737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// 837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//===----------------------------------------------------------------------===// 937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// 1037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// This file defines C bindings for the instrumentation component. 1137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// 1237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//===----------------------------------------------------------------------===// 1337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "InstrumentationBindings.h" 1537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "llvm-c/Core.h" 16ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/IR/LegacyPassManager.h" 1737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "llvm/IR/Module.h" 1837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "llvm/Transforms/Instrumentation.h" 1937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 2037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesusing namespace llvm; 2137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 2237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid LLVMAddAddressSanitizerFunctionPass(LLVMPassManagerRef PM) { 2337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines unwrap(PM)->add(createAddressSanitizerFunctionPass()); 2437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 2537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 2637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid LLVMAddAddressSanitizerModulePass(LLVMPassManagerRef PM) { 2737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines unwrap(PM)->add(createAddressSanitizerModulePass()); 2837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 2937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 3037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid LLVMAddThreadSanitizerPass(LLVMPassManagerRef PM) { 3137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines unwrap(PM)->add(createThreadSanitizerPass()); 3237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 3337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 3437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid LLVMAddMemorySanitizerPass(LLVMPassManagerRef PM) { 3537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines unwrap(PM)->add(createMemorySanitizerPass()); 3637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 3737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 3837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid LLVMAddDataFlowSanitizerPass(LLVMPassManagerRef PM, 39ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines int ABIListFilesNum, 40ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines const char **ABIListFiles) { 41ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines std::vector<std::string> ABIListFilesVec; 42ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines for (int i = 0; i != ABIListFilesNum; ++i) { 43ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ABIListFilesVec.push_back(ABIListFiles[i]); 44ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 45ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines unwrap(PM)->add(createDataFlowSanitizerPass(ABIListFilesVec)); 4637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 47