reapply my strstr optimization. I have reproduced the x86-64 bootstrap
[oota-llvm.git] / lib / MC / MCSection.cpp
index 84487b24be2eda02a3346b1bdcb24de38f3be4c8..24c89efefc66acea0311b259f95a1e79da5aa2a9 100644 (file)
@@ -9,21 +9,37 @@
 
 #include "llvm/MC/MCSection.h"
 #include "llvm/MC/MCContext.h"
+#include "llvm/MC/MCAsmInfo.h"
+#include "llvm/Support/raw_ostream.h"
 using namespace llvm;
 
+//===----------------------------------------------------------------------===//
+// MCSection
+//===----------------------------------------------------------------------===//
+
 MCSection::~MCSection() {
 }
 
-MCSection::MCSection(const StringRef &N, bool isDirective, SectionKind K, 
-                     MCContext &Ctx)
-  : Name(N), IsDirective(isDirective), Kind(K) {
-  MCSection *&Entry = Ctx.Sections[Name];
-  assert(Entry == 0 && "Multiple sections with the same name created");
-  Entry = this;
-}
+//===----------------------------------------------------------------------===//
+// MCSectionCOFF
+//===----------------------------------------------------------------------===//
 
-MCSection *MCSection::Create(const StringRef &Name, bool IsDirective, 
-                             SectionKind K, MCContext &Ctx) {
-  return new (Ctx) MCSection(Name, IsDirective, K, Ctx);
+MCSectionCOFF *MCSectionCOFF::
+Create(StringRef Name, bool IsDirective, SectionKind K, MCContext &Ctx) {
+  return new (Ctx) MCSectionCOFF(Name, IsDirective, K);
 }
 
+void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI,
+                                         raw_ostream &OS) const {
+  
+  if (isDirective()) {
+    OS << getName() << '\n';
+    return;
+  }
+  OS << "\t.section\t" << getName() << ",\"";
+  if (getKind().isText())
+    OS << 'x';
+  if (getKind().isWriteable())
+    OS << 'w';
+  OS << "\"\n";
+}