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

関連する問題