mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-07-21 18:29:45 +00:00
MC/X86/COFF: Allow quotes in names when targeting MS/Windows,
as MC is the only assembler we support. This splits MS/Windows and GNU/Windows ASM infos into two seperate classes. While there is currently only one difference, full MS C++ ABI support will require many more. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145409 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b0436a7305
commit
116bc795da
@ -18,6 +18,16 @@ namespace llvm {
|
|||||||
explicit MCAsmInfoCOFF();
|
explicit MCAsmInfoCOFF();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class MCAsmInfoMicrosoft : public MCAsmInfoCOFF {
|
||||||
|
protected:
|
||||||
|
explicit MCAsmInfoMicrosoft();
|
||||||
|
};
|
||||||
|
|
||||||
|
class MCAsmInfoGNUCOFF : public MCAsmInfoCOFF {
|
||||||
|
protected:
|
||||||
|
explicit MCAsmInfoGNUCOFF();
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,3 +38,11 @@ MCAsmInfoCOFF::MCAsmInfoCOFF() {
|
|||||||
|
|
||||||
SupportsDataRegions = false;
|
SupportsDataRegions = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MCAsmInfoMicrosoft::MCAsmInfoMicrosoft() {
|
||||||
|
AllowQuotesInName = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
MCAsmInfoGNUCOFF::MCAsmInfoGNUCOFF() {
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -125,7 +125,19 @@ getNonexecutableStackSection(MCContext &Ctx) const {
|
|||||||
0, SectionKind::getMetadata());
|
0, SectionKind::getMetadata());
|
||||||
}
|
}
|
||||||
|
|
||||||
X86MCAsmInfoCOFF::X86MCAsmInfoCOFF(const Triple &Triple) {
|
X86MCAsmInfoMicrosoft::X86MCAsmInfoMicrosoft(const Triple &Triple) {
|
||||||
|
if (Triple.getArch() == Triple::x86_64) {
|
||||||
|
GlobalPrefix = "";
|
||||||
|
PrivateGlobalPrefix = ".L";
|
||||||
|
}
|
||||||
|
|
||||||
|
AsmTransCBE = x86_asm_table;
|
||||||
|
AssemblerDialect = AsmWriterFlavor;
|
||||||
|
|
||||||
|
TextAlignFillValue = 0x90;
|
||||||
|
}
|
||||||
|
|
||||||
|
X86MCAsmInfoGNUCOFF::X86MCAsmInfoGNUCOFF(const Triple &Triple) {
|
||||||
if (Triple.getArch() == Triple::x86_64) {
|
if (Triple.getArch() == Triple::x86_64) {
|
||||||
GlobalPrefix = "";
|
GlobalPrefix = "";
|
||||||
PrivateGlobalPrefix = ".L";
|
PrivateGlobalPrefix = ".L";
|
||||||
|
@ -38,8 +38,12 @@ namespace llvm {
|
|||||||
virtual const MCSection *getNonexecutableStackSection(MCContext &Ctx) const;
|
virtual const MCSection *getNonexecutableStackSection(MCContext &Ctx) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct X86MCAsmInfoCOFF : public MCAsmInfoCOFF {
|
struct X86MCAsmInfoMicrosoft : public MCAsmInfoMicrosoft {
|
||||||
explicit X86MCAsmInfoCOFF(const Triple &Triple);
|
explicit X86MCAsmInfoMicrosoft(const Triple &Triple);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct X86MCAsmInfoGNUCOFF : public MCAsmInfoGNUCOFF {
|
||||||
|
explicit X86MCAsmInfoGNUCOFF(const Triple &Triple);
|
||||||
};
|
};
|
||||||
} // namespace llvm
|
} // namespace llvm
|
||||||
|
|
||||||
|
@ -361,8 +361,10 @@ static MCAsmInfo *createX86MCAsmInfo(const Target &T, StringRef TT) {
|
|||||||
MAI = new X86_64MCAsmInfoDarwin(TheTriple);
|
MAI = new X86_64MCAsmInfoDarwin(TheTriple);
|
||||||
else
|
else
|
||||||
MAI = new X86MCAsmInfoDarwin(TheTriple);
|
MAI = new X86MCAsmInfoDarwin(TheTriple);
|
||||||
} else if (TheTriple.isOSWindows()) {
|
} else if (TheTriple.getOS() == Triple::Win32) {
|
||||||
MAI = new X86MCAsmInfoCOFF(TheTriple);
|
MAI = new X86MCAsmInfoMicrosoft(TheTriple);
|
||||||
|
} else if (TheTriple.getOS() == Triple::MinGW32 || TheTriple.getOS() == Triple::Cygwin) {
|
||||||
|
MAI = new X86MCAsmInfoGNUCOFF(TheTriple);
|
||||||
} else {
|
} else {
|
||||||
MAI = new X86ELFMCAsmInfo(TheTriple);
|
MAI = new X86ELFMCAsmInfo(TheTriple);
|
||||||
}
|
}
|
||||||
|
17
test/MC/COFF/symbol-mangling.ll
Normal file
17
test/MC/COFF/symbol-mangling.ll
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
; The purpose of this test is to see if the MC layer properly handles symbol
|
||||||
|
; names needing quoting on MS/Windows. This code is generated by clang when
|
||||||
|
; using -cxx-abi microsoft.
|
||||||
|
|
||||||
|
; RUN: llc -filetype=asm -mtriple i686-pc-win32 %s -o - | FileCheck %s
|
||||||
|
|
||||||
|
; CHECK: ?sayhi@A@@QBEXXZ
|
||||||
|
|
||||||
|
%struct.A = type {}
|
||||||
|
|
||||||
|
define i32 @main() {
|
||||||
|
entry:
|
||||||
|
tail call void @"\01?sayhi@A@@QBEXXZ"(%struct.A* null)
|
||||||
|
ret i32 0
|
||||||
|
}
|
||||||
|
|
||||||
|
declare void @"\01?sayhi@A@@QBEXXZ"(%struct.A*)
|
Loading…
Reference in New Issue
Block a user