Skip to content

Commit

Permalink
MC/X86/COFF: Allow quotes in names when targeting MS/Windows,
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Bigcheese committed Nov 29, 2011
1 parent b0436a7 commit 116bc79
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 5 deletions.
10 changes: 10 additions & 0 deletions include/llvm/MC/MCAsmInfoCOFF.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,16 @@ namespace llvm {
explicit MCAsmInfoCOFF();

};

class MCAsmInfoMicrosoft : public MCAsmInfoCOFF {
protected:
explicit MCAsmInfoMicrosoft();
};

class MCAsmInfoGNUCOFF : public MCAsmInfoCOFF {
protected:
explicit MCAsmInfoGNUCOFF();
};
}


Expand Down
8 changes: 8 additions & 0 deletions lib/MC/MCAsmInfoCOFF.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,11 @@ MCAsmInfoCOFF::MCAsmInfoCOFF() {

SupportsDataRegions = false;
}

MCAsmInfoMicrosoft::MCAsmInfoMicrosoft() {
AllowQuotesInName = true;
}

MCAsmInfoGNUCOFF::MCAsmInfoGNUCOFF() {

}
14 changes: 13 additions & 1 deletion lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
8 changes: 6 additions & 2 deletions lib/Target/X86/MCTargetDesc/X86MCAsmInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
6 changes: 4 additions & 2 deletions lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
17 changes: 17 additions & 0 deletions test/MC/COFF/symbol-mangling.ll
Original file line number Diff line number Diff line change
@@ -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*)

0 comments on commit 116bc79

Please sign in to comment.