【发布时间】:2011-10-24 08:02:21
【问题描述】:
我想在 LLVM 程序集中定义一个作为参数的函数:
- 子功能的标识符
- 可变参数
这个函数应该做一些预处理,找到标识符的正确函数并使用可变参数调用它,并返回它的结果。
类似:
define ??? @1 (i32 %identifier, ...vararg...)
{
switch i32 %identifier, label %def, i32 1, label %a
a:
%1 = tail call @function_for_a, ...vararg...
ret ??? %1
def:
ret void
}
这似乎是不可能的。有没有办法做到这一点?我认为应该可以使用普通的汇编程序。
这是一个面向对象语言的调度函数。我希望它快。
我想要的是一种方法:
- 从堆栈中删除@1 使用的第一个参数
- 分支到第二个函数。
然后将执行第二个函数代替第一个函数(它是尾调用),但使用第一个函数不完全知道的参数列表(第一个函数的 vararg)。
【问题讨论】:
-
是否可以选择用 C 语言编写此类代码,使用 clang/llvm-gcc 编译并反汇编
.bc? -
有一个llvm反汇编程序:
llvm-dis。我想做的事在 C 中是做不到的。
标签: assembly llvm variadic-functions