diff options
author | Nico Rieck <nico.rieck@gmail.com> | 2014-01-14 15:23:25 +0000 |
---|---|---|
committer | Nico Rieck <nico.rieck@gmail.com> | 2014-01-14 15:23:25 +0000 |
commit | c60647f0dbe55721e61a5c10169ac2920ebe3fb7 (patch) | |
tree | 28461ef929975cc6f1c65c491d48e08f1a928508 /llvm/lib/Target/X86/X86AsmPrinter.cpp | |
parent | 7157bb765e487eeb6468525759850f3a10e2f38f (diff) | |
download | bcm5719-llvm-c60647f0dbe55721e61a5c10169ac2920ebe3fb7.tar.gz bcm5719-llvm-c60647f0dbe55721e61a5c10169ac2920ebe3fb7.zip |
Handle dllexport for global aliases
llvm-svn: 199219
Diffstat (limited to 'llvm/lib/Target/X86/X86AsmPrinter.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86AsmPrinter.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86AsmPrinter.cpp b/llvm/lib/Target/X86/X86AsmPrinter.cpp index ad7d3e0fdca..e6ad2f1d0da 100644 --- a/llvm/lib/Target/X86/X86AsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86AsmPrinter.cpp @@ -658,6 +658,21 @@ void X86AsmPrinter::EmitEndOfAsmFile(Module &M) { if (I->hasDLLExportStorageClass()) DLLExportedGlobals.push_back(getSymbol(I)); + for (Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end(); + I != E; ++I) { + const GlobalValue *GV = I; + if (!GV->hasDLLExportStorageClass()) + continue; + + while (const GlobalAlias *A = dyn_cast<GlobalAlias>(GV)) + GV = A->getAliasedGlobal(); + + if (isa<Function>(GV)) + DLLExportedFns.push_back(getSymbol(I)); + else if (isa<GlobalVariable>(GV)) + DLLExportedGlobals.push_back(getSymbol(I)); + } + // Output linker support code for dllexported globals on windows. if (!DLLExportedGlobals.empty() || !DLLExportedFns.empty()) { const TargetLoweringObjectFileCOFF &TLOFCOFF = |