2016-06-12 22 views
5

ich einen Blick auf LLVM Bibliotheken zu nehmen und ich herausgefunden, dass Clang die LLVM IR-Module hinzugefügt werden diese Metadaten aussendet: dass ichWas ist PIC-Ebene in der Programmzusammenstellung?

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

Dann fand heraus setPICLevel() Aufruf der Methode auf einem Modul ein ähnliches Ergebnis erhält:

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

Also die gesamten Metadaten !0 ist über die PIC-Ebene.

Ich habe es im Internet gesucht, aber ich habe nichts gefunden. Was ist das PIC Level und was zeigt es an?

Antwort

5

Es ist ein Flag, das nur für PowerPC gilt und ansonsten ignoriert wird. Es legt das Modell für positionsunabhängigen Code auf ein kleines oder großes Modell fest. Andere Architekturen können natürlich PIC haben, aber dieses Flag repräsentiert die Größe, wenn das Modell an anderer Stelle nicht anwendbar ist.

Sie sehen konnte, die dort engagieren, wo es zuerst LLVM wurde hinzugefügt: http://comments.gmane.org/gmane.comp.compilers.llvm.cvs/205216

Weitere Informationen:

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

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