2012-12-16 8 views
5

bitcode dosyasını .bc için, ama şimdi, ilk kez ben var sürecindeki bir eksik adımı bulamıyor:yazma modülü i modülünden bir .bc dosya damping önemsiz bir operasyon olduğunu varsaydım

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

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

bu modülü yazmak için, önce ben bir BistreamWriter

BitstreamWriter::BitstreamWriter (SmallVectorImpl<char> &O) 
gerek http://llvm.org/docs/doxygen/html/classllvm_1_1BitstreamWriter.html

ve bir BitstreamWriter için bir SmallVectorImpl gerekir. Peki, sırada ne var? SmallVectorImpl baytının içeriğini bir dosya işleyicisinde kendim mi yazmalıyım? Bunun için bir llvm api var mı? başka bir şeye ihtiyacım var mı?

+3

[C api] (http://llvm.org/docs/doxygen/html/BitWriter_8cpp_source.html) bunu yapmanın basit bir yolunu sağlar. Doğrudan kullanın ya da nasıl çalıştığını görün ve aynısını yapın. –

cevap

9

WriteModule işlevi (hatta erişemez) dışında tüketim için orada değil demektir lib/Bitcode/Writer/BitcodeWriter.cpp içinde statik vardır.

aynı dosya

başka bir işlevi vardır, ancak bu arayüz ile, WriteBitcodeToFile seslendi:

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

ben daha uygun bir arayüz düşünemiyorum. Bu dosyayı bildiren başlık dosyası ./include/llvm/Bitcode/ReaderWriter.h.

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

ve sonra LLVM-dis kullanarak sökmeye:

0

Ben aşağıdaki kodu kullanabilirsiniz.