<div dir="ltr">Is there a binutils bug for this?  It's fine if they close wontfix, but at least then we'd have some record of communication about this issue.</div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Sat, May 3, 2014 at 5:03 PM, Saleem Abdulrasool <span dir="ltr"><<a href="mailto:compnerd@compnerd.org" target="_blank">compnerd@compnerd.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: compnerd<br>
Date: Sat May  3 19:03:48 2014<br>
New Revision: 207926<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=207926&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=207926&view=rev</a><br>
Log:<br>
X86: repair export compatibility with MinGW/cygwin<br>
<br>
Both MinGW and cygwin (i686) construct export directives without the global<br>
leader prefix.  This is mostly due to the fact that they use GNU ld which does<br>
not correctly handle the export directive.  This apparently has been been broken<br>
for a while.  However, this was recently reported as being broken by<br>
mingwandroid and diorcety of the msys2 project.<br>
<br>
Remove the global leader prefix if targeting MinGW or cygwin, otherwise, retain<br>
the global leader prefix.  Add an explicit test for cygwin's behaviour of export<br>
directives.<br>
<br>
Modified:<br>
    llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp<br>
    llvm/trunk/test/CodeGen/X86/dllexport.ll<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp?rev=207926&r1=207925&r2=207926&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp?rev=207926&r1=207925&r2=207926&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp (original)<br>
+++ llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp Sat May  3 19:03:48 2014<br>
@@ -553,13 +553,18 @@ emitNonLazySymbolPointer(MCStreamer &Out<br>
 void X86AsmPrinter::GenerateExportDirective(const MCSymbol *Sym, bool IsData) {<br>
   SmallString<128> Directive;<br>
   raw_svector_ostream OS(Directive);<br>
+  StringRef Name = Sym->getName();<br>
<br>
   if (Subtarget->isTargetKnownWindowsMSVC())<br>
     OS << " /EXPORT:";<br>
   else<br>
     OS << " -export:";<br>
<br>
-  OS << Sym->getName();<br>
+  if ((Subtarget->isTargetWindowsGNU() || Subtarget->isTargetWindowsCygwin()) &&<br>
+      (Name[0] == getDataLayout().getGlobalPrefix()))<br>
+    Name = Name.drop_front();<br>
+<br>
+  OS << Name;<br>
<br>
   if (IsData) {<br>
     if (Subtarget->isTargetKnownWindowsMSVC())<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/dllexport.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/dllexport.ll?rev=207926&r1=207925&r2=207926&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/dllexport.ll?rev=207926&r1=207925&r2=207926&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/dllexport.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/dllexport.ll Sat May  3 19:03:48 2014<br>
@@ -1,5 +1,9 @@<br>
-; RUN: llc -mtriple i386-pc-win32 < %s | FileCheck -check-prefix=CHECK -check-prefix=WIN32 %s<br>
-; RUN: llc -mtriple i386-pc-mingw32 < %s | FileCheck -check-prefix=CHECK -check-prefix=MINGW %s<br>
+; RUN: llc -mtriple i386-pc-win32 < %s \<br>
+; RUN:    | FileCheck -check-prefix CHECK -check-prefix CHECK-CL %s<br>
+; RUN: llc -mtriple i386-pc-mingw32 < %s \<br>
+; RUN:    | FileCheck -check-prefix CHECK -check-prefix CHECK-GCC %s<br>
+; RUN: llc -mtriple i686-pc-cygwin %s -o - \<br>
+; RUN:    | FileCheck -check-prefix CHECK -check-prefix CHECK-GCC %s<br>
<br>
 ; CHECK: .text<br>
<br>
@@ -89,37 +93,38 @@ define weak_odr dllexport void @weak1()<br>
<br>
<br>
 ; CHECK: .section .drectve<br>
-; WIN32: /EXPORT:_Var1,DATA<br>
-; WIN32: /EXPORT:_Var2,DATA<br>
-; WIN32: /EXPORT:_Var3,DATA<br>
-; WIN32: /EXPORT:_WeakVar1,DATA<br>
-; WIN32: /EXPORT:_WeakVar2,DATA<br>
-; WIN32: /EXPORT:_f1<br>
-; WIN32: /EXPORT:_f2<br>
-; WIN32: /EXPORT:_stdfun@0<br>
-; WIN32: /EXPORT:@fastfun@0<br>
-; WIN32: /EXPORT:_thisfun<br>
-; WIN32: /EXPORT:_lnk1<br>
-; WIN32: /EXPORT:_lnk2<br>
-; WIN32: /EXPORT:_weak1<br>
-; WIN32: /EXPORT:_alias<br>
-; WIN32: /EXPORT:_alias2<br>
-; WIN32: /EXPORT:_alias3<br>
-; WIN32: /EXPORT:_weak_alias<br>
-; MINGW: -export:_Var1,data<br>
-; MINGW: -export:_Var2,data<br>
-; MINGW: -export:_Var3,data<br>
-; MINGW: -export:_WeakVar1,data<br>
-; MINGW: -export:_WeakVar2,data<br>
-; MINGW: -export:_f1<br>
-; MINGW: -export:_f2<br>
-; MINGW: -export:_stdfun@0<br>
-; MINGW: -export:@fastfun@0<br>
-; MINGW: -export:_thisfun<br>
-; MINGW: -export:_lnk1<br>
-; MINGW: -export:_lnk2<br>
-; MINGW: -export:_weak1<br>
-; MINGW: -export:_alias<br>
-; MINGW: -export:_alias2<br>
-; MINGW: -export:_alias3<br>
-; MINGW: -export:_weak_alias<br>
+; CHECK-CL: /EXPORT:_Var1,DATA<br>
+; CHECK-CL: /EXPORT:_Var2,DATA<br>
+; CHECK-CL: /EXPORT:_Var3,DATA<br>
+; CHECK-CL: /EXPORT:_WeakVar1,DATA<br>
+; CHECK-CL: /EXPORT:_WeakVar2,DATA<br>
+; CHECK-CL: /EXPORT:_f1<br>
+; CHECK-CL: /EXPORT:_f2<br>
+; CHECK-CL: /EXPORT:_stdfun@0<br>
+; CHECK-CL: /EXPORT:@fastfun@0<br>
+; CHECK-CL: /EXPORT:_thisfun<br>
+; CHECK-CL: /EXPORT:_lnk1<br>
+; CHECK-CL: /EXPORT:_lnk2<br>
+; CHECK-CL: /EXPORT:_weak1<br>
+; CHECK-CL: /EXPORT:_alias<br>
+; CHECK-CL: /EXPORT:_alias2<br>
+; CHECK-CL: /EXPORT:_alias3<br>
+; CHECK-CL: /EXPORT:_weak_alias<br>
+; CHECK-GCC: -export:Var1,data<br>
+; CHECK-GCC: -export:Var2,data<br>
+; CHECK-GCC: -export:Var3,data<br>
+; CHECK-GCC: -export:WeakVar1,data<br>
+; CHECK-GCC: -export:WeakVar2,data<br>
+; CHECK-GCC: -export:f1<br>
+; CHECK-GCC: -export:f2<br>
+; CHECK-GCC: -export:stdfun@0<br>
+; CHECK-GCC: -export:@fastfun@0<br>
+; CHECK-GCC: -export:thisfun<br>
+; CHECK-GCC: -export:lnk1<br>
+; CHECK-GCC: -export:lnk2<br>
+; CHECK-GCC: -export:weak1<br>
+; CHECK-GCC: -export:alias<br>
+; CHECK-GCC: -export:alias2<br>
+; CHECK-GCC: -export:alias3<br>
+; CHECK-GCC: -export:weak_alias<br>
+<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>