自身のBitCodeを出力する
clangでコンパイルしたバイナリのBitcodeを出力する.
BitCodeをParseBitcodeFile関数を使ってロードし、
Moduleを作る。Module::dumpでdumpする。
clang -emit-llvmでbitcodeを生成する際にはlink時にシステムのリンカ(ld)
ではなくてllvm-ldを指定しないとうまくコンパイル出来なかった。
/* * clang dump.cpp -emit-llvm `llvm-config --cxxflags` -c -o dump.bc * llvm-ld dump.bc -o dump * ./dump */ #include <llvm/LLVMContext.h> #include <llvm/Module.h> #include <llvm/Bitcode/ReaderWriter.h> #include <llvm/Support/MemoryBuffer.h> #include <llvm/Support/system_error.h> #include <llvm/ADT/OwningPtr.h> #include <iostream> using namespace llvm; int main(int argc, char **argv) { LLVMContext &Context = getGlobalContext(); std::string ErrMsg; OwningPtr<MemoryBuffer> Buffer; std::string fname(argv[0]); if (error_code ec = MemoryBuffer::getFile(fname+".bc", Buffer)) { std::cout << "Could not open file" << ec.message() << std::endl; } Module *m = ParseBitcodeFile(Buffer.get(), Context, &ErrMsg); if (!m) { std::cout << "error" << ErrMsg << std::endl; return 1; } (*m).dump(); return 0; }