Refactor how passes get a symbol at the end of a section.
[oota-llvm.git] / lib / MC / MCStreamer.cpp
index 63b0bf2c80f81cafc0edb826255c32cb3026c4cf..27d0355bb1175882fa552e186cbe964ad6deb465 100644 (file)
@@ -670,9 +670,22 @@ void MCStreamer::SwitchSection(const MCSection *Section,
   SectionStack.back().second = curSection;
   if (MCSectionSubPair(Section, Subsection) != curSection) {
     SectionStack.back().first = MCSectionSubPair(Section, Subsection);
+    assert(!Section->hasEnded() && "Section already ended");
     ChangeSection(Section, Subsection);
     MCSymbol *Sym = Section->getBeginSymbol();
     if (Sym && !Sym->isInSection())
       EmitLabel(Sym);
   }
 }
+
+MCSymbol *MCStreamer::endSection(const MCSection *Section) {
+  // TODO: keep track of the last subsection so that this symbol appears in the
+  // correct place.
+  MCSymbol *Sym = Section->getEndSymbol(Context);
+  if (Sym->isInSection())
+    return Sym;
+
+  SwitchSection(Section);
+  EmitLabel(Sym);
+  return Sym;
+}