diff options
author | Nico Rieck <nico.rieck@gmail.com> | 2014-01-14 11:55:40 +0000 |
---|---|---|
committer | Nico Rieck <nico.rieck@gmail.com> | 2014-01-14 11:55:40 +0000 |
commit | 4192acdbc3cafc16b0b59085bd7d7dc8aee2ba3c (patch) | |
tree | 506b27e584c700d04125862cc29cfa3516adfe2e /llvm/lib/Target/X86/X86AsmPrinter.cpp | |
parent | e43aaf7967915408e5fb4dafed7fb391abdcbbe1 (diff) | |
download | bcm5719-llvm-4192acdbc3cafc16b0b59085bd7d7dc8aee2ba3c.tar.gz bcm5719-llvm-4192acdbc3cafc16b0b59085bd7d7dc8aee2ba3c.zip |
Handle dllexport for global aliases
llvm-svn: 199205
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 = |