Handle dllexport for global aliases
[oota-llvm.git] / lib / Target / X86 / X86AsmPrinter.cpp
index ad7d3e0fdcae0ad3914dbc2e4c7e7bbb00656312..e6ad2f1d0dacbcff18067ee2032a492a7bb4f07c 100644 (file)
@@ -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 =