compiler-construction - LLVM 抖动可以在连续内存地址中发出 native 代码吗?

标签 compiler-construction llvm jit

我有关于 LLVM 抖动的问题:
我可以强制 LLVM 抖动在连续内存地址中发出 native 代码吗?并成为PIC?
我想要做的是将 JIT 代码保存在一个文件中,然后加载它以供稍后执行..

我所说的“加载”是简单地将文件中的位读入缓冲区,我不想生成 Sprite 或类似的东西。

下面是一个例子:
假设我有 C 源文件,其中包含:

Global variables
----------------
Function Foo()
----------------
Function Too()

当我请求 JIT 代码时,我希望 JIT 位于连续内存地址中:
0x100: Global Vars (take 16 Byte)
0x110: Foo() Code (take 32 Byte)
0x130: Too() Code (take 32 Byte)
0x150: end.

最佳答案

要将 JIT 代码存储在内存的某个区域,您可以编写特殊版本的 JITMemoryManager ( include/llvm/ExecutionEngine/JITMemoryManager.h lib/ExecutionEngine/JIT/JITMemoryManager.cpp )。这里有自定义 JIM MM 的示例:unittests/ExecutionEngine/JIT/JITTest.cpp ,它是一个 RecordingJITMemoryManager记录主要的 JIT MM 调用。

正如我所看到的(作为 LLVM 2.9),ARM JIT 有 isPIC设置为 False 并且 X86 JIT 能够生成 PIC 代码。

最大的问题似乎是预编译代码的加载。

关于compiler-construction - LLVM 抖动可以在连续内存地址中发出 native 代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6482578/

相关文章:

compiler-construction - 在编译器 (ocaml) 中跟踪 AST 节点的源位置

java - 有没有办法从 JVM 内部判断某个特定方法是否已经过 JIT 编译?

c++ - 为什么语句是: "undefined behavior means the compiler can do anything it wants" true?

c - 需要帮助了解有关换行符的 C 代码

visual-studio-2015 - ClangFormat 扩展未在 Visual Studio 2015 上正确安装

ios - Xamarin 是否使用 LLVM 编译器?

c# - 冗余转换是否得到优化?

c# - 发布版本中是否取消了数组边界检查?

c - 如何从 C 和 JAVA 代码中获取注册传输语言 (RTL) 代码?

c++11 - C++ 字符串到 LLVM IR