2016-06-12 25 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