【问题标题】:LLVM: How to access JIT API at runtime & edit myself?LLVM:如何在运行时访问 JIT API 并自己编辑?
【发布时间】:2011-03-14 13:32:38
【问题描述】:

您能否建议是否可以从正在执行的程序访问 LLVM JIT API?我的目标是能够动态操作(添加/更新/删除)类、方法和数据。

我最好留在 Clang。欢迎任何想法。

【问题讨论】:

    标签: jit llvm


    【解决方案1】:

    这似乎是很容易的事情。在 JIT 中,您可以提供任何外部函数到任意地址之间的映射。所以,基本上你只需在你的 IR 中定义一些被 JITed 的函数,将它绑定到外部世界的地址上,这对你来说是一个窍门。

    特别是,http://llvm.org/doxygen/classllvm_1_1ExecutionEngine.html#a805704b52a327cc6b37aebf9cba14169 是您应该在此处使用的函数。

    【讨论】:

    • 即我将不得不构建自定义解释器/JIT 编译器,它将为我在 VM 下运行的软件从 JIT API 公开所需的方法?此外,这仅绑定了 1 个全局变量,但 JIT API 是面向对象的,我不确定我们是否可以让它那么容易工作:-|
    • 这是一个 GlobalValue,而不是 GlobalVariable。 GlobalValue 是 Function 和 GlobalVariable 的基类,因此您可以绑定两者(以及任意数量 - 只需为您要绑定的所有对象调用该函数)。是的,LLVM 是用 C++ 编写的,所以你需要使用 C++ ABI。或者,您可以使用 C 绑定并绑定它们。查看llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/… 内部,了解它发生了什么。
    猜你喜欢
    • 2015-09-25
    • 2014-06-01
    • 1970-01-01
    • 2014-04-23
    • 2012-06-05
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 2015-02-22
    相关资源
    最近更新 更多