Home | History | Annotate | Download | only in Linker
      1 //===- lib/Linker/LinkModules.cpp - Module Linker Implementation ----------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file implements the LLVM module linker.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "llvm/Linker/Linker.h"
     15 #include "LinkDiagnosticInfo.h"
     16 #include "llvm-c/Linker.h"
     17 #include "llvm/ADT/SetVector.h"
     18 #include "llvm/ADT/StringSet.h"
     19 #include "llvm/IR/DiagnosticPrinter.h"
     20 #include "llvm/IR/LLVMContext.h"
     21 using namespace llvm;
     22 
     23 namespace {
     24 
     25 /// This is an implementation class for the LinkModules function, which is the
     26 /// entrypoint for this file.
     27 class ModuleLinker {
     28   IRMover &Mover;
     29   Module &SrcM;
     30 
     31   SetVector<GlobalValue *> ValuesToLink;
     32   StringSet<> Internalize;
     33 
     34   /// For symbol clashes, prefer those from Src.
     35   unsigned Flags;
     36 
     37   /// Function index passed into ModuleLinker for using in function
     38   /// importing/exporting handling.
     39   const FunctionInfoIndex *ImportIndex;
     40 
     41   /// Functions to import from source module, all other functions are
     42   /// imported as declarations instead of definitions.
     43   DenseSet<const GlobalValue *> *FunctionsToImport;
     44 
     45   /// Set to true if the given FunctionInfoIndex contains any functions
     46   /// from this source module, in which case we must conservatively assume
     47   /// that any of its functions may be imported into another module
     48   /// as part of a different backend compilation process.
     49   bool HasExportedFunctions = false;
     50 
     51   /// Association between metadata value id and temporary metadata that
     52   /// remains unmapped after function importing. Saved during function
     53   /// importing and consumed during the metadata linking postpass.
     54   DenseMap<unsigned, MDNode *> *ValIDToTempMDMap;
     55 
     56   /// Used as the callback for lazy linking.
     57   /// The mover has just hit GV and we have to decide if it, and other members
     58   /// of the same comdat, should be linked. Every member to be linked is passed
     59   /// to Add.
     60   void addLazyFor(GlobalValue &GV, IRMover::ValueAdder Add);
     61 
     62   bool shouldOverrideFromSrc() { return Flags & Linker::OverrideFromSrc; }
     63   bool shouldLinkOnlyNeeded() { return Flags & Linker::LinkOnlyNeeded; }
     64   bool shouldInternalizeLinkedSymbols() {
     65     return Flags & Linker::InternalizeLinkedSymbols;
     66   }
     67 
     68   /// Check if we should promote the given local value to global scope.
     69   bool doPromoteLocalToGlobal(const GlobalValue *SGV);
     70 
     71   bool shouldLinkFromSource(bool &LinkFromSrc, const GlobalValue &Dest,
     72                             const GlobalValue &Src);
     73 
     74   /// Should we have mover and linker error diag info?
     75   bool emitError(const Twine &Message) {
     76     SrcM.getContext().diagnose(LinkDiagnosticInfo(DS_Error, Message));
     77     return true;
     78   }
     79 
     80   bool getComdatLeader(Module &M, StringRef ComdatName,
     81                        const GlobalVariable *&GVar);
     82   bool computeResultingSelectionKind(StringRef ComdatName,
     83                                      Comdat::SelectionKind Src,
     84                                      Comdat::SelectionKind Dst,
     85                                      Comdat::SelectionKind &Result,
     86                                      bool &LinkFromSrc);
     87   std::map<const Comdat *, std::pair<Comdat::SelectionKind, bool>>
     88       ComdatsChosen;
     89   bool getComdatResult(const Comdat *SrcC, Comdat::SelectionKind &SK,
     90                        bool &LinkFromSrc);
     91   // Keep track of the global value members of each comdat in source.
     92   DenseMap<const Comdat *, std::vector<GlobalValue *>> ComdatMembers;
     93 
     94   /// Given a global in the source module, return the global in the
     95   /// destination module that is being linked to, if any.
     96   GlobalValue *getLinkedToGlobal(const GlobalValue *SrcGV) {
     97     Module &DstM = Mover.getModule();
     98     // If the source has no name it can't link.  If it has local linkage,
     99     // there is no name match-up going on.
    100     if (!SrcGV->hasName() || GlobalValue::isLocalLinkage(getLinkage(SrcGV)))
    101       return nullptr;
    102 
    103     // Otherwise see if we have a match in the destination module's symtab.
    104     GlobalValue *DGV = DstM.getNamedValue(getName(SrcGV));
    105     if (!DGV)
    106       return nullptr;
    107 
    108     // If we found a global with the same name in the dest module, but it has
    109     // internal linkage, we are really not doing any linkage here.
    110     if (DGV->hasLocalLinkage())
    111       return nullptr;
    112 
    113     // Otherwise, we do in fact link to the destination global.
    114     return DGV;
    115   }
    116 
    117   bool linkIfNeeded(GlobalValue &GV);
    118 
    119   /// Helper methods to check if we are importing from or potentially
    120   /// exporting from the current source module.
    121   bool isPerformingImport() const { return FunctionsToImport != nullptr; }
    122   bool isModuleExporting() const { return HasExportedFunctions; }
    123 
    124   /// If we are importing from the source module, checks if we should
    125   /// import SGV as a definition, otherwise import as a declaration.
    126   bool doImportAsDefinition(const GlobalValue *SGV);
    127 
    128   /// Get the name for SGV that should be used in the linked destination
    129   /// module. Specifically, this handles the case where we need to rename
    130   /// a local that is being promoted to global scope.
    131   std::string getName(const GlobalValue *SGV);
    132 
    133   /// Process globals so that they can be used in ThinLTO. This includes
    134   /// promoting local variables so that they can be reference externally by
    135   /// thin lto imported globals and converting strong external globals to
    136   /// available_externally.
    137   void processGlobalsForThinLTO();
    138   void processGlobalForThinLTO(GlobalValue &GV);
    139 
    140   /// Get the new linkage for SGV that should be used in the linked destination
    141   /// module. Specifically, for ThinLTO importing or exporting it may need
    142   /// to be adjusted.
    143   GlobalValue::LinkageTypes getLinkage(const GlobalValue *SGV);
    144 
    145 public:
    146   ModuleLinker(IRMover &Mover, Module &SrcM, unsigned Flags,
    147                const FunctionInfoIndex *Index = nullptr,
    148                DenseSet<const GlobalValue *> *FunctionsToImport = nullptr,
    149                DenseMap<unsigned, MDNode *> *ValIDToTempMDMap = nullptr)
    150       : Mover(Mover), SrcM(SrcM), Flags(Flags), ImportIndex(Index),
    151         FunctionsToImport(FunctionsToImport),
    152         ValIDToTempMDMap(ValIDToTempMDMap) {
    153     assert((ImportIndex || !FunctionsToImport) &&
    154            "Expect a FunctionInfoIndex when importing");
    155     // If we have a FunctionInfoIndex but no function to import,
    156     // then this is the primary module being compiled in a ThinLTO
    157     // backend compilation, and we need to see if it has functions that
    158     // may be exported to another backend compilation.
    159     if (ImportIndex && !FunctionsToImport)
    160       HasExportedFunctions = ImportIndex->hasExportedFunctions(SrcM);
    161     assert((ValIDToTempMDMap || !FunctionsToImport) &&
    162            "Function importing must provide a ValIDToTempMDMap");
    163   }
    164 
    165   bool run();
    166 };
    167 }
    168 
    169 bool ModuleLinker::doImportAsDefinition(const GlobalValue *SGV) {
    170   if (!isPerformingImport())
    171     return false;
    172   auto *GA = dyn_cast<GlobalAlias>(SGV);
    173   if (GA) {
    174     if (GA->hasWeakAnyLinkage())
    175       return false;
    176     const GlobalObject *GO = GA->getBaseObject();
    177     if (!GO->hasLinkOnceODRLinkage())
    178       return false;
    179     return doImportAsDefinition(GO);
    180   }
    181   // Always import GlobalVariable definitions, except for the special
    182   // case of WeakAny which are imported as ExternalWeak declarations
    183   // (see comments in ModuleLinker::getLinkage). The linkage changes
    184   // described in ModuleLinker::getLinkage ensure the correct behavior (e.g.
    185   // global variables with external linkage are transformed to
    186   // available_externally definitions, which are ultimately turned into
    187   // declarations after the EliminateAvailableExternally pass).
    188   if (isa<GlobalVariable>(SGV) && !SGV->isDeclaration() &&
    189       !SGV->hasWeakAnyLinkage())
    190     return true;
    191   // Only import the function requested for importing.
    192   auto *SF = dyn_cast<Function>(SGV);
    193   if (SF && FunctionsToImport->count(SF))
    194     return true;
    195   // Otherwise no.
    196   return false;
    197 }
    198 
    199 bool ModuleLinker::doPromoteLocalToGlobal(const GlobalValue *SGV) {
    200   assert(SGV->hasLocalLinkage());
    201   // Both the imported references and the original local variable must
    202   // be promoted.
    203   if (!isPerformingImport() && !isModuleExporting())
    204     return false;
    205 
    206   // Local const variables never need to be promoted unless they are address
    207   // taken. The imported uses can simply use the clone created in this module.
    208   // For now we are conservative in determining which variables are not
    209   // address taken by checking the unnamed addr flag. To be more aggressive,
    210   // the address taken information must be checked earlier during parsing
    211   // of the module and recorded in the function index for use when importing
    212   // from that module.
    213   auto *GVar = dyn_cast<GlobalVariable>(SGV);
    214   if (GVar && GVar->isConstant() && GVar->hasUnnamedAddr())
    215     return false;
    216 
    217   // Eventually we only need to promote functions in the exporting module that
    218   // are referenced by a potentially exported function (i.e. one that is in the
    219   // function index).
    220   return true;
    221 }
    222 
    223 std::string ModuleLinker::getName(const GlobalValue *SGV) {
    224   // For locals that must be promoted to global scope, ensure that
    225   // the promoted name uniquely identifies the copy in the original module,
    226   // using the ID assigned during combined index creation. When importing,
    227   // we rename all locals (not just those that are promoted) in order to
    228   // avoid naming conflicts between locals imported from different modules.
    229   if (SGV->hasLocalLinkage() &&
    230       (doPromoteLocalToGlobal(SGV) || isPerformingImport()))
    231     return FunctionInfoIndex::getGlobalNameForLocal(
    232         SGV->getName(),
    233         ImportIndex->getModuleId(SGV->getParent()->getModuleIdentifier()));
    234   return SGV->getName();
    235 }
    236 
    237 GlobalValue::LinkageTypes ModuleLinker::getLinkage(const GlobalValue *SGV) {
    238   // Any local variable that is referenced by an exported function needs
    239   // to be promoted to global scope. Since we don't currently know which
    240   // functions reference which local variables/functions, we must treat
    241   // all as potentially exported if this module is exporting anything.
    242   if (isModuleExporting()) {
    243     if (SGV->hasLocalLinkage() && doPromoteLocalToGlobal(SGV))
    244       return GlobalValue::ExternalLinkage;
    245     return SGV->getLinkage();
    246   }
    247 
    248   // Otherwise, if we aren't importing, no linkage change is needed.
    249   if (!isPerformingImport())
    250     return SGV->getLinkage();
    251 
    252   switch (SGV->getLinkage()) {
    253   case GlobalValue::ExternalLinkage:
    254     // External defnitions are converted to available_externally
    255     // definitions upon import, so that they are available for inlining
    256     // and/or optimization, but are turned into declarations later
    257     // during the EliminateAvailableExternally pass.
    258     if (doImportAsDefinition(SGV) && !dyn_cast<GlobalAlias>(SGV))
    259       return GlobalValue::AvailableExternallyLinkage;
    260     // An imported external declaration stays external.
    261     return SGV->getLinkage();
    262 
    263   case GlobalValue::AvailableExternallyLinkage:
    264     // An imported available_externally definition converts
    265     // to external if imported as a declaration.
    266     if (!doImportAsDefinition(SGV))
    267       return GlobalValue::ExternalLinkage;
    268     // An imported available_externally declaration stays that way.
    269     return SGV->getLinkage();
    270 
    271   case GlobalValue::LinkOnceAnyLinkage:
    272   case GlobalValue::LinkOnceODRLinkage:
    273     // These both stay the same when importing the definition.
    274     // The ThinLTO pass will eventually force-import their definitions.
    275     return SGV->getLinkage();
    276 
    277   case GlobalValue::WeakAnyLinkage:
    278     // Can't import weak_any definitions correctly, or we might change the
    279     // program semantics, since the linker will pick the first weak_any
    280     // definition and importing would change the order they are seen by the
    281     // linker. The module linking caller needs to enforce this.
    282     assert(!doImportAsDefinition(SGV));
    283     // If imported as a declaration, it becomes external_weak.
    284     return GlobalValue::ExternalWeakLinkage;
    285 
    286   case GlobalValue::WeakODRLinkage:
    287     // For weak_odr linkage, there is a guarantee that all copies will be
    288     // equivalent, so the issue described above for weak_any does not exist,
    289     // and the definition can be imported. It can be treated similarly
    290     // to an imported externally visible global value.
    291     if (doImportAsDefinition(SGV) && !dyn_cast<GlobalAlias>(SGV))
    292       return GlobalValue::AvailableExternallyLinkage;
    293     else
    294       return GlobalValue::ExternalLinkage;
    295 
    296   case GlobalValue::AppendingLinkage:
    297     // It would be incorrect to import an appending linkage variable,
    298     // since it would cause global constructors/destructors to be
    299     // executed multiple times. This should have already been handled
    300     // by linkIfNeeded, and we will assert in shouldLinkFromSource
    301     // if we try to import, so we simply return AppendingLinkage here
    302     // as this helper is called more widely in getLinkedToGlobal.
    303     return GlobalValue::AppendingLinkage;
    304 
    305   case GlobalValue::InternalLinkage:
    306   case GlobalValue::PrivateLinkage:
    307     // If we are promoting the local to global scope, it is handled
    308     // similarly to a normal externally visible global.
    309     if (doPromoteLocalToGlobal(SGV)) {
    310       if (doImportAsDefinition(SGV) && !dyn_cast<GlobalAlias>(SGV))
    311         return GlobalValue::AvailableExternallyLinkage;
    312       else
    313         return GlobalValue::ExternalLinkage;
    314     }
    315     // A non-promoted imported local definition stays local.
    316     // The ThinLTO pass will eventually force-import their definitions.
    317     return SGV->getLinkage();
    318 
    319   case GlobalValue::ExternalWeakLinkage:
    320     // External weak doesn't apply to definitions, must be a declaration.
    321     assert(!doImportAsDefinition(SGV));
    322     // Linkage stays external_weak.
    323     return SGV->getLinkage();
    324 
    325   case GlobalValue::CommonLinkage:
    326     // Linkage stays common on definitions.
    327     // The ThinLTO pass will eventually force-import their definitions.
    328     return SGV->getLinkage();
    329   }
    330 
    331   llvm_unreachable("unknown linkage type");
    332 }
    333 
    334 static GlobalValue::VisibilityTypes
    335 getMinVisibility(GlobalValue::VisibilityTypes A,
    336                  GlobalValue::VisibilityTypes B) {
    337   if (A == GlobalValue::HiddenVisibility || B == GlobalValue::HiddenVisibility)
    338     return GlobalValue::HiddenVisibility;
    339   if (A == GlobalValue::ProtectedVisibility ||
    340       B == GlobalValue::ProtectedVisibility)
    341     return GlobalValue::ProtectedVisibility;
    342   return GlobalValue::DefaultVisibility;
    343 }
    344 
    345 bool ModuleLinker::getComdatLeader(Module &M, StringRef ComdatName,
    346                                    const GlobalVariable *&GVar) {
    347   const GlobalValue *GVal = M.getNamedValue(ComdatName);
    348   if (const auto *GA = dyn_cast_or_null<GlobalAlias>(GVal)) {
    349     GVal = GA->getBaseObject();
    350     if (!GVal)
    351       // We cannot resolve the size of the aliasee yet.
    352       return emitError("Linking COMDATs named '" + ComdatName +
    353                        "': COMDAT key involves incomputable alias size.");
    354   }
    355 
    356   GVar = dyn_cast_or_null<GlobalVariable>(GVal);
    357   if (!GVar)
    358     return emitError(
    359         "Linking COMDATs named '" + ComdatName +
    360         "': GlobalVariable required for data dependent selection!");
    361 
    362   return false;
    363 }
    364 
    365 bool ModuleLinker::computeResultingSelectionKind(StringRef ComdatName,
    366                                                  Comdat::SelectionKind Src,
    367                                                  Comdat::SelectionKind Dst,
    368                                                  Comdat::SelectionKind &Result,
    369                                                  bool &LinkFromSrc) {
    370   Module &DstM = Mover.getModule();
    371   // The ability to mix Comdat::SelectionKind::Any with
    372   // Comdat::SelectionKind::Largest is a behavior that comes from COFF.
    373   bool DstAnyOrLargest = Dst == Comdat::SelectionKind::Any ||
    374                          Dst == Comdat::SelectionKind::Largest;
    375   bool SrcAnyOrLargest = Src == Comdat::SelectionKind::Any ||
    376                          Src == Comdat::SelectionKind::Largest;
    377   if (DstAnyOrLargest && SrcAnyOrLargest) {
    378     if (Dst == Comdat::SelectionKind::Largest ||
    379         Src == Comdat::SelectionKind::Largest)
    380       Result = Comdat::SelectionKind::Largest;
    381     else
    382       Result = Comdat::SelectionKind::Any;
    383   } else if (Src == Dst) {
    384     Result = Dst;
    385   } else {
    386     return emitError("Linking COMDATs named '" + ComdatName +
    387                      "': invalid selection kinds!");
    388   }
    389 
    390   switch (Result) {
    391   case Comdat::SelectionKind::Any:
    392     // Go with Dst.
    393     LinkFromSrc = false;
    394     break;
    395   case Comdat::SelectionKind::NoDuplicates:
    396     return emitError("Linking COMDATs named '" + ComdatName +
    397                      "': noduplicates has been violated!");
    398   case Comdat::SelectionKind::ExactMatch:
    399   case Comdat::SelectionKind::Largest:
    400   case Comdat::SelectionKind::SameSize: {
    401     const GlobalVariable *DstGV;
    402     const GlobalVariable *SrcGV;
    403     if (getComdatLeader(DstM, ComdatName, DstGV) ||
    404         getComdatLeader(SrcM, ComdatName, SrcGV))
    405       return true;
    406 
    407     const DataLayout &DstDL = DstM.getDataLayout();
    408     const DataLayout &SrcDL = SrcM.getDataLayout();
    409     uint64_t DstSize =
    410         DstDL.getTypeAllocSize(DstGV->getType()->getPointerElementType());
    411     uint64_t SrcSize =
    412         SrcDL.getTypeAllocSize(SrcGV->getType()->getPointerElementType());
    413     if (Result == Comdat::SelectionKind::ExactMatch) {
    414       if (SrcGV->getInitializer() != DstGV->getInitializer())
    415         return emitError("Linking COMDATs named '" + ComdatName +
    416                          "': ExactMatch violated!");
    417       LinkFromSrc = false;
    418     } else if (Result == Comdat::SelectionKind::Largest) {
    419       LinkFromSrc = SrcSize > DstSize;
    420     } else if (Result == Comdat::SelectionKind::SameSize) {
    421       if (SrcSize != DstSize)
    422         return emitError("Linking COMDATs named '" + ComdatName +
    423                          "': SameSize violated!");
    424       LinkFromSrc = false;
    425     } else {
    426       llvm_unreachable("unknown selection kind");
    427     }
    428     break;
    429   }
    430   }
    431 
    432   return false;
    433 }
    434 
    435 bool ModuleLinker::getComdatResult(const Comdat *SrcC,
    436                                    Comdat::SelectionKind &Result,
    437                                    bool &LinkFromSrc) {
    438   Module &DstM = Mover.getModule();
    439   Comdat::SelectionKind SSK = SrcC->getSelectionKind();
    440   StringRef ComdatName = SrcC->getName();
    441   Module::ComdatSymTabType &ComdatSymTab = DstM.getComdatSymbolTable();
    442   Module::ComdatSymTabType::iterator DstCI = ComdatSymTab.find(ComdatName);
    443 
    444   if (DstCI == ComdatSymTab.end()) {
    445     // Use the comdat if it is only available in one of the modules.
    446     LinkFromSrc = true;
    447     Result = SSK;
    448     return false;
    449   }
    450 
    451   const Comdat *DstC = &DstCI->second;
    452   Comdat::SelectionKind DSK = DstC->getSelectionKind();
    453   return computeResultingSelectionKind(ComdatName, SSK, DSK, Result,
    454                                        LinkFromSrc);
    455 }
    456 
    457 bool ModuleLinker::shouldLinkFromSource(bool &LinkFromSrc,
    458                                         const GlobalValue &Dest,
    459                                         const GlobalValue &Src) {
    460 
    461   // Should we unconditionally use the Src?
    462   if (shouldOverrideFromSrc()) {
    463     LinkFromSrc = true;
    464     return false;
    465   }
    466 
    467   // We always have to add Src if it has appending linkage.
    468   if (Src.hasAppendingLinkage()) {
    469     // Should have prevented importing for appending linkage in linkIfNeeded.
    470     assert(!isPerformingImport());
    471     LinkFromSrc = true;
    472     return false;
    473   }
    474 
    475   bool SrcIsDeclaration = Src.isDeclarationForLinker();
    476   bool DestIsDeclaration = Dest.isDeclarationForLinker();
    477 
    478   if (isPerformingImport()) {
    479     if (isa<Function>(&Src)) {
    480       // For functions, LinkFromSrc iff this is a function requested
    481       // for importing. For variables, decide below normally.
    482       LinkFromSrc = FunctionsToImport->count(&Src);
    483       return false;
    484     }
    485 
    486     // Check if this is an alias with an already existing definition
    487     // in Dest, which must have come from a prior importing pass from
    488     // the same Src module. Unlike imported function and variable
    489     // definitions, which are imported as available_externally and are
    490     // not definitions for the linker, that is not a valid linkage for
    491     // imported aliases which must be definitions. Simply use the existing
    492     // Dest copy.
    493     if (isa<GlobalAlias>(&Src) && !DestIsDeclaration) {
    494       assert(isa<GlobalAlias>(&Dest));
    495       LinkFromSrc = false;
    496       return false;
    497     }
    498   }
    499 
    500   if (SrcIsDeclaration) {
    501     // If Src is external or if both Src & Dest are external..  Just link the
    502     // external globals, we aren't adding anything.
    503     if (Src.hasDLLImportStorageClass()) {
    504       // If one of GVs is marked as DLLImport, result should be dllimport'ed.
    505       LinkFromSrc = DestIsDeclaration;
    506       return false;
    507     }
    508     // If the Dest is weak, use the source linkage.
    509     if (Dest.hasExternalWeakLinkage()) {
    510       LinkFromSrc = true;
    511       return false;
    512     }
    513     // Link an available_externally over a declaration.
    514     LinkFromSrc = !Src.isDeclaration() && Dest.isDeclaration();
    515     return false;
    516   }
    517 
    518   if (DestIsDeclaration) {
    519     // If Dest is external but Src is not:
    520     LinkFromSrc = true;
    521     return false;
    522   }
    523 
    524   if (Src.hasCommonLinkage()) {
    525     if (Dest.hasLinkOnceLinkage() || Dest.hasWeakLinkage()) {
    526       LinkFromSrc = true;
    527       return false;
    528     }
    529 
    530     if (!Dest.hasCommonLinkage()) {
    531       LinkFromSrc = false;
    532       return false;
    533     }
    534 
    535     const DataLayout &DL = Dest.getParent()->getDataLayout();
    536     uint64_t DestSize = DL.getTypeAllocSize(Dest.getType()->getElementType());
    537     uint64_t SrcSize = DL.getTypeAllocSize(Src.getType()->getElementType());
    538     LinkFromSrc = SrcSize > DestSize;
    539     return false;
    540   }
    541 
    542   if (Src.isWeakForLinker()) {
    543     assert(!Dest.hasExternalWeakLinkage());
    544     assert(!Dest.hasAvailableExternallyLinkage());
    545 
    546     if (Dest.hasLinkOnceLinkage() && Src.hasWeakLinkage()) {
    547       LinkFromSrc = true;
    548       return false;
    549     }
    550 
    551     LinkFromSrc = false;
    552     return false;
    553   }
    554 
    555   if (Dest.isWeakForLinker()) {
    556     assert(Src.hasExternalLinkage());
    557     LinkFromSrc = true;
    558     return false;
    559   }
    560 
    561   assert(!Src.hasExternalWeakLinkage());
    562   assert(!Dest.hasExternalWeakLinkage());
    563   assert(Dest.hasExternalLinkage() && Src.hasExternalLinkage() &&
    564          "Unexpected linkage type!");
    565   return emitError("Linking globals named '" + Src.getName() +
    566                    "': symbol multiply defined!");
    567 }
    568 
    569 bool ModuleLinker::linkIfNeeded(GlobalValue &GV) {
    570   GlobalValue *DGV = getLinkedToGlobal(&GV);
    571 
    572   if (shouldLinkOnlyNeeded() && !(DGV && DGV->isDeclaration()))
    573     return false;
    574 
    575   if (DGV && !GV.hasLocalLinkage() && !GV.hasAppendingLinkage()) {
    576     auto *DGVar = dyn_cast<GlobalVariable>(DGV);
    577     auto *SGVar = dyn_cast<GlobalVariable>(&GV);
    578     if (DGVar && SGVar) {
    579       if (DGVar->isDeclaration() && SGVar->isDeclaration() &&
    580           (!DGVar->isConstant() || !SGVar->isConstant())) {
    581         DGVar->setConstant(false);
    582         SGVar->setConstant(false);
    583       }
    584       if (DGVar->hasCommonLinkage() && SGVar->hasCommonLinkage()) {
    585         unsigned Align = std::max(DGVar->getAlignment(), SGVar->getAlignment());
    586         SGVar->setAlignment(Align);
    587         DGVar->setAlignment(Align);
    588       }
    589     }
    590 
    591     GlobalValue::VisibilityTypes Visibility =
    592         getMinVisibility(DGV->getVisibility(), GV.getVisibility());
    593     DGV->setVisibility(Visibility);
    594     GV.setVisibility(Visibility);
    595 
    596     bool HasUnnamedAddr = GV.hasUnnamedAddr() && DGV->hasUnnamedAddr();
    597     DGV->setUnnamedAddr(HasUnnamedAddr);
    598     GV.setUnnamedAddr(HasUnnamedAddr);
    599   }
    600 
    601   // Don't want to append to global_ctors list, for example, when we
    602   // are importing for ThinLTO, otherwise the global ctors and dtors
    603   // get executed multiple times for local variables (the latter causing
    604   // double frees).
    605   if (GV.hasAppendingLinkage() && isPerformingImport())
    606     return false;
    607 
    608   if (isPerformingImport() && !doImportAsDefinition(&GV))
    609     return false;
    610 
    611   if (!DGV && !shouldOverrideFromSrc() &&
    612       (GV.hasLocalLinkage() || GV.hasLinkOnceLinkage() ||
    613        GV.hasAvailableExternallyLinkage()))
    614     return false;
    615 
    616   if (GV.isDeclaration())
    617     return false;
    618 
    619   if (const Comdat *SC = GV.getComdat()) {
    620     bool LinkFromSrc;
    621     Comdat::SelectionKind SK;
    622     std::tie(SK, LinkFromSrc) = ComdatsChosen[SC];
    623     if (LinkFromSrc)
    624       ValuesToLink.insert(&GV);
    625     return false;
    626   }
    627 
    628   bool LinkFromSrc = true;
    629   if (DGV && shouldLinkFromSource(LinkFromSrc, *DGV, GV))
    630     return true;
    631   if (LinkFromSrc)
    632     ValuesToLink.insert(&GV);
    633   return false;
    634 }
    635 
    636 void ModuleLinker::addLazyFor(GlobalValue &GV, IRMover::ValueAdder Add) {
    637   // Add these to the internalize list
    638   if (!GV.hasLinkOnceLinkage())
    639     return;
    640 
    641   if (shouldInternalizeLinkedSymbols())
    642     Internalize.insert(GV.getName());
    643   Add(GV);
    644 
    645   const Comdat *SC = GV.getComdat();
    646   if (!SC)
    647     return;
    648   for (GlobalValue *GV2 : ComdatMembers[SC]) {
    649     if (!GV2->hasLocalLinkage() && shouldInternalizeLinkedSymbols())
    650       Internalize.insert(GV2->getName());
    651     Add(*GV2);
    652   }
    653 }
    654 
    655 void ModuleLinker::processGlobalForThinLTO(GlobalValue &GV) {
    656   if (GV.hasLocalLinkage() &&
    657       (doPromoteLocalToGlobal(&GV) || isPerformingImport())) {
    658     GV.setName(getName(&GV));
    659     GV.setLinkage(getLinkage(&GV));
    660     if (!GV.hasLocalLinkage())
    661       GV.setVisibility(GlobalValue::HiddenVisibility);
    662     if (isModuleExporting())
    663       ValuesToLink.insert(&GV);
    664     return;
    665   }
    666   GV.setLinkage(getLinkage(&GV));
    667 }
    668 
    669 void ModuleLinker::processGlobalsForThinLTO() {
    670   for (GlobalVariable &GV : SrcM.globals())
    671     processGlobalForThinLTO(GV);
    672   for (Function &SF : SrcM)
    673     processGlobalForThinLTO(SF);
    674   for (GlobalAlias &GA : SrcM.aliases())
    675     processGlobalForThinLTO(GA);
    676 }
    677 
    678 bool ModuleLinker::run() {
    679   for (const auto &SMEC : SrcM.getComdatSymbolTable()) {
    680     const Comdat &C = SMEC.getValue();
    681     if (ComdatsChosen.count(&C))
    682       continue;
    683     Comdat::SelectionKind SK;
    684     bool LinkFromSrc;
    685     if (getComdatResult(&C, SK, LinkFromSrc))
    686       return true;
    687     ComdatsChosen[&C] = std::make_pair(SK, LinkFromSrc);
    688   }
    689 
    690   for (GlobalVariable &GV : SrcM.globals())
    691     if (const Comdat *SC = GV.getComdat())
    692       ComdatMembers[SC].push_back(&GV);
    693 
    694   for (Function &SF : SrcM)
    695     if (const Comdat *SC = SF.getComdat())
    696       ComdatMembers[SC].push_back(&SF);
    697 
    698   for (GlobalAlias &GA : SrcM.aliases())
    699     if (const Comdat *SC = GA.getComdat())
    700       ComdatMembers[SC].push_back(&GA);
    701 
    702   // Insert all of the globals in src into the DstM module... without linking
    703   // initializers (which could refer to functions not yet mapped over).
    704   for (GlobalVariable &GV : SrcM.globals())
    705     if (linkIfNeeded(GV))
    706       return true;
    707 
    708   for (Function &SF : SrcM)
    709     if (linkIfNeeded(SF))
    710       return true;
    711 
    712   for (GlobalAlias &GA : SrcM.aliases())
    713     if (linkIfNeeded(GA))
    714       return true;
    715 
    716   processGlobalsForThinLTO();
    717 
    718   for (unsigned I = 0; I < ValuesToLink.size(); ++I) {
    719     GlobalValue *GV = ValuesToLink[I];
    720     const Comdat *SC = GV->getComdat();
    721     if (!SC)
    722       continue;
    723     for (GlobalValue *GV2 : ComdatMembers[SC])
    724       ValuesToLink.insert(GV2);
    725   }
    726 
    727   if (shouldInternalizeLinkedSymbols()) {
    728     for (GlobalValue *GV : ValuesToLink)
    729       Internalize.insert(GV->getName());
    730   }
    731 
    732   if (Mover.move(SrcM, ValuesToLink.getArrayRef(),
    733                  [this](GlobalValue &GV, IRMover::ValueAdder Add) {
    734                    addLazyFor(GV, Add);
    735                  },
    736                  ValIDToTempMDMap, false))
    737     return true;
    738   Module &DstM = Mover.getModule();
    739   for (auto &P : Internalize) {
    740     GlobalValue *GV = DstM.getNamedValue(P.first());
    741     GV->setLinkage(GlobalValue::InternalLinkage);
    742   }
    743 
    744   return false;
    745 }
    746 
    747 Linker::Linker(Module &M) : Mover(M) {}
    748 
    749 bool Linker::linkInModule(std::unique_ptr<Module> Src, unsigned Flags,
    750                           const FunctionInfoIndex *Index,
    751                           DenseSet<const GlobalValue *> *FunctionsToImport,
    752                           DenseMap<unsigned, MDNode *> *ValIDToTempMDMap) {
    753   ModuleLinker ModLinker(Mover, *Src, Flags, Index, FunctionsToImport,
    754                          ValIDToTempMDMap);
    755   return ModLinker.run();
    756 }
    757 
    758 bool Linker::linkInModuleForCAPI(Module &Src) {
    759   ModuleLinker ModLinker(Mover, Src, 0, nullptr, nullptr);
    760   return ModLinker.run();
    761 }
    762 
    763 bool Linker::linkInMetadata(Module &Src,
    764                             DenseMap<unsigned, MDNode *> *ValIDToTempMDMap) {
    765   SetVector<GlobalValue *> ValuesToLink;
    766   if (Mover.move(
    767           Src, ValuesToLink.getArrayRef(),
    768           [this](GlobalValue &GV, IRMover::ValueAdder Add) { assert(false); },
    769           ValIDToTempMDMap, true))
    770     return true;
    771   return false;
    772 }
    773 
    774 //===----------------------------------------------------------------------===//
    775 // LinkModules entrypoint.
    776 //===----------------------------------------------------------------------===//
    777 
    778 /// This function links two modules together, with the resulting Dest module
    779 /// modified to be the composite of the two input modules. If an error occurs,
    780 /// true is returned and ErrorMsg (if not null) is set to indicate the problem.
    781 /// Upon failure, the Dest module could be in a modified state, and shouldn't be
    782 /// relied on to be consistent.
    783 bool Linker::linkModules(Module &Dest, std::unique_ptr<Module> Src,
    784                          unsigned Flags) {
    785   Linker L(Dest);
    786   return L.linkInModule(std::move(Src), Flags);
    787 }
    788 
    789 std::unique_ptr<Module>
    790 llvm::renameModuleForThinLTO(std::unique_ptr<Module> M,
    791                              const FunctionInfoIndex *Index) {
    792   std::unique_ptr<llvm::Module> RenamedModule(
    793       new llvm::Module(M->getModuleIdentifier(), M->getContext()));
    794   Linker L(*RenamedModule.get());
    795   if (L.linkInModule(std::move(M), llvm::Linker::Flags::None, Index))
    796     return nullptr;
    797   return RenamedModule;
    798 }
    799 
    800 //===----------------------------------------------------------------------===//
    801 // C API.
    802 //===----------------------------------------------------------------------===//
    803 
    804 static void diagnosticHandler(const DiagnosticInfo &DI, void *C) {
    805   auto *Message = reinterpret_cast<std::string *>(C);
    806   raw_string_ostream Stream(*Message);
    807   DiagnosticPrinterRawOStream DP(Stream);
    808   DI.print(DP);
    809 }
    810 
    811 LLVMBool LLVMLinkModules(LLVMModuleRef Dest, LLVMModuleRef Src,
    812                          LLVMLinkerMode Unused, char **OutMessages) {
    813   Module *D = unwrap(Dest);
    814   LLVMContext &Ctx = D->getContext();
    815 
    816   LLVMContext::DiagnosticHandlerTy OldDiagnosticHandler =
    817       Ctx.getDiagnosticHandler();
    818   void *OldDiagnosticContext = Ctx.getDiagnosticContext();
    819   std::string Message;
    820   Ctx.setDiagnosticHandler(diagnosticHandler, &Message, true);
    821 
    822   Linker L(*D);
    823   Module *M = unwrap(Src);
    824   LLVMBool Result = L.linkInModuleForCAPI(*M);
    825 
    826   Ctx.setDiagnosticHandler(OldDiagnosticHandler, OldDiagnosticContext, true);
    827 
    828   if (OutMessages && Result)
    829     *OutMessages = strdup(Message.c_str());
    830   return Result;
    831 }
    832 
    833 LLVMBool LLVMLinkModules2(LLVMModuleRef Dest, LLVMModuleRef Src) {
    834   Module *D = unwrap(Dest);
    835   std::unique_ptr<Module> M(unwrap(Src));
    836   return Linker::linkModules(*D, std::move(M));
    837 }
    838