mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-26 06:22:56 +02:00
30cb89fe4a
Summary: This helper function creates a ctor function, which calls sanitizer's init function with given arguments. This constructor is then expected to be added to module's ctors. The patch helps unifying how sanitizer constructor functions are created, and how init functions are called across all sanitizers. Reviewers: kcc, samsonov Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D8777 llvm-svn: 236627
63 lines
2.4 KiB
C++
63 lines
2.4 KiB
C++
//===-- ModuleUtils.h - Functions to manipulate Modules ---------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This family of functions perform manipulations on Modules.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_TRANSFORMS_UTILS_MODULEUTILS_H
|
|
#define LLVM_TRANSFORMS_UTILS_MODULEUTILS_H
|
|
|
|
#include "llvm/ADT/ArrayRef.h"
|
|
#include <utility> // for std::pair
|
|
|
|
namespace llvm {
|
|
|
|
class Module;
|
|
class Function;
|
|
class GlobalValue;
|
|
class GlobalVariable;
|
|
class Constant;
|
|
class StringRef;
|
|
class Value;
|
|
class Type;
|
|
template <class PtrType> class SmallPtrSetImpl;
|
|
|
|
/// Append F to the list of global ctors of module M with the given Priority.
|
|
/// This wraps the function in the appropriate structure and stores it along
|
|
/// side other global constructors. For details see
|
|
/// http://llvm.org/docs/LangRef.html#intg_global_ctors
|
|
void appendToGlobalCtors(Module &M, Function *F, int Priority);
|
|
|
|
/// Same as appendToGlobalCtors(), but for global dtors.
|
|
void appendToGlobalDtors(Module &M, Function *F, int Priority);
|
|
|
|
/// \brief Given "llvm.used" or "llvm.compiler.used" as a global name, collect
|
|
/// the initializer elements of that global in Set and return the global itself.
|
|
GlobalVariable *collectUsedGlobalVariables(Module &M,
|
|
SmallPtrSetImpl<GlobalValue *> &Set,
|
|
bool CompilerUsed);
|
|
|
|
// Validate the result of Module::getOrInsertFunction called for an interface
|
|
// function of given sanitizer. If the instrumented module defines a function
|
|
// with the same name, their prototypes must match, otherwise
|
|
// getOrInsertFunction returns a bitcast.
|
|
Function *checkSanitizerInterfaceFunction(Constant *FuncOrBitcast);
|
|
|
|
/// \brief Creates sanitizer constructor function, and calls sanitizer's init
|
|
/// function from it.
|
|
/// \return Returns pair of pointers to constructor, and init functions
|
|
/// respectively.
|
|
std::pair<Function *, Function *> createSanitizerCtorAndInitFunctions(
|
|
Module &M, StringRef CtorName, StringRef InitName,
|
|
ArrayRef<Type *> InitArgTypes, ArrayRef<Value *> InitArgs);
|
|
} // End llvm namespace
|
|
|
|
#endif // LLVM_TRANSFORMS_UTILS_MODULEUTILS_H
|