程序编译中的PIC级别是多少?

时间:2016-06-12 17:48:44

标签: c++ clang llvm llvm-ir

我正在查看LLVM库,我发现Clang发出了添加此元数据的LLVM IR模块:

!llvm.module.flags = !{!0}
!llvm.ident = !{!1}

!0 = !{i32 1, !"PIC Level", i32 2}
!1 = !{!"Apple LLVM version 7.3.0 (clang-703.0.31)"}

然后我发现在模块上调用方法setPICLevel()会得到类似的结果:

!0 = !{i32 1, !"PIC Level", i32 0}

因此整个元数据!0与PIC级别有关。

我一直在网上搜索它,但我什么都没发现。 什么是PIC级别,它表示什么?

1 个答案:

答案 0 :(得分:5)

这是一个仅适用于PowerPC的标志,否则将被忽略。它将与位置无关的代码模型设置为小型或大型模型。其他架构当然可以有PIC,但如果模型不适用于其他地方,则此标志表示大小。

您可以看到首次添加到LLVM的提交:http://comments.gmane.org/gmane.comp.compilers.llvm.cvs/205216

更多信息:

https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/MachOTopics/1-Articles/dynamic_code.html

https://en.m.wikipedia.org/wiki/Position-independent_code