summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-03-27 15:01:40 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-03-27 15:01:40 +0000
commitb61beca40c141fd156c2d1feb47410221d1f43f7 (patch)
tree2052024421bc83ef61e9eac22836088e5b4a8ce3 /llvm/lib
parent52bd86739973666a42c9923abd65323503db8cef (diff)
downloadbcm5719-llvm-b61beca40c141fd156c2d1feb47410221d1f43f7.tar.gz
bcm5719-llvm-b61beca40c141fd156c2d1feb47410221d1f43f7.zip
Close unique sections when switching away from them.
It is not possible to switch back to unique secitons, so close them automatically when switching away. llvm-svn: 233380
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/MC/MCSectionMachO.cpp2
-rw-r--r--llvm/lib/MC/MCStreamer.cpp6
-rw-r--r--llvm/lib/Target/NVPTX/NVPTXSection.h3
3 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/MC/MCSectionMachO.cpp b/llvm/lib/MC/MCSectionMachO.cpp
index c9f15914e4b..606d0747528 100644
--- a/llvm/lib/MC/MCSectionMachO.cpp
+++ b/llvm/lib/MC/MCSectionMachO.cpp
@@ -72,7 +72,7 @@ ENTRY(nullptr /*FIXME*/, S_ATTR_LOC_RELOC)
MCSectionMachO::MCSectionMachO(StringRef Segment, StringRef Section,
unsigned TAA, unsigned reserved2, SectionKind K,
MCSymbol *Begin)
- : MCSection(SV_MachO, K, Begin), TypeAndAttributes(TAA),
+ : MCSection(SV_MachO, K, Begin, /*Unique*/ false), TypeAndAttributes(TAA),
Reserved2(reserved2) {
assert(Segment.size() <= 16 && Section.size() <= 16 &&
"Segment or section string too long");
diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp
index 27d0355bb11..3db23455404 100644
--- a/llvm/lib/MC/MCStreamer.cpp
+++ b/llvm/lib/MC/MCStreamer.cpp
@@ -669,6 +669,12 @@ void MCStreamer::SwitchSection(const MCSection *Section,
MCSectionSubPair curSection = SectionStack.back().first;
SectionStack.back().second = curSection;
if (MCSectionSubPair(Section, Subsection) != curSection) {
+ const MCSection *CurSec = curSection.first;
+ if (CurSec && CurSec->isUnique()) {
+ MCSymbol *Sym = curSection.first->getEndSymbol(Context);
+ if (!Sym->isInSection())
+ EmitLabel(Sym);
+ }
SectionStack.back().first = MCSectionSubPair(Section, Subsection);
assert(!Section->hasEnded() && "Section already ended");
ChangeSection(Section, Subsection);
diff --git a/llvm/lib/Target/NVPTX/NVPTXSection.h b/llvm/lib/Target/NVPTX/NVPTXSection.h
index 0d2627d62eb..eb6194a23ee 100644
--- a/llvm/lib/Target/NVPTX/NVPTXSection.h
+++ b/llvm/lib/Target/NVPTX/NVPTXSection.h
@@ -26,7 +26,8 @@ namespace llvm {
class NVPTXSection : public MCSection {
virtual void anchor();
public:
- NVPTXSection(SectionVariant V, SectionKind K) : MCSection(V, K, nullptr) {}
+ NVPTXSection(SectionVariant V, SectionKind K)
+ : MCSection(V, K, nullptr, /*Unique*/ false) {}
virtual ~NVPTXSection() {}
/// Override this as NVPTX has its own way of printing switching
OpenPOWER on IntegriCloud