【问题标题】:What is PIC level in program compilation?程序编译中的PIC级别是什么?
【发布时间】:2016-10-13 03:18:39
【问题描述】:

我正在查看 LLVM 库,发现 Clang 发出 LLVM IR 模块添加此元数据:

!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 级别是什么?它表示什么?

【问题讨论】:

    标签: c++ clang llvm llvm-ir


    【解决方案1】:

    这是一个仅适用于 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

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 1970-01-01
      • 2012-02-22
      • 2012-02-08
      • 2015-11-13
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多