将模块写入.bc bitcode文件

时间:2012-12-16 17:24:44

标签: file-io llvm

我认为从模块转储.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。但是,接下来呢? 我应该在a上逐字节写SmallVectorImpl的内容 文件处理程序自己这有一个llvm api吗?我需要什么吗 别的?

2 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:1)

我使用以下代码:

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

然后使用llvm-dis。

进行反汇编