Changes in directory llvm/lib/VMCore:
AsmWriter.cpp updated: 1.204 -> 1.205 Mangler.cpp updated: 1.29 -> 1.30 Verifier.cpp updated: 1.162 -> 1.163 --- Log message: Adding dllimport, dllexport and external weak linkage types. DLL* linkages got full (I hope) codegeneration support in C & both x86 assembler backends. External weak linkage added for future use, we don't provide any codegeneration, etc. support for it. --- Diffs of the changes: (+43 -16) AsmWriter.cpp | 36 +++++++++++++++++++++++++----------- Mangler.cpp | 11 ++++++++--- Verifier.cpp | 12 ++++++++++-- 3 files changed, 43 insertions(+), 16 deletions(-) Index: llvm/lib/VMCore/AsmWriter.cpp diff -u llvm/lib/VMCore/AsmWriter.cpp:1.204 llvm/lib/VMCore/AsmWriter.cpp:1.205 --- llvm/lib/VMCore/AsmWriter.cpp:1.204 Sun Aug 27 20:02:49 2006 +++ llvm/lib/VMCore/AsmWriter.cpp Thu Sep 14 13:23:27 2006 @@ -845,14 +845,21 @@ if (GV->hasName()) Out << getLLVMName(GV->getName()) << " = "; if (!GV->hasInitializer()) - Out << "external "; + switch (GV->getLinkage()) { + case GlobalValue::DLLImportLinkage: Out << "dllimport "; break; + case GlobalValue::ExternalWeakLinkage: Out << "extern_weak "; break; + default: Out << "external "; break; + } else switch (GV->getLinkage()) { - case GlobalValue::InternalLinkage: Out << "internal "; break; - case GlobalValue::LinkOnceLinkage: Out << "linkonce "; break; - case GlobalValue::WeakLinkage: Out << "weak "; break; - case GlobalValue::AppendingLinkage: Out << "appending "; break; - case GlobalValue::ExternalLinkage: break; + case GlobalValue::InternalLinkage: Out << "internal "; break; + case GlobalValue::LinkOnceLinkage: Out << "linkonce "; break; + case GlobalValue::WeakLinkage: Out << "weak "; break; + case GlobalValue::AppendingLinkage: Out << "appending "; break; + case GlobalValue::DLLImportLinkage: Out << "dllimport "; break; + case GlobalValue::DLLExportLinkage: Out << "dllexport "; break; + case GlobalValue::ExternalWeakLinkage: Out << "extern_weak "; break; + case GlobalValue::ExternalLinkage: break; case GlobalValue::GhostLinkage: std::cerr << "GhostLinkage not allowed in AsmWriter!\n"; abort(); @@ -937,13 +944,20 @@ if (AnnotationWriter) AnnotationWriter->emitFunctionAnnot(F, Out); if (F->isExternal()) - Out << "declare "; + switch (F->getLinkage()) { + case GlobalValue::DLLImportLinkage: Out << "declare dllimport "; break; + case GlobalValue::ExternalWeakLinkage: Out << "declare extern_weak "; break; + default: Out << "declare "; + } else switch (F->getLinkage()) { - case GlobalValue::InternalLinkage: Out << "internal "; break; - case GlobalValue::LinkOnceLinkage: Out << "linkonce "; break; - case GlobalValue::WeakLinkage: Out << "weak "; break; - case GlobalValue::AppendingLinkage: Out << "appending "; break; + case GlobalValue::InternalLinkage: Out << "internal "; break; + case GlobalValue::LinkOnceLinkage: Out << "linkonce "; break; + case GlobalValue::WeakLinkage: Out << "weak "; break; + case GlobalValue::AppendingLinkage: Out << "appending "; break; + case GlobalValue::DLLImportLinkage: Out << "dllimport "; break; + case GlobalValue::DLLExportLinkage: Out << "dllexport "; break; + case GlobalValue::ExternalWeakLinkage: Out << "extern_weak "; break; case GlobalValue::ExternalLinkage: break; case GlobalValue::GhostLinkage: std::cerr << "GhostLinkage not allowed in AsmWriter!\n"; Index: llvm/lib/VMCore/Mangler.cpp diff -u llvm/lib/VMCore/Mangler.cpp:1.29 llvm/lib/VMCore/Mangler.cpp:1.30 --- llvm/lib/VMCore/Mangler.cpp:1.29 Thu Sep 7 13:20:41 2006 +++ llvm/lib/VMCore/Mangler.cpp Thu Sep 14 13:23:27 2006 @@ -162,11 +162,16 @@ ExistingValue = GV; } else { // If GV is external but the existing one is static, mangle the existing one - if (GV->hasExternalLinkage() && !ExistingValue->hasExternalLinkage()) { + if ((GV->hasExternalLinkage() || GV->hasDLLImportLinkage()) && + !(ExistingValue->hasExternalLinkage() || ExistingValue->hasDLLImportLinkage())) { MangledGlobals.insert(ExistingValue); ExistingValue = GV; - } else if (GV->hasExternalLinkage() && ExistingValue->hasExternalLinkage()&& - GV->isExternal() && ExistingValue->isExternal()) { + } else if ((GV->hasExternalLinkage() || + GV->hasDLLImportLinkage()) && + (ExistingValue->hasExternalLinkage() || + ExistingValue->hasDLLImportLinkage()) && + GV->isExternal() && + ExistingValue->isExternal()) { // If the two globals both have external inkage, and are both external, // don't mangle either of them, we just have some silly type mismatch. } else { Index: llvm/lib/VMCore/Verifier.cpp diff -u llvm/lib/VMCore/Verifier.cpp:1.162 llvm/lib/VMCore/Verifier.cpp:1.163 --- llvm/lib/VMCore/Verifier.cpp:1.162 Sun Aug 27 17:42:52 2006 +++ llvm/lib/VMCore/Verifier.cpp Thu Sep 14 13:23:27 2006 @@ -257,8 +257,16 @@ void Verifier::visitGlobalValue(GlobalValue &GV) { - Assert1(!GV.isExternal() || GV.hasExternalLinkage(), - "Global is external, but doesn't have external linkage!", &GV); + Assert1(!GV.isExternal() || + GV.hasExternalLinkage() || + GV.hasDLLImportLinkage() || + GV.hasExternalWeakLinkage(), + "Global is external, but doesn't have external or dllimport or weak linkage!", + &GV); + + Assert1(!GV.hasDLLImportLinkage() || GV.isExternal(), + "Global is marked as dllimport, but not external", &GV); + Assert1(!GV.hasAppendingLinkage() || isa<GlobalVariable>(GV), "Only global variables can have appending linkage!", &GV); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits