Как сохранить модифицированный битовый код llvm в заданном имени файла? - PullRequest
0 голосов
/ 14 декабря 2018

Мне успешно удалось изменить заданный входной битовый код, который был прочитан из файла , как описано в этом сообщении SO .Теперь я хочу сохранить его в какое-нибудь имя выходного файла с битовым кодом , что-то похожее на 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;
}

Любая помощь очень ценится, спасибо!

1 Ответ

0 голосов
/ 14 декабря 2018

Примерно так должно поступить:

std::error_code ec;
ToolOutputFile result("myOutputBC.bc", ec, sys::fs::F_None);
WriteBitcodeToFile(*module, result.os());
result.keep();

Обратите внимание, что если вы используете старую версию LLVM, ToolOutputFile может называться tool_output_file.

...