LLVM IR跳转到另一个函数中的基本块

时间:2017-05-30 19:33:01

标签: llvm llvm-ir

我已经使用我的传递生成了一个IR,在这个IR中的一个函数里面,我想跳回调用函数的一个基本块,在调用函数内部调用ext_callee函数如下:

%4 = call i1 @ext_callee(i32 32, i32 %3, i32 -4, i8* blockaddress(@tobecalled, %5), i8* blockaddress(@tobecalled, %7)).

最后两个参数是我想要跳转到这个ext_callee函数内的基本块地址。 我尝试将indirectbr指令与其中一个blockaddress参数一起使用,但是当我运行IR时,它会提示段故障。我搜索了LLVM文档,但没有找到如何跳转到另一个函数的基本块。有人有线索吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

你不能这样做。

http://llvm.org/docs/LangRef.html#i-indirectbr

  

控制转移到address参数中指定的块。必须在标签列表中列出所有可能的目标块,否则此指令具有未定义的行为。这意味着跳转到其他函数中定义的标签也有不确定的行为。