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 "llvm-c/Linker.h" 16 #include "llvm/ADT/SetVector.h" 17 #include "llvm/ADT/SmallString.h" 18 #include "llvm/ADT/Triple.h" 19 #include "llvm/IR/Constants.h" 20 #include "llvm/IR/DiagnosticInfo.h" 21 #include "llvm/IR/DiagnosticPrinter.h" 22 #include "llvm/IR/LLVMContext.h" 23 #include "llvm/IR/Module.h" 24 #include "llvm/IR/TypeFinder.h" 25 #include "llvm/Transforms/Utils/Cloning.h" 26 using namespace llvm; 27 28 //===----------------------------------------------------------------------===// 29 // TypeMap implementation. 30 //===----------------------------------------------------------------------===// 31 32 namespace { 33 class TypeMapTy : public ValueMapTypeRemapper { 34 /// This is a mapping from a source type to a destination type to use. 35 DenseMap<Type *, Type *> MappedTypes; 36 37 /// When checking to see if two subgraphs are isomorphic, we speculatively 38 /// add types to MappedTypes, but keep track of them here in case we need to 39 /// roll back. 40 SmallVector<Type *, 16> SpeculativeTypes; 41 42 SmallVector<StructType *, 16> SpeculativeDstOpaqueTypes; 43 44 /// This is a list of non-opaque structs in the source module that are mapped 45 /// to an opaque struct in the destination module. 46 SmallVector<StructType *, 16> SrcDefinitionsToResolve; 47 48 /// This is the set of opaque types in the destination modules who are 49 /// getting a body from the source module. 50 SmallPtrSet<StructType *, 16> DstResolvedOpaqueTypes; 51 52 public: 53 TypeMapTy(Linker::IdentifiedStructTypeSet &DstStructTypesSet) 54 : DstStructTypesSet(DstStructTypesSet) {} 55 56 Linker::IdentifiedStructTypeSet &DstStructTypesSet; 57 /// Indicate that the specified type in the destination module is conceptually 58 /// equivalent to the specified type in the source module. 59 void addTypeMapping(Type *DstTy, Type *SrcTy); 60 61 /// Produce a body for an opaque type in the dest module from a type 62 /// definition in the source module. 63 void linkDefinedTypeBodies(); 64 65 /// Return the mapped type to use for the specified input type from the 66 /// source module. 67 Type *get(Type *SrcTy); 68 Type *get(Type *SrcTy, SmallPtrSet<StructType *, 8> &Visited); 69 70 void finishType(StructType *DTy, StructType *STy, ArrayRef<Type *> ETypes); 71 72 FunctionType *get(FunctionType *T) { 73 return cast<FunctionType>(get((Type *)T)); 74 } 75 76 /// Dump out the type map for debugging purposes. 77 void dump() const { 78 for (auto &Pair : MappedTypes) { 79 dbgs() << "TypeMap: "; 80 Pair.first->print(dbgs()); 81 dbgs() << " => "; 82 Pair.second->print(dbgs()); 83 dbgs() << '\n'; 84 } 85 } 86 87 private: 88 Type *remapType(Type *SrcTy) override { return get(SrcTy); } 89 90 bool areTypesIsomorphic(Type *DstTy, Type *SrcTy); 91 }; 92 } 93 94 void TypeMapTy::addTypeMapping(Type *DstTy, Type *SrcTy) { 95 assert(SpeculativeTypes.empty()); 96 assert(SpeculativeDstOpaqueTypes.empty()); 97 98 // Check to see if these types are recursively isomorphic and establish a 99 // mapping between them if so. 100 if (!areTypesIsomorphic(DstTy, SrcTy)) { 101 // Oops, they aren't isomorphic. Just discard this request by rolling out 102 // any speculative mappings we've established. 103 for (Type *Ty : SpeculativeTypes) 104 MappedTypes.erase(Ty); 105 106 SrcDefinitionsToResolve.resize(SrcDefinitionsToResolve.size() - 107 SpeculativeDstOpaqueTypes.size()); 108 for (StructType *Ty : SpeculativeDstOpaqueTypes) 109 DstResolvedOpaqueTypes.erase(Ty); 110 } else { 111 for (Type *Ty : SpeculativeTypes) 112 if (auto *STy = dyn_cast<StructType>(Ty)) 113 if (STy->hasName()) 114 STy->setName(""); 115 } 116 SpeculativeTypes.clear(); 117 SpeculativeDstOpaqueTypes.clear(); 118 } 119 120 /// Recursively walk this pair of types, returning true if they are isomorphic, 121 /// false if they are not. 122 bool TypeMapTy::areTypesIsomorphic(Type *DstTy, Type *SrcTy) { 123 // Two types with differing kinds are clearly not isomorphic. 124 if (DstTy->getTypeID() != SrcTy->getTypeID()) 125 return false; 126 127 // If we have an entry in the MappedTypes table, then we have our answer. 128 Type *&Entry = MappedTypes[SrcTy]; 129 if (Entry) 130 return Entry == DstTy; 131 132 // Two identical types are clearly isomorphic. Remember this 133 // non-speculatively. 134 if (DstTy == SrcTy) { 135 Entry = DstTy; 136 return true; 137 } 138 139 // Okay, we have two types with identical kinds that we haven't seen before. 140 141 // If this is an opaque struct type, special case it. 142 if (StructType *SSTy = dyn_cast<StructType>(SrcTy)) { 143 // Mapping an opaque type to any struct, just keep the dest struct. 144 if (SSTy->isOpaque()) { 145 Entry = DstTy; 146 SpeculativeTypes.push_back(SrcTy); 147 return true; 148 } 149 150 // Mapping a non-opaque source type to an opaque dest. If this is the first 151 // type that we're mapping onto this destination type then we succeed. Keep 152 // the dest, but fill it in later. If this is the second (different) type 153 // that we're trying to map onto the same opaque type then we fail. 154 if (cast<StructType>(DstTy)->isOpaque()) { 155 // We can only map one source type onto the opaque destination type. 156 if (!DstResolvedOpaqueTypes.insert(cast<StructType>(DstTy)).second) 157 return false; 158 SrcDefinitionsToResolve.push_back(SSTy); 159 SpeculativeTypes.push_back(SrcTy); 160 SpeculativeDstOpaqueTypes.push_back(cast<StructType>(DstTy)); 161 Entry = DstTy; 162 return true; 163 } 164 } 165 166 // If the number of subtypes disagree between the two types, then we fail. 167 if (SrcTy->getNumContainedTypes() != DstTy->getNumContainedTypes()) 168 return false; 169 170 // Fail if any of the extra properties (e.g. array size) of the type disagree. 171 if (isa<IntegerType>(DstTy)) 172 return false; // bitwidth disagrees. 173 if (PointerType *PT = dyn_cast<PointerType>(DstTy)) { 174 if (PT->getAddressSpace() != cast<PointerType>(SrcTy)->getAddressSpace()) 175 return false; 176 177 } else if (FunctionType *FT = dyn_cast<FunctionType>(DstTy)) { 178 if (FT->isVarArg() != cast<FunctionType>(SrcTy)->isVarArg()) 179 return false; 180 } else if (StructType *DSTy = dyn_cast<StructType>(DstTy)) { 181 StructType *SSTy = cast<StructType>(SrcTy); 182 if (DSTy->isLiteral() != SSTy->isLiteral() || 183 DSTy->isPacked() != SSTy->isPacked()) 184 return false; 185 } else if (ArrayType *DATy = dyn_cast<ArrayType>(DstTy)) { 186 if (DATy->getNumElements() != cast<ArrayType>(SrcTy)->getNumElements()) 187 return false; 188 } else if (VectorType *DVTy = dyn_cast<VectorType>(DstTy)) { 189 if (DVTy->getNumElements() != cast<VectorType>(SrcTy)->getNumElements()) 190 return false; 191 } 192 193 // Otherwise, we speculate that these two types will line up and recursively 194 // check the subelements. 195 Entry = DstTy; 196 SpeculativeTypes.push_back(SrcTy); 197 198 for (unsigned I = 0, E = SrcTy->getNumContainedTypes(); I != E; ++I) 199 if (!areTypesIsomorphic(DstTy->getContainedType(I), 200 SrcTy->getContainedType(I))) 201 return false; 202 203 // If everything seems to have lined up, then everything is great. 204 return true; 205 } 206 207 void TypeMapTy::linkDefinedTypeBodies() { 208 SmallVector<Type *, 16> Elements; 209 for (StructType *SrcSTy : SrcDefinitionsToResolve) { 210 StructType *DstSTy = cast<StructType>(MappedTypes[SrcSTy]); 211 assert(DstSTy->isOpaque()); 212 213 // Map the body of the source type over to a new body for the dest type. 214 Elements.resize(SrcSTy->getNumElements()); 215 for (unsigned I = 0, E = Elements.size(); I != E; ++I) 216 Elements[I] = get(SrcSTy->getElementType(I)); 217 218 DstSTy->setBody(Elements, SrcSTy->isPacked()); 219 DstStructTypesSet.switchToNonOpaque(DstSTy); 220 } 221 SrcDefinitionsToResolve.clear(); 222 DstResolvedOpaqueTypes.clear(); 223 } 224 225 void TypeMapTy::finishType(StructType *DTy, StructType *STy, 226 ArrayRef<Type *> ETypes) { 227 DTy->setBody(ETypes, STy->isPacked()); 228 229 // Steal STy's name. 230 if (STy->hasName()) { 231 SmallString<16> TmpName = STy->getName(); 232 STy->setName(""); 233 DTy->setName(TmpName); 234 } 235 236 DstStructTypesSet.addNonOpaque(DTy); 237 } 238 239 Type *TypeMapTy::get(Type *Ty) { 240 SmallPtrSet<StructType *, 8> Visited; 241 return get(Ty, Visited); 242 } 243 244 Type *TypeMapTy::get(Type *Ty, SmallPtrSet<StructType *, 8> &Visited) { 245 // If we already have an entry for this type, return it. 246 Type **Entry = &MappedTypes[Ty]; 247 if (*Entry) 248 return *Entry; 249 250 // These are types that LLVM itself will unique. 251 bool IsUniqued = !isa<StructType>(Ty) || cast<StructType>(Ty)->isLiteral(); 252 253 #ifndef NDEBUG 254 if (!IsUniqued) { 255 for (auto &Pair : MappedTypes) { 256 assert(!(Pair.first != Ty && Pair.second == Ty) && 257 "mapping to a source type"); 258 } 259 } 260 #endif 261 262 if (!IsUniqued && !Visited.insert(cast<StructType>(Ty)).second) { 263 StructType *DTy = StructType::create(Ty->getContext()); 264 return *Entry = DTy; 265 } 266 267 // If this is not a recursive type, then just map all of the elements and 268 // then rebuild the type from inside out. 269 SmallVector<Type *, 4> ElementTypes; 270 271 // If there are no element types to map, then the type is itself. This is 272 // true for the anonymous {} struct, things like 'float', integers, etc. 273 if (Ty->getNumContainedTypes() == 0 && IsUniqued) 274 return *Entry = Ty; 275 276 // Remap all of the elements, keeping track of whether any of them change. 277 bool AnyChange = false; 278 ElementTypes.resize(Ty->getNumContainedTypes()); 279 for (unsigned I = 0, E = Ty->getNumContainedTypes(); I != E; ++I) { 280 ElementTypes[I] = get(Ty->getContainedType(I), Visited); 281 AnyChange |= ElementTypes[I] != Ty->getContainedType(I); 282 } 283 284 // If we found our type while recursively processing stuff, just use it. 285 Entry = &MappedTypes[Ty]; 286 if (*Entry) { 287 if (auto *DTy = dyn_cast<StructType>(*Entry)) { 288 if (DTy->isOpaque()) { 289 auto *STy = cast<StructType>(Ty); 290 finishType(DTy, STy, ElementTypes); 291 } 292 } 293 return *Entry; 294 } 295 296 // If all of the element types mapped directly over and the type is not 297 // a nomed struct, then the type is usable as-is. 298 if (!AnyChange && IsUniqued) 299 return *Entry = Ty; 300 301 // Otherwise, rebuild a modified type. 302 switch (Ty->getTypeID()) { 303 default: 304 llvm_unreachable("unknown derived type to remap"); 305 case Type::ArrayTyID: 306 return *Entry = ArrayType::get(ElementTypes[0], 307 cast<ArrayType>(Ty)->getNumElements()); 308 case Type::VectorTyID: 309 return *Entry = VectorType::get(ElementTypes[0], 310 cast<VectorType>(Ty)->getNumElements()); 311 case Type::PointerTyID: 312 return *Entry = PointerType::get(ElementTypes[0], 313 cast<PointerType>(Ty)->getAddressSpace()); 314 case Type::FunctionTyID: 315 return *Entry = FunctionType::get(ElementTypes[0], 316 makeArrayRef(ElementTypes).slice(1), 317 cast<FunctionType>(Ty)->isVarArg()); 318 case Type::StructTyID: { 319 auto *STy = cast<StructType>(Ty); 320 bool IsPacked = STy->isPacked(); 321 if (IsUniqued) 322 return *Entry = StructType::get(Ty->getContext(), ElementTypes, IsPacked); 323 324 // If the type is opaque, we can just use it directly. 325 if (STy->isOpaque()) { 326 DstStructTypesSet.addOpaque(STy); 327 return *Entry = Ty; 328 } 329 330 if (StructType *OldT = 331 DstStructTypesSet.findNonOpaque(ElementTypes, IsPacked)) { 332 STy->setName(""); 333 return *Entry = OldT; 334 } 335 336 if (!AnyChange) { 337 DstStructTypesSet.addNonOpaque(STy); 338 return *Entry = Ty; 339 } 340 341 StructType *DTy = StructType::create(Ty->getContext()); 342 finishType(DTy, STy, ElementTypes); 343 return *Entry = DTy; 344 } 345 } 346 } 347 348 //===----------------------------------------------------------------------===// 349 // ModuleLinker implementation. 350 //===----------------------------------------------------------------------===// 351 352 namespace { 353 class ModuleLinker; 354 355 /// Creates prototypes for functions that are lazily linked on the fly. This 356 /// speeds up linking for modules with many/ lazily linked functions of which 357 /// few get used. 358 class ValueMaterializerTy final : public ValueMaterializer { 359 ModuleLinker *ModLinker; 360 361 public: 362 ValueMaterializerTy(ModuleLinker *ModLinker) : ModLinker(ModLinker) {} 363 364 Value *materializeDeclFor(Value *V) override; 365 void materializeInitFor(GlobalValue *New, GlobalValue *Old) override; 366 }; 367 368 class LinkDiagnosticInfo : public DiagnosticInfo { 369 const Twine &Msg; 370 371 public: 372 LinkDiagnosticInfo(DiagnosticSeverity Severity, const Twine &Msg); 373 void print(DiagnosticPrinter &DP) const override; 374 }; 375 LinkDiagnosticInfo::LinkDiagnosticInfo(DiagnosticSeverity Severity, 376 const Twine &Msg) 377 : DiagnosticInfo(DK_Linker, Severity), Msg(Msg) {} 378 void LinkDiagnosticInfo::print(DiagnosticPrinter &DP) const { DP << Msg; } 379 380 /// This is an implementation class for the LinkModules function, which is the 381 /// entrypoint for this file. 382 class ModuleLinker { 383 Module &DstM; 384 Module &SrcM; 385 386 TypeMapTy TypeMap; 387 ValueMaterializerTy ValMaterializer; 388 389 /// Mapping of values from what they used to be in Src, to what they are now 390 /// in DstM. ValueToValueMapTy is a ValueMap, which involves some overhead 391 /// due to the use of Value handles which the Linker doesn't actually need, 392 /// but this allows us to reuse the ValueMapper code. 393 ValueToValueMapTy ValueMap; 394 395 SetVector<GlobalValue *> ValuesToLink; 396 397 DiagnosticHandlerFunction DiagnosticHandler; 398 399 /// For symbol clashes, prefer those from Src. 400 unsigned Flags; 401 402 /// Function index passed into ModuleLinker for using in function 403 /// importing/exporting handling. 404 const FunctionInfoIndex *ImportIndex; 405 406 /// Function to import from source module, all other functions are 407 /// imported as declarations instead of definitions. 408 DenseSet<const GlobalValue *> *ImportFunction; 409 410 /// Set to true if the given FunctionInfoIndex contains any functions 411 /// from this source module, in which case we must conservatively assume 412 /// that any of its functions may be imported into another module 413 /// as part of a different backend compilation process. 414 bool HasExportedFunctions = false; 415 416 /// Set to true when all global value body linking is complete (including 417 /// lazy linking). Used to prevent metadata linking from creating new 418 /// references. 419 bool DoneLinkingBodies = false; 420 421 bool HasError = false; 422 423 public: 424 ModuleLinker(Module &DstM, Linker::IdentifiedStructTypeSet &Set, Module &SrcM, 425 DiagnosticHandlerFunction DiagnosticHandler, unsigned Flags, 426 const FunctionInfoIndex *Index = nullptr, 427 DenseSet<const GlobalValue *> *FunctionsToImport = nullptr) 428 : DstM(DstM), SrcM(SrcM), TypeMap(Set), ValMaterializer(this), 429 DiagnosticHandler(DiagnosticHandler), Flags(Flags), ImportIndex(Index), 430 ImportFunction(FunctionsToImport) { 431 assert((ImportIndex || !ImportFunction) && 432 "Expect a FunctionInfoIndex when importing"); 433 // If we have a FunctionInfoIndex but no function to import, 434 // then this is the primary module being compiled in a ThinLTO 435 // backend compilation, and we need to see if it has functions that 436 // may be exported to another backend compilation. 437 if (ImportIndex && !ImportFunction) 438 HasExportedFunctions = ImportIndex->hasExportedFunctions(SrcM); 439 } 440 441 bool run(); 442 Value *materializeDeclFor(Value *V); 443 void materializeInitFor(GlobalValue *New, GlobalValue *Old); 444 445 private: 446 bool shouldOverrideFromSrc() { return Flags & Linker::OverrideFromSrc; } 447 bool shouldLinkOnlyNeeded() { return Flags & Linker::LinkOnlyNeeded; } 448 bool shouldInternalizeLinkedSymbols() { 449 return Flags & Linker::InternalizeLinkedSymbols; 450 } 451 452 /// Handles cloning of a global values from the source module into 453 /// the destination module, including setting the attributes and visibility. 454 GlobalValue *copyGlobalValueProto(const GlobalValue *SGV, 455 const GlobalValue *DGV, bool ForDefinition); 456 457 /// Check if we should promote the given local value to global scope. 458 bool doPromoteLocalToGlobal(const GlobalValue *SGV); 459 460 bool shouldLinkFromSource(bool &LinkFromSrc, const GlobalValue &Dest, 461 const GlobalValue &Src); 462 463 /// Helper method for setting a message and returning an error code. 464 bool emitError(const Twine &Message) { 465 DiagnosticHandler(LinkDiagnosticInfo(DS_Error, Message)); 466 HasError = true; 467 return true; 468 } 469 470 void emitWarning(const Twine &Message) { 471 DiagnosticHandler(LinkDiagnosticInfo(DS_Warning, Message)); 472 } 473 474 bool getComdatLeader(Module &M, StringRef ComdatName, 475 const GlobalVariable *&GVar); 476 bool computeResultingSelectionKind(StringRef ComdatName, 477 Comdat::SelectionKind Src, 478 Comdat::SelectionKind Dst, 479 Comdat::SelectionKind &Result, 480 bool &LinkFromSrc); 481 std::map<const Comdat *, std::pair<Comdat::SelectionKind, bool>> 482 ComdatsChosen; 483 bool getComdatResult(const Comdat *SrcC, Comdat::SelectionKind &SK, 484 bool &LinkFromSrc); 485 // Keep track of the global value members of each comdat in source. 486 DenseMap<const Comdat *, std::vector<GlobalValue *>> ComdatMembers; 487 488 /// Given a global in the source module, return the global in the 489 /// destination module that is being linked to, if any. 490 GlobalValue *getLinkedToGlobal(const GlobalValue *SrcGV) { 491 // If the source has no name it can't link. If it has local linkage, 492 // there is no name match-up going on. 493 if (!SrcGV->hasName() || GlobalValue::isLocalLinkage(getLinkage(SrcGV))) 494 return nullptr; 495 496 // Otherwise see if we have a match in the destination module's symtab. 497 GlobalValue *DGV = DstM.getNamedValue(getName(SrcGV)); 498 if (!DGV) 499 return nullptr; 500 501 // If we found a global with the same name in the dest module, but it has 502 // internal linkage, we are really not doing any linkage here. 503 if (DGV->hasLocalLinkage()) 504 return nullptr; 505 506 // Otherwise, we do in fact link to the destination global. 507 return DGV; 508 } 509 510 void computeTypeMapping(); 511 512 void upgradeMismatchedGlobalArray(StringRef Name); 513 void upgradeMismatchedGlobals(); 514 515 bool linkIfNeeded(GlobalValue &GV); 516 Constant *linkAppendingVarProto(GlobalVariable *DstGV, 517 const GlobalVariable *SrcGV); 518 519 Constant *linkGlobalValueProto(GlobalValue *GV); 520 bool linkModuleFlagsMetadata(); 521 522 void linkGlobalInit(GlobalVariable &Dst, GlobalVariable &Src); 523 bool linkFunctionBody(Function &Dst, Function &Src); 524 void linkAliasBody(GlobalAlias &Dst, GlobalAlias &Src); 525 bool linkGlobalValueBody(GlobalValue &Dst, GlobalValue &Src); 526 527 /// Functions that take care of cloning a specific global value type 528 /// into the destination module. 529 GlobalVariable *copyGlobalVariableProto(const GlobalVariable *SGVar); 530 Function *copyFunctionProto(const Function *SF); 531 GlobalValue *copyGlobalAliasProto(const GlobalAlias *SGA); 532 533 /// Helper methods to check if we are importing from or potentially 534 /// exporting from the current source module. 535 bool isPerformingImport() { return ImportFunction != nullptr; } 536 bool isModuleExporting() { return HasExportedFunctions; } 537 538 /// If we are importing from the source module, checks if we should 539 /// import SGV as a definition, otherwise import as a declaration. 540 bool doImportAsDefinition(const GlobalValue *SGV); 541 542 /// Get the name for SGV that should be used in the linked destination 543 /// module. Specifically, this handles the case where we need to rename 544 /// a local that is being promoted to global scope. 545 std::string getName(const GlobalValue *SGV); 546 547 /// Get the new linkage for SGV that should be used in the linked destination 548 /// module. Specifically, for ThinLTO importing or exporting it may need 549 /// to be adjusted. 550 GlobalValue::LinkageTypes getLinkage(const GlobalValue *SGV); 551 552 /// Copies the necessary global value attributes and name from the source 553 /// to the newly cloned global value. 554 void copyGVAttributes(GlobalValue *NewGV, const GlobalValue *SrcGV); 555 556 /// Updates the visibility for the new global cloned from the source 557 /// and, if applicable, linked with an existing destination global. 558 /// Handles visibility change required for promoted locals. 559 void setVisibility(GlobalValue *NewGV, const GlobalValue *SGV, 560 const GlobalValue *DGV = nullptr); 561 562 void linkNamedMDNodes(); 563 }; 564 } 565 566 /// The LLVM SymbolTable class autorenames globals that conflict in the symbol 567 /// table. This is good for all clients except for us. Go through the trouble 568 /// to force this back. 569 static void forceRenaming(GlobalValue *GV, StringRef Name) { 570 // If the global doesn't force its name or if it already has the right name, 571 // there is nothing for us to do. 572 // Note that any required local to global promotion should already be done, 573 // so promoted locals will not skip this handling as their linkage is no 574 // longer local. 575 if (GV->hasLocalLinkage() || GV->getName() == Name) 576 return; 577 578 Module *M = GV->getParent(); 579 580 // If there is a conflict, rename the conflict. 581 if (GlobalValue *ConflictGV = M->getNamedValue(Name)) { 582 GV->takeName(ConflictGV); 583 ConflictGV->setName(Name); // This will cause ConflictGV to get renamed 584 assert(ConflictGV->getName() != Name && "forceRenaming didn't work"); 585 } else { 586 GV->setName(Name); // Force the name back 587 } 588 } 589 590 /// copy additional attributes (those not needed to construct a GlobalValue) 591 /// from the SrcGV to the DestGV. 592 void ModuleLinker::copyGVAttributes(GlobalValue *NewGV, 593 const GlobalValue *SrcGV) { 594 NewGV->copyAttributesFrom(SrcGV); 595 forceRenaming(NewGV, getName(SrcGV)); 596 } 597 598 bool ModuleLinker::doImportAsDefinition(const GlobalValue *SGV) { 599 if (!isPerformingImport()) 600 return false; 601 auto *GA = dyn_cast<GlobalAlias>(SGV); 602 if (GA) { 603 if (GA->hasWeakAnyLinkage()) 604 return false; 605 const GlobalObject *GO = GA->getBaseObject(); 606 if (!GO->hasLinkOnceODRLinkage()) 607 return false; 608 return doImportAsDefinition(GO); 609 } 610 // Always import GlobalVariable definitions, except for the special 611 // case of WeakAny which are imported as ExternalWeak declarations 612 // (see comments in ModuleLinker::getLinkage). The linkage changes 613 // described in ModuleLinker::getLinkage ensure the correct behavior (e.g. 614 // global variables with external linkage are transformed to 615 // available_externally definitions, which are ultimately turned into 616 // declarations after the EliminateAvailableExternally pass). 617 if (isa<GlobalVariable>(SGV) && !SGV->isDeclaration() && 618 !SGV->hasWeakAnyLinkage()) 619 return true; 620 // Only import the function requested for importing. 621 auto *SF = dyn_cast<Function>(SGV); 622 if (SF && ImportFunction->count(SF)) 623 return true; 624 // Otherwise no. 625 return false; 626 } 627 628 bool ModuleLinker::doPromoteLocalToGlobal(const GlobalValue *SGV) { 629 assert(SGV->hasLocalLinkage()); 630 // Both the imported references and the original local variable must 631 // be promoted. 632 if (!isPerformingImport() && !isModuleExporting()) 633 return false; 634 635 // Local const variables never need to be promoted unless they are address 636 // taken. The imported uses can simply use the clone created in this module. 637 // For now we are conservative in determining which variables are not 638 // address taken by checking the unnamed addr flag. To be more aggressive, 639 // the address taken information must be checked earlier during parsing 640 // of the module and recorded in the function index for use when importing 641 // from that module. 642 auto *GVar = dyn_cast<GlobalVariable>(SGV); 643 if (GVar && GVar->isConstant() && GVar->hasUnnamedAddr()) 644 return false; 645 646 // Eventually we only need to promote functions in the exporting module that 647 // are referenced by a potentially exported function (i.e. one that is in the 648 // function index). 649 return true; 650 } 651 652 std::string ModuleLinker::getName(const GlobalValue *SGV) { 653 // For locals that must be promoted to global scope, ensure that 654 // the promoted name uniquely identifies the copy in the original module, 655 // using the ID assigned during combined index creation. When importing, 656 // we rename all locals (not just those that are promoted) in order to 657 // avoid naming conflicts between locals imported from different modules. 658 if (SGV->hasLocalLinkage() && 659 (doPromoteLocalToGlobal(SGV) || isPerformingImport())) 660 return FunctionInfoIndex::getGlobalNameForLocal( 661 SGV->getName(), 662 ImportIndex->getModuleId(SGV->getParent()->getModuleIdentifier())); 663 return SGV->getName(); 664 } 665 666 GlobalValue::LinkageTypes ModuleLinker::getLinkage(const GlobalValue *SGV) { 667 // Any local variable that is referenced by an exported function needs 668 // to be promoted to global scope. Since we don't currently know which 669 // functions reference which local variables/functions, we must treat 670 // all as potentially exported if this module is exporting anything. 671 if (isModuleExporting()) { 672 if (SGV->hasLocalLinkage() && doPromoteLocalToGlobal(SGV)) 673 return GlobalValue::ExternalLinkage; 674 return SGV->getLinkage(); 675 } 676 677 // Otherwise, if we aren't importing, no linkage change is needed. 678 if (!isPerformingImport()) 679 return SGV->getLinkage(); 680 681 switch (SGV->getLinkage()) { 682 case GlobalValue::ExternalLinkage: 683 // External defnitions are converted to available_externally 684 // definitions upon import, so that they are available for inlining 685 // and/or optimization, but are turned into declarations later 686 // during the EliminateAvailableExternally pass. 687 if (doImportAsDefinition(SGV) && !dyn_cast<GlobalAlias>(SGV)) 688 return GlobalValue::AvailableExternallyLinkage; 689 // An imported external declaration stays external. 690 return SGV->getLinkage(); 691 692 case GlobalValue::AvailableExternallyLinkage: 693 // An imported available_externally definition converts 694 // to external if imported as a declaration. 695 if (!doImportAsDefinition(SGV)) 696 return GlobalValue::ExternalLinkage; 697 // An imported available_externally declaration stays that way. 698 return SGV->getLinkage(); 699 700 case GlobalValue::LinkOnceAnyLinkage: 701 case GlobalValue::LinkOnceODRLinkage: 702 // These both stay the same when importing the definition. 703 // The ThinLTO pass will eventually force-import their definitions. 704 return SGV->getLinkage(); 705 706 case GlobalValue::WeakAnyLinkage: 707 // Can't import weak_any definitions correctly, or we might change the 708 // program semantics, since the linker will pick the first weak_any 709 // definition and importing would change the order they are seen by the 710 // linker. The module linking caller needs to enforce this. 711 assert(!doImportAsDefinition(SGV)); 712 // If imported as a declaration, it becomes external_weak. 713 return GlobalValue::ExternalWeakLinkage; 714 715 case GlobalValue::WeakODRLinkage: 716 // For weak_odr linkage, there is a guarantee that all copies will be 717 // equivalent, so the issue described above for weak_any does not exist, 718 // and the definition can be imported. It can be treated similarly 719 // to an imported externally visible global value. 720 if (doImportAsDefinition(SGV) && !dyn_cast<GlobalAlias>(SGV)) 721 return GlobalValue::AvailableExternallyLinkage; 722 else 723 return GlobalValue::ExternalLinkage; 724 725 case GlobalValue::AppendingLinkage: 726 // It would be incorrect to import an appending linkage variable, 727 // since it would cause global constructors/destructors to be 728 // executed multiple times. This should have already been handled 729 // by linkIfNeeded, and we will assert in shouldLinkFromSource 730 // if we try to import, so we simply return AppendingLinkage here 731 // as this helper is called more widely in getLinkedToGlobal. 732 return GlobalValue::AppendingLinkage; 733 734 case GlobalValue::InternalLinkage: 735 case GlobalValue::PrivateLinkage: 736 // If we are promoting the local to global scope, it is handled 737 // similarly to a normal externally visible global. 738 if (doPromoteLocalToGlobal(SGV)) { 739 if (doImportAsDefinition(SGV) && !dyn_cast<GlobalAlias>(SGV)) 740 return GlobalValue::AvailableExternallyLinkage; 741 else 742 return GlobalValue::ExternalLinkage; 743 } 744 // A non-promoted imported local definition stays local. 745 // The ThinLTO pass will eventually force-import their definitions. 746 return SGV->getLinkage(); 747 748 case GlobalValue::ExternalWeakLinkage: 749 // External weak doesn't apply to definitions, must be a declaration. 750 assert(!doImportAsDefinition(SGV)); 751 // Linkage stays external_weak. 752 return SGV->getLinkage(); 753 754 case GlobalValue::CommonLinkage: 755 // Linkage stays common on definitions. 756 // The ThinLTO pass will eventually force-import their definitions. 757 return SGV->getLinkage(); 758 } 759 760 llvm_unreachable("unknown linkage type"); 761 } 762 763 /// Loop through the global variables in the src module and merge them into the 764 /// dest module. 765 GlobalVariable * 766 ModuleLinker::copyGlobalVariableProto(const GlobalVariable *SGVar) { 767 // No linking to be performed or linking from the source: simply create an 768 // identical version of the symbol over in the dest module... the 769 // initializer will be filled in later by LinkGlobalInits. 770 GlobalVariable *NewDGV = 771 new GlobalVariable(DstM, TypeMap.get(SGVar->getType()->getElementType()), 772 SGVar->isConstant(), GlobalValue::ExternalLinkage, 773 /*init*/ nullptr, getName(SGVar), 774 /*insertbefore*/ nullptr, SGVar->getThreadLocalMode(), 775 SGVar->getType()->getAddressSpace()); 776 777 return NewDGV; 778 } 779 780 /// Link the function in the source module into the destination module if 781 /// needed, setting up mapping information. 782 Function *ModuleLinker::copyFunctionProto(const Function *SF) { 783 // If there is no linkage to be performed or we are linking from the source, 784 // bring SF over. 785 return Function::Create(TypeMap.get(SF->getFunctionType()), 786 GlobalValue::ExternalLinkage, getName(SF), &DstM); 787 } 788 789 /// Set up prototypes for any aliases that come over from the source module. 790 GlobalValue *ModuleLinker::copyGlobalAliasProto(const GlobalAlias *SGA) { 791 // If there is no linkage to be performed or we're linking from the source, 792 // bring over SGA. 793 auto *Ty = TypeMap.get(SGA->getValueType()); 794 return GlobalAlias::create(Ty, SGA->getType()->getPointerAddressSpace(), 795 GlobalValue::ExternalLinkage, getName(SGA), &DstM); 796 } 797 798 static GlobalValue::VisibilityTypes 799 getMinVisibility(GlobalValue::VisibilityTypes A, 800 GlobalValue::VisibilityTypes B) { 801 if (A == GlobalValue::HiddenVisibility || B == GlobalValue::HiddenVisibility) 802 return GlobalValue::HiddenVisibility; 803 if (A == GlobalValue::ProtectedVisibility || 804 B == GlobalValue::ProtectedVisibility) 805 return GlobalValue::ProtectedVisibility; 806 return GlobalValue::DefaultVisibility; 807 } 808 809 void ModuleLinker::setVisibility(GlobalValue *NewGV, const GlobalValue *SGV, 810 const GlobalValue *DGV) { 811 GlobalValue::VisibilityTypes Visibility = SGV->getVisibility(); 812 if (DGV) 813 Visibility = getMinVisibility(DGV->getVisibility(), Visibility); 814 // For promoted locals, mark them hidden so that they can later be 815 // stripped from the symbol table to reduce bloat. 816 if (SGV->hasLocalLinkage() && doPromoteLocalToGlobal(SGV)) 817 Visibility = GlobalValue::HiddenVisibility; 818 NewGV->setVisibility(Visibility); 819 } 820 821 GlobalValue *ModuleLinker::copyGlobalValueProto(const GlobalValue *SGV, 822 const GlobalValue *DGV, 823 bool ForDefinition) { 824 GlobalValue *NewGV; 825 if (auto *SGVar = dyn_cast<GlobalVariable>(SGV)) { 826 NewGV = copyGlobalVariableProto(SGVar); 827 } else if (auto *SF = dyn_cast<Function>(SGV)) { 828 NewGV = copyFunctionProto(SF); 829 } else { 830 if (ForDefinition) 831 NewGV = copyGlobalAliasProto(cast<GlobalAlias>(SGV)); 832 else 833 NewGV = new GlobalVariable( 834 DstM, TypeMap.get(SGV->getType()->getElementType()), 835 /*isConstant*/ false, GlobalValue::ExternalLinkage, 836 /*init*/ nullptr, getName(SGV), 837 /*insertbefore*/ nullptr, SGV->getThreadLocalMode(), 838 SGV->getType()->getAddressSpace()); 839 } 840 841 if (ForDefinition) 842 NewGV->setLinkage(getLinkage(SGV)); 843 else if (SGV->hasAvailableExternallyLinkage() || SGV->hasWeakLinkage() || 844 SGV->hasLinkOnceLinkage()) 845 NewGV->setLinkage(GlobalValue::ExternalWeakLinkage); 846 847 copyGVAttributes(NewGV, SGV); 848 setVisibility(NewGV, SGV, DGV); 849 return NewGV; 850 } 851 852 Value *ValueMaterializerTy::materializeDeclFor(Value *V) { 853 return ModLinker->materializeDeclFor(V); 854 } 855 856 Value *ModuleLinker::materializeDeclFor(Value *V) { 857 auto *SGV = dyn_cast<GlobalValue>(V); 858 if (!SGV) 859 return nullptr; 860 861 return linkGlobalValueProto(SGV); 862 } 863 864 void ValueMaterializerTy::materializeInitFor(GlobalValue *New, 865 GlobalValue *Old) { 866 return ModLinker->materializeInitFor(New, Old); 867 } 868 869 static bool shouldLazyLink(const GlobalValue &GV) { 870 return GV.hasLocalLinkage() || GV.hasLinkOnceLinkage() || 871 GV.hasAvailableExternallyLinkage(); 872 } 873 874 void ModuleLinker::materializeInitFor(GlobalValue *New, GlobalValue *Old) { 875 if (auto *F = dyn_cast<Function>(New)) { 876 if (!F->isDeclaration()) 877 return; 878 } else if (auto *V = dyn_cast<GlobalVariable>(New)) { 879 if (V->hasInitializer()) 880 return; 881 } else { 882 auto *A = cast<GlobalAlias>(New); 883 if (A->getAliasee()) 884 return; 885 } 886 887 if (Old->isDeclaration()) 888 return; 889 890 if (isPerformingImport() && !doImportAsDefinition(Old)) 891 return; 892 893 if (!ValuesToLink.count(Old) && !shouldLazyLink(*Old)) 894 return; 895 896 linkGlobalValueBody(*New, *Old); 897 } 898 899 bool ModuleLinker::getComdatLeader(Module &M, StringRef ComdatName, 900 const GlobalVariable *&GVar) { 901 const GlobalValue *GVal = M.getNamedValue(ComdatName); 902 if (const auto *GA = dyn_cast_or_null<GlobalAlias>(GVal)) { 903 GVal = GA->getBaseObject(); 904 if (!GVal) 905 // We cannot resolve the size of the aliasee yet. 906 return emitError("Linking COMDATs named '" + ComdatName + 907 "': COMDAT key involves incomputable alias size."); 908 } 909 910 GVar = dyn_cast_or_null<GlobalVariable>(GVal); 911 if (!GVar) 912 return emitError( 913 "Linking COMDATs named '" + ComdatName + 914 "': GlobalVariable required for data dependent selection!"); 915 916 return false; 917 } 918 919 bool ModuleLinker::computeResultingSelectionKind(StringRef ComdatName, 920 Comdat::SelectionKind Src, 921 Comdat::SelectionKind Dst, 922 Comdat::SelectionKind &Result, 923 bool &LinkFromSrc) { 924 // The ability to mix Comdat::SelectionKind::Any with 925 // Comdat::SelectionKind::Largest is a behavior that comes from COFF. 926 bool DstAnyOrLargest = Dst == Comdat::SelectionKind::Any || 927 Dst == Comdat::SelectionKind::Largest; 928 bool SrcAnyOrLargest = Src == Comdat::SelectionKind::Any || 929 Src == Comdat::SelectionKind::Largest; 930 if (DstAnyOrLargest && SrcAnyOrLargest) { 931 if (Dst == Comdat::SelectionKind::Largest || 932 Src == Comdat::SelectionKind::Largest) 933 Result = Comdat::SelectionKind::Largest; 934 else 935 Result = Comdat::SelectionKind::Any; 936 } else if (Src == Dst) { 937 Result = Dst; 938 } else { 939 return emitError("Linking COMDATs named '" + ComdatName + 940 "': invalid selection kinds!"); 941 } 942 943 switch (Result) { 944 case Comdat::SelectionKind::Any: 945 // Go with Dst. 946 LinkFromSrc = false; 947 break; 948 case Comdat::SelectionKind::NoDuplicates: 949 return emitError("Linking COMDATs named '" + ComdatName + 950 "': noduplicates has been violated!"); 951 case Comdat::SelectionKind::ExactMatch: 952 case Comdat::SelectionKind::Largest: 953 case Comdat::SelectionKind::SameSize: { 954 const GlobalVariable *DstGV; 955 const GlobalVariable *SrcGV; 956 if (getComdatLeader(DstM, ComdatName, DstGV) || 957 getComdatLeader(SrcM, ComdatName, SrcGV)) 958 return true; 959 960 const DataLayout &DstDL = DstM.getDataLayout(); 961 const DataLayout &SrcDL = SrcM.getDataLayout(); 962 uint64_t DstSize = 963 DstDL.getTypeAllocSize(DstGV->getType()->getPointerElementType()); 964 uint64_t SrcSize = 965 SrcDL.getTypeAllocSize(SrcGV->getType()->getPointerElementType()); 966 if (Result == Comdat::SelectionKind::ExactMatch) { 967 if (SrcGV->getInitializer() != DstGV->getInitializer()) 968 return emitError("Linking COMDATs named '" + ComdatName + 969 "': ExactMatch violated!"); 970 LinkFromSrc = false; 971 } else if (Result == Comdat::SelectionKind::Largest) { 972 LinkFromSrc = SrcSize > DstSize; 973 } else if (Result == Comdat::SelectionKind::SameSize) { 974 if (SrcSize != DstSize) 975 return emitError("Linking COMDATs named '" + ComdatName + 976 "': SameSize violated!"); 977 LinkFromSrc = false; 978 } else { 979 llvm_unreachable("unknown selection kind"); 980 } 981 break; 982 } 983 } 984 985 return false; 986 } 987 988 bool ModuleLinker::getComdatResult(const Comdat *SrcC, 989 Comdat::SelectionKind &Result, 990 bool &LinkFromSrc) { 991 Comdat::SelectionKind SSK = SrcC->getSelectionKind(); 992 StringRef ComdatName = SrcC->getName(); 993 Module::ComdatSymTabType &ComdatSymTab = DstM.getComdatSymbolTable(); 994 Module::ComdatSymTabType::iterator DstCI = ComdatSymTab.find(ComdatName); 995 996 if (DstCI == ComdatSymTab.end()) { 997 // Use the comdat if it is only available in one of the modules. 998 LinkFromSrc = true; 999 Result = SSK; 1000 return false; 1001 } 1002 1003 const Comdat *DstC = &DstCI->second; 1004 Comdat::SelectionKind DSK = DstC->getSelectionKind(); 1005 return computeResultingSelectionKind(ComdatName, SSK, DSK, Result, 1006 LinkFromSrc); 1007 } 1008 1009 bool ModuleLinker::shouldLinkFromSource(bool &LinkFromSrc, 1010 const GlobalValue &Dest, 1011 const GlobalValue &Src) { 1012 // Should we unconditionally use the Src? 1013 if (shouldOverrideFromSrc()) { 1014 LinkFromSrc = true; 1015 return false; 1016 } 1017 1018 // We always have to add Src if it has appending linkage. 1019 if (Src.hasAppendingLinkage()) { 1020 // Should have prevented importing for appending linkage in linkIfNeeded. 1021 assert(!isPerformingImport()); 1022 LinkFromSrc = true; 1023 return false; 1024 } 1025 1026 bool SrcIsDeclaration = Src.isDeclarationForLinker(); 1027 bool DestIsDeclaration = Dest.isDeclarationForLinker(); 1028 1029 if (isPerformingImport()) { 1030 if (isa<Function>(&Src)) { 1031 // For functions, LinkFromSrc iff this is the function requested 1032 // for importing. For variables, decide below normally. 1033 LinkFromSrc = ImportFunction->count(&Src); 1034 return false; 1035 } 1036 1037 // Check if this is an alias with an already existing definition 1038 // in Dest, which must have come from a prior importing pass from 1039 // the same Src module. Unlike imported function and variable 1040 // definitions, which are imported as available_externally and are 1041 // not definitions for the linker, that is not a valid linkage for 1042 // imported aliases which must be definitions. Simply use the existing 1043 // Dest copy. 1044 if (isa<GlobalAlias>(&Src) && !DestIsDeclaration) { 1045 assert(isa<GlobalAlias>(&Dest)); 1046 LinkFromSrc = false; 1047 return false; 1048 } 1049 } 1050 1051 if (SrcIsDeclaration) { 1052 // If Src is external or if both Src & Dest are external.. Just link the 1053 // external globals, we aren't adding anything. 1054 if (Src.hasDLLImportStorageClass()) { 1055 // If one of GVs is marked as DLLImport, result should be dllimport'ed. 1056 LinkFromSrc = DestIsDeclaration; 1057 return false; 1058 } 1059 // If the Dest is weak, use the source linkage. 1060 LinkFromSrc = Dest.hasExternalWeakLinkage(); 1061 return false; 1062 } 1063 1064 if (DestIsDeclaration) { 1065 // If Dest is external but Src is not: 1066 LinkFromSrc = true; 1067 return false; 1068 } 1069 1070 if (Src.hasCommonLinkage()) { 1071 if (Dest.hasLinkOnceLinkage() || Dest.hasWeakLinkage()) { 1072 LinkFromSrc = true; 1073 return false; 1074 } 1075 1076 if (!Dest.hasCommonLinkage()) { 1077 LinkFromSrc = false; 1078 return false; 1079 } 1080 1081 const DataLayout &DL = Dest.getParent()->getDataLayout(); 1082 uint64_t DestSize = DL.getTypeAllocSize(Dest.getType()->getElementType()); 1083 uint64_t SrcSize = DL.getTypeAllocSize(Src.getType()->getElementType()); 1084 LinkFromSrc = SrcSize > DestSize; 1085 return false; 1086 } 1087 1088 if (Src.isWeakForLinker()) { 1089 assert(!Dest.hasExternalWeakLinkage()); 1090 assert(!Dest.hasAvailableExternallyLinkage()); 1091 1092 if (Dest.hasLinkOnceLinkage() && Src.hasWeakLinkage()) { 1093 LinkFromSrc = true; 1094 return false; 1095 } 1096 1097 LinkFromSrc = false; 1098 return false; 1099 } 1100 1101 if (Dest.isWeakForLinker()) { 1102 assert(Src.hasExternalLinkage()); 1103 LinkFromSrc = true; 1104 return false; 1105 } 1106 1107 assert(!Src.hasExternalWeakLinkage()); 1108 assert(!Dest.hasExternalWeakLinkage()); 1109 assert(Dest.hasExternalLinkage() && Src.hasExternalLinkage() && 1110 "Unexpected linkage type!"); 1111 return emitError("Linking globals named '" + Src.getName() + 1112 "': symbol multiply defined!"); 1113 } 1114 1115 /// Loop over all of the linked values to compute type mappings. For example, 1116 /// if we link "extern Foo *x" and "Foo *x = NULL", then we have two struct 1117 /// types 'Foo' but one got renamed when the module was loaded into the same 1118 /// LLVMContext. 1119 void ModuleLinker::computeTypeMapping() { 1120 for (GlobalValue &SGV : SrcM.globals()) { 1121 GlobalValue *DGV = getLinkedToGlobal(&SGV); 1122 if (!DGV) 1123 continue; 1124 1125 if (!DGV->hasAppendingLinkage() || !SGV.hasAppendingLinkage()) { 1126 TypeMap.addTypeMapping(DGV->getType(), SGV.getType()); 1127 continue; 1128 } 1129 1130 // Unify the element type of appending arrays. 1131 ArrayType *DAT = cast<ArrayType>(DGV->getType()->getElementType()); 1132 ArrayType *SAT = cast<ArrayType>(SGV.getType()->getElementType()); 1133 TypeMap.addTypeMapping(DAT->getElementType(), SAT->getElementType()); 1134 } 1135 1136 for (GlobalValue &SGV : SrcM) { 1137 if (GlobalValue *DGV = getLinkedToGlobal(&SGV)) 1138 TypeMap.addTypeMapping(DGV->getType(), SGV.getType()); 1139 } 1140 1141 for (GlobalValue &SGV : SrcM.aliases()) { 1142 if (GlobalValue *DGV = getLinkedToGlobal(&SGV)) 1143 TypeMap.addTypeMapping(DGV->getType(), SGV.getType()); 1144 } 1145 1146 // Incorporate types by name, scanning all the types in the source module. 1147 // At this point, the destination module may have a type "%foo = { i32 }" for 1148 // example. When the source module got loaded into the same LLVMContext, if 1149 // it had the same type, it would have been renamed to "%foo.42 = { i32 }". 1150 std::vector<StructType *> Types = SrcM.getIdentifiedStructTypes(); 1151 for (StructType *ST : Types) { 1152 if (!ST->hasName()) 1153 continue; 1154 1155 // Check to see if there is a dot in the name followed by a digit. 1156 size_t DotPos = ST->getName().rfind('.'); 1157 if (DotPos == 0 || DotPos == StringRef::npos || 1158 ST->getName().back() == '.' || 1159 !isdigit(static_cast<unsigned char>(ST->getName()[DotPos + 1]))) 1160 continue; 1161 1162 // Check to see if the destination module has a struct with the prefix name. 1163 StructType *DST = DstM.getTypeByName(ST->getName().substr(0, DotPos)); 1164 if (!DST) 1165 continue; 1166 1167 // Don't use it if this actually came from the source module. They're in 1168 // the same LLVMContext after all. Also don't use it unless the type is 1169 // actually used in the destination module. This can happen in situations 1170 // like this: 1171 // 1172 // Module A Module B 1173 // -------- -------- 1174 // %Z = type { %A } %B = type { %C.1 } 1175 // %A = type { %B.1, [7 x i8] } %C.1 = type { i8* } 1176 // %B.1 = type { %C } %A.2 = type { %B.3, [5 x i8] } 1177 // %C = type { i8* } %B.3 = type { %C.1 } 1178 // 1179 // When we link Module B with Module A, the '%B' in Module B is 1180 // used. However, that would then use '%C.1'. But when we process '%C.1', 1181 // we prefer to take the '%C' version. So we are then left with both 1182 // '%C.1' and '%C' being used for the same types. This leads to some 1183 // variables using one type and some using the other. 1184 if (TypeMap.DstStructTypesSet.hasType(DST)) 1185 TypeMap.addTypeMapping(DST, ST); 1186 } 1187 1188 // Now that we have discovered all of the type equivalences, get a body for 1189 // any 'opaque' types in the dest module that are now resolved. 1190 TypeMap.linkDefinedTypeBodies(); 1191 } 1192 1193 static void upgradeGlobalArray(GlobalVariable *GV) { 1194 ArrayType *ATy = cast<ArrayType>(GV->getType()->getElementType()); 1195 StructType *OldTy = cast<StructType>(ATy->getElementType()); 1196 assert(OldTy->getNumElements() == 2 && "Expected to upgrade from 2 elements"); 1197 1198 // Get the upgraded 3 element type. 1199 PointerType *VoidPtrTy = Type::getInt8Ty(GV->getContext())->getPointerTo(); 1200 Type *Tys[3] = {OldTy->getElementType(0), OldTy->getElementType(1), 1201 VoidPtrTy}; 1202 StructType *NewTy = StructType::get(GV->getContext(), Tys, false); 1203 1204 // Build new constants with a null third field filled in. 1205 Constant *OldInitC = GV->getInitializer(); 1206 ConstantArray *OldInit = dyn_cast<ConstantArray>(OldInitC); 1207 if (!OldInit && !isa<ConstantAggregateZero>(OldInitC)) 1208 // Invalid initializer; give up. 1209 return; 1210 std::vector<Constant *> Initializers; 1211 if (OldInit && OldInit->getNumOperands()) { 1212 Value *Null = Constant::getNullValue(VoidPtrTy); 1213 for (Use &U : OldInit->operands()) { 1214 ConstantStruct *Init = cast<ConstantStruct>(U.get()); 1215 Initializers.push_back(ConstantStruct::get( 1216 NewTy, Init->getOperand(0), Init->getOperand(1), Null, nullptr)); 1217 } 1218 } 1219 assert(Initializers.size() == ATy->getNumElements() && 1220 "Failed to copy all array elements"); 1221 1222 // Replace the old GV with a new one. 1223 ATy = ArrayType::get(NewTy, Initializers.size()); 1224 Constant *NewInit = ConstantArray::get(ATy, Initializers); 1225 GlobalVariable *NewGV = new GlobalVariable( 1226 *GV->getParent(), ATy, GV->isConstant(), GV->getLinkage(), NewInit, "", 1227 GV, GV->getThreadLocalMode(), GV->getType()->getAddressSpace(), 1228 GV->isExternallyInitialized()); 1229 NewGV->copyAttributesFrom(GV); 1230 NewGV->takeName(GV); 1231 assert(GV->use_empty() && "program cannot use initializer list"); 1232 GV->eraseFromParent(); 1233 } 1234 1235 void ModuleLinker::upgradeMismatchedGlobalArray(StringRef Name) { 1236 // Look for the global arrays. 1237 auto *DstGV = dyn_cast_or_null<GlobalVariable>(DstM.getNamedValue(Name)); 1238 if (!DstGV) 1239 return; 1240 auto *SrcGV = dyn_cast_or_null<GlobalVariable>(SrcM.getNamedValue(Name)); 1241 if (!SrcGV) 1242 return; 1243 1244 // Check if the types already match. 1245 auto *DstTy = cast<ArrayType>(DstGV->getType()->getElementType()); 1246 auto *SrcTy = 1247 cast<ArrayType>(TypeMap.get(SrcGV->getType()->getElementType())); 1248 if (DstTy == SrcTy) 1249 return; 1250 1251 // Grab the element types. We can only upgrade an array of a two-field 1252 // struct. Only bother if the other one has three-fields. 1253 auto *DstEltTy = cast<StructType>(DstTy->getElementType()); 1254 auto *SrcEltTy = cast<StructType>(SrcTy->getElementType()); 1255 if (DstEltTy->getNumElements() == 2 && SrcEltTy->getNumElements() == 3) { 1256 upgradeGlobalArray(DstGV); 1257 return; 1258 } 1259 if (DstEltTy->getNumElements() == 3 && SrcEltTy->getNumElements() == 2) 1260 upgradeGlobalArray(SrcGV); 1261 1262 // We can't upgrade any other differences. 1263 } 1264 1265 void ModuleLinker::upgradeMismatchedGlobals() { 1266 upgradeMismatchedGlobalArray("llvm.global_ctors"); 1267 upgradeMismatchedGlobalArray("llvm.global_dtors"); 1268 } 1269 1270 static void getArrayElements(const Constant *C, 1271 SmallVectorImpl<Constant *> &Dest) { 1272 unsigned NumElements = cast<ArrayType>(C->getType())->getNumElements(); 1273 1274 for (unsigned i = 0; i != NumElements; ++i) 1275 Dest.push_back(C->getAggregateElement(i)); 1276 } 1277 1278 /// If there were any appending global variables, link them together now. 1279 /// Return true on error. 1280 Constant *ModuleLinker::linkAppendingVarProto(GlobalVariable *DstGV, 1281 const GlobalVariable *SrcGV) { 1282 ArrayType *SrcTy = 1283 cast<ArrayType>(TypeMap.get(SrcGV->getType()->getElementType())); 1284 Type *EltTy = SrcTy->getElementType(); 1285 1286 if (DstGV) { 1287 ArrayType *DstTy = cast<ArrayType>(DstGV->getType()->getElementType()); 1288 1289 if (!SrcGV->hasAppendingLinkage() || !DstGV->hasAppendingLinkage()) { 1290 emitError( 1291 "Linking globals named '" + SrcGV->getName() + 1292 "': can only link appending global with another appending global!"); 1293 return nullptr; 1294 } 1295 1296 // Check to see that they two arrays agree on type. 1297 if (EltTy != DstTy->getElementType()) { 1298 emitError("Appending variables with different element types!"); 1299 return nullptr; 1300 } 1301 if (DstGV->isConstant() != SrcGV->isConstant()) { 1302 emitError("Appending variables linked with different const'ness!"); 1303 return nullptr; 1304 } 1305 1306 if (DstGV->getAlignment() != SrcGV->getAlignment()) { 1307 emitError( 1308 "Appending variables with different alignment need to be linked!"); 1309 return nullptr; 1310 } 1311 1312 if (DstGV->getVisibility() != SrcGV->getVisibility()) { 1313 emitError( 1314 "Appending variables with different visibility need to be linked!"); 1315 return nullptr; 1316 } 1317 1318 if (DstGV->hasUnnamedAddr() != SrcGV->hasUnnamedAddr()) { 1319 emitError( 1320 "Appending variables with different unnamed_addr need to be linked!"); 1321 return nullptr; 1322 } 1323 1324 if (StringRef(DstGV->getSection()) != SrcGV->getSection()) { 1325 emitError( 1326 "Appending variables with different section name need to be linked!"); 1327 return nullptr; 1328 } 1329 } 1330 1331 SmallVector<Constant *, 16> DstElements; 1332 if (DstGV) 1333 getArrayElements(DstGV->getInitializer(), DstElements); 1334 1335 SmallVector<Constant *, 16> SrcElements; 1336 getArrayElements(SrcGV->getInitializer(), SrcElements); 1337 1338 StringRef Name = SrcGV->getName(); 1339 bool IsNewStructor = 1340 (Name == "llvm.global_ctors" || Name == "llvm.global_dtors") && 1341 cast<StructType>(EltTy)->getNumElements() == 3; 1342 if (IsNewStructor) 1343 SrcElements.erase( 1344 std::remove_if(SrcElements.begin(), SrcElements.end(), 1345 [this](Constant *E) { 1346 auto *Key = dyn_cast<GlobalValue>( 1347 E->getAggregateElement(2)->stripPointerCasts()); 1348 return Key && !ValuesToLink.count(Key) && 1349 !shouldLazyLink(*Key); 1350 }), 1351 SrcElements.end()); 1352 uint64_t NewSize = DstElements.size() + SrcElements.size(); 1353 ArrayType *NewType = ArrayType::get(EltTy, NewSize); 1354 1355 // Create the new global variable. 1356 GlobalVariable *NG = new GlobalVariable( 1357 DstM, NewType, SrcGV->isConstant(), SrcGV->getLinkage(), 1358 /*init*/ nullptr, /*name*/ "", DstGV, SrcGV->getThreadLocalMode(), 1359 SrcGV->getType()->getAddressSpace()); 1360 1361 // Propagate alignment, visibility and section info. 1362 copyGVAttributes(NG, SrcGV); 1363 1364 Constant *Ret = ConstantExpr::getBitCast(NG, TypeMap.get(SrcGV->getType())); 1365 1366 // Stop recursion. 1367 ValueMap[SrcGV] = Ret; 1368 1369 for (auto *V : SrcElements) { 1370 DstElements.push_back( 1371 MapValue(V, ValueMap, RF_MoveDistinctMDs, &TypeMap, &ValMaterializer)); 1372 } 1373 1374 NG->setInitializer(ConstantArray::get(NewType, DstElements)); 1375 1376 // Replace any uses of the two global variables with uses of the new 1377 // global. 1378 if (DstGV) { 1379 DstGV->replaceAllUsesWith(ConstantExpr::getBitCast(NG, DstGV->getType())); 1380 DstGV->eraseFromParent(); 1381 } 1382 1383 return Ret; 1384 } 1385 1386 Constant *ModuleLinker::linkGlobalValueProto(GlobalValue *SGV) { 1387 GlobalValue *DGV = getLinkedToGlobal(SGV); 1388 1389 // Handle the ultra special appending linkage case first. 1390 assert(!DGV || SGV->hasAppendingLinkage() == DGV->hasAppendingLinkage()); 1391 if (SGV->hasAppendingLinkage()) { 1392 // Should have prevented importing for appending linkage in linkIfNeeded. 1393 assert(!isPerformingImport()); 1394 return linkAppendingVarProto(cast_or_null<GlobalVariable>(DGV), 1395 cast<GlobalVariable>(SGV)); 1396 } 1397 1398 bool LinkFromSrc = true; 1399 Comdat *C = nullptr; 1400 bool HasUnnamedAddr = SGV->hasUnnamedAddr(); 1401 1402 if (isPerformingImport() && !doImportAsDefinition(SGV)) { 1403 LinkFromSrc = false; 1404 } else if (const Comdat *SC = SGV->getComdat()) { 1405 Comdat::SelectionKind SK; 1406 std::tie(SK, LinkFromSrc) = ComdatsChosen[SC]; 1407 C = DstM.getOrInsertComdat(SC->getName()); 1408 C->setSelectionKind(SK); 1409 if (SGV->hasLocalLinkage()) 1410 LinkFromSrc = true; 1411 } else if (DGV) { 1412 if (shouldLinkFromSource(LinkFromSrc, *DGV, *SGV)) 1413 return nullptr; 1414 } 1415 1416 if (DGV) 1417 HasUnnamedAddr = HasUnnamedAddr && DGV->hasUnnamedAddr(); 1418 1419 GlobalValue *NewGV; 1420 if (!LinkFromSrc && DGV) { 1421 NewGV = DGV; 1422 // When linking from source we setVisibility from copyGlobalValueProto. 1423 setVisibility(NewGV, SGV, DGV); 1424 } else { 1425 // If we are done linking global value bodies (i.e. we are performing 1426 // metadata linking), don't link in the global value due to this 1427 // reference, simply map it to null. 1428 if (DoneLinkingBodies) 1429 return nullptr; 1430 1431 NewGV = copyGlobalValueProto(SGV, DGV, LinkFromSrc); 1432 } 1433 1434 NewGV->setUnnamedAddr(HasUnnamedAddr); 1435 1436 if (auto *NewGO = dyn_cast<GlobalObject>(NewGV)) { 1437 if (C && LinkFromSrc) 1438 NewGO->setComdat(C); 1439 1440 if (DGV && DGV->hasCommonLinkage() && SGV->hasCommonLinkage()) 1441 NewGO->setAlignment(std::max(DGV->getAlignment(), SGV->getAlignment())); 1442 } 1443 1444 if (auto *NewGVar = dyn_cast<GlobalVariable>(NewGV)) { 1445 auto *DGVar = dyn_cast_or_null<GlobalVariable>(DGV); 1446 auto *SGVar = dyn_cast<GlobalVariable>(SGV); 1447 if (DGVar && SGVar && DGVar->isDeclaration() && SGVar->isDeclaration() && 1448 (!DGVar->isConstant() || !SGVar->isConstant())) 1449 NewGVar->setConstant(false); 1450 } 1451 1452 if (NewGV != DGV && DGV) { 1453 DGV->replaceAllUsesWith(ConstantExpr::getBitCast(NewGV, DGV->getType())); 1454 DGV->eraseFromParent(); 1455 } 1456 1457 return ConstantExpr::getBitCast(NewGV, TypeMap.get(SGV->getType())); 1458 } 1459 1460 /// Update the initializers in the Dest module now that all globals that may be 1461 /// referenced are in Dest. 1462 void ModuleLinker::linkGlobalInit(GlobalVariable &Dst, GlobalVariable &Src) { 1463 // Figure out what the initializer looks like in the dest module. 1464 Dst.setInitializer(MapValue(Src.getInitializer(), ValueMap, 1465 RF_MoveDistinctMDs, &TypeMap, &ValMaterializer)); 1466 } 1467 1468 /// Copy the source function over into the dest function and fix up references 1469 /// to values. At this point we know that Dest is an external function, and 1470 /// that Src is not. 1471 bool ModuleLinker::linkFunctionBody(Function &Dst, Function &Src) { 1472 assert(Dst.isDeclaration() && !Src.isDeclaration()); 1473 1474 // Materialize if needed. 1475 if (std::error_code EC = Src.materialize()) 1476 return emitError(EC.message()); 1477 1478 // Link in the prefix data. 1479 if (Src.hasPrefixData()) 1480 Dst.setPrefixData(MapValue(Src.getPrefixData(), ValueMap, 1481 RF_MoveDistinctMDs, &TypeMap, &ValMaterializer)); 1482 1483 // Link in the prologue data. 1484 if (Src.hasPrologueData()) 1485 Dst.setPrologueData(MapValue(Src.getPrologueData(), ValueMap, 1486 RF_MoveDistinctMDs, &TypeMap, 1487 &ValMaterializer)); 1488 1489 // Link in the personality function. 1490 if (Src.hasPersonalityFn()) 1491 Dst.setPersonalityFn(MapValue(Src.getPersonalityFn(), ValueMap, 1492 RF_MoveDistinctMDs, &TypeMap, 1493 &ValMaterializer)); 1494 1495 // Go through and convert function arguments over, remembering the mapping. 1496 Function::arg_iterator DI = Dst.arg_begin(); 1497 for (Argument &Arg : Src.args()) { 1498 DI->setName(Arg.getName()); // Copy the name over. 1499 1500 // Add a mapping to our mapping. 1501 ValueMap[&Arg] = &*DI; 1502 ++DI; 1503 } 1504 1505 // Copy over the metadata attachments. 1506 SmallVector<std::pair<unsigned, MDNode *>, 8> MDs; 1507 Src.getAllMetadata(MDs); 1508 for (const auto &I : MDs) 1509 Dst.setMetadata(I.first, MapMetadata(I.second, ValueMap, RF_MoveDistinctMDs, 1510 &TypeMap, &ValMaterializer)); 1511 1512 // Splice the body of the source function into the dest function. 1513 Dst.getBasicBlockList().splice(Dst.end(), Src.getBasicBlockList()); 1514 1515 // At this point, all of the instructions and values of the function are now 1516 // copied over. The only problem is that they are still referencing values in 1517 // the Source function as operands. Loop through all of the operands of the 1518 // functions and patch them up to point to the local versions. 1519 for (BasicBlock &BB : Dst) 1520 for (Instruction &I : BB) 1521 RemapInstruction(&I, ValueMap, 1522 RF_IgnoreMissingEntries | RF_MoveDistinctMDs, &TypeMap, 1523 &ValMaterializer); 1524 1525 // There is no need to map the arguments anymore. 1526 for (Argument &Arg : Src.args()) 1527 ValueMap.erase(&Arg); 1528 1529 Src.dematerialize(); 1530 return false; 1531 } 1532 1533 void ModuleLinker::linkAliasBody(GlobalAlias &Dst, GlobalAlias &Src) { 1534 Constant *Aliasee = Src.getAliasee(); 1535 Constant *Val = MapValue(Aliasee, ValueMap, RF_MoveDistinctMDs, &TypeMap, 1536 &ValMaterializer); 1537 Dst.setAliasee(Val); 1538 } 1539 1540 bool ModuleLinker::linkGlobalValueBody(GlobalValue &Dst, GlobalValue &Src) { 1541 if (const Comdat *SC = Src.getComdat()) { 1542 // To ensure that we don't generate an incomplete comdat group, 1543 // we must materialize and map in any other members that are not 1544 // yet materialized in Dst, which also ensures their definitions 1545 // are linked in. Otherwise, linkonce and other lazy linked GVs will 1546 // not be materialized if they aren't referenced. 1547 for (auto *SGV : ComdatMembers[SC]) { 1548 auto *DGV = cast_or_null<GlobalValue>(ValueMap.lookup(SGV)); 1549 if (DGV && !DGV->isDeclaration()) 1550 continue; 1551 MapValue(SGV, ValueMap, RF_MoveDistinctMDs, &TypeMap, &ValMaterializer); 1552 } 1553 } 1554 if (shouldInternalizeLinkedSymbols()) 1555 if (auto *DGV = dyn_cast<GlobalValue>(&Dst)) 1556 DGV->setLinkage(GlobalValue::InternalLinkage); 1557 if (auto *F = dyn_cast<Function>(&Src)) 1558 return linkFunctionBody(cast<Function>(Dst), *F); 1559 if (auto *GVar = dyn_cast<GlobalVariable>(&Src)) { 1560 linkGlobalInit(cast<GlobalVariable>(Dst), *GVar); 1561 return false; 1562 } 1563 linkAliasBody(cast<GlobalAlias>(Dst), cast<GlobalAlias>(Src)); 1564 return false; 1565 } 1566 1567 /// Insert all of the named MDNodes in Src into the Dest module. 1568 void ModuleLinker::linkNamedMDNodes() { 1569 const NamedMDNode *SrcModFlags = SrcM.getModuleFlagsMetadata(); 1570 for (const NamedMDNode &NMD : SrcM.named_metadata()) { 1571 // Don't link module flags here. Do them separately. 1572 if (&NMD == SrcModFlags) 1573 continue; 1574 NamedMDNode *DestNMD = DstM.getOrInsertNamedMetadata(NMD.getName()); 1575 // Add Src elements into Dest node. 1576 for (const MDNode *op : NMD.operands()) 1577 DestNMD->addOperand(MapMetadata( 1578 op, ValueMap, RF_MoveDistinctMDs | RF_NullMapMissingGlobalValues, 1579 &TypeMap, &ValMaterializer)); 1580 } 1581 } 1582 1583 /// Merge the linker flags in Src into the Dest module. 1584 bool ModuleLinker::linkModuleFlagsMetadata() { 1585 // If the source module has no module flags, we are done. 1586 const NamedMDNode *SrcModFlags = SrcM.getModuleFlagsMetadata(); 1587 if (!SrcModFlags) 1588 return false; 1589 1590 // If the destination module doesn't have module flags yet, then just copy 1591 // over the source module's flags. 1592 NamedMDNode *DstModFlags = DstM.getOrInsertModuleFlagsMetadata(); 1593 if (DstModFlags->getNumOperands() == 0) { 1594 for (unsigned I = 0, E = SrcModFlags->getNumOperands(); I != E; ++I) 1595 DstModFlags->addOperand(SrcModFlags->getOperand(I)); 1596 1597 return false; 1598 } 1599 1600 // First build a map of the existing module flags and requirements. 1601 DenseMap<MDString *, std::pair<MDNode *, unsigned>> Flags; 1602 SmallSetVector<MDNode *, 16> Requirements; 1603 for (unsigned I = 0, E = DstModFlags->getNumOperands(); I != E; ++I) { 1604 MDNode *Op = DstModFlags->getOperand(I); 1605 ConstantInt *Behavior = mdconst::extract<ConstantInt>(Op->getOperand(0)); 1606 MDString *ID = cast<MDString>(Op->getOperand(1)); 1607 1608 if (Behavior->getZExtValue() == Module::Require) { 1609 Requirements.insert(cast<MDNode>(Op->getOperand(2))); 1610 } else { 1611 Flags[ID] = std::make_pair(Op, I); 1612 } 1613 } 1614 1615 // Merge in the flags from the source module, and also collect its set of 1616 // requirements. 1617 bool HasErr = false; 1618 for (unsigned I = 0, E = SrcModFlags->getNumOperands(); I != E; ++I) { 1619 MDNode *SrcOp = SrcModFlags->getOperand(I); 1620 ConstantInt *SrcBehavior = 1621 mdconst::extract<ConstantInt>(SrcOp->getOperand(0)); 1622 MDString *ID = cast<MDString>(SrcOp->getOperand(1)); 1623 MDNode *DstOp; 1624 unsigned DstIndex; 1625 std::tie(DstOp, DstIndex) = Flags.lookup(ID); 1626 unsigned SrcBehaviorValue = SrcBehavior->getZExtValue(); 1627 1628 // If this is a requirement, add it and continue. 1629 if (SrcBehaviorValue == Module::Require) { 1630 // If the destination module does not already have this requirement, add 1631 // it. 1632 if (Requirements.insert(cast<MDNode>(SrcOp->getOperand(2)))) { 1633 DstModFlags->addOperand(SrcOp); 1634 } 1635 continue; 1636 } 1637 1638 // If there is no existing flag with this ID, just add it. 1639 if (!DstOp) { 1640 Flags[ID] = std::make_pair(SrcOp, DstModFlags->getNumOperands()); 1641 DstModFlags->addOperand(SrcOp); 1642 continue; 1643 } 1644 1645 // Otherwise, perform a merge. 1646 ConstantInt *DstBehavior = 1647 mdconst::extract<ConstantInt>(DstOp->getOperand(0)); 1648 unsigned DstBehaviorValue = DstBehavior->getZExtValue(); 1649 1650 // If either flag has override behavior, handle it first. 1651 if (DstBehaviorValue == Module::Override) { 1652 // Diagnose inconsistent flags which both have override behavior. 1653 if (SrcBehaviorValue == Module::Override && 1654 SrcOp->getOperand(2) != DstOp->getOperand(2)) { 1655 HasErr |= emitError("linking module flags '" + ID->getString() + 1656 "': IDs have conflicting override values"); 1657 } 1658 continue; 1659 } else if (SrcBehaviorValue == Module::Override) { 1660 // Update the destination flag to that of the source. 1661 DstModFlags->setOperand(DstIndex, SrcOp); 1662 Flags[ID].first = SrcOp; 1663 continue; 1664 } 1665 1666 // Diagnose inconsistent merge behavior types. 1667 if (SrcBehaviorValue != DstBehaviorValue) { 1668 HasErr |= emitError("linking module flags '" + ID->getString() + 1669 "': IDs have conflicting behaviors"); 1670 continue; 1671 } 1672 1673 auto replaceDstValue = [&](MDNode *New) { 1674 Metadata *FlagOps[] = {DstOp->getOperand(0), ID, New}; 1675 MDNode *Flag = MDNode::get(DstM.getContext(), FlagOps); 1676 DstModFlags->setOperand(DstIndex, Flag); 1677 Flags[ID].first = Flag; 1678 }; 1679 1680 // Perform the merge for standard behavior types. 1681 switch (SrcBehaviorValue) { 1682 case Module::Require: 1683 case Module::Override: 1684 llvm_unreachable("not possible"); 1685 case Module::Error: { 1686 // Emit an error if the values differ. 1687 if (SrcOp->getOperand(2) != DstOp->getOperand(2)) { 1688 HasErr |= emitError("linking module flags '" + ID->getString() + 1689 "': IDs have conflicting values"); 1690 } 1691 continue; 1692 } 1693 case Module::Warning: { 1694 // Emit a warning if the values differ. 1695 if (SrcOp->getOperand(2) != DstOp->getOperand(2)) { 1696 emitWarning("linking module flags '" + ID->getString() + 1697 "': IDs have conflicting values"); 1698 } 1699 continue; 1700 } 1701 case Module::Append: { 1702 MDNode *DstValue = cast<MDNode>(DstOp->getOperand(2)); 1703 MDNode *SrcValue = cast<MDNode>(SrcOp->getOperand(2)); 1704 SmallVector<Metadata *, 8> MDs; 1705 MDs.reserve(DstValue->getNumOperands() + SrcValue->getNumOperands()); 1706 MDs.append(DstValue->op_begin(), DstValue->op_end()); 1707 MDs.append(SrcValue->op_begin(), SrcValue->op_end()); 1708 1709 replaceDstValue(MDNode::get(DstM.getContext(), MDs)); 1710 break; 1711 } 1712 case Module::AppendUnique: { 1713 SmallSetVector<Metadata *, 16> Elts; 1714 MDNode *DstValue = cast<MDNode>(DstOp->getOperand(2)); 1715 MDNode *SrcValue = cast<MDNode>(SrcOp->getOperand(2)); 1716 Elts.insert(DstValue->op_begin(), DstValue->op_end()); 1717 Elts.insert(SrcValue->op_begin(), SrcValue->op_end()); 1718 1719 replaceDstValue(MDNode::get(DstM.getContext(), 1720 makeArrayRef(Elts.begin(), Elts.end()))); 1721 break; 1722 } 1723 } 1724 } 1725 1726 // Check all of the requirements. 1727 for (unsigned I = 0, E = Requirements.size(); I != E; ++I) { 1728 MDNode *Requirement = Requirements[I]; 1729 MDString *Flag = cast<MDString>(Requirement->getOperand(0)); 1730 Metadata *ReqValue = Requirement->getOperand(1); 1731 1732 MDNode *Op = Flags[Flag].first; 1733 if (!Op || Op->getOperand(2) != ReqValue) { 1734 HasErr |= emitError("linking module flags '" + Flag->getString() + 1735 "': does not have the required value"); 1736 continue; 1737 } 1738 } 1739 1740 return HasErr; 1741 } 1742 1743 // This function returns true if the triples match. 1744 static bool triplesMatch(const Triple &T0, const Triple &T1) { 1745 // If vendor is apple, ignore the version number. 1746 if (T0.getVendor() == Triple::Apple) 1747 return T0.getArch() == T1.getArch() && T0.getSubArch() == T1.getSubArch() && 1748 T0.getVendor() == T1.getVendor() && T0.getOS() == T1.getOS(); 1749 1750 return T0 == T1; 1751 } 1752 1753 // This function returns the merged triple. 1754 static std::string mergeTriples(const Triple &SrcTriple, 1755 const Triple &DstTriple) { 1756 // If vendor is apple, pick the triple with the larger version number. 1757 if (SrcTriple.getVendor() == Triple::Apple) 1758 if (DstTriple.isOSVersionLT(SrcTriple)) 1759 return SrcTriple.str(); 1760 1761 return DstTriple.str(); 1762 } 1763 1764 bool ModuleLinker::linkIfNeeded(GlobalValue &GV) { 1765 GlobalValue *DGV = getLinkedToGlobal(&GV); 1766 1767 if (shouldLinkOnlyNeeded() && !(DGV && DGV->isDeclaration())) 1768 return false; 1769 1770 if (DGV && !GV.hasLocalLinkage() && !GV.hasAppendingLinkage()) { 1771 auto *DGVar = dyn_cast<GlobalVariable>(DGV); 1772 auto *SGVar = dyn_cast<GlobalVariable>(&GV); 1773 if (DGVar && SGVar) { 1774 if (DGVar->isDeclaration() && SGVar->isDeclaration() && 1775 (!DGVar->isConstant() || !SGVar->isConstant())) { 1776 DGVar->setConstant(false); 1777 SGVar->setConstant(false); 1778 } 1779 if (DGVar->hasCommonLinkage() && SGVar->hasCommonLinkage()) { 1780 unsigned Align = std::max(DGVar->getAlignment(), SGVar->getAlignment()); 1781 SGVar->setAlignment(Align); 1782 DGVar->setAlignment(Align); 1783 } 1784 } 1785 1786 GlobalValue::VisibilityTypes Visibility = 1787 getMinVisibility(DGV->getVisibility(), GV.getVisibility()); 1788 DGV->setVisibility(Visibility); 1789 GV.setVisibility(Visibility); 1790 1791 bool HasUnnamedAddr = GV.hasUnnamedAddr() && DGV->hasUnnamedAddr(); 1792 DGV->setUnnamedAddr(HasUnnamedAddr); 1793 GV.setUnnamedAddr(HasUnnamedAddr); 1794 } 1795 1796 // Don't want to append to global_ctors list, for example, when we 1797 // are importing for ThinLTO, otherwise the global ctors and dtors 1798 // get executed multiple times for local variables (the latter causing 1799 // double frees). 1800 if (GV.hasAppendingLinkage() && isPerformingImport()) 1801 return false; 1802 1803 if (isPerformingImport() && !doImportAsDefinition(&GV)) 1804 return false; 1805 1806 if (!DGV && !shouldOverrideFromSrc() && 1807 (GV.hasLocalLinkage() || GV.hasLinkOnceLinkage() || 1808 GV.hasAvailableExternallyLinkage())) 1809 return false; 1810 1811 if (const Comdat *SC = GV.getComdat()) { 1812 bool LinkFromSrc; 1813 Comdat::SelectionKind SK; 1814 std::tie(SK, LinkFromSrc) = ComdatsChosen[SC]; 1815 if (LinkFromSrc) 1816 ValuesToLink.insert(&GV); 1817 return false; 1818 } 1819 1820 bool LinkFromSrc = true; 1821 if (DGV && shouldLinkFromSource(LinkFromSrc, *DGV, GV)) 1822 return true; 1823 if (LinkFromSrc) 1824 ValuesToLink.insert(&GV); 1825 return false; 1826 } 1827 1828 bool ModuleLinker::run() { 1829 // Inherit the target data from the source module if the destination module 1830 // doesn't have one already. 1831 if (DstM.getDataLayout().isDefault()) 1832 DstM.setDataLayout(SrcM.getDataLayout()); 1833 1834 if (SrcM.getDataLayout() != DstM.getDataLayout()) { 1835 emitWarning("Linking two modules of different data layouts: '" + 1836 SrcM.getModuleIdentifier() + "' is '" + 1837 SrcM.getDataLayoutStr() + "' whereas '" + 1838 DstM.getModuleIdentifier() + "' is '" + 1839 DstM.getDataLayoutStr() + "'\n"); 1840 } 1841 1842 // Copy the target triple from the source to dest if the dest's is empty. 1843 if (DstM.getTargetTriple().empty() && !SrcM.getTargetTriple().empty()) 1844 DstM.setTargetTriple(SrcM.getTargetTriple()); 1845 1846 Triple SrcTriple(SrcM.getTargetTriple()), DstTriple(DstM.getTargetTriple()); 1847 1848 if (!SrcM.getTargetTriple().empty() && !triplesMatch(SrcTriple, DstTriple)) 1849 emitWarning("Linking two modules of different target triples: " + 1850 SrcM.getModuleIdentifier() + "' is '" + SrcM.getTargetTriple() + 1851 "' whereas '" + DstM.getModuleIdentifier() + "' is '" + 1852 DstM.getTargetTriple() + "'\n"); 1853 1854 DstM.setTargetTriple(mergeTriples(SrcTriple, DstTriple)); 1855 1856 // Append the module inline asm string. 1857 if (!SrcM.getModuleInlineAsm().empty()) { 1858 if (DstM.getModuleInlineAsm().empty()) 1859 DstM.setModuleInlineAsm(SrcM.getModuleInlineAsm()); 1860 else 1861 DstM.setModuleInlineAsm(DstM.getModuleInlineAsm() + "\n" + 1862 SrcM.getModuleInlineAsm()); 1863 } 1864 1865 // Loop over all of the linked values to compute type mappings. 1866 computeTypeMapping(); 1867 1868 ComdatsChosen.clear(); 1869 for (const auto &SMEC : SrcM.getComdatSymbolTable()) { 1870 const Comdat &C = SMEC.getValue(); 1871 if (ComdatsChosen.count(&C)) 1872 continue; 1873 Comdat::SelectionKind SK; 1874 bool LinkFromSrc; 1875 if (getComdatResult(&C, SK, LinkFromSrc)) 1876 return true; 1877 ComdatsChosen[&C] = std::make_pair(SK, LinkFromSrc); 1878 } 1879 1880 // Upgrade mismatched global arrays. 1881 upgradeMismatchedGlobals(); 1882 1883 for (GlobalVariable &GV : SrcM.globals()) 1884 if (const Comdat *SC = GV.getComdat()) 1885 ComdatMembers[SC].push_back(&GV); 1886 1887 for (Function &SF : SrcM) 1888 if (const Comdat *SC = SF.getComdat()) 1889 ComdatMembers[SC].push_back(&SF); 1890 1891 for (GlobalAlias &GA : SrcM.aliases()) 1892 if (const Comdat *SC = GA.getComdat()) 1893 ComdatMembers[SC].push_back(&GA); 1894 1895 // Insert all of the globals in src into the DstM module... without linking 1896 // initializers (which could refer to functions not yet mapped over). 1897 for (GlobalVariable &GV : SrcM.globals()) 1898 if (linkIfNeeded(GV)) 1899 return true; 1900 1901 for (Function &SF : SrcM) 1902 if (linkIfNeeded(SF)) 1903 return true; 1904 1905 for (GlobalAlias &GA : SrcM.aliases()) 1906 if (linkIfNeeded(GA)) 1907 return true; 1908 1909 for (GlobalValue *GV : ValuesToLink) { 1910 MapValue(GV, ValueMap, RF_MoveDistinctMDs, &TypeMap, &ValMaterializer); 1911 if (HasError) 1912 return true; 1913 } 1914 1915 // Note that we are done linking global value bodies. This prevents 1916 // metadata linking from creating new references. 1917 DoneLinkingBodies = true; 1918 1919 // Remap all of the named MDNodes in Src into the DstM module. We do this 1920 // after linking GlobalValues so that MDNodes that reference GlobalValues 1921 // are properly remapped. 1922 linkNamedMDNodes(); 1923 1924 // Merge the module flags into the DstM module. 1925 if (linkModuleFlagsMetadata()) 1926 return true; 1927 1928 return false; 1929 } 1930 1931 Linker::StructTypeKeyInfo::KeyTy::KeyTy(ArrayRef<Type *> E, bool P) 1932 : ETypes(E), IsPacked(P) {} 1933 1934 Linker::StructTypeKeyInfo::KeyTy::KeyTy(const StructType *ST) 1935 : ETypes(ST->elements()), IsPacked(ST->isPacked()) {} 1936 1937 bool Linker::StructTypeKeyInfo::KeyTy::operator==(const KeyTy &That) const { 1938 if (IsPacked != That.IsPacked) 1939 return false; 1940 if (ETypes != That.ETypes) 1941 return false; 1942 return true; 1943 } 1944 1945 bool Linker::StructTypeKeyInfo::KeyTy::operator!=(const KeyTy &That) const { 1946 return !this->operator==(That); 1947 } 1948 1949 StructType *Linker::StructTypeKeyInfo::getEmptyKey() { 1950 return DenseMapInfo<StructType *>::getEmptyKey(); 1951 } 1952 1953 StructType *Linker::StructTypeKeyInfo::getTombstoneKey() { 1954 return DenseMapInfo<StructType *>::getTombstoneKey(); 1955 } 1956 1957 unsigned Linker::StructTypeKeyInfo::getHashValue(const KeyTy &Key) { 1958 return hash_combine(hash_combine_range(Key.ETypes.begin(), Key.ETypes.end()), 1959 Key.IsPacked); 1960 } 1961 1962 unsigned Linker::StructTypeKeyInfo::getHashValue(const StructType *ST) { 1963 return getHashValue(KeyTy(ST)); 1964 } 1965 1966 bool Linker::StructTypeKeyInfo::isEqual(const KeyTy &LHS, 1967 const StructType *RHS) { 1968 if (RHS == getEmptyKey() || RHS == getTombstoneKey()) 1969 return false; 1970 return LHS == KeyTy(RHS); 1971 } 1972 1973 bool Linker::StructTypeKeyInfo::isEqual(const StructType *LHS, 1974 const StructType *RHS) { 1975 if (RHS == getEmptyKey()) 1976 return LHS == getEmptyKey(); 1977 1978 if (RHS == getTombstoneKey()) 1979 return LHS == getTombstoneKey(); 1980 1981 return KeyTy(LHS) == KeyTy(RHS); 1982 } 1983 1984 void Linker::IdentifiedStructTypeSet::addNonOpaque(StructType *Ty) { 1985 assert(!Ty->isOpaque()); 1986 NonOpaqueStructTypes.insert(Ty); 1987 } 1988 1989 void Linker::IdentifiedStructTypeSet::switchToNonOpaque(StructType *Ty) { 1990 assert(!Ty->isOpaque()); 1991 NonOpaqueStructTypes.insert(Ty); 1992 bool Removed = OpaqueStructTypes.erase(Ty); 1993 (void)Removed; 1994 assert(Removed); 1995 } 1996 1997 void Linker::IdentifiedStructTypeSet::addOpaque(StructType *Ty) { 1998 assert(Ty->isOpaque()); 1999 OpaqueStructTypes.insert(Ty); 2000 } 2001 2002 StructType * 2003 Linker::IdentifiedStructTypeSet::findNonOpaque(ArrayRef<Type *> ETypes, 2004 bool IsPacked) { 2005 Linker::StructTypeKeyInfo::KeyTy Key(ETypes, IsPacked); 2006 auto I = NonOpaqueStructTypes.find_as(Key); 2007 if (I == NonOpaqueStructTypes.end()) 2008 return nullptr; 2009 return *I; 2010 } 2011 2012 bool Linker::IdentifiedStructTypeSet::hasType(StructType *Ty) { 2013 if (Ty->isOpaque()) 2014 return OpaqueStructTypes.count(Ty); 2015 auto I = NonOpaqueStructTypes.find(Ty); 2016 if (I == NonOpaqueStructTypes.end()) 2017 return false; 2018 return *I == Ty; 2019 } 2020 2021 Linker::Linker(Module &M, DiagnosticHandlerFunction DiagnosticHandler) 2022 : Composite(M), DiagnosticHandler(DiagnosticHandler) { 2023 TypeFinder StructTypes; 2024 StructTypes.run(M, true); 2025 for (StructType *Ty : StructTypes) { 2026 if (Ty->isOpaque()) 2027 IdentifiedStructTypes.addOpaque(Ty); 2028 else 2029 IdentifiedStructTypes.addNonOpaque(Ty); 2030 } 2031 } 2032 2033 bool Linker::linkInModule(Module &Src, unsigned Flags, 2034 const FunctionInfoIndex *Index, 2035 DenseSet<const GlobalValue *> *FunctionsToImport) { 2036 ModuleLinker TheLinker(Composite, IdentifiedStructTypes, Src, 2037 DiagnosticHandler, Flags, Index, FunctionsToImport); 2038 bool RetCode = TheLinker.run(); 2039 Composite.dropTriviallyDeadConstantArrays(); 2040 return RetCode; 2041 } 2042 2043 //===----------------------------------------------------------------------===// 2044 // LinkModules entrypoint. 2045 //===----------------------------------------------------------------------===// 2046 2047 /// This function links two modules together, with the resulting Dest module 2048 /// modified to be the composite of the two input modules. If an error occurs, 2049 /// true is returned and ErrorMsg (if not null) is set to indicate the problem. 2050 /// Upon failure, the Dest module could be in a modified state, and shouldn't be 2051 /// relied on to be consistent. 2052 bool Linker::linkModules(Module &Dest, Module &Src, 2053 DiagnosticHandlerFunction DiagnosticHandler, 2054 unsigned Flags) { 2055 Linker L(Dest, DiagnosticHandler); 2056 return L.linkInModule(Src, Flags); 2057 } 2058 2059 std::unique_ptr<Module> 2060 llvm::renameModuleForThinLTO(std::unique_ptr<Module> &M, 2061 const FunctionInfoIndex *Index, 2062 DiagnosticHandlerFunction DiagnosticHandler) { 2063 std::unique_ptr<llvm::Module> RenamedModule( 2064 new llvm::Module(M->getModuleIdentifier(), M->getContext())); 2065 Linker L(*RenamedModule.get(), DiagnosticHandler); 2066 if (L.linkInModule(*M.get(), llvm::Linker::Flags::None, Index)) 2067 return nullptr; 2068 return RenamedModule; 2069 } 2070 2071 //===----------------------------------------------------------------------===// 2072 // C API. 2073 //===----------------------------------------------------------------------===// 2074 2075 LLVMBool LLVMLinkModules(LLVMModuleRef Dest, LLVMModuleRef Src, 2076 LLVMLinkerMode Unused, char **OutMessages) { 2077 Module *D = unwrap(Dest); 2078 std::string Message; 2079 raw_string_ostream Stream(Message); 2080 DiagnosticPrinterRawOStream DP(Stream); 2081 2082 LLVMBool Result = Linker::linkModules( 2083 *D, *unwrap(Src), [&](const DiagnosticInfo &DI) { DI.print(DP); }); 2084 2085 if (OutMessages && Result) { 2086 Stream.flush(); 2087 *OutMessages = strdup(Message.c_str()); 2088 } 2089 return Result; 2090 } 2091