LinkModules.cpp revision 58890d52eb6f9ba44e70c8fc651201f1d429489e
1c834bbf55832c45f90b1163f920472fefbf77bc1Mikhail Glushenkov//===- lib/Linker/LinkModules.cpp - Module Linker Implementation ----------===// 2f976c856fcc5055f3fc7d9f070d72c2d027c1d9dMisha Brukman// 3b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell// The LLVM Compiler Infrastructure 4b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell// 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details. 7f976c856fcc5055f3fc7d9f070d72c2d027c1d9dMisha Brukman// 8b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//===----------------------------------------------------------------------===// 952f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner// 1052f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner// This file implements the LLVM module linker. 1152f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner// 1252f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner//===----------------------------------------------------------------------===// 1352f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner 147cc371a7958c7a049c679a59023c3c8c83f6cc83Reid Spencer#include "llvm/Linker.h" 15d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm-c/Linker.h" 16d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling#include "llvm/ADT/DenseSet.h" 173ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola#include "llvm/ADT/Optional.h" 18d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling#include "llvm/ADT/SetVector.h" 19d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling#include "llvm/ADT/SmallPtrSet.h" 2058890d52eb6f9ba44e70c8fc651201f1d429489eEli Bendersky#include "llvm/ADT/SmallString.h" 210b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/Constants.h" 220b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/DerivedTypes.h" 230b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/Instructions.h" 240b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/Module.h" 254068e1af9ff68b6b5fdb3233f1304e53f1bf179aChandler Carruth#include "llvm/IR/TypeFinder.h" 26cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling#include "llvm/Support/Debug.h" 27cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling#include "llvm/Support/raw_ostream.h" 28f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner#include "llvm/Transforms/Utils/Cloning.h" 2905ea54e8869a81b8dd846397175f218f97968907Dan Gohman#include "llvm/Transforms/Utils/ValueMapper.h" 300aaf2f63699f4c99a940abf81c4c9d912fa54356Duncan Sands#include <cctype> 31f7703df4968084c18c248c1feea9961c19a32e6aChris Lattnerusing namespace llvm; 32d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke 331afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner//===----------------------------------------------------------------------===// 341afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner// TypeMap implementation. 351afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner//===----------------------------------------------------------------------===// 364c00e53b81de81ecf4ba0c4e287ea230c79e82aeChris Lattner 3762a81a1eba019ab570b002f8e1686494139785a1Chris Lattnernamespace { 381afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerclass TypeMapTy : public ValueMapTypeRemapper { 391afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// MappedTypes - This is a mapping from a source type to a destination type 401afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// to use. 411afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DenseMap<Type*, Type*> MappedTypes; 421afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 431afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// SpeculativeTypes - When checking to see if two subgraphs are isomorphic, 441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// we speculatively add types to MappedTypes, but keep track of them here in 451afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// case we need to roll back. 461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SmallVector<Type*, 16> SpeculativeTypes; 471afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4868910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner /// SrcDefinitionsToResolve - This is a list of non-opaque structs in the 4968910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner /// source module that are mapped to an opaque struct in the destination 5068910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner /// module. 5168910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner SmallVector<StructType*, 16> SrcDefinitionsToResolve; 5268910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner 5368910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner /// DstResolvedOpaqueTypes - This is the set of opaque types in the 5468910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner /// destination modules who are getting a body from the source module. 5568910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner SmallPtrSet<StructType*, 16> DstResolvedOpaqueTypes; 566d6c6d7d2ce42af78ffa4e84a30f14e4404f5985Bill Wendling 57fc196f9ee909ac35837f6f771a42aa0dec817584Chris Lattnerpublic: 581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// addTypeMapping - Indicate that the specified type in the destination 591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// module is conceptually equivalent to the specified type in the source 601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// module. 611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void addTypeMapping(Type *DstTy, Type *SrcTy); 621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// linkDefinedTypeBodies - Produce a body for an opaque type in the dest 641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// module from a type definition in the source module. 651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void linkDefinedTypeBodies(); 661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// get - Return the mapped type to use for the specified input type from the 681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// source module. 691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *get(Type *SrcTy); 701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 711afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner FunctionType *get(FunctionType *T) {return cast<FunctionType>(get((Type*)T));} 721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 73cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling /// dump - Dump out the type map for debugging purposes. 74cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling void dump() const { 75cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling for (DenseMap<Type*, Type*>::const_iterator 76cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling I = MappedTypes.begin(), E = MappedTypes.end(); I != E; ++I) { 77cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling dbgs() << "TypeMap: "; 78cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling I->first->dump(); 79cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling dbgs() << " => "; 80cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling I->second->dump(); 81cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling dbgs() << '\n'; 82cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling } 83cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling } 84cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling 851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerprivate: 861afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *getImpl(Type *T); 871afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// remapType - Implement the ValueMapTypeRemapper interface. 881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *remapType(Type *SrcTy) { 891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return get(SrcTy); 9062a81a1eba019ab570b002f8e1686494139785a1Chris Lattner } 911afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool areTypesIsomorphic(Type *DstTy, Type *SrcTy); 931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner}; 941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 95eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 961afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid TypeMapTy::addTypeMapping(Type *DstTy, Type *SrcTy) { 971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *&Entry = MappedTypes[SrcTy]; 981afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (Entry) return; 991afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1001afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstTy == SrcTy) { 1011afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Entry = DstTy; 1021afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return; 10362a81a1eba019ab570b002f8e1686494139785a1Chris Lattner } 104601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 1051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Check to see if these types are recursively isomorphic and establish a 1061afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // mapping between them if so. 107601c094734cc5920a4e937c74447dd6922770a2dBill Wendling if (!areTypesIsomorphic(DstTy, SrcTy)) { 1081afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Oops, they aren't isomorphic. Just discard this request by rolling out 1091afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // any speculative mappings we've established. 1101afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (unsigned i = 0, e = SpeculativeTypes.size(); i != e; ++i) 1111afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner MappedTypes.erase(SpeculativeTypes[i]); 112601c094734cc5920a4e937c74447dd6922770a2dBill Wendling } 1131afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SpeculativeTypes.clear(); 11462a81a1eba019ab570b002f8e1686494139785a1Chris Lattner} 11562a81a1eba019ab570b002f8e1686494139785a1Chris Lattner 1161afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// areTypesIsomorphic - Recursively walk this pair of types, returning true 1171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// if they are isomorphic, false if they are not. 1181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool TypeMapTy::areTypesIsomorphic(Type *DstTy, Type *SrcTy) { 1191afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Two types with differing kinds are clearly not isomorphic. 1201afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstTy->getTypeID() != SrcTy->getTypeID()) return false; 1211afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1221afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If we have an entry in the MappedTypes table, then we have our answer. 1231afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *&Entry = MappedTypes[SrcTy]; 1241afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (Entry) 1251afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return Entry == DstTy; 1261afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1271afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Two identical types are clearly isomorphic. Remember this 1281afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // non-speculatively. 1291afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstTy == SrcTy) { 1301afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Entry = DstTy; 13156539659eb1b192d493aa333b60213889129b9f1Chris Lattner return true; 132e76c57ad467ed57f09f2a3ef51628d4b6eb2b304Chris Lattner } 133601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 1341afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Okay, we have two types with identical kinds that we haven't seen before. 1351afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1361afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If this is an opaque struct type, special case it. 1371afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (StructType *SSTy = dyn_cast<StructType>(SrcTy)) { 1381afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Mapping an opaque type to any struct, just keep the dest struct. 1391afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (SSTy->isOpaque()) { 1401afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Entry = DstTy; 1411afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SpeculativeTypes.push_back(SrcTy); 142f6f4f7a149e2864cc0441afcbed5fd99ff4b9587Chris Lattner return true; 1431afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 144eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 14568910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // Mapping a non-opaque source type to an opaque dest. If this is the first 14668910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // type that we're mapping onto this destination type then we succeed. Keep 14768910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // the dest, but fill it in later. This doesn't need to be speculative. If 14868910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // this is the second (different) type that we're trying to map onto the 14968910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // same opaque type then we fail. 1501afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (cast<StructType>(DstTy)->isOpaque()) { 15168910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // We can only map one source type onto the opaque destination type. 15268910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner if (!DstResolvedOpaqueTypes.insert(cast<StructType>(DstTy))) 15368910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner return false; 15468910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner SrcDefinitionsToResolve.push_back(SSTy); 1551afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Entry = DstTy; 1561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 157a4477f9b31ce0b6fadc5365ff9355679c1ecb954Chris Lattner } 158e3092c94ad2e3af96f37a0a8186149acbbd9700aChris Lattner } 1591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If the number of subtypes disagree between the two types, then we fail. 1611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (SrcTy->getNumContainedTypes() != DstTy->getNumContainedTypes()) 1621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 1631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Fail if any of the extra properties (e.g. array size) of the type disagree. 1651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (isa<IntegerType>(DstTy)) 1661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; // bitwidth disagrees. 1671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (PointerType *PT = dyn_cast<PointerType>(DstTy)) { 1681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (PT->getAddressSpace() != cast<PointerType>(SrcTy)->getAddressSpace()) 1691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 1701a31f3b90c012b067f8509546e1e037051e6482dChris Lattner 1711afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } else if (FunctionType *FT = dyn_cast<FunctionType>(DstTy)) { 1721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (FT->isVarArg() != cast<FunctionType>(SrcTy)->isVarArg()) 1731afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 1741afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } else if (StructType *DSTy = dyn_cast<StructType>(DstTy)) { 1751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner StructType *SSTy = cast<StructType>(SrcTy); 1761bcbf8582e94eee6f151e5e2db2d04f417abf5f7Chris Lattner if (DSTy->isLiteral() != SSTy->isLiteral() || 1771afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DSTy->isPacked() != SSTy->isPacked()) 1781afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 1791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } else if (ArrayType *DATy = dyn_cast<ArrayType>(DstTy)) { 1801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DATy->getNumElements() != cast<ArrayType>(SrcTy)->getNumElements()) 1811afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 1821afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } else if (VectorType *DVTy = dyn_cast<VectorType>(DstTy)) { 1832b8f6ae6b791099ceff8ad87bcca7f165655c5c7Joey Gouly if (DVTy->getNumElements() != cast<VectorType>(SrcTy)->getNumElements()) 1841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 185f6f4f7a149e2864cc0441afcbed5fd99ff4b9587Chris Lattner } 186eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 1871afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Otherwise, we speculate that these two types will line up and recursively 1881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // check the subelements. 1891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Entry = DstTy; 1901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SpeculativeTypes.push_back(SrcTy); 1911afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 192601c094734cc5920a4e937c74447dd6922770a2dBill Wendling for (unsigned i = 0, e = SrcTy->getNumContainedTypes(); i != e; ++i) 193601c094734cc5920a4e937c74447dd6922770a2dBill Wendling if (!areTypesIsomorphic(DstTy->getContainedType(i), 194601c094734cc5920a4e937c74447dd6922770a2dBill Wendling SrcTy->getContainedType(i))) 1951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 1961afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If everything seems to have lined up, then everything is great. 1981afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 1991afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 200eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 2011afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// linkDefinedTypeBodies - Produce a body for an opaque type in the dest 2021afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// module from a type definition in the source module. 2031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid TypeMapTy::linkDefinedTypeBodies() { 2041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SmallVector<Type*, 16> Elements; 2051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SmallString<16> TmpName; 2061afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2071afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Note that processing entries in this loop (calling 'get') can add new 20868910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // entries to the SrcDefinitionsToResolve vector. 20968910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner while (!SrcDefinitionsToResolve.empty()) { 21068910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner StructType *SrcSTy = SrcDefinitionsToResolve.pop_back_val(); 2111afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner StructType *DstSTy = cast<StructType>(MappedTypes[SrcSTy]); 2121afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2131afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // TypeMap is a many-to-one mapping, if there were multiple types that 2141afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // provide a body for DstSTy then previous iterations of this loop may have 2151afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // already handled it. Just ignore this case. 2161afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!DstSTy->isOpaque()) continue; 2171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner assert(!SrcSTy->isOpaque() && "Not resolving a definition?"); 2181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2191afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Map the body of the source type over to a new body for the dest type. 2201afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Elements.resize(SrcSTy->getNumElements()); 2211afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (unsigned i = 0, e = Elements.size(); i != e; ++i) 2221afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Elements[i] = getImpl(SrcSTy->getElementType(i)); 2231afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2241afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstSTy->setBody(Elements, SrcSTy->isPacked()); 2251afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2261afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If DstSTy has no name or has a longer name than STy, then viciously steal 2271afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // STy's name. 2281afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcSTy->hasName()) continue; 2291afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner StringRef SrcName = SrcSTy->getName(); 2301afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2311afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!DstSTy->hasName() || DstSTy->getName().size() > SrcName.size()) { 2321afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TmpName.insert(TmpName.end(), SrcName.begin(), SrcName.end()); 2331afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SrcSTy->setName(""); 2341afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstSTy->setName(TmpName.str()); 2351afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TmpName.clear(); 2361afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 237f976c856fcc5055f3fc7d9f070d72c2d027c1d9dMisha Brukman } 23868910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner 23968910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner DstResolvedOpaqueTypes.clear(); 240e76c57ad467ed57f09f2a3ef51628d4b6eb2b304Chris Lattner} 241e76c57ad467ed57f09f2a3ef51628d4b6eb2b304Chris Lattner 2421afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// get - Return the mapped type to use for the specified input type from the 2431afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// source module. 2441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris LattnerType *TypeMapTy::get(Type *Ty) { 2451afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *Result = getImpl(Ty); 2461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2471afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If this caused a reference to any struct type, resolve it before returning. 24868910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner if (!SrcDefinitionsToResolve.empty()) 2491afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner linkDefinedTypeBodies(); 2501afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return Result; 2511afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 252e76c57ad467ed57f09f2a3ef51628d4b6eb2b304Chris Lattner 2531afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// getImpl - This is the recursive version of get(). 2541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris LattnerType *TypeMapTy::getImpl(Type *Ty) { 2551afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If we already have an entry for this type, return it. 2561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type **Entry = &MappedTypes[Ty]; 2571afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (*Entry) return *Entry; 258601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 2591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If this is not a named struct type, then just map all of the elements and 2601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // then rebuild the type from inside out. 2611bcbf8582e94eee6f151e5e2db2d04f417abf5f7Chris Lattner if (!isa<StructType>(Ty) || cast<StructType>(Ty)->isLiteral()) { 2621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If there are no element types to map, then the type is itself. This is 2631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // true for the anonymous {} struct, things like 'float', integers, etc. 2641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (Ty->getNumContainedTypes() == 0) 2651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = Ty; 2661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Remap all of the elements, keeping track of whether any of them change. 2681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool AnyChange = false; 2691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SmallVector<Type*, 4> ElementTypes; 2701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ElementTypes.resize(Ty->getNumContainedTypes()); 2711afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (unsigned i = 0, e = Ty->getNumContainedTypes(); i != e; ++i) { 2721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ElementTypes[i] = getImpl(Ty->getContainedType(i)); 2731afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AnyChange |= ElementTypes[i] != Ty->getContainedType(i); 2741afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 2751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2761afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If we found our type while recursively processing stuff, just use it. 2771afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Entry = &MappedTypes[Ty]; 2781afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (*Entry) return *Entry; 2791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If all of the element types mapped directly over, then the type is usable 2811afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // as-is. 2821afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!AnyChange) 2831afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = Ty; 2841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Otherwise, rebuild a modified type. 2861afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner switch (Ty->getTypeID()) { 287858143816d43e58b17bfd11cb1b57afbd7f0f893Craig Topper default: llvm_unreachable("unknown derived type to remap"); 2881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner case Type::ArrayTyID: 2891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = ArrayType::get(ElementTypes[0], 2901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner cast<ArrayType>(Ty)->getNumElements()); 2911afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner case Type::VectorTyID: 2921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = VectorType::get(ElementTypes[0], 2931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner cast<VectorType>(Ty)->getNumElements()); 2941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner case Type::PointerTyID: 2951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = PointerType::get(ElementTypes[0], 2961afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner cast<PointerType>(Ty)->getAddressSpace()); 2971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner case Type::FunctionTyID: 2981afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = FunctionType::get(ElementTypes[0], 29939b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel makeArrayRef(ElementTypes).slice(1), 3001afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner cast<FunctionType>(Ty)->isVarArg()); 3011afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner case Type::StructTyID: 3021afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Note that this is only reached for anonymous structs. 3031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = StructType::get(Ty->getContext(), ElementTypes, 3041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner cast<StructType>(Ty)->isPacked()); 3054c00e53b81de81ecf4ba0c4e287ea230c79e82aeChris Lattner } 3064c00e53b81de81ecf4ba0c4e287ea230c79e82aeChris Lattner } 3074c00e53b81de81ecf4ba0c4e287ea230c79e82aeChris Lattner 3081afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Otherwise, this is an unmapped named struct. If the struct can be directly 3091afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // mapped over, just use it as-is. This happens in a case when the linked-in 3101afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // module has something like: 3111afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // %T = type {%T*, i32} 3121afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // @GV = global %T* null 3131afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // where T does not exist at all in the destination module. 3141afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // 3151afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // The other case we watch for is when the type is not in the destination 3161afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // module, but that it has to be rebuilt because it refers to something that 3171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // is already mapped. For example, if the destination module has: 3181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // %A = type { i32 } 3191afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // and the source module has something like 3201afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // %A' = type { i32 } 3211afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // %B = type { %A'* } 3221afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // @GV = global %B* null 3231afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // then we want to create a new type: "%B = type { %A*}" and have it take the 3241afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // pristine "%B" name from the source module. 3251afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // 3261afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // To determine which case this is, we have to recursively walk the type graph 3271afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // speculating that we'll be able to reuse it unmodified. Only if this is 3281afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // safe would we map the entire thing over. Because this is an optimization, 3291afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // and is not required for the prettiness of the linked module, we just skip 3301afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // it and always rebuild a type here. 3311afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner StructType *STy = cast<StructType>(Ty); 3321afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3331afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If the type is opaque, we can just use it directly. 3341afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (STy->isOpaque()) 3351afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = STy; 336601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 3371afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Otherwise we create a new type and resolve its body later. This will be 3381afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // resolved by the top level of get(). 33968910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner SrcDefinitionsToResolve.push_back(STy); 34068910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner StructType *DTy = StructType::create(STy->getContext()); 34168910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner DstResolvedOpaqueTypes.insert(DTy); 34268910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner return *Entry = DTy; 3431afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 3442f6bb2bce13084dfc4c8acf47f9eae0578267aaaChris Lattner 3451afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner//===----------------------------------------------------------------------===// 3461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner// ModuleLinker implementation. 3471afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner//===----------------------------------------------------------------------===// 3484c00e53b81de81ecf4ba0c4e287ea230c79e82aeChris Lattner 3491afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnernamespace { 3501afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// ModuleLinker - This is an implementation class for the LinkModules 3511afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// function, which is the entrypoint for this file. 3521afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner class ModuleLinker { 3531afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Module *DstM, *SrcM; 3541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3551afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TypeMapTy TypeMap; 3561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3571afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// ValueMap - Mapping of values from what they used to be in Src, to what 3581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// they are now in DstM. ValueToValueMapTy is a ValueMap, which involves 3591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// some overhead due to the use of Value handles which the Linker doesn't 3601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// actually need, but this allows us to reuse the ValueMapper code. 3611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueToValueMapTy ValueMap; 3621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner struct AppendingVarInfo { 3641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalVariable *NewGV; // New aggregate global in dest module. 3651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Constant *DstInit; // Old initializer from dest module. 3661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Constant *SrcInit; // Old initializer from src module. 3671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner }; 3681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner std::vector<AppendingVarInfo> AppendingVars; 3701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 371f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner unsigned Mode; // Mode to treat source module. 372f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 373f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Set of items not to link in from source. 374f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner SmallPtrSet<const Value*, 16> DoNotLinkFromSource; 375f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 3769af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Vector of functions to lazily link in. 3779af37a3de8c8688adae383471379f0216287ce28Tanya Lattner std::vector<Function*> LazilyLinkFunctions; 3789af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 3791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner public: 3801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner std::string ErrorMsg; 3811afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 382f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner ModuleLinker(Module *dstM, Module *srcM, unsigned mode) 383f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner : DstM(dstM), SrcM(srcM), Mode(mode) { } 3841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool run(); 3861afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3871afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner private: 3881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// emitError - Helper method for setting a message and returning an error 3891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// code. 3901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool emitError(const Twine &Message) { 3911afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ErrorMsg = Message.str(); 3921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 3931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 3941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// getLinkageResult - This analyzes the two global values and determines 3961afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// what the result will look like in the destination module. 3971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool getLinkageResult(GlobalValue *Dest, const GlobalValue *Src, 3983ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::LinkageTypes <, 3993ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::VisibilityTypes &Vis, 4003ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola bool &LinkFromSrc); 4011afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4021afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// getLinkedToGlobal - Given a global in the source module, return the 4031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// global in the destination module that is being linked to, if any. 4041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue *getLinkedToGlobal(GlobalValue *SrcGV) { 4051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If the source has no name it can't link. If it has local linkage, 4061afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // there is no name match-up going on. 4071afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcGV->hasName() || SrcGV->hasLocalLinkage()) 4081afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return 0; 409601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 4101afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Otherwise see if we have a match in the destination module's symtab. 4111afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue *DGV = DstM->getNamedValue(SrcGV->getName()); 4121afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV == 0) return 0; 413601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 4141afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If we found a global with the same name in the dest module, but it has 4151afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // internal linkage, we are really not doing any linkage here. 4161afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV->hasLocalLinkage()) 4171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return 0; 4181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4191afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Otherwise, we do in fact link to the destination global. 4201afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return DGV; 4211afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 4221afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4231afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void computeTypeMapping(); 4241afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4251afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool linkAppendingVarProto(GlobalVariable *DstGV, GlobalVariable *SrcGV); 4261afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool linkGlobalProto(GlobalVariable *SrcGV); 4271afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool linkFunctionProto(Function *SrcF); 4281afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool linkAliasProto(GlobalAlias *SrcA); 429d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling bool linkModuleFlagsMetadata(); 4301afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4311afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void linkAppendingVarInit(const AppendingVarInfo &AVI); 4321afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void linkGlobalInits(); 4331afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void linkFunctionBody(Function *Dst, Function *Src); 4341afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void linkAliasBodies(); 4351afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void linkNamedMDNodes(); 4361afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner }; 437601c094734cc5920a4e937c74447dd6922770a2dBill Wendling} 438601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 4391afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// forceRenaming - The LLVM SymbolTable class autorenames globals that conflict 4408bef0373f1b8fab20b9acd277377ca01d72bac7eReid Spencer/// in the symbol table. This is good for all clients except for us. Go 4418bef0373f1b8fab20b9acd277377ca01d72bac7eReid Spencer/// through the trouble to force this back. 4421afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerstatic void forceRenaming(GlobalValue *GV, StringRef Name) { 4431afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If the global doesn't force its name or if it already has the right name, 4441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // there is nothing for us to do. 4451afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (GV->hasLocalLinkage() || GV->getName() == Name) 4461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return; 4471afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4481afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Module *M = GV->getParent(); 449c003628a612d3687fb77088a5894314210a65385Chris Lattner 450c003628a612d3687fb77088a5894314210a65385Chris Lattner // If there is a conflict, rename the conflict. 4511afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (GlobalValue *ConflictGV = M->getNamedValue(Name)) { 45233f294930e0affa51c3818405741abd80cc90316Chris Lattner GV->takeName(ConflictGV); 45333f294930e0affa51c3818405741abd80cc90316Chris Lattner ConflictGV->setName(Name); // This will cause ConflictGV to get renamed 4541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner assert(ConflictGV->getName() != Name && "forceRenaming didn't work"); 45533f294930e0affa51c3818405741abd80cc90316Chris Lattner } else { 45633f294930e0affa51c3818405741abd80cc90316Chris Lattner GV->setName(Name); // Force the name back 457ef9b9a793949469cdaa4ab6d0173136229dcab7bReid Spencer } 458ef9b9a793949469cdaa4ab6d0173136229dcab7bReid Spencer} 459ef9b9a793949469cdaa4ab6d0173136229dcab7bReid Spencer 460cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// copyGVAttributes - copy additional attributes (those not needed to construct 461eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov/// a GlobalValue) from the SrcGV to the DestGV. 462cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendlingstatic void copyGVAttributes(GlobalValue *DestGV, const GlobalValue *SrcGV) { 46328c3cff8250b3fe2adc6479306fe7dbdb48a1bdbDuncan Sands // Use the maximum alignment, rather than just copying the alignment of SrcGV. 46428c3cff8250b3fe2adc6479306fe7dbdb48a1bdbDuncan Sands unsigned Alignment = std::max(DestGV->getAlignment(), SrcGV->getAlignment()); 46528c3cff8250b3fe2adc6479306fe7dbdb48a1bdbDuncan Sands DestGV->copyAttributesFrom(SrcGV); 46628c3cff8250b3fe2adc6479306fe7dbdb48a1bdbDuncan Sands DestGV->setAlignment(Alignment); 4671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner forceRenaming(DestGV, SrcGV->getName()); 469c003628a612d3687fb77088a5894314210a65385Chris Lattner} 470c003628a612d3687fb77088a5894314210a65385Chris Lattner 4713ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindolastatic bool isLessConstraining(GlobalValue::VisibilityTypes a, 4723ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::VisibilityTypes b) { 4733ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (a == GlobalValue::HiddenVisibility) 4743ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola return false; 4753ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (b == GlobalValue::HiddenVisibility) 4763ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola return true; 4773ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (a == GlobalValue::ProtectedVisibility) 4783ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola return false; 4793ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (b == GlobalValue::ProtectedVisibility) 4803ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola return true; 4813ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola return false; 4823ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola} 4833ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 4841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// getLinkageResult - This analyzes the two global values and determines what 485aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner/// the result will look like in the destination module. In particular, it 4863ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola/// computes the resultant linkage type and visibility, computes whether the 4873ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola/// global in the source should be copied over to the destination (replacing 4883ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola/// the existing one), and computes whether this linkage is an error or not. 4891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool ModuleLinker::getLinkageResult(GlobalValue *Dest, const GlobalValue *Src, 4903ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::LinkageTypes <, 4913ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::VisibilityTypes &Vis, 4921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool &LinkFromSrc) { 4931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner assert(Dest && "Must have two globals being queried"); 4941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner assert(!Src->hasLocalLinkage() && 495aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner "If Src has internal linkage, Dest shouldn't be set!"); 4961afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4978895316d0489e2353c0dce289b49f5cdd41085d7Peter Collingbourne bool SrcIsDeclaration = Src->isDeclaration() && !Src->isMaterializable(); 498f84c59d1100af416a70e475eb25741e27f3bb832Chris Lattner bool DestIsDeclaration = Dest->isDeclaration(); 4991afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 5001afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (SrcIsDeclaration) { 5012b48ef0450944c2c46633aec9baf6be835a3b503Anton Korobeynikov // If Src is external or if both Src & Dest are external.. Just link the 502aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner // external globals, we aren't adding anything. 503b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov if (Src->hasDLLImportLinkage()) { 50478ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov // If one of GVs has DLLImport linkage, result should be dllimport'ed. 5051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DestIsDeclaration) { 506b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov LinkFromSrc = true; 507b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov LT = Src->getLinkage(); 508eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov } 5098753c447a5f8eec1421331c40ffbb72c6d411f78Andrew Lenharth } else if (Dest->hasExternalWeakLinkage()) { 510667d4b8de6dea70195ff12ef39a4deebffa2f5c7Duncan Sands // If the Dest is weak, use the source linkage. 5118753c447a5f8eec1421331c40ffbb72c6d411f78Andrew Lenharth LinkFromSrc = true; 5128753c447a5f8eec1421331c40ffbb72c6d411f78Andrew Lenharth LT = Src->getLinkage(); 513b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov } else { 514b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov LinkFromSrc = false; 515b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov LT = Dest->getLinkage(); 516b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov } 5171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } else if (DestIsDeclaration && !Dest->hasDLLImportLinkage()) { 518aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner // If Dest is external but Src is not: 519aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner LinkFromSrc = true; 520aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner LT = Src->getLinkage(); 521a05ef5e107943478ad02bc0cd5170a3894076bc4Duncan Sands } else if (Src->isWeakForLinker()) { 522aafce77b17d340aace52bcd49d1944109d82f14aDale Johannesen // At this point we know that Dest has LinkOnce, External*, Weak, Common, 523aafce77b17d340aace52bcd49d1944109d82f14aDale Johannesen // or DLL* linkage. 524266c7bbbbcc4b326dea82e577de1a415d6acc23eChris Lattner if (Dest->hasExternalWeakLinkage() || 525266c7bbbbcc4b326dea82e577de1a415d6acc23eChris Lattner Dest->hasAvailableExternallyLinkage() || 526266c7bbbbcc4b326dea82e577de1a415d6acc23eChris Lattner (Dest->hasLinkOnceLinkage() && 527266c7bbbbcc4b326dea82e577de1a415d6acc23eChris Lattner (Src->hasWeakLinkage() || Src->hasCommonLinkage()))) { 528aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner LinkFromSrc = true; 529aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner LT = Src->getLinkage(); 530aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner } else { 531aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner LinkFromSrc = false; 532aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner LT = Dest->getLinkage(); 533aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner } 534a05ef5e107943478ad02bc0cd5170a3894076bc4Duncan Sands } else if (Dest->isWeakForLinker()) { 53578ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov // At this point we know that Src has External* or DLL* linkage. 53678ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov if (Src->hasExternalWeakLinkage()) { 53778ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov LinkFromSrc = false; 53878ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov LT = Dest->getLinkage(); 53978ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov } else { 54078ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov LinkFromSrc = true; 54178ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov LT = GlobalValue::ExternalLinkage; 54278ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov } 543aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner } else { 5441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner assert((Dest->hasExternalLinkage() || Dest->hasDLLImportLinkage() || 5451afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Dest->hasDLLExportLinkage() || Dest->hasExternalWeakLinkage()) && 5461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner (Src->hasExternalLinkage() || Src->hasDLLImportLinkage() || 5471afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Src->hasDLLExportLinkage() || Src->hasExternalWeakLinkage()) && 548aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner "Unexpected linkage type!"); 5491afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError("Linking globals named '" + Src->getName() + 550aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner "': symbol multiply defined!"); 551aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner } 5529cd3ccf5065a8a139e458d016c88a8512471598bAnton Korobeynikov 5533ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola // Compute the visibility. We follow the rules in the System V Application 5543ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola // Binary Interface. 5553ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola Vis = isLessConstraining(Src->getVisibility(), Dest->getVisibility()) ? 5563ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola Dest->getVisibility() : Src->getVisibility(); 557aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner return false; 558aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner} 5595c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 5601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// computeTypeMapping - Loop over all of the linked values to compute type 5611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// mappings. For example, if we link "extern Foo *x" and "Foo *x = NULL", then 5621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// we have two struct types 'Foo' but one got renamed when the module was 5631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// loaded into the same LLVMContext. 5641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid ModuleLinker::computeTypeMapping() { 5651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Incorporate globals. 5661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::global_iterator I = SrcM->global_begin(), 5671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner E = SrcM->global_end(); I != E; ++I) { 5681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue *DGV = getLinkedToGlobal(I); 5691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV == 0) continue; 5701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 5711afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!DGV->hasAppendingLinkage() || !I->hasAppendingLinkage()) { 5721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TypeMap.addTypeMapping(DGV->getType(), I->getType()); 5731afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner continue; 5741afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 5751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 5761afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Unify the element type of appending arrays. 5771afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ArrayType *DAT = cast<ArrayType>(DGV->getType()->getElementType()); 5781afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ArrayType *SAT = cast<ArrayType>(I->getType()->getElementType()); 5791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TypeMap.addTypeMapping(DAT->getElementType(), SAT->getElementType()); 580ab67e705f59d567afded845465f358b8a66ab62eDevang Patel } 5811afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 5821afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Incorporate functions. 5831afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::iterator I = SrcM->begin(), E = SrcM->end(); I != E; ++I) { 5841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (GlobalValue *DGV = getLinkedToGlobal(I)) 5851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TypeMap.addTypeMapping(DGV->getType(), I->getType()); 5861afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 587c68d127b2c5a233c5e3f9dd59ca4ab335419d9ddBill Wendling 588601c094734cc5920a4e937c74447dd6922770a2dBill Wendling // Incorporate types by name, scanning all the types in the source module. 589601c094734cc5920a4e937c74447dd6922770a2dBill Wendling // At this point, the destination module may have a type "%foo = { i32 }" for 590348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling // example. When the source module got loaded into the same LLVMContext, if 591348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling // it had the same type, it would have been renamed to "%foo.42 = { i32 }". 592573e97326766359d3a9747eed7b7d47b6c33fa0fBill Wendling TypeFinder SrcStructTypes; 593573e97326766359d3a9747eed7b7d47b6c33fa0fBill Wendling SrcStructTypes.run(*SrcM, true); 594348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling SmallPtrSet<StructType*, 32> SrcStructTypesSet(SrcStructTypes.begin(), 595348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling SrcStructTypes.end()); 596a20689fd7e7fa095276491ff238f248339d28800Bill Wendling 597573e97326766359d3a9747eed7b7d47b6c33fa0fBill Wendling TypeFinder DstStructTypes; 598573e97326766359d3a9747eed7b7d47b6c33fa0fBill Wendling DstStructTypes.run(*DstM, true); 599a20689fd7e7fa095276491ff238f248339d28800Bill Wendling SmallPtrSet<StructType*, 32> DstStructTypesSet(DstStructTypes.begin(), 600a20689fd7e7fa095276491ff238f248339d28800Bill Wendling DstStructTypes.end()); 601a20689fd7e7fa095276491ff238f248339d28800Bill Wendling 602348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling for (unsigned i = 0, e = SrcStructTypes.size(); i != e; ++i) { 603348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling StructType *ST = SrcStructTypes[i]; 604348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling if (!ST->hasName()) continue; 605348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling 606348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling // Check to see if there is a dot in the name followed by a digit. 607601c094734cc5920a4e937c74447dd6922770a2dBill Wendling size_t DotPos = ST->getName().rfind('.'); 608601c094734cc5920a4e937c74447dd6922770a2dBill Wendling if (DotPos == 0 || DotPos == StringRef::npos || 60987d0b9ed1462705dd9bf1cb7f67d0bf03af776c8Guy Benyei ST->getName().back() == '.' || 61087d0b9ed1462705dd9bf1cb7f67d0bf03af776c8Guy Benyei !isdigit(static_cast<unsigned char>(ST->getName()[DotPos+1]))) 611601c094734cc5920a4e937c74447dd6922770a2dBill Wendling continue; 612348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling 613348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling // Check to see if the destination module has a struct with the prefix name. 614601c094734cc5920a4e937c74447dd6922770a2dBill Wendling if (StructType *DST = DstM->getTypeByName(ST->getName().substr(0, DotPos))) 615a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // Don't use it if this actually came from the source module. They're in 616a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // the same LLVMContext after all. Also don't use it unless the type is 617a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // actually used in the destination module. This can happen in situations 618a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // like this: 619a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // 620a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // Module A Module B 621a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // -------- -------- 622a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // %Z = type { %A } %B = type { %C.1 } 623a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // %A = type { %B.1, [7 x i8] } %C.1 = type { i8* } 624a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // %B.1 = type { %C } %A.2 = type { %B.3, [5 x i8] } 625a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // %C = type { i8* } %B.3 = type { %C.1 } 626a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // 627a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // When we link Module B with Module A, the '%B' in Module B is 628a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // used. However, that would then use '%C.1'. But when we process '%C.1', 629a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // we prefer to take the '%C' version. So we are then left with both 630a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // '%C.1' and '%C' being used for the same types. This leads to some 631a20689fd7e7fa095276491ff238f248339d28800Bill Wendling // variables using one type and some using the other. 632a20689fd7e7fa095276491ff238f248339d28800Bill Wendling if (!SrcStructTypesSet.count(DST) && DstStructTypesSet.count(DST)) 633348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling TypeMap.addTypeMapping(DST, ST); 634348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling } 635348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling 6361afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Don't bother incorporating aliases, they aren't generally typed well. 637601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 6381afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Now that we have discovered all of the type equivalences, get a body for 6391afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // any 'opaque' types in the dest module that are now resolved. 6401afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TypeMap.linkDefinedTypeBodies(); 641ab67e705f59d567afded845465f358b8a66ab62eDevang Patel} 642ab67e705f59d567afded845465f358b8a66ab62eDevang Patel 6431afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// linkAppendingVarProto - If there were any appending global variables, link 6441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// them together now. Return true on error. 6451afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool ModuleLinker::linkAppendingVarProto(GlobalVariable *DstGV, 6461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalVariable *SrcGV) { 647601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 6481afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcGV->hasAppendingLinkage() || !DstGV->hasAppendingLinkage()) 6491afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError("Linking globals named '" + SrcGV->getName() + 6501afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner "': can only link appending global with another appending global!"); 6511afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6521afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ArrayType *DstTy = cast<ArrayType>(DstGV->getType()->getElementType()); 6531afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ArrayType *SrcTy = 6541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner cast<ArrayType>(TypeMap.get(SrcGV->getType()->getElementType())); 6551afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *EltTy = DstTy->getElementType(); 6561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6571afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Check to see that they two arrays agree on type. 6581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (EltTy != SrcTy->getElementType()) 6591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError("Appending variables with different element types!"); 6601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstGV->isConstant() != SrcGV->isConstant()) 6611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError("Appending variables linked with different const'ness!"); 6621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstGV->getAlignment() != SrcGV->getAlignment()) 6641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError( 6651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner "Appending variables with different alignment need to be linked!"); 6661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstGV->getVisibility() != SrcGV->getVisibility()) 6681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError( 6691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner "Appending variables with different visibility need to be linked!"); 6701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6711afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstGV->getSection() != SrcGV->getSection()) 6721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError( 6731afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner "Appending variables with different section name need to be linked!"); 6741afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner uint64_t NewSize = DstTy->getNumElements() + SrcTy->getNumElements(); 6761afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ArrayType *NewType = ArrayType::get(EltTy, NewSize); 6771afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6781afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Create the new global variable. 6791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalVariable *NG = 6801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner new GlobalVariable(*DstGV->getParent(), NewType, SrcGV->isConstant(), 6811afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstGV->getLinkage(), /*init*/0, /*name*/"", DstGV, 682ce718ff9f42c7da092eaa01dd0242e8d5ba84713Hans Wennborg DstGV->getThreadLocalMode(), 6831afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstGV->getType()->getAddressSpace()); 6841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Propagate alignment, visibility and section info. 686cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling copyGVAttributes(NG, DstGV); 6871afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AppendingVarInfo AVI; 6891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AVI.NewGV = NG; 6901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AVI.DstInit = DstGV->getInitializer(); 6911afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AVI.SrcInit = SrcGV->getInitializer(); 6921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AppendingVars.push_back(AVI); 6931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Replace any uses of the two global variables with uses of the new 6951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // global. 6961afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SrcGV] = ConstantExpr::getBitCast(NG, TypeMap.get(SrcGV->getType())); 6971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6981afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstGV->replaceAllUsesWith(ConstantExpr::getBitCast(NG, DstGV->getType())); 6991afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstGV->eraseFromParent(); 7001afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 701f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Track the source variable so we don't try to link it. 702f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner DoNotLinkFromSource.insert(SrcGV); 703f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 7041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 7051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 7065c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 7071afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// linkGlobalProto - Loop through the global variables in the src module and 7081afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// merge them into the dest module. 7091afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool ModuleLinker::linkGlobalProto(GlobalVariable *SGV) { 7101afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue *DGV = getLinkedToGlobal(SGV); 7113ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola llvm::Optional<GlobalValue::VisibilityTypes> NewVisibility; 7121afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 7131afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV) { 7141afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Concatenation of appending linkage variables is magic and handled later. 7151afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV->hasAppendingLinkage() || SGV->hasAppendingLinkage()) 7161afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return linkAppendingVarProto(cast<GlobalVariable>(DGV), SGV); 7171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 7181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Determine whether linkage of these two globals follows the source 7191afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // module's definition or the destination module's definition. 720b324bd735ff5c99a52cd3c3f5d01c0e1398a2d3aChris Lattner GlobalValue::LinkageTypes NewLinkage = GlobalValue::InternalLinkage; 7213ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::VisibilityTypes NV; 722b324bd735ff5c99a52cd3c3f5d01c0e1398a2d3aChris Lattner bool LinkFromSrc = false; 7233ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (getLinkageResult(DGV, SGV, NewLinkage, NV, LinkFromSrc)) 724aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner return true; 7253ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola NewVisibility = NV; 7260fec08eb58dd9fffeb72c584aa61a59d71111c8dChris Lattner 7271afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If we're not linking from the source, then keep the definition that we 7281afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // have. 7291afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!LinkFromSrc) { 7301afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Special case for const propagation. 7311afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (GlobalVariable *DGVar = dyn_cast<GlobalVariable>(DGV)) 7321afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGVar->isDeclaration() && SGV->isConstant() && !DGVar->isConstant()) 7331afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGVar->setConstant(true); 7341afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 7353ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola // Set calculated linkage and visibility. 7361afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->setLinkage(NewLinkage); 7373ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola DGV->setVisibility(*NewVisibility); 7383ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 7396157e383c4a15ffb6e7f27cdb153daa9caa15ca5Chris Lattner // Make sure to remember this mapping. 7401afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SGV] = ConstantExpr::getBitCast(DGV,TypeMap.get(SGV->getType())); 7411afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 742f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Track the source global so that we don't attempt to copy it over when 743f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // processing global initializers. 744f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner DoNotLinkFromSource.insert(SGV); 745f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 7461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 7476157e383c4a15ffb6e7f27cdb153daa9caa15ca5Chris Lattner } 7485c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner } 7491afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 7501afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // No linking to be performed or linking from the source: simply create an 7511afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // identical version of the symbol over in the dest module... the 7521afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // initializer will be filled in later by LinkGlobalInits. 7531afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalVariable *NewDGV = 7541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner new GlobalVariable(*DstM, TypeMap.get(SGV->getType()->getElementType()), 7551afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SGV->isConstant(), SGV->getLinkage(), /*init*/0, 7561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SGV->getName(), /*insertbefore*/0, 757ce718ff9f42c7da092eaa01dd0242e8d5ba84713Hans Wennborg SGV->getThreadLocalMode(), 7581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SGV->getType()->getAddressSpace()); 7591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Propagate alignment, visibility and section info. 760cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling copyGVAttributes(NewDGV, SGV); 7613ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (NewVisibility) 7623ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola NewDGV->setVisibility(*NewVisibility); 7631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 7641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV) { 7651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->replaceAllUsesWith(ConstantExpr::getBitCast(NewDGV, DGV->getType())); 7661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->eraseFromParent(); 76758887bc59316bcaf0c0675a45ddecd6994f3fbc6Anton Korobeynikov } 7681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 7691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Make sure to remember this mapping. 7701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SGV] = NewDGV; 77131ed0fb804dd86fb15093e114701932119914400Lauro Ramos Venancio return false; 77231ed0fb804dd86fb15093e114701932119914400Lauro Ramos Venancio} 77331ed0fb804dd86fb15093e114701932119914400Lauro Ramos Venancio 7741afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// linkFunctionProto - Link the function in the source module into the 7751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// destination module if needed, setting up mapping information. 7761afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool ModuleLinker::linkFunctionProto(Function *SF) { 7771afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue *DGV = getLinkedToGlobal(SF); 7783ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola llvm::Optional<GlobalValue::VisibilityTypes> NewVisibility; 7795c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 7801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV) { 7811afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue::LinkageTypes NewLinkage = GlobalValue::InternalLinkage; 7821afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool LinkFromSrc = false; 7833ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::VisibilityTypes NV; 7843ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (getLinkageResult(DGV, SF, NewLinkage, NV, LinkFromSrc)) 7851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 7863ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola NewVisibility = NV; 7873ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 7881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!LinkFromSrc) { 7891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Set calculated linkage 7901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->setLinkage(NewLinkage); 7913ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola DGV->setVisibility(*NewVisibility); 7923ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 7931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Make sure to remember this mapping. 7941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SF] = ConstantExpr::getBitCast(DGV, TypeMap.get(SF->getType())); 7951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 796f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Track the function from the source module so we don't attempt to remap 797f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // it. 798f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner DoNotLinkFromSource.insert(SF); 799f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 8001afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 8018d2de8a82cce67513debee7a3fa5aca0189b4105Chris Lattner } 8028d2de8a82cce67513debee7a3fa5aca0189b4105Chris Lattner } 8031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If there is no linkage to be performed or we are linking from the source, 8051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // bring SF over. 8061afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Function *NewDF = Function::Create(TypeMap.get(SF->getFunctionType()), 8071afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SF->getLinkage(), SF->getName(), DstM); 808cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling copyGVAttributes(NewDF, SF); 8093ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (NewVisibility) 8103ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola NewDF->setVisibility(*NewVisibility); 8111afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8121afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV) { 8131afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Any uses of DF need to change to NewDF, with cast. 8141afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->replaceAllUsesWith(ConstantExpr::getBitCast(NewDF, DGV->getType())); 8151afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->eraseFromParent(); 8169af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } else { 8179af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Internal, LO_ODR, or LO linkage - stick in set to ignore and lazily link. 8189af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (SF->hasLocalLinkage() || SF->hasLinkOnceLinkage() || 8199af37a3de8c8688adae383471379f0216287ce28Tanya Lattner SF->hasAvailableExternallyLinkage()) { 8209af37a3de8c8688adae383471379f0216287ce28Tanya Lattner DoNotLinkFromSource.insert(SF); 8219af37a3de8c8688adae383471379f0216287ce28Tanya Lattner LazilyLinkFunctions.push_back(SF); 8229af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } 8231afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 8241afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8251afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SF] = NewDF; 8268d2de8a82cce67513debee7a3fa5aca0189b4105Chris Lattner return false; 8278d2de8a82cce67513debee7a3fa5aca0189b4105Chris Lattner} 8285c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 8291afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// LinkAliasProto - Set up prototypes for any aliases that come over from the 8301afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// source module. 8311afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool ModuleLinker::linkAliasProto(GlobalAlias *SGA) { 8321afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue *DGV = getLinkedToGlobal(SGA); 8333ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola llvm::Optional<GlobalValue::VisibilityTypes> NewVisibility; 8343ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 8351afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV) { 8366157e383c4a15ffb6e7f27cdb153daa9caa15ca5Chris Lattner GlobalValue::LinkageTypes NewLinkage = GlobalValue::InternalLinkage; 8373ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::VisibilityTypes NV; 8386157e383c4a15ffb6e7f27cdb153daa9caa15ca5Chris Lattner bool LinkFromSrc = false; 8393ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (getLinkageResult(DGV, SGA, NewLinkage, NV, LinkFromSrc)) 8406157e383c4a15ffb6e7f27cdb153daa9caa15ca5Chris Lattner return true; 8413ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola NewVisibility = NV; 8423ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 8431afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!LinkFromSrc) { 8441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Set calculated linkage. 8451afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->setLinkage(NewLinkage); 8463ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola DGV->setVisibility(*NewVisibility); 8473ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 8481afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Make sure to remember this mapping. 8491afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SGA] = ConstantExpr::getBitCast(DGV,TypeMap.get(SGA->getType())); 8501afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 851f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Track the alias from the source module so we don't attempt to remap it. 852f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner DoNotLinkFromSource.insert(SGA); 853f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 8541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 855822143e6f7271c6546434d2d0b3da7a29711020dChris Lattner } 8561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 8571afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If there is no linkage to be performed or we're linking from the source, 8591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // bring over SGA. 8601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalAlias *NewDA = new GlobalAlias(TypeMap.get(SGA->getType()), 8611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SGA->getLinkage(), SGA->getName(), 8621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /*aliasee*/0, DstM); 863cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling copyGVAttributes(NewDA, SGA); 8643ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (NewVisibility) 8653ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola NewDA->setVisibility(*NewVisibility); 8661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV) { 8681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Any uses of DGV need to change to NewDA, with cast. 8691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->replaceAllUsesWith(ConstantExpr::getBitCast(NewDA, DGV->getType())); 8701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->eraseFromParent(); 8711afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 8721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8731afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SGA] = NewDA; 8741afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 8751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 876eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 8771ee0ecf84a07693c3a517ba030fac8ac1f9f3fbcChris Lattnerstatic void getArrayElements(Constant *C, SmallVectorImpl<Constant*> &Dest) { 878a1f00f4d488eb5daff52faaf99c62ee652fd3b85Chris Lattner unsigned NumElements = cast<ArrayType>(C->getType())->getNumElements(); 879a1f00f4d488eb5daff52faaf99c62ee652fd3b85Chris Lattner 880a1f00f4d488eb5daff52faaf99c62ee652fd3b85Chris Lattner for (unsigned i = 0; i != NumElements; ++i) 881a1f00f4d488eb5daff52faaf99c62ee652fd3b85Chris Lattner Dest.push_back(C->getAggregateElement(i)); 8821ee0ecf84a07693c3a517ba030fac8ac1f9f3fbcChris Lattner} 8831ee0ecf84a07693c3a517ba030fac8ac1f9f3fbcChris Lattner 8841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid ModuleLinker::linkAppendingVarInit(const AppendingVarInfo &AVI) { 8851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Merge the initializer. 8861afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SmallVector<Constant*, 16> Elements; 8871ee0ecf84a07693c3a517ba030fac8ac1f9f3fbcChris Lattner getArrayElements(AVI.DstInit, Elements); 8881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Constant *SrcInit = MapValue(AVI.SrcInit, ValueMap, RF_None, &TypeMap); 8901ee0ecf84a07693c3a517ba030fac8ac1f9f3fbcChris Lattner getArrayElements(SrcInit, Elements); 8911ee0ecf84a07693c3a517ba030fac8ac1f9f3fbcChris Lattner 8921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ArrayType *NewType = cast<ArrayType>(AVI.NewGV->getType()->getElementType()); 8931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AVI.NewGV->setInitializer(ConstantArray::get(NewType, Elements)); 8941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 8956157e383c4a15ffb6e7f27cdb153daa9caa15ca5Chris Lattner 896cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// linkGlobalInits - Update the initializers in the Dest module now that all 897cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// globals that may be referenced are in Dest. 8981afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid ModuleLinker::linkGlobalInits() { 8991afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Loop over all of the globals in the src module, mapping them over as we go 9001afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::const_global_iterator I = SrcM->global_begin(), 9011afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner E = SrcM->global_end(); I != E; ++I) { 902f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 903f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Only process initialized GV's or ones not already in dest. 904f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner if (!I->hasInitializer() || DoNotLinkFromSource.count(I)) continue; 9051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 9061afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Grab destination global variable. 9071afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalVariable *DGV = cast<GlobalVariable>(ValueMap[I]); 9081afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Figure out what the initializer looks like in the dest module. 9091afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->setInitializer(MapValue(I->getInitializer(), ValueMap, 9101afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner RF_None, &TypeMap)); 9115c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner } 9125c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner} 9135c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 914cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// linkFunctionBody - Copy the source function over into the dest function and 915cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// fix up references to values. At this point we know that Dest is an external 916cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// function, and that Src is not. 9171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid ModuleLinker::linkFunctionBody(Function *Dst, Function *Src) { 9181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner assert(Src && Dst && Dst->isDeclaration() && !Src->isDeclaration()); 9195c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 9200033baf94e049e075f3ba4700c109779e2d7c131Chris Lattner // Go through and convert function arguments over, remembering the mapping. 9211afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Function::arg_iterator DI = Dst->arg_begin(); 922e4d5c441e04bdc00ccf1804744af670655123b07Chris Lattner for (Function::arg_iterator I = Src->arg_begin(), E = Src->arg_end(); 92369da5cf26143e4542d4bf8c78ffac6d079efe5c9Chris Lattner I != E; ++I, ++DI) { 9241afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DI->setName(I->getName()); // Copy the name over. 9255c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 9261afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Add a mapping to our mapping. 927817bf2aeb22db13d03beb15e9bf17c425d0c694dAnton Korobeynikov ValueMap[I] = DI; 9285c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner } 9295c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 930f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner if (Mode == Linker::DestroySource) { 931f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Splice the body of the source function into the dest function. 932f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner Dst->getBasicBlockList().splice(Dst->end(), Src->getBasicBlockList()); 933f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 934f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // At this point, all of the instructions and values of the function are now 935f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // copied over. The only problem is that they are still referencing values in 936f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // the Source function as operands. Loop through all of the operands of the 937f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // functions and patch them up to point to the local versions. 938f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner for (Function::iterator BB = Dst->begin(), BE = Dst->end(); BB != BE; ++BB) 939f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) 940f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner RemapInstruction(I, ValueMap, RF_IgnoreMissingEntries, &TypeMap); 941f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 942f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner } else { 943f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Clone the body of the function into the dest function. 944f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner SmallVector<ReturnInst*, 8> Returns; // Ignore returns. 945d24397a9319a41e80169f572ad274a711f41d64eMon P Wang CloneFunctionInto(Dst, Src, ValueMap, false, Returns, "", NULL, &TypeMap); 946f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner } 947f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 9480033baf94e049e075f3ba4700c109779e2d7c131Chris Lattner // There is no need to map the arguments anymore. 9491127315562b221010040925980040fd4f65bdb1cChris Lattner for (Function::arg_iterator I = Src->arg_begin(), E = Src->arg_end(); 9501127315562b221010040925980040fd4f65bdb1cChris Lattner I != E; ++I) 951ef9b9a793949469cdaa4ab6d0173136229dcab7bReid Spencer ValueMap.erase(I); 952f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 9535c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner} 9545c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 955cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// linkAliasBodies - Insert all of the aliases in Src into the Dest module. 9561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid ModuleLinker::linkAliasBodies() { 9571afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::alias_iterator I = SrcM->alias_begin(), E = SrcM->alias_end(); 958f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner I != E; ++I) { 959f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner if (DoNotLinkFromSource.count(I)) 960f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner continue; 9611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (Constant *Aliasee = I->getAliasee()) { 9621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalAlias *DA = cast<GlobalAlias>(ValueMap[I]); 9631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DA->setAliasee(MapValue(Aliasee, ValueMap, RF_None, &TypeMap)); 964c2d774b6c1d38421c435b6d3cfaa10402c900aebChris Lattner } 965f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner } 9665c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner} 9675c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 968cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// linkNamedMDNodes - Insert all of the named MDNodes in Src into the Dest 9691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// module. 9701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid ModuleLinker::linkNamedMDNodes() { 971d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling const NamedMDNode *SrcModFlags = SrcM->getModuleFlagsMetadata(); 9721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::const_named_metadata_iterator I = SrcM->named_metadata_begin(), 9731afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner E = SrcM->named_metadata_end(); I != E; ++I) { 974d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // Don't link module flags here. Do them separately. 975d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (&*I == SrcModFlags) continue; 9761afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner NamedMDNode *DestNMD = DstM->getOrInsertNamedMetadata(I->getName()); 9771afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Add Src elements into Dest node. 9781afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) 9791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DestNMD->addOperand(MapValue(I->getOperand(i), ValueMap, 9801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner RF_None, &TypeMap)); 9818166e6eef6518da6f1f805e0d5e2bb22c15dd49cChris Lattner } 9828166e6eef6518da6f1f805e0d5e2bb22c15dd49cChris Lattner} 983d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 984d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling/// linkModuleFlagsMetadata - Merge the linker flags in Src into the Dest 985d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling/// module. 986d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendlingbool ModuleLinker::linkModuleFlagsMetadata() { 9871e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // If the source module has no module flags, we are done. 988d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling const NamedMDNode *SrcModFlags = SrcM->getModuleFlagsMetadata(); 989d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (!SrcModFlags) return false; 990d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 991d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // If the destination module doesn't have module flags yet, then just copy 992d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // over the source module's flags. 9931e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar NamedMDNode *DstModFlags = DstM->getOrInsertModuleFlagsMetadata(); 994d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (DstModFlags->getNumOperands() == 0) { 995d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling for (unsigned I = 0, E = SrcModFlags->getNumOperands(); I != E; ++I) 996d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DstModFlags->addOperand(SrcModFlags->getOperand(I)); 997d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 998d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling return false; 999d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1000d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 10011e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // First build a map of the existing module flags and requirements. 10021e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar DenseMap<MDString*, MDNode*> Flags; 10031e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar SmallSetVector<MDNode*, 16> Requirements; 10041e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar for (unsigned I = 0, E = DstModFlags->getNumOperands(); I != E; ++I) { 10051e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar MDNode *Op = DstModFlags->getOperand(I); 10061e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar ConstantInt *Behavior = cast<ConstantInt>(Op->getOperand(0)); 10071e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar MDString *ID = cast<MDString>(Op->getOperand(1)); 1008d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 10091e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar if (Behavior->getZExtValue() == Module::Require) { 10101e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar Requirements.insert(cast<MDNode>(Op->getOperand(2))); 10111e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar } else { 10121e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar Flags[ID] = Op; 10131e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar } 1014d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1015d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 10161e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // Merge in the flags from the source module, and also collect its set of 10171e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // requirements. 10181e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar bool HasErr = false; 10191e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar for (unsigned I = 0, E = SrcModFlags->getNumOperands(); I != E; ++I) { 10201e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar MDNode *SrcOp = SrcModFlags->getOperand(I); 10211e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar ConstantInt *SrcBehavior = cast<ConstantInt>(SrcOp->getOperand(0)); 10221e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar MDString *ID = cast<MDString>(SrcOp->getOperand(1)); 10231e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar MDNode *DstOp = Flags.lookup(ID); 10241e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar unsigned SrcBehaviorValue = SrcBehavior->getZExtValue(); 10251e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar 10261e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // If this is a requirement, add it and continue. 10271e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar if (SrcBehaviorValue == Module::Require) { 10281e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // If the destination module does not already have this requirement, add 10291e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // it. 10301e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar if (Requirements.insert(cast<MDNode>(SrcOp->getOperand(2)))) { 10311e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar DstModFlags->addOperand(SrcOp); 10321e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar } 10331e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar continue; 10341e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar } 10351e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar 10361e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // If there is no existing flag with this ID, just add it. 10371e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar if (!DstOp) { 10381e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar Flags[ID] = SrcOp; 10391e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar DstModFlags->addOperand(SrcOp); 10401e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar continue; 1041d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1042d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 10431e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // Otherwise, perform a merge. 10441e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar ConstantInt *DstBehavior = cast<ConstantInt>(DstOp->getOperand(0)); 10451e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar unsigned DstBehaviorValue = DstBehavior->getZExtValue(); 10461e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar 10471e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // If either flag has override behavior, handle it first. 10481e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar if (DstBehaviorValue == Module::Override) { 10491e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // Diagnose inconsistent flags which both have override behavior. 10501e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar if (SrcBehaviorValue == Module::Override && 10511e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar SrcOp->getOperand(2) != DstOp->getOperand(2)) { 10521e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar HasErr |= emitError("linking module flags '" + ID->getString() + 10531e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar "': IDs have conflicting override values"); 10541e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar } 10551e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar continue; 10561e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar } else if (SrcBehaviorValue == Module::Override) { 10571e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // Update the destination flag to that of the source. 10581e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar DstOp->replaceOperandWith(0, SrcBehavior); 10591e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar DstOp->replaceOperandWith(2, SrcOp->getOperand(2)); 10601e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar continue; 10611e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar } 10621e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar 10631e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // Diagnose inconsistent merge behavior types. 10641e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar if (SrcBehaviorValue != DstBehaviorValue) { 10651e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar HasErr |= emitError("linking module flags '" + ID->getString() + 10661e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar "': IDs have conflicting behaviors"); 10671e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar continue; 10681e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar } 1069d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 10701e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // Perform the merge for standard behavior types. 10711e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar switch (SrcBehaviorValue) { 10721e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar case Module::Require: 10731e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar case Module::Override: assert(0 && "not possible"); break; 10741e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar case Module::Error: { 10751e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // Emit an error if the values differ. 10761e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar if (SrcOp->getOperand(2) != DstOp->getOperand(2)) { 10771e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar HasErr |= emitError("linking module flags '" + ID->getString() + 10781e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar "': IDs have conflicting values"); 10791e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar } 10801e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar continue; 10811e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar } 10821e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar case Module::Warning: { 10831e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // Emit a warning if the values differ. 10841e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar if (SrcOp->getOperand(2) != DstOp->getOperand(2)) { 10851e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar errs() << "WARNING: linking module flags '" << ID->getString() 10861e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar << "': IDs have conflicting values"; 1087d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 10881e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar continue; 10891e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar } 10905db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar case Module::Append: { 10915db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar MDNode *DstValue = cast<MDNode>(DstOp->getOperand(2)); 10925db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar MDNode *SrcValue = cast<MDNode>(SrcOp->getOperand(2)); 10935db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar unsigned NumOps = DstValue->getNumOperands() + SrcValue->getNumOperands(); 10945db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar Value **VP, **Values = VP = new Value*[NumOps]; 10955db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar for (unsigned i = 0, e = DstValue->getNumOperands(); i != e; ++i, ++VP) 10965db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar *VP = DstValue->getOperand(i); 10975db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar for (unsigned i = 0, e = SrcValue->getNumOperands(); i != e; ++i, ++VP) 10985db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar *VP = SrcValue->getOperand(i); 10995db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar DstOp->replaceOperandWith(2, MDNode::get(DstM->getContext(), 11005db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar ArrayRef<Value*>(Values, 11015db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar NumOps))); 11025db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar delete[] Values; 11035db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar break; 11045db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar } 11055db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar case Module::AppendUnique: { 11065db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar SmallSetVector<Value*, 16> Elts; 11075db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar MDNode *DstValue = cast<MDNode>(DstOp->getOperand(2)); 11085db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar MDNode *SrcValue = cast<MDNode>(SrcOp->getOperand(2)); 11095db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar for (unsigned i = 0, e = DstValue->getNumOperands(); i != e; ++i) 11105db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar Elts.insert(DstValue->getOperand(i)); 11115db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar for (unsigned i = 0, e = SrcValue->getNumOperands(); i != e; ++i) 11125db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar Elts.insert(SrcValue->getOperand(i)); 11135db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar DstOp->replaceOperandWith(2, MDNode::get(DstM->getContext(), 11145db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar ArrayRef<Value*>(Elts.begin(), 11155db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar Elts.end()))); 11165db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar break; 11175db391c67d0922f4ab2ba57c07def19759c801a4Daniel Dunbar } 11181e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar } 11191e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar } 11201e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar 11211e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar // Check all of the requirements. 11221e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar for (unsigned I = 0, E = Requirements.size(); I != E; ++I) { 11231e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar MDNode *Requirement = Requirements[I]; 11241e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar MDString *Flag = cast<MDString>(Requirement->getOperand(0)); 11251e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar Value *ReqValue = Requirement->getOperand(1); 1126d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 11271e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar MDNode *Op = Flags[Flag]; 11281e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar if (!Op || Op->getOperand(2) != ReqValue) { 11291e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar HasErr |= emitError("linking module flags '" + Flag->getString() + 11301e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar "': does not have the required value"); 11311e08165ae9ee3a7b654d9030bc5c86333fe6673fDaniel Dunbar continue; 1132d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1133d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1134d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1135d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling return HasErr; 1136d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling} 11371afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 11381afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool ModuleLinker::run() { 1139d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling assert(DstM && "Null destination module"); 1140d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling assert(SrcM && "Null source module"); 114152f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner 11421afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Inherit the target data from the source module if the destination module 11431afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // doesn't have one already. 11441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstM->getDataLayout().empty() && !SrcM->getDataLayout().empty()) 11451afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstM->setDataLayout(SrcM->getDataLayout()); 1146873c5e7859c1534bf92c9e2747f2b70685059598Chris Lattner 1147f27dfcb210fec571d79bc881f5463e0b405707c0Chris Lattner // Copy the target triple from the source to dest if the dest's is empty. 11481afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstM->getTargetTriple().empty() && !SrcM->getTargetTriple().empty()) 11491afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstM->setTargetTriple(SrcM->getTargetTriple()); 1150eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 11511afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcM->getDataLayout().empty() && !DstM->getDataLayout().empty() && 11521afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SrcM->getDataLayout() != DstM->getDataLayout()) 1153bdff548e4dd577a72094d57b282de4e765643b96Chris Lattner errs() << "WARNING: Linking two modules of different data layouts!\n"; 11541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcM->getTargetTriple().empty() && 11551afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstM->getTargetTriple() != SrcM->getTargetTriple()) { 1156a797ee0210902669833720f9df7c3be5e58c1401Chris Lattner errs() << "WARNING: Linking two modules of different target triples: "; 11571afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcM->getModuleIdentifier().empty()) 11581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner errs() << SrcM->getModuleIdentifier() << ": "; 11591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner errs() << "'" << SrcM->getTargetTriple() << "' and '" 11601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner << DstM->getTargetTriple() << "'\n"; 1161a797ee0210902669833720f9df7c3be5e58c1401Chris Lattner } 1162f976c856fcc5055f3fc7d9f070d72c2d027c1d9dMisha Brukman 1163f27dfcb210fec571d79bc881f5463e0b405707c0Chris Lattner // Append the module inline asm string. 11641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcM->getModuleInlineAsm().empty()) { 11651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstM->getModuleInlineAsm().empty()) 11661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstM->setModuleInlineAsm(SrcM->getModuleInlineAsm()); 1167e1b2e14f92e8e9da1eb4854511a881cf9c22af3cChris Lattner else 11681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstM->setModuleInlineAsm(DstM->getModuleInlineAsm()+"\n"+ 11691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SrcM->getModuleInlineAsm()); 1170e1b2e14f92e8e9da1eb4854511a881cf9c22af3cChris Lattner } 1171eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 11721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Loop over all of the linked values to compute type mappings. 11731afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner computeTypeMapping(); 11742c236f3e20a0fb84b5948efa6bb7bb60d759cb32Chris Lattner 11751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Insert all of the globals in src into the DstM module... without linking 11768166e6eef6518da6f1f805e0d5e2bb22c15dd49cChris Lattner // initializers (which could refer to functions not yet mapped over). 11771afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::global_iterator I = SrcM->global_begin(), 11781afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner E = SrcM->global_end(); I != E; ++I) 11791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (linkGlobalProto(I)) 11801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 11815c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 1182c8cc4cb03bd90f89be7fe1649542a2d5ae689632Chris Lattner // Link the functions together between the two modules, without doing function 11831afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // bodies... this just adds external function prototypes to the DstM 1184c8cc4cb03bd90f89be7fe1649542a2d5ae689632Chris Lattner // function... We do this so that when we begin processing function bodies, 1185c8cc4cb03bd90f89be7fe1649542a2d5ae689632Chris Lattner // all of the global values that may be referenced are available in our 1186c8cc4cb03bd90f89be7fe1649542a2d5ae689632Chris Lattner // ValueMap. 11871afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::iterator I = SrcM->begin(), E = SrcM->end(); I != E; ++I) 11881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (linkFunctionProto(I)) 11891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 11906cdf1971bdf88ddd9a7d46b5f5f975497d68c38eChris Lattner 11911afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If there were any aliases, link them now. 11921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::alias_iterator I = SrcM->alias_begin(), 11931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner E = SrcM->alias_end(); I != E; ++I) 11941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (linkAliasProto(I)) 11951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 119652f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner 11971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (unsigned i = 0, e = AppendingVars.size(); i != e; ++i) 11981afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner linkAppendingVarInit(AppendingVars[i]); 11991afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 12001afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Update the initializers in the DstM module now that all globals that may 12011afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // be referenced are in DstM. 12021afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner linkGlobalInits(); 12031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 12041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Link in the function bodies that are defined in the source module into 12051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // DstM. 12061afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::iterator SF = SrcM->begin(), E = SrcM->end(); SF != E; ++SF) { 12072b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner // Skip if not linking from source. 12082b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner if (DoNotLinkFromSource.count(SF)) continue; 12092b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner 12102b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner // Skip if no body (function is external) or materialize. 12112b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner if (SF->isDeclaration()) { 12122b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner if (!SF->isMaterializable()) 12132b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner continue; 12142b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner if (SF->Materialize(&ErrorMsg)) 12152b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner return true; 12162b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner } 12171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 12181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner linkFunctionBody(cast<Function>(ValueMap[SF]), SF); 1219208b6f69441293d27b61b9d16a69c9bba4d097cbBill Wendling SF->Dematerialize(); 12201afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 12218166e6eef6518da6f1f805e0d5e2bb22c15dd49cChris Lattner 12221afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Resolve all uses of aliases with aliasees. 12231afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner linkAliasBodies(); 12243db9191baf5f5229a2f4d204c6332ba27fff81d0Anton Korobeynikov 1225d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // Remap all of the named MDNodes in Src into the DstM module. We do this 1226211da8f7a96e26cc8d53a0c2ea34f6b791513021Devang Patel // after linking GlobalValues so that MDNodes that reference GlobalValues 1227211da8f7a96e26cc8d53a0c2ea34f6b791513021Devang Patel // are properly remapped. 1228211da8f7a96e26cc8d53a0c2ea34f6b791513021Devang Patel linkNamedMDNodes(); 1229211da8f7a96e26cc8d53a0c2ea34f6b791513021Devang Patel 1230d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // Merge the module flags into the DstM module. 1231d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (linkModuleFlagsMetadata()) 1232d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling return true; 1233d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 12349af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Process vector of lazily linked in functions. 12359af37a3de8c8688adae383471379f0216287ce28Tanya Lattner bool LinkedInAnyFunctions; 12369af37a3de8c8688adae383471379f0216287ce28Tanya Lattner do { 12379af37a3de8c8688adae383471379f0216287ce28Tanya Lattner LinkedInAnyFunctions = false; 12389af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12399af37a3de8c8688adae383471379f0216287ce28Tanya Lattner for(std::vector<Function*>::iterator I = LazilyLinkFunctions.begin(), 12409af37a3de8c8688adae383471379f0216287ce28Tanya Lattner E = LazilyLinkFunctions.end(); I != E; ++I) { 12419af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (!*I) 12429af37a3de8c8688adae383471379f0216287ce28Tanya Lattner continue; 12439af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12449af37a3de8c8688adae383471379f0216287ce28Tanya Lattner Function *SF = *I; 12459af37a3de8c8688adae383471379f0216287ce28Tanya Lattner Function *DF = cast<Function>(ValueMap[SF]); 12469af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12479af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (!DF->use_empty()) { 12489af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12499af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Materialize if necessary. 12509af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (SF->isDeclaration()) { 12519af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (!SF->isMaterializable()) 12529af37a3de8c8688adae383471379f0216287ce28Tanya Lattner continue; 12539af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (SF->Materialize(&ErrorMsg)) 12549af37a3de8c8688adae383471379f0216287ce28Tanya Lattner return true; 12559af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } 12569af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12579af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Link in function body. 12589af37a3de8c8688adae383471379f0216287ce28Tanya Lattner linkFunctionBody(DF, SF); 1259208b6f69441293d27b61b9d16a69c9bba4d097cbBill Wendling SF->Dematerialize(); 1260208b6f69441293d27b61b9d16a69c9bba4d097cbBill Wendling 12619af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // "Remove" from vector by setting the element to 0. 12629af37a3de8c8688adae383471379f0216287ce28Tanya Lattner *I = 0; 12639af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12649af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Set flag to indicate we may have more functions to lazily link in 12659af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // since we linked in a function. 12669af37a3de8c8688adae383471379f0216287ce28Tanya Lattner LinkedInAnyFunctions = true; 12679af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } 12689af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } 12699af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } while (LinkedInAnyFunctions); 12709af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12719af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Remove any prototypes of functions that were not actually linked in. 12729af37a3de8c8688adae383471379f0216287ce28Tanya Lattner for(std::vector<Function*>::iterator I = LazilyLinkFunctions.begin(), 12739af37a3de8c8688adae383471379f0216287ce28Tanya Lattner E = LazilyLinkFunctions.end(); I != E; ++I) { 12749af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (!*I) 12759af37a3de8c8688adae383471379f0216287ce28Tanya Lattner continue; 12769af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12779af37a3de8c8688adae383471379f0216287ce28Tanya Lattner Function *SF = *I; 12789af37a3de8c8688adae383471379f0216287ce28Tanya Lattner Function *DF = cast<Function>(ValueMap[SF]); 12799af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (DF->use_empty()) 12809af37a3de8c8688adae383471379f0216287ce28Tanya Lattner DF->eraseFromParent(); 12819af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } 12829af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12831afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Now that all of the types from the source are used, resolve any structs 12841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // copied over to the dest that didn't exist there. 12851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TypeMap.linkDefinedTypeBodies(); 12861afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 128752f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner return false; 128852f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner} 12899466f5113ba859677a28887c3c7143065e702019Vikram S. Adve 12901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner//===----------------------------------------------------------------------===// 12911afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner// LinkModules entrypoint. 12921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner//===----------------------------------------------------------------------===// 12931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1294cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// LinkModules - This function links two modules together, with the resulting 1295d25c05efd55fe190a50965b31e04db69bd8e19deEli Bendersky/// Dest module modified to be the composite of the two input modules. If an 1296cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// error occurs, true is returned and ErrorMsg (if not null) is set to indicate 1297cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// the problem. Upon failure, the Dest module could be in a modified state, 1298cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// and shouldn't be relied on to be consistent. 1299f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattnerbool Linker::LinkModules(Module *Dest, Module *Src, unsigned Mode, 1300f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner std::string *ErrorMsg) { 1301f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner ModuleLinker TheLinker(Dest, Src, Mode); 13021afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (TheLinker.run()) { 13031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (ErrorMsg) *ErrorMsg = TheLinker.ErrorMsg; 13041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 13051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 1306a20689fd7e7fa095276491ff238f248339d28800Bill Wendling 13071afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 13081afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 1309f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill Wendling 1310f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill Wendling//===----------------------------------------------------------------------===// 1311f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill Wendling// C API. 1312f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill Wendling//===----------------------------------------------------------------------===// 1313f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill Wendling 1314f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill WendlingLLVMBool LLVMLinkModules(LLVMModuleRef Dest, LLVMModuleRef Src, 1315f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill Wendling LLVMLinkerMode Mode, char **OutMessages) { 1316f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill Wendling std::string Messages; 1317f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill Wendling LLVMBool Result = Linker::LinkModules(unwrap(Dest), unwrap(Src), 1318f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill Wendling Mode, OutMessages? &Messages : 0); 1319f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill Wendling if (OutMessages) 1320f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill Wendling *OutMessages = strdup(Messages.c_str()); 1321f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill Wendling return Result; 1322f24fde20c8d6db5a52b50a010e831c9159d3fec7Bill Wendling} 1323