aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/MC/MCSectionCOFF.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-11-27 01:18:37 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-11-27 01:18:37 +0000
commit2d30ae2be90c4dad2052045768d5d374b66e41ac (patch)
tree893bf4d64eacc7ab10458ff6246782dc4ed21390 /llvm/lib/MC/MCSectionCOFF.cpp
parent3e873b0578f99b700b9860ed3501804d83e2cc5c (diff)
downloadllvm-2d30ae2be90c4dad2052045768d5d374b66e41ac.zip
llvm-2d30ae2be90c4dad2052045768d5d374b66e41ac.tar.gz
llvm-2d30ae2be90c4dad2052045768d5d374b66e41ac.tar.bz2
Use simple section names for COMDAT sections on COFF.
With this patch we use simple names for COMDAT sections (like .text or .bss). This matches the MSVC behavior. When merging it is the COMDAT symbol that is used to decide if two sections should be merged, so there is no point in building a fancy name. This survived a bootstrap on mingw32. llvm-svn: 195798
Diffstat (limited to 'llvm/lib/MC/MCSectionCOFF.cpp')
-rw-r--r--llvm/lib/MC/MCSectionCOFF.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/llvm/lib/MC/MCSectionCOFF.cpp b/llvm/lib/MC/MCSectionCOFF.cpp
index 64aa2c5..bb35027 100644
--- a/llvm/lib/MC/MCSectionCOFF.cpp
+++ b/llvm/lib/MC/MCSectionCOFF.cpp
@@ -20,6 +20,8 @@ MCSectionCOFF::~MCSectionCOFF() {} // anchor.
// should be printed before the section name
bool MCSectionCOFF::ShouldOmitSectionDirective(StringRef Name,
const MCAsmInfo &MAI) const {
+ if (COMDATSymbol)
+ return false;
// FIXME: Does .section .bss/.data/.text work everywhere??
if (Name == ".text" || Name == ".data" || Name == ".bss")
@@ -58,36 +60,41 @@ void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI,
OS << 'r';
if (getCharacteristics() & COFF::IMAGE_SCN_MEM_DISCARDABLE)
OS << 'n';
- OS << "\"\n";
+
+ OS << '"';
if (getCharacteristics() & COFF::IMAGE_SCN_LNK_COMDAT) {
+ OS << ",";
switch (Selection) {
case COFF::IMAGE_COMDAT_SELECT_NODUPLICATES:
- OS << "\t.linkonce one_only\n";
+ OS << "one_only,";
break;
case COFF::IMAGE_COMDAT_SELECT_ANY:
- OS << "\t.linkonce discard\n";
+ OS << "discard,";
break;
case COFF::IMAGE_COMDAT_SELECT_SAME_SIZE:
- OS << "\t.linkonce same_size\n";
+ OS << "same_size,";
break;
case COFF::IMAGE_COMDAT_SELECT_EXACT_MATCH:
- OS << "\t.linkonce same_contents\n";
+ OS << "same_contents,";
break;
case COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE:
- OS << "\t.linkonce associative " << Assoc->getSectionName() << "\n";
+ OS << "associative " << Assoc->getSectionName() << ",";
break;
case COFF::IMAGE_COMDAT_SELECT_LARGEST:
- OS << "\t.linkonce largest\n";
+ OS << "largest,";
break;
case COFF::IMAGE_COMDAT_SELECT_NEWEST:
- OS << "\t.linkonce newest\n";
+ OS << "newest,";
break;
default:
assert (0 && "unsupported COFF selection type");
break;
}
+ assert(COMDATSymbol);
+ OS << *COMDATSymbol;
}
+ OS << '\n';
}
bool MCSectionCOFF::UseCodeAlign() const {