2016-06-12 57 views
5

sto prendendo uno sguardo a biblioteche LLVM e ho capito che Clang emette i moduli LLVM IR salvando questo metadati:Qual è il livello PIC nella compilazione del programma?

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

Poi ho scoperto che la chiamata al metodo setPICLevel() su un modulo ottiene un risultato simile:

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

Così l'intero metadati !0 è circa il livello di PIC.

Lo stavo cercando su internet ma non ho trovato nulla. Cos'è questo livello PIC e cosa indica?

risposta

5

Si tratta di un flag che si applica solo a PowerPC e viene altrimenti ignorato. Imposta il modello per il codice indipendente dalla posizione su un modello piccolo o grande. Altre architetture, naturalmente, possono avere PIC, ma questa bandiera rappresenta la dimensione se il modello non è applicabile altrove.

Si poteva vedere il commit dove è stato aggiunto al LLVM: http://comments.gmane.org/gmane.comp.compilers.llvm.cvs/205216

Maggiori informazioni:

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

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