64c00327f29041ffddd484bbefe605850e7f7993
[oota-llvm.git] / lib / Linker / LinkModules.cpp
1 //===- lib/Linker/LinkModules.cpp - Module Linker Implementation ----------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the LLVM module linker.
11 //
12 // 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
16 //
17 //===----------------------------------------------------------------------===//
18
19 #include "llvm/Linker.h"
20 #include "llvm/Constants.h"
21 #include "llvm/DerivedTypes.h"
22 #include "llvm/Module.h"
23 #include "llvm/TypeSymbolTable.h"
24 #include "llvm/ValueSymbolTable.h"
25 #include "llvm/Instructions.h"
26 #include "llvm/Assembly/Writer.h"
27 #include "llvm/Support/Streams.h"
28 #include "llvm/System/Path.h"
29 #include <sstream>
30 using namespace llvm;
31
32 // Error - Simple wrapper function to conditionally assign to E and return true.
33 // This just makes error return conditions a little bit simpler...
34 static inline bool Error(std::string *E, const std::string &Message) {
35   if (E) *E = Message;
36   return true;
37 }
38
39 // ToStr - Simple wrapper function to convert a type to a string.
40 static std::string ToStr(const Type *Ty, const Module *M) {
41   std::ostringstream OS;
42   WriteTypeSymbolic(OS, Ty, M);
43   return OS.str();
44 }
45
46 //
47 // Function: ResolveTypes()
48 //
49 // Description:
50 //  Attempt to link the two specified types together.
51 //
52 // Inputs:
53 //  DestTy - The type to which we wish to resolve.
54 //  SrcTy  - The original type which we want to resolve.
55 //
56 // Outputs:
57 //  DestST - The symbol table in which the new type should be placed.
58 //
59 // Return value:
60 //  true  - There is an error and the types cannot yet be linked.
61 //  false - No errors.
62 //
63 static bool ResolveTypes(const Type *DestTy, const Type *SrcTy) {
64   if (DestTy == SrcTy) return false;       // If already equal, noop
65   assert(DestTy && SrcTy && "Can't handle null types");
66
67   if (const OpaqueType *OT = dyn_cast<OpaqueType>(DestTy)) {
68     // Type _is_ in module, just opaque...
69     const_cast<OpaqueType*>(OT)->refineAbstractTypeTo(SrcTy);
70   } else if (const OpaqueType *OT = dyn_cast<OpaqueType>(SrcTy)) {
71     const_cast<OpaqueType*>(OT)->refineAbstractTypeTo(DestTy);
72   } else {
73     return true;  // Cannot link types... not-equal and neither is opaque.
74   }
75   return false;
76 }
77
78 static const FunctionType *getFT(const PATypeHolder &TH) {
79   return cast<FunctionType>(TH.get());
80 }
81 static const StructType *getST(const PATypeHolder &TH) {
82   return cast<StructType>(TH.get());
83 }
84
85 // RecursiveResolveTypes - This is just like ResolveTypes, except that it
86 // recurses down into derived types, merging the used types if the parent types
87 // are compatible.
88 static bool RecursiveResolveTypesI(const PATypeHolder &DestTy,
89                                    const PATypeHolder &SrcTy,
90                 std::vector<std::pair<PATypeHolder, PATypeHolder> > &Pointers) {
91   const Type *SrcTyT = SrcTy.get();
92   const Type *DestTyT = DestTy.get();
93   if (DestTyT == SrcTyT) return false;       // If already equal, noop
94
95   // If we found our opaque type, resolve it now!
96   if (isa<OpaqueType>(DestTyT) || isa<OpaqueType>(SrcTyT))
97     return ResolveTypes(DestTyT, SrcTyT);
98
99   // Two types cannot be resolved together if they are of different primitive
100   // type.  For example, we cannot resolve an int to a float.
101   if (DestTyT->getTypeID() != SrcTyT->getTypeID()) return true;
102
103   // Otherwise, resolve the used type used by this derived type...
104   switch (DestTyT->getTypeID()) {
105   default:
106     return true;
107   case Type::FunctionTyID: {
108     if (cast<FunctionType>(DestTyT)->isVarArg() !=
109         cast<FunctionType>(SrcTyT)->isVarArg() ||
110         cast<FunctionType>(DestTyT)->getNumContainedTypes() !=
111         cast<FunctionType>(SrcTyT)->getNumContainedTypes())
112       return true;
113     for (unsigned i = 0, e = getFT(DestTy)->getNumContainedTypes(); i != e; ++i)
114       if (RecursiveResolveTypesI(getFT(DestTy)->getContainedType(i),
115                                  getFT(SrcTy)->getContainedType(i), Pointers))
116         return true;
117     return false;
118   }
119   case Type::StructTyID: {
120     if (getST(DestTy)->getNumContainedTypes() !=
121         getST(SrcTy)->getNumContainedTypes())
122       return true;
123     for (unsigned i = 0, e = getST(DestTy)->getNumContainedTypes(); i != e; ++i)
124       if (RecursiveResolveTypesI(getST(DestTy)->getContainedType(i),
125                                  getST(SrcTy)->getContainedType(i), Pointers))
126         return true;
127     return false;
128   }
129   case Type::ArrayTyID: {
130     const ArrayType *DAT = cast<ArrayType>(DestTy.get());
131     const ArrayType *SAT = cast<ArrayType>(SrcTy.get());
132     if (DAT->getNumElements() != SAT->getNumElements()) return true;
133     return RecursiveResolveTypesI(DAT->getElementType(), SAT->getElementType(),
134                                   Pointers);
135   }
136   case Type::VectorTyID: {
137     const VectorType *DVT = cast<VectorType>(DestTy.get());
138     const VectorType *SVT = cast<VectorType>(SrcTy.get());
139     if (DVT->getNumElements() != SVT->getNumElements()) return true;
140     return RecursiveResolveTypesI(DVT->getElementType(), SVT->getElementType(),
141                                   Pointers);
142   }
143   case Type::PointerTyID: {
144     // If this is a pointer type, check to see if we have already seen it.  If
145     // so, we are in a recursive branch.  Cut off the search now.  We cannot use
146     // an associative container for this search, because the type pointers (keys
147     // in the container) change whenever types get resolved...
148     for (unsigned i = 0, e = Pointers.size(); i != e; ++i)
149       if (Pointers[i].first == DestTy)
150         return Pointers[i].second != SrcTy;
151
152     // Otherwise, add the current pointers to the vector to stop recursion on
153     // this pair.
154     Pointers.push_back(std::make_pair(DestTyT, SrcTyT));
155     bool Result =
156       RecursiveResolveTypesI(cast<PointerType>(DestTy.get())->getElementType(),
157                              cast<PointerType>(SrcTy.get())->getElementType(),
158                              Pointers);
159     return Result;
160   }
161   }
162 }
163
164 static bool RecursiveResolveTypes(const PATypeHolder &DestTy,
165                                   const PATypeHolder &SrcTy) {
166   std::vector<std::pair<PATypeHolder, PATypeHolder> > PointerTypes;
167   return RecursiveResolveTypesI(DestTy, SrcTy, PointerTypes);
168 }
169
170
171 // LinkTypes - Go through the symbol table of the Src module and see if any
172 // types are named in the src module that are not named in the Dst module.
173 // Make sure there are no type name conflicts.
174 static bool LinkTypes(Module *Dest, const Module *Src, std::string *Err) {
175         TypeSymbolTable *DestST = &Dest->getTypeSymbolTable();
176   const TypeSymbolTable *SrcST  = &Src->getTypeSymbolTable();
177
178   // Look for a type plane for Type's...
179   TypeSymbolTable::const_iterator TI = SrcST->begin();
180   TypeSymbolTable::const_iterator TE = SrcST->end();
181   if (TI == TE) return false;  // No named types, do nothing.
182
183   // Some types cannot be resolved immediately because they depend on other
184   // types being resolved to each other first.  This contains a list of types we
185   // are waiting to recheck.
186   std::vector<std::string> DelayedTypesToResolve;
187
188   for ( ; TI != TE; ++TI ) {
189     const std::string &Name = TI->first;
190     const Type *RHS = TI->second;
191
192     // Check to see if this type name is already in the dest module.
193     Type *Entry = DestST->lookup(Name);
194
195     // If the name is just in the source module, bring it over to the dest.
196     if (Entry == 0) {
197       if (!Name.empty())
198         DestST->insert(Name, const_cast<Type*>(RHS));
199     } else if (ResolveTypes(Entry, RHS)) {
200       // They look different, save the types 'till later to resolve.
201       DelayedTypesToResolve.push_back(Name);
202     }
203   }
204
205   // Iteratively resolve types while we can...
206   while (!DelayedTypesToResolve.empty()) {
207     // Loop over all of the types, attempting to resolve them if possible...
208     unsigned OldSize = DelayedTypesToResolve.size();
209
210     // Try direct resolution by name...
211     for (unsigned i = 0; i != DelayedTypesToResolve.size(); ++i) {
212       const std::string &Name = DelayedTypesToResolve[i];
213       Type *T1 = SrcST->lookup(Name);
214       Type *T2 = DestST->lookup(Name);
215       if (!ResolveTypes(T2, T1)) {
216         // We are making progress!
217         DelayedTypesToResolve.erase(DelayedTypesToResolve.begin()+i);
218         --i;
219       }
220     }
221
222     // Did we not eliminate any types?
223     if (DelayedTypesToResolve.size() == OldSize) {
224       // Attempt to resolve subelements of types.  This allows us to merge these
225       // two types: { int* } and { opaque* }
226       for (unsigned i = 0, e = DelayedTypesToResolve.size(); i != e; ++i) {
227         const std::string &Name = DelayedTypesToResolve[i];
228         PATypeHolder T1(SrcST->lookup(Name));
229         PATypeHolder T2(DestST->lookup(Name));
230
231         if (!RecursiveResolveTypes(T2, T1)) {
232           // We are making progress!
233           DelayedTypesToResolve.erase(DelayedTypesToResolve.begin()+i);
234
235           // Go back to the main loop, perhaps we can resolve directly by name
236           // now...
237           break;
238         }
239       }
240
241       // If we STILL cannot resolve the types, then there is something wrong.
242       if (DelayedTypesToResolve.size() == OldSize) {
243         // Remove the symbol name from the destination.
244         DelayedTypesToResolve.pop_back();
245       }
246     }
247   }
248
249
250   return false;
251 }
252
253 static void PrintMap(const std::map<const Value*, Value*> &M) {
254   for (std::map<const Value*, Value*>::const_iterator I = M.begin(), E =M.end();
255        I != E; ++I) {
256     cerr << " Fr: " << (void*)I->first << " ";
257     I->first->dump();
258     cerr << " To: " << (void*)I->second << " ";
259     I->second->dump();
260     cerr << "\n";
261   }
262 }
263
264
265 // RemapOperand - Use ValueMap to convert constants from one module to another.
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()) 
270     return I->second;
271
272   // Check to see if it's a constant that we are interested in transforming.
273   Value *Result = 0;
274   if (const Constant *CPV = dyn_cast<Constant>(In)) {
275     if ((!isa<DerivedType>(CPV->getType()) && !isa<ConstantExpr>(CPV)) ||
276         isa<ConstantInt>(CPV) || isa<ConstantAggregateZero>(CPV))
277       return const_cast<Constant*>(CPV);   // Simple constants stay identical.
278
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 (const ConstantVector *CP = dyn_cast<ConstantVector>(CPV)) {
292       std::vector<Constant*> Operands(CP->getNumOperands());
293       for (unsigned i = 0, e = CP->getNumOperands(); i != e; ++i)
294         Operands[i] = cast<Constant>(RemapOperand(CP->getOperand(i), ValueMap));
295       Result = ConstantVector::get(Operands);
296     } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CPV)) {
297       std::vector<Constant*> Ops;
298       for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i)
299         Ops.push_back(cast<Constant>(RemapOperand(CE->getOperand(i),ValueMap)));
300       Result = CE->getWithOperands(Ops);
301     } else if (isa<GlobalValue>(CPV)) {
302       assert(0 && "Unmapped global?");
303     } else {
304       assert(0 && "Unknown type of derived type constant value!");
305     }
306   } else if (isa<InlineAsm>(In)) {
307     Result = const_cast<Value*>(In);
308   }
309   
310   // Cache the mapping in our local map structure
311   if (Result) {
312     ValueMap[In] = Result;
313     return Result;
314   }
315   
316
317   cerr << "LinkModules ValueMap: \n";
318   PrintMap(ValueMap);
319
320   cerr << "Couldn't remap value: " << (void*)In << " " << *In << "\n";
321   assert(0 && "Couldn't remap value!");
322   return 0;
323 }
324
325 /// ForceRenaming - The LLVM SymbolTable class autorenames globals that conflict
326 /// in the symbol table.  This is good for all clients except for us.  Go
327 /// through the trouble to force this back.
328 static void ForceRenaming(GlobalValue *GV, const std::string &Name) {
329   assert(GV->getName() != Name && "Can't force rename to self");
330   ValueSymbolTable &ST = GV->getParent()->getValueSymbolTable();
331
332   // If there is a conflict, rename the conflict.
333   if (GlobalValue *ConflictGV = cast_or_null<GlobalValue>(ST.lookup(Name))) {
334     assert(ConflictGV->hasInternalLinkage() &&
335            "Not conflicting with a static global, should link instead!");
336     GV->takeName(ConflictGV);
337     ConflictGV->setName(Name);    // This will cause ConflictGV to get renamed
338     assert(ConflictGV->getName() != Name && "ForceRenaming didn't work");
339   } else {
340     GV->setName(Name);              // Force the name back
341   }
342 }
343
344 /// CopyGVAttributes - copy additional attributes (those not needed to construct
345 /// a GlobalValue) from the SrcGV to the DestGV. 
346 static void CopyGVAttributes(GlobalValue *DestGV, const GlobalValue *SrcGV) {
347   // Use the maximum alignment, rather than just copying the alignment of SrcGV.
348   unsigned Alignment = std::max(DestGV->getAlignment(), SrcGV->getAlignment());
349   DestGV->copyAttributesFrom(SrcGV);
350   DestGV->setAlignment(Alignment);
351 }
352
353 /// GetLinkageResult - This analyzes the two global values and determines what
354 /// the result will look like in the destination module.  In particular, it
355 /// computes the resultant linkage type, computes whether the global in the
356 /// source should be copied over to the destination (replacing the existing
357 /// one), and computes whether this linkage is an error or not. It also performs
358 /// visibility checks: we cannot link together two symbols with different
359 /// visibilities.
360 static bool GetLinkageResult(GlobalValue *Dest, const GlobalValue *Src,
361                              GlobalValue::LinkageTypes &LT, bool &LinkFromSrc,
362                              std::string *Err) {
363   assert((!Dest || !Src->hasInternalLinkage()) &&
364          "If Src has internal linkage, Dest shouldn't be set!");
365   if (!Dest) {
366     // Linking something to nothing.
367     LinkFromSrc = true;
368     LT = Src->getLinkage();
369   } else if (Src->isDeclaration()) {
370     // If Src is external or if both Src & Dest are external..  Just link the
371     // external globals, we aren't adding anything.
372     if (Src->hasDLLImportLinkage()) {
373       // If one of GVs has DLLImport linkage, result should be dllimport'ed.
374       if (Dest->isDeclaration()) {
375         LinkFromSrc = true;
376         LT = Src->getLinkage();
377       }      
378     } else if (Dest->hasExternalWeakLinkage()) {
379       //If the Dest is weak, use the source linkage
380       LinkFromSrc = true;
381       LT = Src->getLinkage();
382     } else {
383       LinkFromSrc = false;
384       LT = Dest->getLinkage();
385     }
386   } else if (Dest->isDeclaration() && !Dest->hasDLLImportLinkage()) {
387     // If Dest is external but Src is not:
388     LinkFromSrc = true;
389     LT = Src->getLinkage();
390   } else if (Src->hasAppendingLinkage() || Dest->hasAppendingLinkage()) {
391     if (Src->getLinkage() != Dest->getLinkage())
392       return Error(Err, "Linking globals named '" + Src->getName() +
393             "': can only link appending global with another appending global!");
394     LinkFromSrc = true; // Special cased.
395     LT = Src->getLinkage();
396   } else if (Src->hasWeakLinkage() || Src->hasLinkOnceLinkage() ||
397              Src->hasCommonLinkage()) {
398     // At this point we know that Dest has LinkOnce, External*, Weak, Common,
399     // or DLL* linkage.
400     if ((Dest->hasLinkOnceLinkage() && 
401           (Src->hasWeakLinkage() || Src->hasCommonLinkage())) ||
402         Dest->hasExternalWeakLinkage()) {
403       LinkFromSrc = true;
404       LT = Src->getLinkage();
405     } else {
406       LinkFromSrc = false;
407       LT = Dest->getLinkage();
408     }
409   } else if (Dest->hasWeakLinkage() || Dest->hasLinkOnceLinkage() ||
410              Dest->hasCommonLinkage()) {
411     // At this point we know that Src has External* or DLL* linkage.
412     if (Src->hasExternalWeakLinkage()) {
413       LinkFromSrc = false;
414       LT = Dest->getLinkage();
415     } else {
416       LinkFromSrc = true;
417       LT = GlobalValue::ExternalLinkage;
418     }
419   } else {
420     assert((Dest->hasExternalLinkage() ||
421             Dest->hasDLLImportLinkage() ||
422             Dest->hasDLLExportLinkage() ||
423             Dest->hasExternalWeakLinkage()) &&
424            (Src->hasExternalLinkage() ||
425             Src->hasDLLImportLinkage() ||
426             Src->hasDLLExportLinkage() ||
427             Src->hasExternalWeakLinkage()) &&
428            "Unexpected linkage type!");
429     return Error(Err, "Linking globals named '" + Src->getName() +
430                  "': symbol multiply defined!");
431   }
432
433   // Check visibility
434   if (Dest && Src->getVisibility() != Dest->getVisibility())
435     if (!Src->isDeclaration() && !Dest->isDeclaration())
436       return Error(Err, "Linking globals named '" + Src->getName() +
437                    "': symbols have different visibilities!");
438   return false;
439 }
440
441 // LinkGlobals - Loop through the global variables in the src module and merge
442 // them into the dest module.
443 static bool LinkGlobals(Module *Dest, const Module *Src,
444                         std::map<const Value*, Value*> &ValueMap,
445                     std::multimap<std::string, GlobalVariable *> &AppendingVars,
446                         std::string *Err) {
447   // Loop over all of the globals in the src module, mapping them over as we go
448   for (Module::const_global_iterator I = Src->global_begin(), E = Src->global_end();
449        I != E; ++I) {
450     const GlobalVariable *SGV = I;
451     GlobalValue *DGV = 0;
452
453     // Check to see if may have to link the global with the global
454     if (SGV->hasName() && !SGV->hasInternalLinkage()) {
455       DGV = Dest->getGlobalVariable(SGV->getName());
456       if (DGV && DGV->getType() != SGV->getType())
457         // If types don't agree due to opaque types, try to resolve them.
458         RecursiveResolveTypes(SGV->getType(), DGV->getType());
459     }
460
461     // Check to see if may have to link the global with the alias
462     if (!DGV && SGV->hasName() && !SGV->hasInternalLinkage()) {
463       DGV = Dest->getNamedAlias(SGV->getName());
464       if (DGV && DGV->getType() != SGV->getType())
465         // If types don't agree due to opaque types, try to resolve them.
466         RecursiveResolveTypes(SGV->getType(), DGV->getType());
467     }
468
469     if (DGV && DGV->hasInternalLinkage())
470       DGV = 0;
471
472     assert((SGV->hasInitializer() || SGV->hasExternalWeakLinkage() ||
473             SGV->hasExternalLinkage() || SGV->hasDLLImportLinkage()) &&
474            "Global must either be external or have an initializer!");
475
476     GlobalValue::LinkageTypes NewLinkage = GlobalValue::InternalLinkage;
477     bool LinkFromSrc = false;
478     if (GetLinkageResult(DGV, SGV, NewLinkage, LinkFromSrc, Err))
479       return true;
480
481     if (!DGV) {
482       // No linking to be performed, simply create an identical version of the
483       // symbol over in the dest module... the initializer will be filled in
484       // later by LinkGlobalInits...
485       GlobalVariable *NewDGV =
486         new GlobalVariable(SGV->getType()->getElementType(),
487                            SGV->isConstant(), SGV->getLinkage(), /*init*/0,
488                            SGV->getName(), Dest);
489       // Propagate alignment, visibility and section info.
490       CopyGVAttributes(NewDGV, SGV);
491
492       // If the LLVM runtime renamed the global, but it is an externally visible
493       // symbol, DGV must be an existing global with internal linkage.  Rename
494       // it.
495       if (NewDGV->getName() != SGV->getName() && !NewDGV->hasInternalLinkage())
496         ForceRenaming(NewDGV, SGV->getName());
497
498       // Make sure to remember this mapping...
499       ValueMap[SGV] = NewDGV;
500
501       if (SGV->hasAppendingLinkage())
502         // Keep track that this is an appending variable...
503         AppendingVars.insert(std::make_pair(SGV->getName(), NewDGV));
504     } else if (DGV->hasAppendingLinkage()) {
505       // No linking is performed yet.  Just insert a new copy of the global, and
506       // keep track of the fact that it is an appending variable in the
507       // AppendingVars map.  The name is cleared out so that no linkage is
508       // performed.
509       GlobalVariable *NewDGV =
510         new GlobalVariable(SGV->getType()->getElementType(),
511                            SGV->isConstant(), SGV->getLinkage(), /*init*/0,
512                            "", Dest);
513
514       // Set alignment allowing CopyGVAttributes merge it with alignment of SGV.
515       NewDGV->setAlignment(DGV->getAlignment());
516       // Propagate alignment, section and visibility info.
517       CopyGVAttributes(NewDGV, SGV);
518
519       // Make sure to remember this mapping...
520       ValueMap[SGV] = NewDGV;
521
522       // Keep track that this is an appending variable...
523       AppendingVars.insert(std::make_pair(SGV->getName(), NewDGV));
524     } else if (GlobalAlias *DGA = dyn_cast<GlobalAlias>(DGV)) {
525       // SGV is global, but DGV is alias. The only valid mapping is when SGV is
526       // external declaration, which is effectively a no-op. Also make sure
527       // linkage calculation was correct.
528       if (SGV->isDeclaration() && !LinkFromSrc) {
529         // Make sure to remember this mapping...
530         ValueMap[SGV] = DGA;
531       } else
532         return Error(Err, "Global-Alias Collision on '" + SGV->getName() +
533                      "': symbol multiple defined");
534     } else if (GlobalVariable *DGVar = dyn_cast<GlobalVariable>(DGV)) {
535       // Otherwise, perform the global-global mapping as instructed by
536       // GetLinkageResult.
537       if (LinkFromSrc) {
538         // Propagate alignment, section, and visibility info.
539         CopyGVAttributes(DGVar, SGV);
540
541         // If the types don't match, and if we are to link from the source, nuke
542         // DGV and create a new one of the appropriate type.
543         if (SGV->getType() != DGVar->getType()) {
544           GlobalVariable *NewDGV =
545             new GlobalVariable(SGV->getType()->getElementType(),
546                                DGVar->isConstant(), DGVar->getLinkage(),
547                                /*init*/0, DGVar->getName(), Dest);
548           CopyGVAttributes(NewDGV, DGVar);
549           DGV->replaceAllUsesWith(ConstantExpr::getBitCast(NewDGV,
550                                                            DGVar->getType()));
551           // DGVar will conflict with NewDGV because they both had the same
552           // name. We must erase this now so ForceRenaming doesn't assert
553           // because DGV might not have internal linkage.
554           DGVar->eraseFromParent();
555
556           // If the symbol table renamed the global, but it is an externally
557           // visible symbol, DGV must be an existing global with internal
558           // linkage. Rename it.
559           if (NewDGV->getName() != SGV->getName() &&
560               !NewDGV->hasInternalLinkage())
561             ForceRenaming(NewDGV, SGV->getName());
562
563           DGVar = NewDGV;
564         }
565
566         // Inherit const as appropriate
567         DGVar->setConstant(SGV->isConstant());
568
569         // Set initializer to zero, so we can link the stuff later
570         DGVar->setInitializer(0);
571       } else {
572         // Special case for const propagation
573         if (DGVar->isDeclaration() && SGV->isConstant() && !DGVar->isConstant())
574           DGVar->setConstant(true);
575       }
576
577       // Set calculated linkage
578       DGVar->setLinkage(NewLinkage);
579
580       // Make sure to remember this mapping...
581       ValueMap[SGV] = ConstantExpr::getBitCast(DGVar, SGV->getType());
582     }
583   }
584   return false;
585 }
586
587 static GlobalValue::LinkageTypes
588 CalculateAliasLinkage(const GlobalValue *SGV, const GlobalValue *DGV) {
589   if (SGV->hasExternalLinkage() || DGV->hasExternalLinkage())
590     return GlobalValue::ExternalLinkage;
591   else if (SGV->hasWeakLinkage() || DGV->hasWeakLinkage())
592     return GlobalValue::WeakLinkage;
593   else {
594     assert(SGV->hasInternalLinkage() && DGV->hasInternalLinkage() &&
595            "Unexpected linkage type");
596     return GlobalValue::InternalLinkage;
597   }
598 }
599
600 // LinkAlias - Loop through the alias in the src module and link them into the
601 // dest module. We're assuming, that all functions/global variables were already
602 // linked in.
603 static bool LinkAlias(Module *Dest, const Module *Src,
604                       std::map<const Value*, Value*> &ValueMap,
605                       std::string *Err) {
606   // Loop over all alias in the src module
607   for (Module::const_alias_iterator I = Src->alias_begin(),
608          E = Src->alias_end(); I != E; ++I) {
609     const GlobalAlias *SGA = I;
610     const GlobalValue *SAliasee = SGA->getAliasedGlobal();
611     GlobalAlias *NewGA = NULL;
612
613     // Globals were already linked, thus we can just query ValueMap for variant
614     // of SAliasee in Dest.
615     std::map<const Value*,Value*>::const_iterator VMI = ValueMap.find(SAliasee);
616     assert(VMI != ValueMap.end() && "Aliasee not linked");
617     GlobalValue* DAliasee = cast<GlobalValue>(VMI->second);
618     GlobalValue* DGV = NULL;
619
620     // Try to find something 'similar' to SGA in destination module.
621     if (!DGV && !SGA->hasInternalLinkage()) {
622       DGV = Dest->getNamedAlias(SGA->getName());
623
624       // If types don't agree due to opaque types, try to resolve them.
625       if (DGV && DGV->getType() != SGA->getType())
626         if (RecursiveResolveTypes(SGA->getType(), DGV->getType()))
627           return Error(Err, "Alias Collision on '" + SGA->getName()+
628                        "': aliases have different types");
629     }
630
631     if (!DGV && !SGA->hasInternalLinkage()) {
632       DGV = Dest->getGlobalVariable(SGA->getName());
633
634       // If types don't agree due to opaque types, try to resolve them.
635       if (DGV && DGV->getType() != SGA->getType())
636         if (RecursiveResolveTypes(SGA->getType(), DGV->getType()))
637           return Error(Err, "Alias Collision on '" + SGA->getName()+
638                        "': aliases have different types");
639     }
640
641     if (!DGV && !SGA->hasInternalLinkage()) {
642       DGV = Dest->getFunction(SGA->getName());
643
644       // If types don't agree due to opaque types, try to resolve them.
645       if (DGV && DGV->getType() != SGA->getType())
646         if (RecursiveResolveTypes(SGA->getType(), DGV->getType()))
647           return Error(Err, "Alias Collision on '" + SGA->getName()+
648                        "': aliases have different types");
649     }
650
651     // No linking to be performed on internal stuff.
652     if (DGV && DGV->hasInternalLinkage())
653       DGV = NULL;
654
655     if (GlobalAlias *DGA = dyn_cast_or_null<GlobalAlias>(DGV)) {
656       // Types are known to be the same, check whether aliasees equal. As
657       // globals are already linked we just need query ValueMap to find the
658       // mapping.
659       if (DAliasee == DGA->getAliasedGlobal()) {
660         // This is just two copies of the same alias. Propagate linkage, if
661         // necessary.
662         DGA->setLinkage(CalculateAliasLinkage(SGA, DGA));
663
664         NewGA = DGA;
665         // Proceed to 'common' steps
666       } else
667         return Error(Err, "Alias Collision on '"  + SGA->getName()+
668                      "': aliases have different aliasees");
669     } else if (GlobalVariable *DGVar = dyn_cast_or_null<GlobalVariable>(DGV)) {
670       // The only allowed way is to link alias with external declaration.
671       if (DGVar->isDeclaration()) {
672         // But only if aliasee is global too...
673         if (!isa<GlobalVariable>(DAliasee))
674           return Error(Err, "Global-Alias Collision on '" + SGA->getName() +
675                        "': aliasee is not global variable");
676
677         NewGA = new GlobalAlias(SGA->getType(), SGA->getLinkage(),
678                                 SGA->getName(), DAliasee, Dest);
679         CopyGVAttributes(NewGA, SGA);
680
681         // Any uses of DGV need to change to NewGA, with cast, if needed.
682         if (SGA->getType() != DGVar->getType())
683           DGVar->replaceAllUsesWith(ConstantExpr::getBitCast(NewGA,
684                                                              DGVar->getType()));
685         else
686           DGVar->replaceAllUsesWith(NewGA);
687
688         // DGVar will conflict with NewGA because they both had the same
689         // name. We must erase this now so ForceRenaming doesn't assert
690         // because DGV might not have internal linkage.
691         DGVar->eraseFromParent();
692
693         // Proceed to 'common' steps
694       } else
695         return Error(Err, "Global-Alias Collision on '" + SGA->getName() +
696                      "': symbol multiple defined");
697     } else if (Function *DF = dyn_cast_or_null<Function>(DGV)) {
698       // The only allowed way is to link alias with external declaration.
699       if (DF->isDeclaration()) {
700         // But only if aliasee is function too...
701         if (!isa<Function>(DAliasee))
702           return Error(Err, "Function-Alias Collision on '" + SGA->getName() +
703                        "': aliasee is not function");
704
705         NewGA = new GlobalAlias(SGA->getType(), SGA->getLinkage(),
706                                 SGA->getName(), DAliasee, Dest);
707         CopyGVAttributes(NewGA, SGA);
708
709         // Any uses of DF need to change to NewGA, with cast, if needed.
710         if (SGA->getType() != DF->getType())
711           DF->replaceAllUsesWith(ConstantExpr::getBitCast(NewGA,
712                                                           DF->getType()));
713         else
714           DF->replaceAllUsesWith(NewGA);
715
716         // DF will conflict with NewGA because they both had the same
717         // name. We must erase this now so ForceRenaming doesn't assert
718         // because DF might not have internal linkage.
719         DF->eraseFromParent();
720
721         // Proceed to 'common' steps
722       } else
723         return Error(Err, "Function-Alias Collision on '" + SGA->getName() +
724                      "': symbol multiple defined");
725     } else {
726       // No linking to be performed, simply create an identical version of the
727       // alias over in the dest module...
728
729       NewGA = new GlobalAlias(SGA->getType(), SGA->getLinkage(),
730                               SGA->getName(), DAliasee, Dest);
731       CopyGVAttributes(NewGA, SGA);
732
733       // Proceed to 'common' steps
734     }
735
736     assert(NewGA && "No alias was created in destination module!");
737
738     // If the symbol table renamed the alias, but it is an externally visible
739     // symbol, DGA must be an global value with internal linkage. Rename it.
740     if (NewGA->getName() != SGA->getName() &&
741         !NewGA->hasInternalLinkage())
742       ForceRenaming(NewGA, SGA->getName());
743
744     // Remember this mapping so uses in the source module get remapped
745     // later by RemapOperand.
746     ValueMap[SGA] = NewGA;
747   }
748
749   return false;
750 }
751
752
753 // LinkGlobalInits - Update the initializers in the Dest module now that all
754 // globals that may be referenced are in Dest.
755 static bool LinkGlobalInits(Module *Dest, const Module *Src,
756                             std::map<const Value*, Value*> &ValueMap,
757                             std::string *Err) {
758
759   // Loop over all of the globals in the src module, mapping them over as we go
760   for (Module::const_global_iterator I = Src->global_begin(),
761        E = Src->global_end(); I != E; ++I) {
762     const GlobalVariable *SGV = I;
763
764     if (SGV->hasInitializer()) {      // Only process initialized GV's
765       // Figure out what the initializer looks like in the dest module...
766       Constant *SInit =
767         cast<Constant>(RemapOperand(SGV->getInitializer(), ValueMap));
768
769       GlobalVariable *DGV =
770         cast<GlobalVariable>(ValueMap[SGV]->stripPointerCasts());
771       if (DGV->hasInitializer()) {
772         if (SGV->hasExternalLinkage()) {
773           if (DGV->getInitializer() != SInit)
774             return Error(Err, "Global Variable Collision on '" + SGV->getName() +
775                          "': global variables have different initializers");
776         } else if (DGV->hasLinkOnceLinkage() || DGV->hasWeakLinkage() ||
777                    DGV->hasCommonLinkage()) {
778           // Nothing is required, mapped values will take the new global
779           // automatically.
780         } else if (SGV->hasLinkOnceLinkage() || SGV->hasWeakLinkage() ||
781                    SGV->hasCommonLinkage()) {
782           // Nothing is required, mapped values will take the new global
783           // automatically.
784         } else if (DGV->hasAppendingLinkage()) {
785           assert(0 && "Appending linkage unimplemented!");
786         } else {
787           assert(0 && "Unknown linkage!");
788         }
789       } else {
790         // Copy the initializer over now...
791         DGV->setInitializer(SInit);
792       }
793     }
794   }
795   return false;
796 }
797
798 // LinkFunctionProtos - Link the functions together between the two modules,
799 // without doing function bodies... this just adds external function prototypes
800 // to the Dest function...
801 //
802 static bool LinkFunctionProtos(Module *Dest, const Module *Src,
803                                std::map<const Value*, Value*> &ValueMap,
804                                std::string *Err) {
805   // Loop over all of the functions in the src module, mapping them over
806   for (Module::const_iterator I = Src->begin(), E = Src->end(); I != E; ++I) {
807     const Function *SF = I;   // SrcFunction
808     
809     Function *DF = 0;
810     
811     // If this function is internal or has no name, it doesn't participate in
812     // linkage.
813     if (SF->hasName() && !SF->hasInternalLinkage()) {
814       // Check to see if may have to link the function.
815       DF = Dest->getFunction(SF->getName());
816       if (DF && DF->hasInternalLinkage())
817         DF = 0;
818     }
819     
820     // If there is no linkage to be performed, just bring over SF without
821     // modifying it.
822     if (DF == 0) {
823       // Function does not already exist, simply insert an function signature
824       // identical to SF into the dest module.
825       Function *NewDF = Function::Create(SF->getFunctionType(),
826                                          SF->getLinkage(),
827                                          SF->getName(), Dest);
828       CopyGVAttributes(NewDF, SF);
829       
830       // If the LLVM runtime renamed the function, but it is an externally
831       // visible symbol, DF must be an existing function with internal linkage.
832       // Rename it.
833       if (!NewDF->hasInternalLinkage() && NewDF->getName() != SF->getName())
834         ForceRenaming(NewDF, SF->getName());
835       
836       // ... and remember this mapping...
837       ValueMap[SF] = NewDF;
838       continue;
839     }
840     
841     
842     // If types don't agree because of opaque, try to resolve them.
843     if (SF->getType() != DF->getType())
844       RecursiveResolveTypes(SF->getType(), DF->getType());
845     
846     // Check visibility, merging if a definition overrides a prototype.
847     if (SF->getVisibility() != DF->getVisibility()) {
848       // If one is a prototype, ignore its visibility.  Prototypes are always
849       // overridden by the definition.
850       if (!SF->isDeclaration() && !DF->isDeclaration())
851         return Error(Err, "Linking functions named '" + SF->getName() +
852                      "': symbols have different visibilities!");
853       
854       // Otherwise, replace the visibility of DF if DF is a prototype.
855       if (DF->isDeclaration())
856         DF->setVisibility(SF->getVisibility());
857     }
858     
859     if (DF->getType() != SF->getType()) {
860       if (DF->isDeclaration() && !SF->isDeclaration()) {
861         // We have a definition of the same name but different type in the
862         // source module. Copy the prototype to the destination and replace
863         // uses of the destination's prototype with the new prototype.
864         Function *NewDF = Function::Create(SF->getFunctionType(),
865                                            SF->getLinkage(),
866                                            SF->getName(), Dest);
867         CopyGVAttributes(NewDF, SF);
868
869         // Any uses of DF need to change to NewDF, with cast
870         DF->replaceAllUsesWith(ConstantExpr::getBitCast(NewDF, DF->getType()));
871
872         // DF will conflict with NewDF because they both had the same. We must
873         // erase this now so ForceRenaming doesn't assert because DF might
874         // not have internal linkage. 
875         DF->eraseFromParent();
876
877         // If the symbol table renamed the function, but it is an externally
878         // visible symbol, DF must be an existing function with internal 
879         // linkage.  Rename it.
880         if (NewDF->getName() != SF->getName() && !NewDF->hasInternalLinkage())
881           ForceRenaming(NewDF, SF->getName());
882
883         // Remember this mapping so uses in the source module get remapped
884         // later by RemapOperand.
885         ValueMap[SF] = NewDF;
886       } else if (SF->isDeclaration()) {
887         // We have two functions of the same name but different type and the
888         // source is a declaration while the destination is not. Any use of
889         // the source must be mapped to the destination, with a cast. 
890         ValueMap[SF] = ConstantExpr::getBitCast(DF, SF->getType());
891       } else {
892         // We have two functions of the same name but different types and they
893         // are both definitions. This is an error.
894         return Error(Err, "Function '" + DF->getName() + "' defined as both '" +
895                      ToStr(SF->getFunctionType(), Src) + "' and '" +
896                      ToStr(DF->getFunctionType(), Dest) + "'");
897       }
898       continue;
899     }
900     
901     if (SF->isDeclaration()) {
902       // If SF is a declaration or if both SF & DF are declarations, just link 
903       // the declarations, we aren't adding anything.
904       if (SF->hasDLLImportLinkage()) {
905         if (DF->isDeclaration()) {
906           ValueMap[SF] = DF;
907           DF->setLinkage(SF->getLinkage());          
908         }
909       } else {
910         ValueMap[SF] = DF;
911       }
912       continue;
913     }
914     
915     // If DF is external but SF is not, link the external functions, update
916     // linkage qualifiers.
917     if (DF->isDeclaration() && !DF->hasDLLImportLinkage()) {
918       ValueMap.insert(std::make_pair(SF, DF));
919       DF->setLinkage(SF->getLinkage());
920       continue;
921     }
922     
923     // At this point we know that DF has LinkOnce, Weak, or External* linkage.
924     if (SF->hasWeakLinkage() || SF->hasLinkOnceLinkage() ||
925         SF->hasCommonLinkage()) {
926       ValueMap[SF] = DF;
927
928       // Linkonce+Weak = Weak
929       // *+External Weak = *
930       if ((DF->hasLinkOnceLinkage() && 
931               (SF->hasWeakLinkage() || SF->hasCommonLinkage())) ||
932           DF->hasExternalWeakLinkage())
933         DF->setLinkage(SF->getLinkage());
934       continue;
935     }
936     
937     if (DF->hasWeakLinkage() || DF->hasLinkOnceLinkage() ||
938         DF->hasCommonLinkage()) {
939       // At this point we know that SF has LinkOnce or External* linkage.
940       ValueMap[SF] = DF;
941       
942       // If the source function has stronger linkage than the destination, 
943       // its body and linkage should override ours.
944       if (!SF->hasLinkOnceLinkage() && !SF->hasExternalWeakLinkage()) {
945         // Don't inherit linkonce & external weak linkage.
946         DF->setLinkage(SF->getLinkage());
947         DF->deleteBody();
948       }
949       continue;
950     }
951     
952     if (SF->getLinkage() != DF->getLinkage())
953       return Error(Err, "Functions named '" + SF->getName() +
954                    "' have different linkage specifiers!");
955
956     // The function is defined identically in both modules!
957     if (SF->hasExternalLinkage())
958       return Error(Err, "Function '" +
959                    ToStr(SF->getFunctionType(), Src) + "':\"" +
960                    SF->getName() + "\" - Function is already defined!");
961     assert(0 && "Unknown linkage configuration found!");
962   }
963   return false;
964 }
965
966 // LinkFunctionBody - Copy the source function over into the dest function and
967 // fix up references to values.  At this point we know that Dest is an external
968 // function, and that Src is not.
969 static bool LinkFunctionBody(Function *Dest, Function *Src,
970                              std::map<const Value*, Value*> &ValueMap,
971                              std::string *Err) {
972   assert(Src && Dest && Dest->isDeclaration() && !Src->isDeclaration());
973
974   // Go through and convert function arguments over, remembering the mapping.
975   Function::arg_iterator DI = Dest->arg_begin();
976   for (Function::arg_iterator I = Src->arg_begin(), E = Src->arg_end();
977        I != E; ++I, ++DI) {
978     DI->setName(I->getName());  // Copy the name information over...
979
980     // Add a mapping to our local map
981     ValueMap[I] = DI;
982   }
983
984   // Splice the body of the source function into the dest function.
985   Dest->getBasicBlockList().splice(Dest->end(), Src->getBasicBlockList());
986
987   // At this point, all of the instructions and values of the function are now
988   // copied over.  The only problem is that they are still referencing values in
989   // the Source function as operands.  Loop through all of the operands of the
990   // functions and patch them up to point to the local versions...
991   //
992   for (Function::iterator BB = Dest->begin(), BE = Dest->end(); BB != BE; ++BB)
993     for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
994       for (Instruction::op_iterator OI = I->op_begin(), OE = I->op_end();
995            OI != OE; ++OI)
996         if (!isa<Instruction>(*OI) && !isa<BasicBlock>(*OI))
997           *OI = RemapOperand(*OI, ValueMap);
998
999   // There is no need to map the arguments anymore.
1000   for (Function::arg_iterator I = Src->arg_begin(), E = Src->arg_end();
1001        I != E; ++I)
1002     ValueMap.erase(I);
1003
1004   return false;
1005 }
1006
1007
1008 // LinkFunctionBodies - Link in the function bodies that are defined in the
1009 // source module into the DestModule.  This consists basically of copying the
1010 // function over and fixing up references to values.
1011 static bool LinkFunctionBodies(Module *Dest, Module *Src,
1012                                std::map<const Value*, Value*> &ValueMap,
1013                                std::string *Err) {
1014
1015   // Loop over all of the functions in the src module, mapping them over as we
1016   // go
1017   for (Module::iterator SF = Src->begin(), E = Src->end(); SF != E; ++SF) {
1018     if (!SF->isDeclaration()) {               // No body if function is external
1019       Function *DF = cast<Function>(ValueMap[SF]); // Destination function
1020
1021       // DF not external SF external?
1022       if (DF->isDeclaration())
1023         // Only provide the function body if there isn't one already.
1024         if (LinkFunctionBody(DF, SF, ValueMap, Err))
1025           return true;
1026     }
1027   }
1028   return false;
1029 }
1030
1031 // LinkAppendingVars - If there were any appending global variables, link them
1032 // together now.  Return true on error.
1033 static bool LinkAppendingVars(Module *M,
1034                   std::multimap<std::string, GlobalVariable *> &AppendingVars,
1035                               std::string *ErrorMsg) {
1036   if (AppendingVars.empty()) return false; // Nothing to do.
1037
1038   // Loop over the multimap of appending vars, processing any variables with the
1039   // same name, forming a new appending global variable with both of the
1040   // initializers merged together, then rewrite references to the old variables
1041   // and delete them.
1042   std::vector<Constant*> Inits;
1043   while (AppendingVars.size() > 1) {
1044     // Get the first two elements in the map...
1045     std::multimap<std::string,
1046       GlobalVariable*>::iterator Second = AppendingVars.begin(), First=Second++;
1047
1048     // If the first two elements are for different names, there is no pair...
1049     // Otherwise there is a pair, so link them together...
1050     if (First->first == Second->first) {
1051       GlobalVariable *G1 = First->second, *G2 = Second->second;
1052       const ArrayType *T1 = cast<ArrayType>(G1->getType()->getElementType());
1053       const ArrayType *T2 = cast<ArrayType>(G2->getType()->getElementType());
1054
1055       // Check to see that they two arrays agree on type...
1056       if (T1->getElementType() != T2->getElementType())
1057         return Error(ErrorMsg,
1058          "Appending variables with different element types need to be linked!");
1059       if (G1->isConstant() != G2->isConstant())
1060         return Error(ErrorMsg,
1061                      "Appending variables linked with different const'ness!");
1062
1063       if (G1->getAlignment() != G2->getAlignment())
1064         return Error(ErrorMsg,
1065          "Appending variables with different alignment need to be linked!");
1066
1067       if (G1->getVisibility() != G2->getVisibility())
1068         return Error(ErrorMsg,
1069          "Appending variables with different visibility need to be linked!");
1070
1071       if (G1->getSection() != G2->getSection())
1072         return Error(ErrorMsg,
1073          "Appending variables with different section name need to be linked!");
1074       
1075       unsigned NewSize = T1->getNumElements() + T2->getNumElements();
1076       ArrayType *NewType = ArrayType::get(T1->getElementType(), NewSize);
1077
1078       G1->setName("");   // Clear G1's name in case of a conflict!
1079       
1080       // Create the new global variable...
1081       GlobalVariable *NG =
1082         new GlobalVariable(NewType, G1->isConstant(), G1->getLinkage(),
1083                            /*init*/0, First->first, M, G1->isThreadLocal());
1084
1085       // Propagate alignment, visibility and section info.
1086       CopyGVAttributes(NG, G1);
1087
1088       // Merge the initializer...
1089       Inits.reserve(NewSize);
1090       if (ConstantArray *I = dyn_cast<ConstantArray>(G1->getInitializer())) {
1091         for (unsigned i = 0, e = T1->getNumElements(); i != e; ++i)
1092           Inits.push_back(I->getOperand(i));
1093       } else {
1094         assert(isa<ConstantAggregateZero>(G1->getInitializer()));
1095         Constant *CV = Constant::getNullValue(T1->getElementType());
1096         for (unsigned i = 0, e = T1->getNumElements(); i != e; ++i)
1097           Inits.push_back(CV);
1098       }
1099       if (ConstantArray *I = dyn_cast<ConstantArray>(G2->getInitializer())) {
1100         for (unsigned i = 0, e = T2->getNumElements(); i != e; ++i)
1101           Inits.push_back(I->getOperand(i));
1102       } else {
1103         assert(isa<ConstantAggregateZero>(G2->getInitializer()));
1104         Constant *CV = Constant::getNullValue(T2->getElementType());
1105         for (unsigned i = 0, e = T2->getNumElements(); i != e; ++i)
1106           Inits.push_back(CV);
1107       }
1108       NG->setInitializer(ConstantArray::get(NewType, Inits));
1109       Inits.clear();
1110
1111       // Replace any uses of the two global variables with uses of the new
1112       // global...
1113
1114       // FIXME: This should rewrite simple/straight-forward uses such as
1115       // getelementptr instructions to not use the Cast!
1116       G1->replaceAllUsesWith(ConstantExpr::getBitCast(NG, G1->getType()));
1117       G2->replaceAllUsesWith(ConstantExpr::getBitCast(NG, G2->getType()));
1118
1119       // Remove the two globals from the module now...
1120       M->getGlobalList().erase(G1);
1121       M->getGlobalList().erase(G2);
1122
1123       // Put the new global into the AppendingVars map so that we can handle
1124       // linking of more than two vars...
1125       Second->second = NG;
1126     }
1127     AppendingVars.erase(First);
1128   }
1129
1130   return false;
1131 }
1132
1133 static bool ResolveAliases(Module *Dest) {
1134   for (Module::alias_iterator I = Dest->alias_begin(), E = Dest->alias_end();
1135        I != E; ++I)
1136     if (const GlobalValue *GV = I->resolveAliasedGlobal())
1137       if (!GV->isDeclaration())
1138         I->replaceAllUsesWith(const_cast<GlobalValue*>(GV));
1139
1140   return false;
1141 }
1142
1143 // LinkModules - This function links two modules together, with the resulting
1144 // left module modified to be the composite of the two input modules.  If an
1145 // error occurs, true is returned and ErrorMsg (if not null) is set to indicate
1146 // the problem.  Upon failure, the Dest module could be in a modified state, and
1147 // shouldn't be relied on to be consistent.
1148 bool
1149 Linker::LinkModules(Module *Dest, Module *Src, std::string *ErrorMsg) {
1150   assert(Dest != 0 && "Invalid Destination module");
1151   assert(Src  != 0 && "Invalid Source Module");
1152
1153   if (Dest->getDataLayout().empty()) {
1154     if (!Src->getDataLayout().empty()) {
1155       Dest->setDataLayout(Src->getDataLayout());
1156     } else {
1157       std::string DataLayout;
1158
1159       if (Dest->getEndianness() == Module::AnyEndianness) {
1160         if (Src->getEndianness() == Module::BigEndian)
1161           DataLayout.append("E");
1162         else if (Src->getEndianness() == Module::LittleEndian)
1163           DataLayout.append("e");
1164       }
1165
1166       if (Dest->getPointerSize() == Module::AnyPointerSize) {
1167         if (Src->getPointerSize() == Module::Pointer64)
1168           DataLayout.append(DataLayout.length() == 0 ? "p:64:64" : "-p:64:64");
1169         else if (Src->getPointerSize() == Module::Pointer32)
1170           DataLayout.append(DataLayout.length() == 0 ? "p:32:32" : "-p:32:32");
1171       }
1172       Dest->setDataLayout(DataLayout);
1173     }
1174   }
1175
1176   // Copy the target triple from the source to dest if the dest's is empty.
1177   if (Dest->getTargetTriple().empty() && !Src->getTargetTriple().empty())
1178     Dest->setTargetTriple(Src->getTargetTriple());
1179       
1180   if (!Src->getDataLayout().empty() && !Dest->getDataLayout().empty() &&
1181       Src->getDataLayout() != Dest->getDataLayout())
1182     cerr << "WARNING: Linking two modules of different data layouts!\n";
1183   if (!Src->getTargetTriple().empty() &&
1184       Dest->getTargetTriple() != Src->getTargetTriple())
1185     cerr << "WARNING: Linking two modules of different target triples!\n";
1186
1187   // Append the module inline asm string.
1188   if (!Src->getModuleInlineAsm().empty()) {
1189     if (Dest->getModuleInlineAsm().empty())
1190       Dest->setModuleInlineAsm(Src->getModuleInlineAsm());
1191     else
1192       Dest->setModuleInlineAsm(Dest->getModuleInlineAsm()+"\n"+
1193                                Src->getModuleInlineAsm());
1194   }
1195   
1196   // Update the destination module's dependent libraries list with the libraries
1197   // from the source module. There's no opportunity for duplicates here as the
1198   // Module ensures that duplicate insertions are discarded.
1199   for (Module::lib_iterator SI = Src->lib_begin(), SE = Src->lib_end();
1200        SI != SE; ++SI) 
1201     Dest->addLibrary(*SI);
1202
1203   // LinkTypes - Go through the symbol table of the Src module and see if any
1204   // types are named in the src module that are not named in the Dst module.
1205   // Make sure there are no type name conflicts.
1206   if (LinkTypes(Dest, Src, ErrorMsg)) 
1207     return true;
1208
1209   // ValueMap - Mapping of values from what they used to be in Src, to what they
1210   // are now in Dest.
1211   std::map<const Value*, Value*> ValueMap;
1212
1213   // AppendingVars - Keep track of global variables in the destination module
1214   // with appending linkage.  After the module is linked together, they are
1215   // appended and the module is rewritten.
1216   std::multimap<std::string, GlobalVariable *> AppendingVars;
1217   for (Module::global_iterator I = Dest->global_begin(), E = Dest->global_end();
1218        I != E; ++I) {
1219     // Add all of the appending globals already in the Dest module to
1220     // AppendingVars.
1221     if (I->hasAppendingLinkage())
1222       AppendingVars.insert(std::make_pair(I->getName(), I));
1223   }
1224
1225   // Insert all of the globals in src into the Dest module... without linking
1226   // initializers (which could refer to functions not yet mapped over).
1227   if (LinkGlobals(Dest, Src, ValueMap, AppendingVars, ErrorMsg))
1228     return true;
1229
1230   // Link the functions together between the two modules, without doing function
1231   // bodies... this just adds external function prototypes to the Dest
1232   // function...  We do this so that when we begin processing function bodies,
1233   // all of the global values that may be referenced are available in our
1234   // ValueMap.
1235   if (LinkFunctionProtos(Dest, Src, ValueMap, ErrorMsg))
1236     return true;
1237
1238   // If there were any alias, link them now. We really need to do this now,
1239   // because all of the aliases that may be referenced need to be available in
1240   // ValueMap
1241   if (LinkAlias(Dest, Src, ValueMap, ErrorMsg)) return true;
1242
1243   // Update the initializers in the Dest module now that all globals that may
1244   // be referenced are in Dest.
1245   if (LinkGlobalInits(Dest, Src, ValueMap, ErrorMsg)) return true;
1246
1247   // Link in the function bodies that are defined in the source module into the
1248   // DestModule.  This consists basically of copying the function over and
1249   // fixing up references to values.
1250   if (LinkFunctionBodies(Dest, Src, ValueMap, ErrorMsg)) return true;
1251
1252   // If there were any appending global variables, link them together now.
1253   if (LinkAppendingVars(Dest, AppendingVars, ErrorMsg)) return true;
1254
1255   // Resolve all uses of aliases with aliasees
1256   if (ResolveAliases(Dest)) return true;
1257
1258   // If the source library's module id is in the dependent library list of the
1259   // destination library, remove it since that module is now linked in.
1260   sys::Path modId;
1261   modId.set(Src->getModuleIdentifier());
1262   if (!modId.isEmpty())
1263     Dest->removeLibrary(modId.getBasename());
1264
1265   return false;
1266 }
1267
1268 // vim: sw=2