LLVM IR doc详细讨论了IR,其中很多都很清楚。但是,我对Linkage Types特别困惑。除private
,internal
,external
之外的链接类型在没有示例的情况下变得相当混乱。
有人可以在这里投光吗? (可能将用例与C / C ++等语言联系起来?)
(我正在努力理解IR,因为我正在为LLVM模块构建分析器。)
答案 0 :(得分:1)
LLVM的链接定义很复杂,因为它必须能够表示来自不同编程语言,系统,目标文件格式等的概念。
唯一的参考文献是代码。特别要研究一下clang如何从C++ standard linkage转换为codegen linkage中自己的ASTContext::GetGVALinkageForFunction并从那里转换为CodeGenModule::getLLVMLinkageForDeclarator中的llvm。
然后当然有一些代码(尚未找到它)将LLVM链接转换为对象文件,例如COMDATs或使用诸如GlobalValue::isWeakForLinker
追加链接是一种非常特殊的低级链接,例如,用于构造指向全局构造函数的指针数组。