forked from OSchip/llvm-project
parent
7157bb765e
commit
c60647f0db
|
@ -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 =
|
||||
|
|
|
@ -56,6 +56,23 @@ define weak_odr dllexport void @weak1() {
|
|||
@WeakVar2 = weak_odr dllexport unnamed_addr constant i32 1
|
||||
|
||||
|
||||
; CHECK: .globl alias
|
||||
; CHECK: alias = notExported
|
||||
@alias = dllexport alias void()* @notExported
|
||||
|
||||
; CHECK: .globl alias2
|
||||
; CHECK: alias2 = f1
|
||||
@alias2 = dllexport alias void()* @f1
|
||||
|
||||
; CHECK: .globl alias3
|
||||
; CHECK: alias3 = alias
|
||||
@alias3 = dllexport alias void()* @alias
|
||||
|
||||
; CHECK: .weak weak_alias
|
||||
; CHECK: weak_alias = f1
|
||||
@weak_alias = dllexport alias weak_odr void()* @f1
|
||||
|
||||
|
||||
; CHECK: .section .drectve
|
||||
; WIN32: /EXPORT:Var1,DATA
|
||||
; WIN32: /EXPORT:Var2,DATA
|
||||
|
@ -67,6 +84,10 @@ define weak_odr dllexport void @weak1() {
|
|||
; WIN32: /EXPORT:lnk1
|
||||
; WIN32: /EXPORT:lnk2
|
||||
; WIN32: /EXPORT:weak1
|
||||
; WIN32: /EXPORT:alias
|
||||
; WIN32: /EXPORT:alias2
|
||||
; WIN32: /EXPORT:alias3
|
||||
; WIN32: /EXPORT:weak_alias
|
||||
; MINGW: -export:Var1,data
|
||||
; MINGW: -export:Var2,data
|
||||
; MINGW: -export:Var3,data
|
||||
|
@ -77,3 +98,7 @@ define weak_odr dllexport void @weak1() {
|
|||
; MINGW: -export:lnk1
|
||||
; MINGW: -export:lnk2
|
||||
; MINGW: -export:weak1
|
||||
; MINGW: -export:alias
|
||||
; MINGW: -export:alias2
|
||||
; MINGW: -export:alias3
|
||||
; MINGW: -export:weak_alias
|
||||
|
|
|
@ -71,6 +71,23 @@ define weak_odr dllexport void @weak1() {
|
|||
@WeakVar2 = weak_odr dllexport unnamed_addr constant i32 1
|
||||
|
||||
|
||||
; CHECK: .globl _alias
|
||||
; CHECK: _alias = _notExported
|
||||
@alias = dllexport alias void()* @notExported
|
||||
|
||||
; CHECK: .globl _alias2
|
||||
; CHECK: _alias2 = _f1
|
||||
@alias2 = dllexport alias void()* @f1
|
||||
|
||||
; CHECK: .globl _alias3
|
||||
; CHECK: _alias3 = _alias
|
||||
@alias3 = dllexport alias void()* @alias
|
||||
|
||||
; CHECK: .weak _weak_alias
|
||||
; CHECK: _weak_alias = _f1
|
||||
@weak_alias = dllexport alias weak_odr void()* @f1
|
||||
|
||||
|
||||
; CHECK: .section .drectve
|
||||
; WIN32: /EXPORT:_Var1,DATA
|
||||
; WIN32: /EXPORT:_Var2,DATA
|
||||
|
@ -85,6 +102,10 @@ define weak_odr dllexport void @weak1() {
|
|||
; WIN32: /EXPORT:_lnk1
|
||||
; WIN32: /EXPORT:_lnk2
|
||||
; WIN32: /EXPORT:_weak1
|
||||
; WIN32: /EXPORT:_alias
|
||||
; WIN32: /EXPORT:_alias2
|
||||
; WIN32: /EXPORT:_alias3
|
||||
; WIN32: /EXPORT:_weak_alias
|
||||
; MINGW: -export:_Var1,data
|
||||
; MINGW: -export:_Var2,data
|
||||
; MINGW: -export:_Var3,data
|
||||
|
@ -98,3 +119,7 @@ define weak_odr dllexport void @weak1() {
|
|||
; MINGW: -export:_lnk1
|
||||
; MINGW: -export:_lnk2
|
||||
; MINGW: -export:_weak1
|
||||
; MINGW: -export:_alias
|
||||
; MINGW: -export:_alias2
|
||||
; MINGW: -export:_alias3
|
||||
; MINGW: -export:_weak_alias
|
||||
|
|
Loading…
Reference in New Issue