diff options
| -rw-r--r-- | llvm/lib/Target/X86/X86AsmPrinter.cpp | 7 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/dllexport.ll | 77 | 
2 files changed, 47 insertions, 37 deletions
diff --git a/llvm/lib/Target/X86/X86AsmPrinter.cpp b/llvm/lib/Target/X86/X86AsmPrinter.cpp index 8a7417fcff6..525fb6c8be9 100644 --- a/llvm/lib/Target/X86/X86AsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86AsmPrinter.cpp @@ -553,13 +553,18 @@ emitNonLazySymbolPointer(MCStreamer &OutStreamer, MCSymbol *StubLabel,  void X86AsmPrinter::GenerateExportDirective(const MCSymbol *Sym, bool IsData) {    SmallString<128> Directive;    raw_svector_ostream OS(Directive); +  StringRef Name = Sym->getName();    if (Subtarget->isTargetKnownWindowsMSVC())      OS << " /EXPORT:";    else      OS << " -export:"; -  OS << Sym->getName(); +  if ((Subtarget->isTargetWindowsGNU() || Subtarget->isTargetWindowsCygwin()) && +      (Name[0] == getDataLayout().getGlobalPrefix())) +    Name = Name.drop_front(); + +  OS << Name;    if (IsData) {      if (Subtarget->isTargetKnownWindowsMSVC()) diff --git a/llvm/test/CodeGen/X86/dllexport.ll b/llvm/test/CodeGen/X86/dllexport.ll index eba6d6946e9..6103a412112 100644 --- a/llvm/test/CodeGen/X86/dllexport.ll +++ b/llvm/test/CodeGen/X86/dllexport.ll @@ -1,5 +1,9 @@ -; RUN: llc -mtriple i386-pc-win32 < %s | FileCheck -check-prefix=CHECK -check-prefix=WIN32 %s -; RUN: llc -mtriple i386-pc-mingw32 < %s | FileCheck -check-prefix=CHECK -check-prefix=MINGW %s +; RUN: llc -mtriple i386-pc-win32 < %s \ +; RUN:    | FileCheck -check-prefix CHECK -check-prefix CHECK-CL %s +; RUN: llc -mtriple i386-pc-mingw32 < %s \ +; RUN:    | FileCheck -check-prefix CHECK -check-prefix CHECK-GCC %s +; RUN: llc -mtriple i686-pc-cygwin %s -o - \ +; RUN:    | FileCheck -check-prefix CHECK -check-prefix CHECK-GCC %s  ; CHECK: .text @@ -89,37 +93,38 @@ define weak_odr dllexport void @weak1() {  ; CHECK: .section .drectve -; WIN32: /EXPORT:_Var1,DATA -; WIN32: /EXPORT:_Var2,DATA -; WIN32: /EXPORT:_Var3,DATA -; WIN32: /EXPORT:_WeakVar1,DATA -; WIN32: /EXPORT:_WeakVar2,DATA -; WIN32: /EXPORT:_f1 -; WIN32: /EXPORT:_f2 -; WIN32: /EXPORT:_stdfun@0 -; WIN32: /EXPORT:@fastfun@0 -; WIN32: /EXPORT:_thisfun -; 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 -; MINGW: -export:_WeakVar1,data -; MINGW: -export:_WeakVar2,data -; MINGW: -export:_f1 -; MINGW: -export:_f2 -; MINGW: -export:_stdfun@0 -; MINGW: -export:@fastfun@0 -; MINGW: -export:_thisfun -; MINGW: -export:_lnk1 -; MINGW: -export:_lnk2 -; MINGW: -export:_weak1 -; MINGW: -export:_alias -; MINGW: -export:_alias2 -; MINGW: -export:_alias3 -; MINGW: -export:_weak_alias +; CHECK-CL: /EXPORT:_Var1,DATA +; CHECK-CL: /EXPORT:_Var2,DATA +; CHECK-CL: /EXPORT:_Var3,DATA +; CHECK-CL: /EXPORT:_WeakVar1,DATA +; CHECK-CL: /EXPORT:_WeakVar2,DATA +; CHECK-CL: /EXPORT:_f1 +; CHECK-CL: /EXPORT:_f2 +; CHECK-CL: /EXPORT:_stdfun@0 +; CHECK-CL: /EXPORT:@fastfun@0 +; CHECK-CL: /EXPORT:_thisfun +; CHECK-CL: /EXPORT:_lnk1 +; CHECK-CL: /EXPORT:_lnk2 +; CHECK-CL: /EXPORT:_weak1 +; CHECK-CL: /EXPORT:_alias +; CHECK-CL: /EXPORT:_alias2 +; CHECK-CL: /EXPORT:_alias3 +; CHECK-CL: /EXPORT:_weak_alias +; CHECK-GCC: -export:Var1,data +; CHECK-GCC: -export:Var2,data +; CHECK-GCC: -export:Var3,data +; CHECK-GCC: -export:WeakVar1,data +; CHECK-GCC: -export:WeakVar2,data +; CHECK-GCC: -export:f1 +; CHECK-GCC: -export:f2 +; CHECK-GCC: -export:stdfun@0 +; CHECK-GCC: -export:@fastfun@0 +; CHECK-GCC: -export:thisfun +; CHECK-GCC: -export:lnk1 +; CHECK-GCC: -export:lnk2 +; CHECK-GCC: -export:weak1 +; CHECK-GCC: -export:alias +; CHECK-GCC: -export:alias2 +; CHECK-GCC: -export:alias3 +; CHECK-GCC: -export:weak_alias +  | 

