Index: llvm/trunk/include/llvm/MC/MCAsmInfo.h =================================================================== --- llvm/trunk/include/llvm/MC/MCAsmInfo.h +++ llvm/trunk/include/llvm/MC/MCAsmInfo.h @@ -414,6 +414,15 @@ /// syntactically correct. virtual bool isValidUnquotedName(StringRef Name) const; + /// Return true if the .section directive should be omitted when + /// emitting \p SectionName. For example: + /// + /// shouldOmitSectionDirective(".text") + /// + /// returns false => .section .text,#alloc,#execinstr + /// returns true => .text + virtual bool shouldOmitSectionDirective(StringRef SectionName) const; + bool usesSunStyleELFSectionSwitchSyntax() const { return SunStyleELFSectionSwitchSyntax; } Index: llvm/trunk/lib/MC/MCAsmInfo.cpp =================================================================== --- llvm/trunk/lib/MC/MCAsmInfo.cpp +++ llvm/trunk/lib/MC/MCAsmInfo.cpp @@ -157,3 +157,9 @@ return true; } + +bool MCAsmInfo::shouldOmitSectionDirective(StringRef SectionName) const { + // FIXME: Does .section .bss/.data/.text work everywhere?? + return SectionName == ".text" || SectionName == ".data" || + (SectionName == ".bss" && !usesELFSectionDirectiveForBSS()); +} Index: llvm/trunk/lib/MC/MCSectionELF.cpp =================================================================== --- llvm/trunk/lib/MC/MCSectionELF.cpp +++ llvm/trunk/lib/MC/MCSectionELF.cpp @@ -27,12 +27,7 @@ if (isUnique()) return false; - // FIXME: Does .section .bss/.data/.text work everywhere?? - if (Name == ".text" || Name == ".data" || - (Name == ".bss" && !MAI.usesELFSectionDirectiveForBSS())) - return true; - - return false; + return MAI.shouldOmitSectionDirective(Name); } static void printName(raw_ostream &OS, StringRef Name) {