X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FMC%2FMCSection.cpp;h=ccf4a7dddf736a2a1fe55ad30203ee7239847f87;hb=6c583141bf6b7a6b5f8125c1037ecbc089813288;hp=65e86d3b408834b51e9cb1bf49af02ffeee00958;hpb=1f8e8db8fcbe256796c380aa3784f39b334c9d74;p=oota-llvm.git diff --git a/lib/MC/MCSection.cpp b/lib/MC/MCSection.cpp index 65e86d3b408..ccf4a7dddf7 100644 --- a/lib/MC/MCSection.cpp +++ b/lib/MC/MCSection.cpp @@ -8,8 +8,8 @@ //===----------------------------------------------------------------------===// #include "llvm/MC/MCSection.h" +#include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCContext.h" -#include "llvm/Target/TargetAsmInfo.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; @@ -20,147 +20,3 @@ using namespace llvm; MCSection::~MCSection() { } - -//===----------------------------------------------------------------------===// -// MCSectionELF -//===----------------------------------------------------------------------===// - -MCSectionELF *MCSectionELF:: -Create(const StringRef &Name, bool IsDirective, SectionKind K, MCContext &Ctx) { - return new (Ctx) MCSectionELF(Name, IsDirective, K, Ctx); -} - -MCSectionELF::MCSectionELF(const StringRef &name, bool isDirective, - SectionKind K, MCContext &Ctx) - : MCSection(K), Name(name), IsDirective(isDirective) { - Ctx.SetSection(Name, this); -} - - -void MCSectionELF::PrintSwitchToSection(const TargetAsmInfo &TAI, - raw_ostream &OS) const { - if (isDirective()) { - OS << getName() << '\n'; - return; - } - - OS << "\t.section\t" << getName(); - - // Handle the weird solaris syntax if desired. - if (TAI.usesSunStyleELFSectionSwitchSyntax() && - !getKind().isMergeableConst() && !getKind().isMergeableCString()) { - if (!getKind().isMetadata()) - OS << ",#alloc"; - if (getKind().isText()) - OS << ",#execinstr"; - if (getKind().isWriteable()) - OS << ",#write"; - if (getKind().isThreadLocal()) - OS << ",#tls"; - } else { - OS << ",\""; - - if (!getKind().isMetadata()) - OS << 'a'; - if (getKind().isText()) - OS << 'x'; - if (getKind().isWriteable()) - OS << 'w'; - if (getKind().isMergeable1ByteCString() || - getKind().isMergeable2ByteCString() || - getKind().isMergeable4ByteCString() || - getKind().isMergeableConst4() || - getKind().isMergeableConst8() || - getKind().isMergeableConst16()) - OS << 'M'; - if (getKind().isMergeable1ByteCString() || - getKind().isMergeable2ByteCString() || - getKind().isMergeable4ByteCString()) - OS << 'S'; - if (getKind().isThreadLocal()) - OS << 'T'; - - OS << "\","; - - // If comment string is '@', e.g. as on ARM - use '%' instead - if (TAI.getCommentString()[0] == '@') - OS << '%'; - else - OS << '@'; - - if (getKind().isBSS() || getKind().isThreadBSS()) - OS << "nobits"; - else - OS << "progbits"; - - if (getKind().isMergeable1ByteCString()) { - OS << ",1"; - } else if (getKind().isMergeable2ByteCString()) { - OS << ",2"; - } else if (getKind().isMergeable4ByteCString()) { - OS << ",4"; - } else if (getKind().isMergeableConst4()) { - OS << ",4"; - } else if (getKind().isMergeableConst8()) { - OS << ",8"; - } else if (getKind().isMergeableConst16()) { - OS << ",16"; - } - } - - OS << '\n'; -} - -//===----------------------------------------------------------------------===// -// MCSectionMachO -//===----------------------------------------------------------------------===// - -MCSectionMachO *MCSectionMachO:: -Create(const StringRef &Name, bool IsDirective, SectionKind K, MCContext &Ctx) { - return new (Ctx) MCSectionMachO(Name, IsDirective, K, Ctx); -} - -MCSectionMachO::MCSectionMachO(const StringRef &name, bool isDirective, - SectionKind K, MCContext &Ctx) - : MCSection(K), Name(name), IsDirective(isDirective) { - Ctx.SetSection(Name, this); -} - -void MCSectionMachO::PrintSwitchToSection(const TargetAsmInfo &TAI, - raw_ostream &OS) const { - if (!isDirective()) - OS << "\t.section\t" << getName() << '\n'; - else - OS << getName() << '\n'; -} - -//===----------------------------------------------------------------------===// -// MCSectionCOFF -//===----------------------------------------------------------------------===// - -MCSectionCOFF *MCSectionCOFF:: -Create(const StringRef &Name, bool IsDirective, SectionKind K, MCContext &Ctx) { - return new (Ctx) MCSectionCOFF(Name, IsDirective, K, Ctx); -} - -MCSectionCOFF::MCSectionCOFF(const StringRef &name, bool isDirective, - SectionKind K, MCContext &Ctx) - : MCSection(K), Name(name), IsDirective(isDirective) { - Ctx.SetSection(Name, this); -} - - -void MCSectionCOFF::PrintSwitchToSection(const TargetAsmInfo &TAI, - 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"; -}