OSDN Git Service

Implement MASM sections correctly, without a "has masm sections flag" and a bunch...
authorChris Lattner <sabre@nondot.org>
Tue, 9 May 2006 05:33:48 +0000 (05:33 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 9 May 2006 05:33:48 +0000 (05:33 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28194 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter.cpp
lib/Target/X86/X86IntelAsmPrinter.cpp

index dafad91..d95b691 100644 (file)
@@ -47,7 +47,9 @@ AsmPrinter::AsmPrinter(std::ostream &o, TargetMachine &tm)
   AlignDirective("\t.align\t"),
   AlignmentIsInBytes(true),
   SwitchToSectionDirective("\t.section\t"),
-  MLSections(false),
+  TextSectionStartSuffix(""),
+  DataSectionStartSuffix(""),
+  SectionEndDirectiveSuffix(0),
   ConstantPoolSection("\t.section .rodata\n"),
   JumpTableSection("\t.section .rodata\n"),
   StaticCtorsSection("\t.section .ctors,\"aw\",@progbits"),
@@ -73,20 +75,14 @@ void AsmPrinter::SwitchToTextSection(const char *NewSection,
   // If we're already in this section, we're done.
   if (CurrentSection == NS) return;
 
-  // Microsoft ML/MASM has a fundamentally different approach to handling
-  // sections.
+  // Close the current section, if applicable.
+  if (SectionEndDirectiveSuffix && !CurrentSection.empty())
+    O << CurrentSection << SectionEndDirectiveSuffix << "\n";
 
-  if (MLSections) {
-    if (!CurrentSection.empty())
-      O << CurrentSection << "\tends\n\n";
-    CurrentSection = NS;
-    if (!CurrentSection.empty())
-      O << CurrentSection << "\tsegment 'CODE'\n";
-  } else {
-    CurrentSection = NS;
-    if (!CurrentSection.empty())
-      O << CurrentSection << '\n';
-  }
+  CurrentSection = NS;
+
+  if (!CurrentSection.empty())
+    O << CurrentSection << TextSectionStartSuffix << '\n';
 }
 
 /// SwitchToTextSection - Switch to the specified text section of the executable
@@ -103,20 +99,14 @@ void AsmPrinter::SwitchToDataSection(const char *NewSection,
   // If we're already in this section, we're done.
   if (CurrentSection == NS) return;
 
-  // Microsoft ML/MASM has a fundamentally different approach to handling
-  // sections.
+  // Close the current section, if applicable.
+  if (SectionEndDirectiveSuffix && !CurrentSection.empty())
+    O << CurrentSection << SectionEndDirectiveSuffix << "\n";
+
+  CurrentSection = NS;
   
-  if (MLSections) {
-    if (!CurrentSection.empty())
-      O << CurrentSection << "\tends\n\n";
-    CurrentSection = NS;
-    if (!CurrentSection.empty())
-      O << CurrentSection << "\tsegment 'DATA'\n";
-  } else {
-    CurrentSection = NS;
-    if (!CurrentSection.empty())
-      O << CurrentSection << '\n';
-  }
+  if (!CurrentSection.empty())
+    O << CurrentSection << DataSectionStartSuffix << '\n';
 }
 
 
index 74643c2..1573c64 100755 (executable)
@@ -284,7 +284,6 @@ void X86IntelAsmPrinter::printMachineInstruction(const MachineInstr *MI) {
 }
 
 bool X86IntelAsmPrinter::doInitialization(Module &M) {
-  MLSections = true;
   GlobalPrefix = "_";
   CommentString = ";";
 
@@ -306,6 +305,9 @@ bool X86IntelAsmPrinter::doInitialization(Module &M) {
   DefaultTextSection = "_text";
   DefaultDataSection = "_data";
   SwitchToSectionDirective = "";
+  TextSectionStartSuffix = "\tsegment 'CODE'";
+  DataSectionStartSuffix = "\tsegment 'DATA'";
+  SectionEndDirectiveSuffix = "\tends\n";
 
   O << "\t.686\n\t.model flat\n\n";