如何编写前端LLVM传递以在每个BasicBlock的开头/结尾插入指令?

时间:2015-09-14 14:27:38

标签: llvm llvm-clang llvm-ir

我尝试使用AllocaInst并将其插入给定BB的末尾,如下所示:

if(StringUtils.isNullOrWhiteSpace(myString)){...}

我成功地链接并创建了我的LLVMBasicBlock.so文件。但是,当我运行它来转换样本.bc文件时,它正在处理%数据时出现分段错误。

1 个答案:

答案 0 :(得分:0)

LLVM指令的构造函数包括插入位置的参数。此参数的默认值为NULL,您在代码示例中使用了该参数。对于AllocaInst,其构造函数之一采用基本块来插入:

AllocaInst (Type *Ty, Value *ArraySize, const Twine &Name, BasicBlock *InsertAtEnd)

我的第一个建议是使用为插入说明而提供的功能。

其次,AllocaInst采用Value* ArraySize,你提供的是0. 0可能被强制转换为NULL *。您可能想要创建相应数字的ConstantInt。 ConstantInt继承自Value,因此LLVM将安全地强制它。