如何将修改后的 llvm 位码保存到给定的文件名?
How to save a modified llvm bitcode to a given filename?
我已经成功地修改了给定的输入位码
如 所述,从文件 中读取。
现在我想将它保存到一些输出位码文件名,用
类似于 saveIRFile(module,"myOutputBC.bc");
的内容。
这是我正在使用的 main.cpp
文件,但我似乎找不到
正确的 API 进行所需的保存。
/**********************/
/* LLVM INCLUDE FILES */
/**********************/
#include "llvm/IR/Module.h"
#include "llvm/IRReader/IRReader.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/IR/LLVMContext.h"
/**************/
/* NAMESPACES */
/**************/
using namespace std;
using namespace llvm;
int main(int argc, char **argv)
{
LLVMContext ctx;
SMDiagnostic Err;
unique_ptr<Module> M = parseIRFile(argv[1],Err,ctx);
if (M)
{
Module *module = M.get();
for (auto
func = module->begin();
func != module->end();
func++)
{
errs() << func->getName() << "\n";
// modify func's basic blocks ...
// and save with saveIRFile(module,"myOutputBC.bc");
}
}
return 0;
}
非常感谢任何帮助,谢谢!
应该这样做:
std::error_code ec;
ToolOutputFile result("myOutputBC.bc", ec, sys::fs::F_None);
WriteBitcodeToFile(*module, result.os());
result.keep();
请注意,如果您使用的是旧版本的 LLVM,ToolOutputFile
可能会被称为 tool_output_file
。
我已经成功地修改了给定的输入位码
如 saveIRFile(module,"myOutputBC.bc");
的内容。
这是我正在使用的 main.cpp
文件,但我似乎找不到
正确的 API 进行所需的保存。
/**********************/
/* LLVM INCLUDE FILES */
/**********************/
#include "llvm/IR/Module.h"
#include "llvm/IRReader/IRReader.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/IR/LLVMContext.h"
/**************/
/* NAMESPACES */
/**************/
using namespace std;
using namespace llvm;
int main(int argc, char **argv)
{
LLVMContext ctx;
SMDiagnostic Err;
unique_ptr<Module> M = parseIRFile(argv[1],Err,ctx);
if (M)
{
Module *module = M.get();
for (auto
func = module->begin();
func != module->end();
func++)
{
errs() << func->getName() << "\n";
// modify func's basic blocks ...
// and save with saveIRFile(module,"myOutputBC.bc");
}
}
return 0;
}
非常感谢任何帮助,谢谢!
应该这样做:
std::error_code ec;
ToolOutputFile result("myOutputBC.bc", ec, sys::fs::F_None);
WriteBitcodeToFile(*module, result.os());
result.keep();
请注意,如果您使用的是旧版本的 LLVM,ToolOutputFile
可能会被称为 tool_output_file
。