我正在尝试构建一个简单的位码读取器 (而不是专用过程,以便能够更轻松地进行调试),并且在提取模块时遇到了一些问题。这是main内部的内容:

LLVMModuleRef module;
char *message = nullptr;
LLVMMemoryBufferRef memoryBuffer;

LLVMCreateMemoryBufferWithContentsOfFile(
    argv[1],
    &memoryBuffer,
    &message);

LLVMParseBitcode2(memoryBuffer,&module);

// for (auto func:module->getFunctionList())
{
    /* ... */
}

如何从LLVMModuleRef 中提取模块?当然,我在这里缺少一些琐碎的事情。

最佳答案

为什么要混合使用C和C++ API?

如果您想使用llvm::Module,我假设您正在使用C++进行编码,因此只需使用C++ API来解析位代码即可:

    #include "llvm/IRReader/IRReader.h"

    SMDiagnostic Err;
    LLVMContext ctx;
    unique_ptr<Module> M = parseIRFile(path, Err, ctx);

    if (!M) {
        Err.print("Error loading bitcode", errs());
    }

09-05 06:58