summaryrefslogtreecommitdiff
path: root/lib/MC/WinCOFFStreamer.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-11-25 16:06:04 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-11-25 16:06:04 +0000
commitc7daeb3098f58028ffe1fc495cb4c51b4d378f9d (patch)
tree0dd3745755604deb577b9af9ae8472a7f030fa70 /lib/MC/WinCOFFStreamer.cpp
parent68bef454399b25f7f8fb4484a806a5efd69eb3d7 (diff)
downloadllvm-c7daeb3098f58028ffe1fc495cb4c51b4d378f9d.tar.gz
llvm-c7daeb3098f58028ffe1fc495cb4c51b4d378f9d.tar.bz2
llvm-c7daeb3098f58028ffe1fc495cb4c51b4d378f9d.tar.xz
Fix .comm and .lcomm on COFF.
These should not use COMDATs. GNU as uses .bss for .lcomm and section 0 for .comm. Given static int a; int b; MSVC puts both in .bss. This patch then puts both .comm and .lcomm on .bss. With this change we agree with gas on .lcomm, are much closer on .comm and clang-cl matches msvc on the above example. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195654 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/WinCOFFStreamer.cpp')
-rw-r--r--lib/MC/WinCOFFStreamer.cpp20
1 files changed, 2 insertions, 18 deletions
diff --git a/lib/MC/WinCOFFStreamer.cpp b/lib/MC/WinCOFFStreamer.cpp
index 0c205e5070..af313b2ff8 100644
--- a/lib/MC/WinCOFFStreamer.cpp
+++ b/lib/MC/WinCOFFStreamer.cpp
@@ -140,28 +140,12 @@ void WinCOFFStreamer::AddCommonSymbol(MCSymbol *Symbol, uint64_t Size,
unsigned ByteAlignment, bool External) {
assert(!Symbol->isInSection() && "Symbol must not already have a section!");
- std::string SectionName(".bss$linkonce");
- SectionName.append(Symbol->getName().begin(), Symbol->getName().end());
-
- MCSymbolData &SymbolData = getAssembler().getOrCreateSymbolData(*Symbol);
-
- unsigned Characteristics =
- COFF::IMAGE_SCN_LNK_COMDAT |
- COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA |
- COFF::IMAGE_SCN_MEM_READ |
- COFF::IMAGE_SCN_MEM_WRITE;
-
- int Selection = COFF::IMAGE_COMDAT_SELECT_LARGEST;
-
- const MCSection *Section = MCStreamer::getContext().getCOFFSection(
- SectionName, Characteristics, SectionKind::getBSS(), Symbol->getName(),
- Selection);
-
+ const MCSectionCOFF *Section = getSectionBSS();
MCSectionData &SectionData = getAssembler().getOrCreateSectionData(*Section);
-
if (SectionData.getAlignment() < ByteAlignment)
SectionData.setAlignment(ByteAlignment);
+ MCSymbolData &SymbolData = getAssembler().getOrCreateSymbolData(*Symbol);
SymbolData.setExternal(External);
AssignSection(Symbol, Section);