2016-06-12 41 views
5

Ben LLVM kütüphanelerde bir göz alarak ve ben Clang bu meta verileri ekleyerek LLVM IR modüllerini yayar anladım:Program derlemesinde PIC seviyesi nedir?

!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)"} 

Sonra bir modül üzerinde yöntemini setPICLevel() çağıran benzer bir sonuç alır öğrendim:

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

Yani bütün meta !0 PIC düzeyi hakkında.

İnternette araştırıyorum ama hiçbir şey bulamadım. Bu PIC seviyesi nedir ve neyi gösterir?

cevap

5

Yalnızca PowerPC için geçerli olan ve aksi dikkate alınmayan bir işarettir. Modeli bağımsız kod için modelini küçük veya büyük bir modele ayarlar. Elbette diğer mimariler PIC'e sahip olabilir, ancak modelin başka bir yerde geçerli olmaması durumunda bu bayrak büyüklüğünü temsil eder. İlk LLVM eklendi nereye görebiliyordu

taahhüt: http://comments.gmane.org/gmane.comp.compilers.llvm.cvs/205216

diğer bilgiler:

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

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