【问题标题】:writing module to .bc bitcode file将模块写入 .bc 位码文件
【发布时间】:2012-12-16 17:24:44
【问题描述】:

我认为从模块中转储 .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吗?我需要什么吗 还有吗?

【问题讨论】:

  • C api 提供了一种简单的方法来做到这一点。直接使用它或看看它是如何工作的并做同样的事情。

标签: file-io llvm


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我使用以下代码:

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 2017-05-01
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多