summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorNico Rieck <nico.rieck@gmail.com>2014-01-14 15:23:25 +0000
committerNico Rieck <nico.rieck@gmail.com>2014-01-14 15:23:25 +0000
commitc60647f0dbe55721e61a5c10169ac2920ebe3fb7 (patch)
tree28461ef929975cc6f1c65c491d48e08f1a928508 /llvm/lib/Target
parent7157bb765e487eeb6468525759850f3a10e2f38f (diff)
downloadbcm5719-llvm-c60647f0dbe55721e61a5c10169ac2920ebe3fb7.tar.gz
bcm5719-llvm-c60647f0dbe55721e61a5c10169ac2920ebe3fb7.zip
Handle dllexport for global aliases
llvm-svn: 199219
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/X86/X86AsmPrinter.cpp15
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 =
OpenPOWER on IntegriCloud