我需要实现一个库,它使用LLVM/Clang作为后端将C代码编译为eBPF字节码.代码将从内存中读取,我需要将结果汇编代码也存储在内存中.
到目前为止,我已经能够使用以下代码编译为LLVM IR:
#include <string>
#include <vector>
#include <clang/Frontend/CompilerInstance.h>
#include <clang/Basic/DiagnosticOptions.h>
#include <clang/Frontend/TextDiagnosticPrinter.h>
#include <clang/CodeGen/CodeGenAction.h>
#include <clang/Basic/TargetInfo.h>
#include <llvm/Support/TargetSelect.h>
using namespace std;
using namespace clang;
using namespace llvm;
int main() {
constexpr auto testCodeFileName = "test.cpp";
constexpr auto testCode = "int test() { return 2+2; }";
// Prepare compilation arguments
vector<const char *> args;
args.push_back(testCodeFileName);
// Prepare DiagnosticEngine
DiagnosticOptions DiagOpts;
TextDiagnosticPrinter *textDiagPrinter =
new clang::TextDiagnosticPrinter(errs(),
&DiagOpts);
IntrusiveRefCntPtr<clang::DiagnosticIDs> pDiagIDs;
DiagnosticsEngine *pDiagnosticsEngine =
new DiagnosticsEngine(pDiagIDs,
&DiagOpts,
textDiagPrinter);
// Initialize CompilerInvocation
CompilerInvocation *CI …Run Code Online (Sandbox Code Playgroud)