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