mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-08 03:46:02 +03:00
Add LLVM-pass plugin support to LDC. Commandline flag: -plugin=...
. (#2554)
This adds functionality to load plugins such as the AFL llvm-mode plugin: https://github.com/mirrorer/afl/blob/master/llvm_mode/afl-llvm-pass.so.cc Note that such plugins developed for Clang should also work for LDC !
This commit is contained in:
parent
b22d8cccf3
commit
16ecb3e79f
9 changed files with 196 additions and 0 deletions
48
driver/plugins.cpp
Normal file
48
driver/plugins.cpp
Normal file
|
@ -0,0 +1,48 @@
|
|||
//===-- driver/plugins.cpp -------------------------------------*- C++ -*-===//
|
||||
//
|
||||
// LDC – the LLVM D compiler
|
||||
//
|
||||
// This file is distributed under the BSD-style LDC license. See the LICENSE
|
||||
// file for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Implements functionality related to plugins (`-plugin=...`).
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "driver/plugins.h"
|
||||
|
||||
#if LDC_ENABLE_PLUGINS
|
||||
|
||||
#include "errors.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/DynamicLibrary.h"
|
||||
|
||||
namespace {
|
||||
namespace cl = llvm::cl;
|
||||
|
||||
cl::list<std::string>
|
||||
pluginFiles("plugin", cl::CommaSeparated, cl::desc("Plugins to load."),
|
||||
cl::value_desc("<dynamic_library.so, lib2.so>"));
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
/// Loads all plugins. The static constructor of each plugin should take care of
|
||||
/// the plugins registering themself with the rest of LDC/LLVM.
|
||||
void loadAllPlugins() {
|
||||
for (auto &filename : pluginFiles) {
|
||||
std::string errorString;
|
||||
if (llvm::sys::DynamicLibrary::LoadLibraryPermanently(filename.c_str(),
|
||||
&errorString)) {
|
||||
error(Loc(), "Error loading plugin '%s': %s", filename.c_str(),
|
||||
errorString.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#else // #if LDC_ENABLE_PLUGINS
|
||||
|
||||
void loadAllPlugins() {}
|
||||
|
||||
#endif // LDC_ENABLE_PLUGINS
|
Loading…
Add table
Add a link
Reference in a new issue