我正在尝试修改LLVM,以使某些常量和函数在内存中保持连续 换句话说,我需要确保某些函数的机器代码始终在内存中前面有一些~4字节的常量。 不得修改函数体本身。
我可以通过某种方式修改LLVM IR来实现这一目标吗?
如果是: 我如何在LLVM IR中声明保持变量和函数在内存中是连续的?
如果不是: 为了实现这个目的,我应该修改代码生成过程的哪一部分(即哪些过程)?我应该看到的项目/文件的任何链接都会有所帮助,因为我不知道从哪里开始。
答案 0 :(得分:0)
据我所知,我认为只要修改IR就不能做到这一点;你必须自己写一些东西来处理它。它也不应该是通过 - 它太低级别,它应该在target-specific code generation期间运行。您可以搭载现有目标并只修改此方面,当然,您不必从头开始编写新目标。不过,我不知道哪个位置对此有好处。
我认为在代码生成期间将此信息从IR级别传递到DAG的好方法是使用元数据:将元数据附加到函数或将相互链接它们的关联常量,然后再使用用于将它们一起发射的链接。请参阅this thread on llvm-dev for information how to transfer the metadata。