aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/CodeGen/AsmPrinter.cpp44
-rwxr-xr-xlib/Target/X86/X86IntelAsmPrinter.cpp4
2 files changed, 20 insertions, 28 deletions
diff --git a/lib/CodeGen/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter.cpp
index dafad915bb..d95b691192 100644
--- a/lib/CodeGen/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter.cpp
@@ -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';
}
diff --git a/lib/Target/X86/X86IntelAsmPrinter.cpp b/lib/Target/X86/X86IntelAsmPrinter.cpp
index 74643c2b8e..1573c64b39 100755
--- a/lib/Target/X86/X86IntelAsmPrinter.cpp
+++ b/lib/Target/X86/X86IntelAsmPrinter.cpp
@@ -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";