function_ref<void(Function *, FunctionCallee)> FunctionsCreatedCallback,
StringRef VersionCheckName = StringRef());
-// Creates and returns a sanitizer init function without argument if it doesn't
-// exist, and adds it to the global constructors list. Otherwise it returns the
-// existing function.
-Function *getOrCreateInitFunction(Module &M, StringRef Name);
-
/// Rename all the anon globals in the module using a hash computed from
/// the list of public globals in the module.
bool nameUnamedGlobals(Module &M);
return std::make_pair(Ctor, InitFunction);
}
-Function *llvm::getOrCreateInitFunction(Module &M, StringRef Name) {
- assert(!Name.empty() && "Expected init function name");
- if (Function *F = M.getFunction(Name)) {
- if (F->arg_size() != 0 ||
- F->getReturnType() != Type::getVoidTy(M.getContext())) {
- std::string Err;
- raw_string_ostream Stream(Err);
- Stream << "Sanitizer interface function defined with wrong type: " << *F;
- report_fatal_error(Err);
- }
- return F;
- }
- Function *F =
- cast<Function>(M.getOrInsertFunction(Name, AttributeList(),
- Type::getVoidTy(M.getContext()))
- .getCallee());
-
- appendToGlobalCtors(M, F, 0);
-
- return F;
-}
-
void llvm::filterDeadComdatFunctions(
Module &M, SmallVectorImpl<Function *> &DeadComdatFunctions) {
// Build a map from the comdat to the number of entries in that comdat we