8

我假设从模块中转储 .bc 文件是一项微不足道的操作,但是现在,我第一次必须从代码中实际执行它,对于我的一生,我找不到该过程中缺少的步骤:

static void WriteModule ( const Module *  M, BitstreamWriter &  Stream )

http://llvm.org/docs/doxygen/html/BitcodeWriter_8cpp.html#a828cec7a8fed9d232556420efef7ae89

要编写该模块,首先我需要一个 BistreamWriter

BitstreamWriter::BitstreamWriter (SmallVectorImpl< char > &O)

http://llvm.org/docs/doxygen/html/classllvm_1_1BitstreamWriter.html

对于 BitstreamWriter,我需要一个 SmallVectorImpl。但是,接下来呢?我应该自己在文件处理程序上逐字节写入 SmallVectorImpl 的内容吗?有为此的llvm api吗?我需要别的东西吗?

4

2 回答 2

13

WriteModule函数在 内部是静态lib/Bitcode/Writer/BitcodeWriter.cpp,这意味着它不存在供外部使用(您甚至无法访问它)。

然而,同一个文件还有另一个函数,叫做WriteBitcodeToFile,使用这个接口:

/// WriteBitcodeToFile - Write the specified module to the specified output
/// stream.
void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out);

我无法想象一个更方便的界面。顺便说一句,声明它的头文件是./include/llvm/Bitcode/ReaderWriter.h

于 2012-12-17T14:05:16.647 回答
0

我使用以下代码:

std::error_code EC;
llvm::raw_fd_ostream OS("module", EC, llvm::sys::fs::F_None);
WriteBitcodeToFile(pBiFModule, OS);
OS.flush();

然后使用llvm-dis进行反汇编。

于 2016-07-01T18:19:35.650 回答