summaryrefslogtreecommitdiff
path: root/lib/Target/X86
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2014-05-04 00:03:48 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2014-05-04 00:03:48 +0000
commitf3b2ed749817c0ffc1a22a2055af8ee5afc27a78 (patch)
treed8fd222ebf5a49cba433f9341429672c32ab34f9 /lib/Target/X86
parent6f0d4e358fda7fd7c95106c49b650f1d78000f79 (diff)
downloadllvm-f3b2ed749817c0ffc1a22a2055af8ee5afc27a78.tar.gz
llvm-f3b2ed749817c0ffc1a22a2055af8ee5afc27a78.tar.bz2
llvm-f3b2ed749817c0ffc1a22a2055af8ee5afc27a78.tar.xz
X86: repair export compatibility with MinGW/cygwin
Both MinGW and cygwin (i686) construct export directives without the global leader prefix. This is mostly due to the fact that they use GNU ld which does not correctly handle the export directive. This apparently has been been broken for a while. However, this was recently reported as being broken by mingwandroid and diorcety of the msys2 project. Remove the global leader prefix if targeting MinGW or cygwin, otherwise, retain the global leader prefix. Add an explicit test for cygwin's behaviour of export directives. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207926 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86')
-rw-r--r--lib/Target/X86/X86AsmPrinter.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/Target/X86/X86AsmPrinter.cpp b/lib/Target/X86/X86AsmPrinter.cpp
index 8a7417fcff..525fb6c8be 100644
--- a/lib/Target/X86/X86AsmPrinter.cpp
+++ b/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())