Clang / LLVM中的CodeModel指的是什么?

What does the CodeModel in Clang / LLVM refer to?

本文关键字:是什么 CodeModel LLVM 中的 Clang      更新时间:2023-10-16

我一直在看Clang/LLVM源代码,我遇到了CodeGenOptionsCodeModel属性。

根据这种方法,有效值为:"small", "kernel", "medium""large"

这个属性控制什么?

我如何为我的应用程序选择正确的值?

代码模型是AMD64 ABI中的一个术语(参见https://www.intel.com/content/dam/develop/external/us/en/documents/mpx-linux64-abi.pdf的3.5.1获取更多信息)。

简而言之——x86-64指令中的大部分偏移量都是与pc相关的,然而指令中的直接字段只有32位长。因此,如果数据位于"远"处;从代码(超过32位的间隔),然后不能使用指令内的立即字段来有效地编码偏移量,应该显式地计算地址。代码模型对代码和数据的相对位置提供了各种限制。

如果你静态编译所有东西,那么'small'是安全的(默认值)。如果你是JIT,那么一切都是可能的,特别是如果ASLR被启用,你需要使用中型/大型代码模型。