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

cod*_*n48 5 llvm llvm-ir

LLVM IR文档详细讨论了IR,其中大部分是清楚的.但是,我对链接类型特别困惑.联动类型离开private,internal,external成为无本的例子相当混乱.

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

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

Tra*_*s3r 1

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

唯一确定的参考是代码。特别是看看 clang 如何从C++ 标准链接转换为ASTContext::GetGVALinkageForFunction中自己的codegen 链接,并从那里转换为CodeGenModule::getLLVMLinkageForDeclarator中的 llvm 。

当然还有一些代码(尚未找到)将 LLVM 链接转换为对象文件,例如使用GlobalValue::isWeakForLinker等价的COMDAT或弱符号

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