1 //===- lib/Linker/LinkModules.cpp - Module Linker Implementation ----------===//
3 // The LLVM Compiler Infrastructure
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements the LLVM module linker.
12 // Specifically, this:
13 // * Merges global variables between the two modules
14 // * Uninit + Uninit = Init, Init + Uninit = Init, Init + Init = Error if !=
15 // * Merges functions between two modules
17 //===----------------------------------------------------------------------===//
19 #include "llvm/Linker.h"
20 #include "llvm/Constants.h"
21 #include "llvm/DerivedTypes.h"
22 #include "llvm/Module.h"
23 #include "llvm/SymbolTable.h"
24 #include "llvm/Instructions.h"
25 #include "llvm/Assembly/Writer.h"
26 #include "llvm/System/Path.h"
31 // Error - Simple wrapper function to conditionally assign to E and return true.
32 // This just makes error return conditions a little bit simpler...
33 static inline bool Error(std::string
*E
, const std::string
&Message
) {
38 // ToStr - Simple wrapper function to convert a type to a string.
39 static std::string
ToStr(const Type
*Ty
, const Module
*M
) {
40 std::ostringstream OS
;
41 WriteTypeSymbolic(OS
, Ty
, M
);
46 // Function: ResolveTypes()
49 // Attempt to link the two specified types together.
52 // DestTy - The type to which we wish to resolve.
53 // SrcTy - The original type which we want to resolve.
54 // Name - The name of the type.
57 // DestST - The symbol table in which the new type should be placed.
60 // true - There is an error and the types cannot yet be linked.
63 static bool ResolveTypes(const Type
*DestTy
, const Type
*SrcTy
,
64 SymbolTable
*DestST
, const std::string
&Name
) {
65 if (DestTy
== SrcTy
) return false; // If already equal, noop
67 // Does the type already exist in the module?
68 if (DestTy
&& !isa
<OpaqueType
>(DestTy
)) { // Yup, the type already exists...
69 if (const OpaqueType
*OT
= dyn_cast
<OpaqueType
>(SrcTy
)) {
70 const_cast<OpaqueType
*>(OT
)->refineAbstractTypeTo(DestTy
);
72 return true; // Cannot link types... neither is opaque and not-equal
74 } else { // Type not in dest module. Add it now.
75 if (DestTy
) // Type _is_ in module, just opaque...
76 const_cast<OpaqueType
*>(cast
<OpaqueType
>(DestTy
))
77 ->refineAbstractTypeTo(SrcTy
);
78 else if (!Name
.empty())
79 DestST
->insert(Name
, const_cast<Type
*>(SrcTy
));
84 static const FunctionType
*getFT(const PATypeHolder
&TH
) {
85 return cast
<FunctionType
>(TH
.get());
87 static const StructType
*getST(const PATypeHolder
&TH
) {
88 return cast
<StructType
>(TH
.get());
91 // RecursiveResolveTypes - This is just like ResolveTypes, except that it
92 // recurses down into derived types, merging the used types if the parent types
94 static bool RecursiveResolveTypesI(const PATypeHolder
&DestTy
,
95 const PATypeHolder
&SrcTy
,
96 SymbolTable
*DestST
, const std::string
&Name
,
97 std::vector
<std::pair
<PATypeHolder
, PATypeHolder
> > &Pointers
) {
98 const Type
*SrcTyT
= SrcTy
.get();
99 const Type
*DestTyT
= DestTy
.get();
100 if (DestTyT
== SrcTyT
) return false; // If already equal, noop
102 // If we found our opaque type, resolve it now!
103 if (isa
<OpaqueType
>(DestTyT
) || isa
<OpaqueType
>(SrcTyT
))
104 return ResolveTypes(DestTyT
, SrcTyT
, DestST
, Name
);
106 // Two types cannot be resolved together if they are of different primitive
107 // type. For example, we cannot resolve an int to a float.
108 if (DestTyT
->getTypeID() != SrcTyT
->getTypeID()) return true;
110 // Otherwise, resolve the used type used by this derived type...
111 switch (DestTyT
->getTypeID()) {
112 case Type::FunctionTyID
: {
113 if (cast
<FunctionType
>(DestTyT
)->isVarArg() !=
114 cast
<FunctionType
>(SrcTyT
)->isVarArg() ||
115 cast
<FunctionType
>(DestTyT
)->getNumContainedTypes() !=
116 cast
<FunctionType
>(SrcTyT
)->getNumContainedTypes())
118 for (unsigned i
= 0, e
= getFT(DestTy
)->getNumContainedTypes(); i
!= e
; ++i
)
119 if (RecursiveResolveTypesI(getFT(DestTy
)->getContainedType(i
),
120 getFT(SrcTy
)->getContainedType(i
), DestST
, "",
125 case Type::StructTyID
: {
126 if (getST(DestTy
)->getNumContainedTypes() !=
127 getST(SrcTy
)->getNumContainedTypes()) return 1;
128 for (unsigned i
= 0, e
= getST(DestTy
)->getNumContainedTypes(); i
!= e
; ++i
)
129 if (RecursiveResolveTypesI(getST(DestTy
)->getContainedType(i
),
130 getST(SrcTy
)->getContainedType(i
), DestST
, "",
135 case Type::ArrayTyID
: {
136 const ArrayType
*DAT
= cast
<ArrayType
>(DestTy
.get());
137 const ArrayType
*SAT
= cast
<ArrayType
>(SrcTy
.get());
138 if (DAT
->getNumElements() != SAT
->getNumElements()) return true;
139 return RecursiveResolveTypesI(DAT
->getElementType(), SAT
->getElementType(),
140 DestST
, "", Pointers
);
142 case Type::PointerTyID
: {
143 // If this is a pointer type, check to see if we have already seen it. If
144 // so, we are in a recursive branch. Cut off the search now. We cannot use
145 // an associative container for this search, because the type pointers (keys
146 // in the container) change whenever types get resolved...
147 for (unsigned i
= 0, e
= Pointers
.size(); i
!= e
; ++i
)
148 if (Pointers
[i
].first
== DestTy
)
149 return Pointers
[i
].second
!= SrcTy
;
151 // Otherwise, add the current pointers to the vector to stop recursion on
153 Pointers
.push_back(std::make_pair(DestTyT
, SrcTyT
));
155 RecursiveResolveTypesI(cast
<PointerType
>(DestTy
.get())->getElementType(),
156 cast
<PointerType
>(SrcTy
.get())->getElementType(),
157 DestST
, "", Pointers
);
161 default: assert(0 && "Unexpected type!"); return true;
165 static bool RecursiveResolveTypes(const PATypeHolder
&DestTy
,
166 const PATypeHolder
&SrcTy
,
167 SymbolTable
*DestST
, const std::string
&Name
){
168 std::vector
<std::pair
<PATypeHolder
, PATypeHolder
> > PointerTypes
;
169 return RecursiveResolveTypesI(DestTy
, SrcTy
, DestST
, Name
, PointerTypes
);
173 // LinkTypes - Go through the symbol table of the Src module and see if any
174 // types are named in the src module that are not named in the Dst module.
175 // Make sure there are no type name conflicts.
176 static bool LinkTypes(Module
*Dest
, const Module
*Src
, std::string
*Err
) {
177 SymbolTable
*DestST
= &Dest
->getSymbolTable();
178 const SymbolTable
*SrcST
= &Src
->getSymbolTable();
180 // Look for a type plane for Type's...
181 SymbolTable::type_const_iterator TI
= SrcST
->type_begin();
182 SymbolTable::type_const_iterator TE
= SrcST
->type_end();
183 if (TI
== TE
) return false; // No named types, do nothing.
185 // Some types cannot be resolved immediately because they depend on other
186 // types being resolved to each other first. This contains a list of types we
187 // are waiting to recheck.
188 std::vector
<std::string
> DelayedTypesToResolve
;
190 for ( ; TI
!= TE
; ++TI
) {
191 const std::string
&Name
= TI
->first
;
192 const Type
*RHS
= TI
->second
;
194 // Check to see if this type name is already in the dest module...
195 Type
*Entry
= DestST
->lookupType(Name
);
197 if (ResolveTypes(Entry
, RHS
, DestST
, Name
)) {
198 // They look different, save the types 'till later to resolve.
199 DelayedTypesToResolve
.push_back(Name
);
203 // Iteratively resolve types while we can...
204 while (!DelayedTypesToResolve
.empty()) {
205 // Loop over all of the types, attempting to resolve them if possible...
206 unsigned OldSize
= DelayedTypesToResolve
.size();
208 // Try direct resolution by name...
209 for (unsigned i
= 0; i
!= DelayedTypesToResolve
.size(); ++i
) {
210 const std::string
&Name
= DelayedTypesToResolve
[i
];
211 Type
*T1
= SrcST
->lookupType(Name
);
212 Type
*T2
= DestST
->lookupType(Name
);
213 if (!ResolveTypes(T2
, T1
, DestST
, Name
)) {
214 // We are making progress!
215 DelayedTypesToResolve
.erase(DelayedTypesToResolve
.begin()+i
);
220 // Did we not eliminate any types?
221 if (DelayedTypesToResolve
.size() == OldSize
) {
222 // Attempt to resolve subelements of types. This allows us to merge these
223 // two types: { int* } and { opaque* }
224 for (unsigned i
= 0, e
= DelayedTypesToResolve
.size(); i
!= e
; ++i
) {
225 const std::string
&Name
= DelayedTypesToResolve
[i
];
226 PATypeHolder
T1(SrcST
->lookupType(Name
));
227 PATypeHolder
T2(DestST
->lookupType(Name
));
229 if (!RecursiveResolveTypes(T2
, T1
, DestST
, Name
)) {
230 // We are making progress!
231 DelayedTypesToResolve
.erase(DelayedTypesToResolve
.begin()+i
);
233 // Go back to the main loop, perhaps we can resolve directly by name
239 // If we STILL cannot resolve the types, then there is something wrong.
240 if (DelayedTypesToResolve
.size() == OldSize
) {
241 // Remove the symbol name from the destination.
242 DelayedTypesToResolve
.pop_back();
251 static void PrintMap(const std::map
<const Value
*, Value
*> &M
) {
252 for (std::map
<const Value
*, Value
*>::const_iterator I
= M
.begin(), E
=M
.end();
254 std::cerr
<< " Fr: " << (void*)I
->first
<< " ";
256 std::cerr
<< " To: " << (void*)I
->second
<< " ";
263 // RemapOperand - Use ValueMap to convert references from one module to another.
264 // This is somewhat sophisticated in that it can automatically handle constant
265 // references correctly as well...
266 static Value
*RemapOperand(const Value
*In
,
267 std::map
<const Value
*, Value
*> &ValueMap
) {
268 std::map
<const Value
*,Value
*>::const_iterator I
= ValueMap
.find(In
);
269 if (I
!= ValueMap
.end()) return I
->second
;
271 // Check to see if it's a constant that we are interesting in transforming.
272 if (const Constant
*CPV
= dyn_cast
<Constant
>(In
)) {
273 if ((!isa
<DerivedType
>(CPV
->getType()) && !isa
<ConstantExpr
>(CPV
)) ||
274 isa
<ConstantAggregateZero
>(CPV
))
275 return const_cast<Constant
*>(CPV
); // Simple constants stay identical.
277 Constant
*Result
= 0;
279 if (const ConstantArray
*CPA
= dyn_cast
<ConstantArray
>(CPV
)) {
280 std::vector
<Constant
*> Operands(CPA
->getNumOperands());
281 for (unsigned i
= 0, e
= CPA
->getNumOperands(); i
!= e
; ++i
)
282 Operands
[i
] =cast
<Constant
>(RemapOperand(CPA
->getOperand(i
), ValueMap
));
283 Result
= ConstantArray::get(cast
<ArrayType
>(CPA
->getType()), Operands
);
284 } else if (const ConstantStruct
*CPS
= dyn_cast
<ConstantStruct
>(CPV
)) {
285 std::vector
<Constant
*> Operands(CPS
->getNumOperands());
286 for (unsigned i
= 0, e
= CPS
->getNumOperands(); i
!= e
; ++i
)
287 Operands
[i
] =cast
<Constant
>(RemapOperand(CPS
->getOperand(i
), ValueMap
));
288 Result
= ConstantStruct::get(cast
<StructType
>(CPS
->getType()), Operands
);
289 } else if (isa
<ConstantPointerNull
>(CPV
) || isa
<UndefValue
>(CPV
)) {
290 Result
= const_cast<Constant
*>(CPV
);
291 } else if (isa
<GlobalValue
>(CPV
)) {
292 Result
= cast
<Constant
>(RemapOperand(CPV
, ValueMap
));
293 } else if (const ConstantPacked
*CP
= dyn_cast
<ConstantPacked
>(CPV
)) {
294 std::vector
<Constant
*> Operands(CP
->getNumOperands());
295 for (unsigned i
= 0, e
= CP
->getNumOperands(); i
!= e
; ++i
)
296 Operands
[i
] = cast
<Constant
>(RemapOperand(CP
->getOperand(i
), ValueMap
));
297 Result
= ConstantPacked::get(Operands
);
298 } else if (const ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(CPV
)) {
299 if (CE
->getOpcode() == Instruction::GetElementPtr
) {
300 Value
*Ptr
= RemapOperand(CE
->getOperand(0), ValueMap
);
301 std::vector
<Constant
*> Indices
;
302 Indices
.reserve(CE
->getNumOperands()-1);
303 for (unsigned i
= 1, e
= CE
->getNumOperands(); i
!= e
; ++i
)
304 Indices
.push_back(cast
<Constant
>(RemapOperand(CE
->getOperand(i
),
307 Result
= ConstantExpr::getGetElementPtr(cast
<Constant
>(Ptr
), Indices
);
308 } else if (CE
->getOpcode() == Instruction::ExtractElement
) {
309 Value
*Ptr
= RemapOperand(CE
->getOperand(0), ValueMap
);
310 Value
*Idx
= RemapOperand(CE
->getOperand(1), ValueMap
);
311 Result
= ConstantExpr::getExtractElement(cast
<Constant
>(Ptr
),
312 cast
<Constant
>(Idx
));
313 } else if (CE
->getOpcode() == Instruction::InsertElement
) {
314 Value
*Ptr
= RemapOperand(CE
->getOperand(0), ValueMap
);
315 Value
*Elt
= RemapOperand(CE
->getOperand(1), ValueMap
);
316 Value
*Idx
= RemapOperand(CE
->getOperand(2), ValueMap
);
317 Result
= ConstantExpr::getInsertElement(cast
<Constant
>(Ptr
),
319 cast
<Constant
>(Idx
));
320 } else if (CE
->getOpcode() == Instruction::ShuffleVector
) {
321 Value
*V1
= RemapOperand(CE
->getOperand(0), ValueMap
);
322 Value
*V2
= RemapOperand(CE
->getOperand(1), ValueMap
);
323 Result
= ConstantExpr::getShuffleVector(cast
<Constant
>(V1
),
325 cast
<Constant
>(CE
->getOperand(2)));
326 } else if (CE
->getNumOperands() == 1) {
328 assert(CE
->getOpcode() == Instruction::Cast
);
329 Value
*V
= RemapOperand(CE
->getOperand(0), ValueMap
);
330 Result
= ConstantExpr::getCast(cast
<Constant
>(V
), CE
->getType());
331 } else if (CE
->getNumOperands() == 3) {
332 // Select instruction
333 assert(CE
->getOpcode() == Instruction::Select
);
334 Value
*V1
= RemapOperand(CE
->getOperand(0), ValueMap
);
335 Value
*V2
= RemapOperand(CE
->getOperand(1), ValueMap
);
336 Value
*V3
= RemapOperand(CE
->getOperand(2), ValueMap
);
337 Result
= ConstantExpr::getSelect(cast
<Constant
>(V1
), cast
<Constant
>(V2
),
339 } else if (CE
->getNumOperands() == 2) {
340 // Binary operator...
341 Value
*V1
= RemapOperand(CE
->getOperand(0), ValueMap
);
342 Value
*V2
= RemapOperand(CE
->getOperand(1), ValueMap
);
344 Result
= ConstantExpr::get(CE
->getOpcode(), cast
<Constant
>(V1
),
347 assert(0 && "Unknown constant expr type!");
351 assert(0 && "Unknown type of derived type constant value!");
354 // Cache the mapping in our local map structure...
355 ValueMap
.insert(std::make_pair(In
, Result
));
359 std::cerr
<< "LinkModules ValueMap: \n";
362 std::cerr
<< "Couldn't remap value: " << (void*)In
<< " " << *In
<< "\n";
363 assert(0 && "Couldn't remap value!");
367 /// ForceRenaming - The LLVM SymbolTable class autorenames globals that conflict
368 /// in the symbol table. This is good for all clients except for us. Go
369 /// through the trouble to force this back.
370 static void ForceRenaming(GlobalValue
*GV
, const std::string
&Name
) {
371 assert(GV
->getName() != Name
&& "Can't force rename to self");
372 SymbolTable
&ST
= GV
->getParent()->getSymbolTable();
374 // If there is a conflict, rename the conflict.
375 Value
*ConflictVal
= ST
.lookup(GV
->getType(), Name
);
376 assert(ConflictVal
&&"Why do we have to force rename if there is no conflic?");
377 GlobalValue
*ConflictGV
= cast
<GlobalValue
>(ConflictVal
);
378 assert(ConflictGV
->hasInternalLinkage() &&
379 "Not conflicting with a static global, should link instead!");
381 ConflictGV
->setName(""); // Eliminate the conflict
382 GV
->setName(Name
); // Force the name back
383 ConflictGV
->setName(Name
); // This will cause ConflictGV to get renamed
384 assert(GV
->getName() == Name
&& ConflictGV
->getName() != Name
&&
385 "ForceRenaming didn't work");
388 /// GetLinkageResult - This analyzes the two global values and determines what
389 /// the result will look like in the destination module. In particular, it
390 /// computes the resultant linkage type, computes whether the global in the
391 /// source should be copied over to the destination (replacing the existing
392 /// one), and computes whether this linkage is an error or not.
393 static bool GetLinkageResult(GlobalValue
*Dest
, GlobalValue
*Src
,
394 GlobalValue::LinkageTypes
<
, bool &LinkFromSrc
,
396 assert((!Dest
|| !Src
->hasInternalLinkage()) &&
397 "If Src has internal linkage, Dest shouldn't be set!");
399 // Linking something to nothing.
401 LT
= Src
->getLinkage();
402 } else if (Src
->isExternal()) {
403 // If Src is external or if both Src & Drc are external.. Just link the
404 // external globals, we aren't adding anything.
406 LT
= Dest
->getLinkage();
407 } else if (Dest
->isExternal()) {
408 // If Dest is external but Src is not:
410 LT
= Src
->getLinkage();
411 } else if (Src
->hasAppendingLinkage() || Dest
->hasAppendingLinkage()) {
412 if (Src
->getLinkage() != Dest
->getLinkage())
413 return Error(Err
, "Linking globals named '" + Src
->getName() +
414 "': can only link appending global with another appending global!");
415 LinkFromSrc
= true; // Special cased.
416 LT
= Src
->getLinkage();
417 } else if (Src
->hasWeakLinkage() || Src
->hasLinkOnceLinkage()) {
418 // At this point we know that Dest has LinkOnce, External or Weak linkage.
419 if (Dest
->hasLinkOnceLinkage() && Src
->hasWeakLinkage()) {
421 LT
= Src
->getLinkage();
424 LT
= Dest
->getLinkage();
426 } else if (Dest
->hasWeakLinkage() || Dest
->hasLinkOnceLinkage()) {
427 // At this point we know that Src has External linkage.
429 LT
= GlobalValue::ExternalLinkage
;
431 assert(Dest
->hasExternalLinkage() && Src
->hasExternalLinkage() &&
432 "Unexpected linkage type!");
433 return Error(Err
, "Linking globals named '" + Src
->getName() +
434 "': symbol multiply defined!");
439 // LinkGlobals - Loop through the global variables in the src module and merge
440 // them into the dest module.
441 static bool LinkGlobals(Module
*Dest
, Module
*Src
,
442 std::map
<const Value
*, Value
*> &ValueMap
,
443 std::multimap
<std::string
, GlobalVariable
*> &AppendingVars
,
444 std::map
<std::string
, GlobalValue
*> &GlobalsByName
,
446 // We will need a module level symbol table if the src module has a module
447 // level symbol table...
448 SymbolTable
*ST
= (SymbolTable
*)&Dest
->getSymbolTable();
450 // Loop over all of the globals in the src module, mapping them over as we go
451 for (Module::global_iterator I
= Src
->global_begin(), E
= Src
->global_end(); I
!= E
; ++I
) {
452 GlobalVariable
*SGV
= I
;
453 GlobalVariable
*DGV
= 0;
454 // Check to see if may have to link the global.
455 if (SGV
->hasName() && !SGV
->hasInternalLinkage())
456 if (!(DGV
= Dest
->getGlobalVariable(SGV
->getName(),
457 SGV
->getType()->getElementType()))) {
458 std::map
<std::string
, GlobalValue
*>::iterator EGV
=
459 GlobalsByName
.find(SGV
->getName());
460 if (EGV
!= GlobalsByName
.end())
461 DGV
= dyn_cast
<GlobalVariable
>(EGV
->second
);
463 // If types don't agree due to opaque types, try to resolve them.
464 RecursiveResolveTypes(SGV
->getType(), DGV
->getType(),ST
, "");
467 if (DGV
&& DGV
->hasInternalLinkage())
470 assert(SGV
->hasInitializer() || SGV
->hasExternalLinkage() &&
471 "Global must either be external or have an initializer!");
473 GlobalValue::LinkageTypes NewLinkage
;
475 if (GetLinkageResult(DGV
, SGV
, NewLinkage
, LinkFromSrc
, Err
))
479 // No linking to be performed, simply create an identical version of the
480 // symbol over in the dest module... the initializer will be filled in
481 // later by LinkGlobalInits...
482 GlobalVariable
*NewDGV
=
483 new GlobalVariable(SGV
->getType()->getElementType(),
484 SGV
->isConstant(), SGV
->getLinkage(), /*init*/0,
485 SGV
->getName(), Dest
);
487 // If the LLVM runtime renamed the global, but it is an externally visible
488 // symbol, DGV must be an existing global with internal linkage. Rename
490 if (NewDGV
->getName() != SGV
->getName() && !NewDGV
->hasInternalLinkage())
491 ForceRenaming(NewDGV
, SGV
->getName());
493 // Make sure to remember this mapping...
494 ValueMap
.insert(std::make_pair(SGV
, NewDGV
));
495 if (SGV
->hasAppendingLinkage())
496 // Keep track that this is an appending variable...
497 AppendingVars
.insert(std::make_pair(SGV
->getName(), NewDGV
));
498 } else if (DGV
->hasAppendingLinkage()) {
499 // No linking is performed yet. Just insert a new copy of the global, and
500 // keep track of the fact that it is an appending variable in the
501 // AppendingVars map. The name is cleared out so that no linkage is
503 GlobalVariable
*NewDGV
=
504 new GlobalVariable(SGV
->getType()->getElementType(),
505 SGV
->isConstant(), SGV
->getLinkage(), /*init*/0,
508 // Make sure to remember this mapping...
509 ValueMap
.insert(std::make_pair(SGV
, NewDGV
));
511 // Keep track that this is an appending variable...
512 AppendingVars
.insert(std::make_pair(SGV
->getName(), NewDGV
));
514 // Otherwise, perform the mapping as instructed by GetLinkageResult. If
515 // the types don't match, and if we are to link from the source, nuke DGV
516 // and create a new one of the appropriate type.
517 if (SGV
->getType() != DGV
->getType() && LinkFromSrc
) {
518 GlobalVariable
*NewDGV
=
519 new GlobalVariable(SGV
->getType()->getElementType(),
520 DGV
->isConstant(), DGV
->getLinkage());
521 Dest
->getGlobalList().insert(DGV
, NewDGV
);
522 DGV
->replaceAllUsesWith(ConstantExpr::getCast(NewDGV
, DGV
->getType()));
523 DGV
->eraseFromParent();
524 NewDGV
->setName(SGV
->getName());
528 DGV
->setLinkage(NewLinkage
);
531 // Inherit const as appropriate
532 DGV
->setConstant(SGV
->isConstant());
533 DGV
->setInitializer(0);
535 if (SGV
->isConstant() && !DGV
->isConstant()) {
536 if (DGV
->isExternal())
537 DGV
->setConstant(true);
539 SGV
->setLinkage(GlobalValue::ExternalLinkage
);
540 SGV
->setInitializer(0);
543 ValueMap
.insert(std::make_pair(SGV
,
544 ConstantExpr::getCast(DGV
,
552 // LinkGlobalInits - Update the initializers in the Dest module now that all
553 // globals that may be referenced are in Dest.
554 static bool LinkGlobalInits(Module
*Dest
, const Module
*Src
,
555 std::map
<const Value
*, Value
*> &ValueMap
,
558 // Loop over all of the globals in the src module, mapping them over as we go
559 for (Module::const_global_iterator I
= Src
->global_begin(), E
= Src
->global_end(); I
!= E
; ++I
){
560 const GlobalVariable
*SGV
= I
;
562 if (SGV
->hasInitializer()) { // Only process initialized GV's
563 // Figure out what the initializer looks like in the dest module...
565 cast
<Constant
>(RemapOperand(SGV
->getInitializer(), ValueMap
));
567 GlobalVariable
*DGV
= cast
<GlobalVariable
>(ValueMap
[SGV
]);
568 if (DGV
->hasInitializer()) {
569 if (SGV
->hasExternalLinkage()) {
570 if (DGV
->getInitializer() != SInit
)
571 return Error(Err
, "Global Variable Collision on '" +
572 ToStr(SGV
->getType(), Src
) +"':%"+SGV
->getName()+
573 " - Global variables have different initializers");
574 } else if (DGV
->hasLinkOnceLinkage() || DGV
->hasWeakLinkage()) {
575 // Nothing is required, mapped values will take the new global
577 } else if (SGV
->hasLinkOnceLinkage() || SGV
->hasWeakLinkage()) {
578 // Nothing is required, mapped values will take the new global
580 } else if (DGV
->hasAppendingLinkage()) {
581 assert(0 && "Appending linkage unimplemented!");
583 assert(0 && "Unknown linkage!");
586 // Copy the initializer over now...
587 DGV
->setInitializer(SInit
);
594 // LinkFunctionProtos - Link the functions together between the two modules,
595 // without doing function bodies... this just adds external function prototypes
596 // to the Dest function...
598 static bool LinkFunctionProtos(Module
*Dest
, const Module
*Src
,
599 std::map
<const Value
*, Value
*> &ValueMap
,
600 std::map
<std::string
, GlobalValue
*> &GlobalsByName
,
602 SymbolTable
*ST
= (SymbolTable
*)&Dest
->getSymbolTable();
604 // Loop over all of the functions in the src module, mapping them over as we
606 for (Module::const_iterator I
= Src
->begin(), E
= Src
->end(); I
!= E
; ++I
) {
607 const Function
*SF
= I
; // SrcFunction
609 if (SF
->hasName() && !SF
->hasInternalLinkage()) {
610 // Check to see if may have to link the function.
611 if (!(DF
= Dest
->getFunction(SF
->getName(), SF
->getFunctionType()))) {
612 std::map
<std::string
, GlobalValue
*>::iterator EF
=
613 GlobalsByName
.find(SF
->getName());
614 if (EF
!= GlobalsByName
.end())
615 DF
= dyn_cast
<Function
>(EF
->second
);
616 if (DF
&& RecursiveResolveTypes(SF
->getType(), DF
->getType(), ST
, ""))
617 DF
= 0; // FIXME: gross.
621 if (!DF
|| SF
->hasInternalLinkage() || DF
->hasInternalLinkage()) {
622 // Function does not already exist, simply insert an function signature
623 // identical to SF into the dest module...
624 Function
*NewDF
= new Function(SF
->getFunctionType(), SF
->getLinkage(),
625 SF
->getName(), Dest
);
626 NewDF
->setCallingConv(SF
->getCallingConv());
628 // If the LLVM runtime renamed the function, but it is an externally
629 // visible symbol, DF must be an existing function with internal linkage.
631 if (NewDF
->getName() != SF
->getName() && !NewDF
->hasInternalLinkage())
632 ForceRenaming(NewDF
, SF
->getName());
634 // ... and remember this mapping...
635 ValueMap
.insert(std::make_pair(SF
, NewDF
));
636 } else if (SF
->isExternal()) {
637 // If SF is external or if both SF & DF are external.. Just link the
638 // external functions, we aren't adding anything.
639 ValueMap
.insert(std::make_pair(SF
, DF
));
640 } else if (DF
->isExternal()) { // If DF is external but SF is not...
641 // Link the external functions, update linkage qualifiers
642 ValueMap
.insert(std::make_pair(SF
, DF
));
643 DF
->setLinkage(SF
->getLinkage());
645 } else if (SF
->hasWeakLinkage() || SF
->hasLinkOnceLinkage()) {
646 // At this point we know that DF has LinkOnce, Weak, or External linkage.
647 ValueMap
.insert(std::make_pair(SF
, DF
));
649 // Linkonce+Weak = Weak
650 if (DF
->hasLinkOnceLinkage() && SF
->hasWeakLinkage())
651 DF
->setLinkage(SF
->getLinkage());
653 } else if (DF
->hasWeakLinkage() || DF
->hasLinkOnceLinkage()) {
654 // At this point we know that SF has LinkOnce or External linkage.
655 ValueMap
.insert(std::make_pair(SF
, DF
));
656 if (!SF
->hasLinkOnceLinkage()) // Don't inherit linkonce linkage
657 DF
->setLinkage(SF
->getLinkage());
659 } else if (SF
->getLinkage() != DF
->getLinkage()) {
660 return Error(Err
, "Functions named '" + SF
->getName() +
661 "' have different linkage specifiers!");
662 } else if (SF
->hasExternalLinkage()) {
663 // The function is defined in both modules!!
664 return Error(Err
, "Function '" +
665 ToStr(SF
->getFunctionType(), Src
) + "':\"" +
666 SF
->getName() + "\" - Function is already defined!");
668 assert(0 && "Unknown linkage configuration found!");
674 // LinkFunctionBody - Copy the source function over into the dest function and
675 // fix up references to values. At this point we know that Dest is an external
676 // function, and that Src is not.
677 static bool LinkFunctionBody(Function
*Dest
, Function
*Src
,
678 std::map
<const Value
*, Value
*> &GlobalMap
,
680 assert(Src
&& Dest
&& Dest
->isExternal() && !Src
->isExternal());
682 // Go through and convert function arguments over, remembering the mapping.
683 Function::arg_iterator DI
= Dest
->arg_begin();
684 for (Function::arg_iterator I
= Src
->arg_begin(), E
= Src
->arg_end();
686 DI
->setName(I
->getName()); // Copy the name information over...
688 // Add a mapping to our local map
689 GlobalMap
.insert(std::make_pair(I
, DI
));
692 // Splice the body of the source function into the dest function.
693 Dest
->getBasicBlockList().splice(Dest
->end(), Src
->getBasicBlockList());
695 // At this point, all of the instructions and values of the function are now
696 // copied over. The only problem is that they are still referencing values in
697 // the Source function as operands. Loop through all of the operands of the
698 // functions and patch them up to point to the local versions...
700 for (Function::iterator BB
= Dest
->begin(), BE
= Dest
->end(); BB
!= BE
; ++BB
)
701 for (BasicBlock::iterator I
= BB
->begin(), E
= BB
->end(); I
!= E
; ++I
)
702 for (Instruction::op_iterator OI
= I
->op_begin(), OE
= I
->op_end();
704 if (!isa
<Instruction
>(*OI
) && !isa
<BasicBlock
>(*OI
))
705 *OI
= RemapOperand(*OI
, GlobalMap
);
707 // There is no need to map the arguments anymore.
708 for (Function::arg_iterator I
= Src
->arg_begin(), E
= Src
->arg_end(); I
!= E
; ++I
)
715 // LinkFunctionBodies - Link in the function bodies that are defined in the
716 // source module into the DestModule. This consists basically of copying the
717 // function over and fixing up references to values.
718 static bool LinkFunctionBodies(Module
*Dest
, Module
*Src
,
719 std::map
<const Value
*, Value
*> &ValueMap
,
722 // Loop over all of the functions in the src module, mapping them over as we
724 for (Module::iterator SF
= Src
->begin(), E
= Src
->end(); SF
!= E
; ++SF
) {
725 if (!SF
->isExternal()) { // No body if function is external
726 Function
*DF
= cast
<Function
>(ValueMap
[SF
]); // Destination function
728 // DF not external SF external?
729 if (DF
->isExternal()) {
730 // Only provide the function body if there isn't one already.
731 if (LinkFunctionBody(DF
, SF
, ValueMap
, Err
))
739 // LinkAppendingVars - If there were any appending global variables, link them
740 // together now. Return true on error.
741 static bool LinkAppendingVars(Module
*M
,
742 std::multimap
<std::string
, GlobalVariable
*> &AppendingVars
,
743 std::string
*ErrorMsg
) {
744 if (AppendingVars
.empty()) return false; // Nothing to do.
746 // Loop over the multimap of appending vars, processing any variables with the
747 // same name, forming a new appending global variable with both of the
748 // initializers merged together, then rewrite references to the old variables
750 std::vector
<Constant
*> Inits
;
751 while (AppendingVars
.size() > 1) {
752 // Get the first two elements in the map...
753 std::multimap
<std::string
,
754 GlobalVariable
*>::iterator Second
= AppendingVars
.begin(), First
=Second
++;
756 // If the first two elements are for different names, there is no pair...
757 // Otherwise there is a pair, so link them together...
758 if (First
->first
== Second
->first
) {
759 GlobalVariable
*G1
= First
->second
, *G2
= Second
->second
;
760 const ArrayType
*T1
= cast
<ArrayType
>(G1
->getType()->getElementType());
761 const ArrayType
*T2
= cast
<ArrayType
>(G2
->getType()->getElementType());
763 // Check to see that they two arrays agree on type...
764 if (T1
->getElementType() != T2
->getElementType())
765 return Error(ErrorMsg
,
766 "Appending variables with different element types need to be linked!");
767 if (G1
->isConstant() != G2
->isConstant())
768 return Error(ErrorMsg
,
769 "Appending variables linked with different const'ness!");
771 unsigned NewSize
= T1
->getNumElements() + T2
->getNumElements();
772 ArrayType
*NewType
= ArrayType::get(T1
->getElementType(), NewSize
);
774 G1
->setName(""); // Clear G1's name in case of a conflict!
776 // Create the new global variable...
778 new GlobalVariable(NewType
, G1
->isConstant(), G1
->getLinkage(),
779 /*init*/0, First
->first
, M
);
781 // Merge the initializer...
782 Inits
.reserve(NewSize
);
783 if (ConstantArray
*I
= dyn_cast
<ConstantArray
>(G1
->getInitializer())) {
784 for (unsigned i
= 0, e
= T1
->getNumElements(); i
!= e
; ++i
)
785 Inits
.push_back(I
->getOperand(i
));
787 assert(isa
<ConstantAggregateZero
>(G1
->getInitializer()));
788 Constant
*CV
= Constant::getNullValue(T1
->getElementType());
789 for (unsigned i
= 0, e
= T1
->getNumElements(); i
!= e
; ++i
)
792 if (ConstantArray
*I
= dyn_cast
<ConstantArray
>(G2
->getInitializer())) {
793 for (unsigned i
= 0, e
= T2
->getNumElements(); i
!= e
; ++i
)
794 Inits
.push_back(I
->getOperand(i
));
796 assert(isa
<ConstantAggregateZero
>(G2
->getInitializer()));
797 Constant
*CV
= Constant::getNullValue(T2
->getElementType());
798 for (unsigned i
= 0, e
= T2
->getNumElements(); i
!= e
; ++i
)
801 NG
->setInitializer(ConstantArray::get(NewType
, Inits
));
804 // Replace any uses of the two global variables with uses of the new
807 // FIXME: This should rewrite simple/straight-forward uses such as
808 // getelementptr instructions to not use the Cast!
809 G1
->replaceAllUsesWith(ConstantExpr::getCast(NG
, G1
->getType()));
810 G2
->replaceAllUsesWith(ConstantExpr::getCast(NG
, G2
->getType()));
812 // Remove the two globals from the module now...
813 M
->getGlobalList().erase(G1
);
814 M
->getGlobalList().erase(G2
);
816 // Put the new global into the AppendingVars map so that we can handle
817 // linking of more than two vars...
820 AppendingVars
.erase(First
);
827 // LinkModules - This function links two modules together, with the resulting
828 // left module modified to be the composite of the two input modules. If an
829 // error occurs, true is returned and ErrorMsg (if not null) is set to indicate
830 // the problem. Upon failure, the Dest module could be in a modified state, and
831 // shouldn't be relied on to be consistent.
833 Linker::LinkModules(Module
*Dest
, Module
*Src
, std::string
*ErrorMsg
) {
834 assert(Dest
!= 0 && "Invalid Destination module");
835 assert(Src
!= 0 && "Invalid Source Module");
837 if (Dest
->getEndianness() == Module::AnyEndianness
)
838 Dest
->setEndianness(Src
->getEndianness());
839 if (Dest
->getPointerSize() == Module::AnyPointerSize
)
840 Dest
->setPointerSize(Src
->getPointerSize());
841 if (Dest
->getTargetTriple().empty())
842 Dest
->setTargetTriple(Src
->getTargetTriple());
844 if (Src
->getEndianness() != Module::AnyEndianness
&&
845 Dest
->getEndianness() != Src
->getEndianness())
846 std::cerr
<< "WARNING: Linking two modules of different endianness!\n";
847 if (Src
->getPointerSize() != Module::AnyPointerSize
&&
848 Dest
->getPointerSize() != Src
->getPointerSize())
849 std::cerr
<< "WARNING: Linking two modules of different pointer size!\n";
850 if (!Src
->getTargetTriple().empty() &&
851 Dest
->getTargetTriple() != Src
->getTargetTriple())
852 std::cerr
<< "WARNING: Linking two modules of different target triples!\n";
854 if (!Src
->getModuleInlineAsm().empty()) {
855 if (Dest
->getModuleInlineAsm().empty())
856 Dest
->setModuleInlineAsm(Src
->getModuleInlineAsm());
858 Dest
->setModuleInlineAsm(Dest
->getModuleInlineAsm()+"\n"+
859 Src
->getModuleInlineAsm());
862 // Update the destination module's dependent libraries list with the libraries
863 // from the source module. There's no opportunity for duplicates here as the
864 // Module ensures that duplicate insertions are discarded.
865 Module::lib_iterator SI
= Src
->lib_begin();
866 Module::lib_iterator SE
= Src
->lib_end();
868 Dest
->addLibrary(*SI
);
872 // LinkTypes - Go through the symbol table of the Src module and see if any
873 // types are named in the src module that are not named in the Dst module.
874 // Make sure there are no type name conflicts.
875 if (LinkTypes(Dest
, Src
, ErrorMsg
)) return true;
877 // ValueMap - Mapping of values from what they used to be in Src, to what they
879 std::map
<const Value
*, Value
*> ValueMap
;
881 // AppendingVars - Keep track of global variables in the destination module
882 // with appending linkage. After the module is linked together, they are
883 // appended and the module is rewritten.
884 std::multimap
<std::string
, GlobalVariable
*> AppendingVars
;
886 // GlobalsByName - The LLVM SymbolTable class fights our best efforts at
887 // linking by separating globals by type. Until PR411 is fixed, we replicate
888 // it's functionality here.
889 std::map
<std::string
, GlobalValue
*> GlobalsByName
;
891 for (Module::global_iterator I
= Dest
->global_begin(), E
= Dest
->global_end(); I
!= E
; ++I
) {
892 // Add all of the appending globals already in the Dest module to
894 if (I
->hasAppendingLinkage())
895 AppendingVars
.insert(std::make_pair(I
->getName(), I
));
897 // Keep track of all globals by name.
898 if (!I
->hasInternalLinkage() && I
->hasName())
899 GlobalsByName
[I
->getName()] = I
;
902 // Keep track of all globals by name.
903 for (Module::iterator I
= Dest
->begin(), E
= Dest
->end(); I
!= E
; ++I
)
904 if (!I
->hasInternalLinkage() && I
->hasName())
905 GlobalsByName
[I
->getName()] = I
;
907 // Insert all of the globals in src into the Dest module... without linking
908 // initializers (which could refer to functions not yet mapped over).
909 if (LinkGlobals(Dest
, Src
, ValueMap
, AppendingVars
, GlobalsByName
, ErrorMsg
))
912 // Link the functions together between the two modules, without doing function
913 // bodies... this just adds external function prototypes to the Dest
914 // function... We do this so that when we begin processing function bodies,
915 // all of the global values that may be referenced are available in our
917 if (LinkFunctionProtos(Dest
, Src
, ValueMap
, GlobalsByName
, ErrorMsg
))
920 // Update the initializers in the Dest module now that all globals that may
921 // be referenced are in Dest.
922 if (LinkGlobalInits(Dest
, Src
, ValueMap
, ErrorMsg
)) return true;
924 // Link in the function bodies that are defined in the source module into the
925 // DestModule. This consists basically of copying the function over and
926 // fixing up references to values.
927 if (LinkFunctionBodies(Dest
, Src
, ValueMap
, ErrorMsg
)) return true;
929 // If there were any appending global variables, link them together now.
930 if (LinkAppendingVars(Dest
, AppendingVars
, ErrorMsg
)) return true;
932 // If the source library's module id is in the dependent library list of the
933 // destination library, remove it since that module is now linked in.
935 modId
.set(Src
->getModuleIdentifier());
936 if (!modId
.isEmpty())
937 Dest
->removeLibrary(modId
.getBasename());