llvm中的虚拟表(llvmpy)

2024-04-29 09:58:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用llvmpy为一些人工创建一个DIY编译器,并且需要在globe范围内有一个虚拟方法表。我的概念是有几个函数指针数组(每个类一个)。不幸的是,没有用于全局作用域的llvmir构建器,我不能使用ptrtoint来获得所有数组元素的统一类型(否则,我将把函数地址存储为64位int,并在调用之前将它们转换为适当的类型)。你知道有什么合理的解决办法吗?它也可以用C++ LLVM API来说明,因为LLVM PY非常相似。在


Tags: 方法概念类型编译器数组全局作用域人工
1条回答
网友
1楼 · 发布于 2024-04-29 09:58:40

实际上,IRBuilder并不公开接口来实现这一点,但您可以手动创建它,例如使用GlobalVariable的构造函数。通过生成数组中的指针,i可以存储所有的表达式:

@global = global [4 x i64*] [
  i64* bitcast (void()* @f to i64*),
  i64* bitcast (float(i32)* @g to i64*),
  ...
]

因此,使用ConstantExpr::getBitCast()生成从Function到数组元素类型的强制转换(最好是一个指针,我看不到存储i64的好处)。然后在模块中创建一个新的GlobalVariable,并用您创建的所有常量表达式初始化它。在

相关问题 更多 >