通过示例了解LLVM IR中全局值的不同链接类型

时间:2017-11-17 11:51:34

标签: llvm llvm-ir

LLVM IR doc详细讨论了IR,其中很多都很清楚。但是,我对Linkage Types特别困惑。除privateinternalexternal之外的链接类型在没有示例的情况下变得相当混乱。

有人可以在这里投光吗? (可能将用例与C / C ++等语言联系起来?)

(我正在努力理解IR,因为我正在为LLVM模块构建分析器。)

1 个答案:

答案 0 :(得分:1)

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

唯一的参考文献是代码。特别要研究一下clang如何从C++ standard linkage转换为codegen linkage中自己的ASTContext::GetGVALinkageForFunction并从那里转换为CodeGenModule::getLLVMLinkageForDeclarator中的llvm。

然后当然有一些代码(尚未找到它)将LLVM链接转换为对象文件,例如COMDATs或使用诸如GlobalValue::isWeakForLinker

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