diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-03-27 15:01:40 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-03-27 15:01:40 +0000 |
| commit | b61beca40c141fd156c2d1feb47410221d1f43f7 (patch) | |
| tree | 2052024421bc83ef61e9eac22836088e5b4a8ce3 /llvm/lib | |
| parent | 52bd86739973666a42c9923abd65323503db8cef (diff) | |
| download | bcm5719-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.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/MC/MCStreamer.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/Target/NVPTX/NVPTXSection.h | 3 |
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 |

