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