aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.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/CodeGen/TargetLoweringObjectFileImpl.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/CodeGen/TargetLoweringObjectFileImpl.cpp')
-rw-r--r--llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp38
1 files changed, 17 insertions, 21 deletions
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 59d7b57..229ccfa 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -723,33 +723,31 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
Mangler *Mang, const TargetMachine &TM) const {
int Selection = 0;
unsigned Characteristics = getCOFFSectionFlags(Kind);
- SmallString<128> Name(GV->getSection().c_str());
+ StringRef Name = GV->getSection();
+ StringRef COMDATSymName = "";
if (GV->isWeakForLinker()) {
Selection = COFF::IMAGE_COMDAT_SELECT_ANY;
Characteristics |= COFF::IMAGE_SCN_LNK_COMDAT;
- Name.append("$");
- Mang->getNameWithPrefix(Name, GV, false, false);
+ MCSymbol *Sym = getSymbol(*Mang, GV);
+ COMDATSymName = Sym->getName();
}
return getContext().getCOFFSection(Name,
Characteristics,
Kind,
- "",
+ COMDATSymName,
Selection);
}
-static const char *getCOFFSectionPrefixForUniqueGlobal(SectionKind Kind) {
+static const char *getCOFFSectionNameForUniqueGlobal(SectionKind Kind) {
if (Kind.isText())
- return ".text$";
+ return ".text";
if (Kind.isBSS ())
- return ".bss$";
- if (Kind.isThreadLocal()) {
- // 'LLVM' is just an arbitary string to ensure that the section name gets
- // sorted in between '.tls$AAA' and '.tls$ZZZ' by the linker.
- return ".tls$LLVM";
- }
+ return ".bss";
+ if (Kind.isThreadLocal())
+ return ".tls";
if (Kind.isWriteable())
- return ".data$";
- return ".rdata$";
+ return ".data";
+ return ".rdata";
}
@@ -760,16 +758,14 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
// If this global is linkonce/weak and the target handles this by emitting it
// into a 'uniqued' section name, create and return the section now.
if (GV->isWeakForLinker()) {
- const char *Prefix = getCOFFSectionPrefixForUniqueGlobal(Kind);
- SmallString<128> Name(Prefix, Prefix+strlen(Prefix));
- Mang->getNameWithPrefix(Name, GV, false, false);
-
+ const char *Name = getCOFFSectionNameForUniqueGlobal(Kind);
unsigned Characteristics = getCOFFSectionFlags(Kind);
Characteristics |= COFF::IMAGE_SCN_LNK_COMDAT;
-
- return getContext().getCOFFSection(Name.str(), Characteristics,
- Kind, "", COFF::IMAGE_COMDAT_SELECT_ANY);
+ MCSymbol *Sym = getSymbol(*Mang, GV);
+ return getContext().getCOFFSection(Name, Characteristics,
+ Kind, Sym->getName(),
+ COFF::IMAGE_COMDAT_SELECT_ANY);
}
if (Kind.isText())