【发布时间】:2012-09-07 01:38:27
【问题描述】:
我正在尝试修改 LLVM,以使某些常量和函数在内存中保持连续。
换句话说,我需要确保某些函数的机器代码总是在内存中以大约 4 字节的常量开头。 函数体本身不能修改。
我可以通过以某种方式修改 LLVM IR 来实现这一点吗?
如果是: 我将如何在 LLVM IR 中声明以使变量和函数在内存中保持连续?
如果不是: 为了实现这一点,我应该修改代码生成过程的哪一部分(即哪个 pass(es))?任何指向我应该查看的项目/文件的链接都会有所帮助,因为我还不确定从哪里开始。
【问题讨论】:
-
这显然适用于 x86 等非哈佛架构,但在 Atmel 等哈佛架构上则没有意义。代码前面的字节也是代码;数据后面的字节也是数据。而且我认为 LLVM 的可移植性足以支持哈佛架构。
-
@MSalters:是的...但这并不意味着它不能具有非哈佛架构的功能。毕竟它并不是没有特定于平台的功能(SSE 等)。 :) 但是,如果您知道它不支持这一点,那么请将其发布为答案!
-
是否与 GHC 的 TNTC 优化有关?
-
@arrowdodger:不……这是我正在做的一个项目。
-
此链接中的想法可能会有所帮助:hackage.haskell.org/trac/ghc/ticket/4213
标签: c++ code-generation llvm llvm-ir