mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01: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. llvm-svn: 145409
This commit is contained in:
parent
5ce4e1a9d3
commit
5fade79478
@ -18,6 +18,16 @@ namespace llvm {
|
||||
explicit MCAsmInfoCOFF();
|
||||
|
||||
};
|
||||
|
||||
class MCAsmInfoMicrosoft : public MCAsmInfoCOFF {
|
||||
protected:
|
||||
explicit MCAsmInfoMicrosoft();
|
||||
};
|
||||
|
||||
class MCAsmInfoGNUCOFF : public MCAsmInfoCOFF {
|
||||
protected:
|
||||
explicit MCAsmInfoGNUCOFF();
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
@ -38,3 +38,11 @@ MCAsmInfoCOFF::MCAsmInfoCOFF() {
|
||||
|
||||
SupportsDataRegions = false;
|
||||
}
|
||||
|
||||
MCAsmInfoMicrosoft::MCAsmInfoMicrosoft() {
|
||||
AllowQuotesInName = true;
|
||||
}
|
||||
|
||||
MCAsmInfoGNUCOFF::MCAsmInfoGNUCOFF() {
|
||||
|
||||
}
|
||||
|
@ -125,7 +125,19 @@ getNonexecutableStackSection(MCContext &Ctx) const {
|
||||
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) {
|
||||
GlobalPrefix = "";
|
||||
PrivateGlobalPrefix = ".L";
|
||||
|
@ -38,8 +38,12 @@ namespace llvm {
|
||||
virtual const MCSection *getNonexecutableStackSection(MCContext &Ctx) const;
|
||||
};
|
||||
|
||||
struct X86MCAsmInfoCOFF : public MCAsmInfoCOFF {
|
||||
explicit X86MCAsmInfoCOFF(const Triple &Triple);
|
||||
struct X86MCAsmInfoMicrosoft : public MCAsmInfoMicrosoft {
|
||||
explicit X86MCAsmInfoMicrosoft(const Triple &Triple);
|
||||
};
|
||||
|
||||
struct X86MCAsmInfoGNUCOFF : public MCAsmInfoGNUCOFF {
|
||||
explicit X86MCAsmInfoGNUCOFF(const Triple &Triple);
|
||||
};
|
||||
} // namespace llvm
|
||||
|
||||
|
@ -361,8 +361,10 @@ static MCAsmInfo *createX86MCAsmInfo(const Target &T, StringRef TT) {
|
||||
MAI = new X86_64MCAsmInfoDarwin(TheTriple);
|
||||
else
|
||||
MAI = new X86MCAsmInfoDarwin(TheTriple);
|
||||
} else if (TheTriple.isOSWindows()) {
|
||||
MAI = new X86MCAsmInfoCOFF(TheTriple);
|
||||
} else if (TheTriple.getOS() == Triple::Win32) {
|
||||
MAI = new X86MCAsmInfoMicrosoft(TheTriple);
|
||||
} else if (TheTriple.getOS() == Triple::MinGW32 || TheTriple.getOS() == Triple::Cygwin) {
|
||||
MAI = new X86MCAsmInfoGNUCOFF(TheTriple);
|
||||
} else {
|
||||
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