【问题标题】:Understanding the different linkage types of global values in LLVM IR with examples通过示例了解 LLVM IR 中全局值的不同链接类型
【发布时间】:2017-11-17 11:51:33
【问题描述】:

LLVM IR 文档详细讨论了 IR,其中大部分内容都很清楚。但是,我对Linkage Types 感到特别困惑。除了privateinternalexternal之外的链接类型如果没有例子就会变得非常混乱。

有人可以在这里发光吗? (可能将用例与 C/C++ 之类的语言相关联?)

(我试图清楚地理解 IR,因为我正在为 LLVM 模块构建分析器。)

【问题讨论】:

  • 在线文档中解释的比较好,具体有什么不清楚的地方?
  • 我无法想象每种理论的具体用例(除了给定的三种类型)。一些示例或对良好资源的参考在这里会很有帮助。

标签: llvm llvm-ir


【解决方案1】:

LLVM 的链接定义很复杂,因为它必须能够表示来自不同编程语言、系统、目标文件格式等的概念。

唯一确定的参考是代码。特别是看看 clang 如何从 C++ standard linkage 转换为 ASTContext::GetGVALinkageForFunction 中的 codegen linkage 并从那里转换为 CodeGenModule::getLLVMLinkageForDeclarator 中的 llvm。

当然还有一些代码(还没有找到)将 LLVM 链接转换为等价的目标文件,如 COMDATs 或使用例如弱符号的弱符号。 GlobalValue::isWeakForLinker

appending 链接是一种非常特殊的低级链接,例如用于构造指向全局构造函数的指针数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2017-03-14
    • 1970-01-01
    • 2017-04-09
    • 2017-03-10
    • 2016-07-09
    相关资源
    最近更新 更多