2016-06-12 112 views
5

我考虑看看LLVM库,我想通了,铛发出LLVM IR模块添加元数据:程序编译中的PIC级别是什么?

!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级别,它表示什么?

回答

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