Only print architecture dependent flags for that architecture.
Different architectures can have different meaning for flags in the SHF_MASKPROC mask, so we should always check what the architecture use before checking the flag. NFC for now, but will allow fixing the value of an xmos flag. llvm-svn: 293484
This commit is contained in:
parent
5b56f2d6cb
commit
e0eba3c493
|
@ -29,6 +29,7 @@ class MCExpr;
|
|||
class MCFragment;
|
||||
class MCSection;
|
||||
class MCSymbol;
|
||||
class Triple;
|
||||
class raw_ostream;
|
||||
|
||||
template <> struct ilist_alloc_traits<MCFragment> {
|
||||
|
@ -169,7 +170,8 @@ public:
|
|||
|
||||
void dump();
|
||||
|
||||
virtual void PrintSwitchToSection(const MCAsmInfo &MAI, raw_ostream &OS,
|
||||
virtual void PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
|
||||
raw_ostream &OS,
|
||||
const MCExpr *Subsection) const = 0;
|
||||
|
||||
/// Return true if a .align directive should use "optimized nops" to fill
|
||||
|
|
|
@ -73,7 +73,8 @@ public:
|
|||
|
||||
void setSelection(int Selection) const;
|
||||
|
||||
void PrintSwitchToSection(const MCAsmInfo &MAI, raw_ostream &OS,
|
||||
void PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
|
||||
raw_ostream &OS,
|
||||
const MCExpr *Subsection) const override;
|
||||
bool UseCodeAlign() const override;
|
||||
bool isVirtualSection() const override;
|
||||
|
|
|
@ -78,7 +78,8 @@ public:
|
|||
void setFlags(unsigned F) { Flags = F; }
|
||||
const MCSymbolELF *getGroup() const { return Group; }
|
||||
|
||||
void PrintSwitchToSection(const MCAsmInfo &MAI, raw_ostream &OS,
|
||||
void PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
|
||||
raw_ostream &OS,
|
||||
const MCExpr *Subsection) const override;
|
||||
bool UseCodeAlign() const override;
|
||||
bool isVirtualSection() const override;
|
||||
|
|
|
@ -76,7 +76,8 @@ public:
|
|||
bool &TAAParsed, // Out.
|
||||
unsigned &StubSize); // Out.
|
||||
|
||||
void PrintSwitchToSection(const MCAsmInfo &MAI, raw_ostream &OS,
|
||||
void PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
|
||||
raw_ostream &OS,
|
||||
const MCExpr *Subsection) const override;
|
||||
bool UseCodeAlign() const override;
|
||||
bool isVirtualSection() const override;
|
||||
|
|
|
@ -392,7 +392,9 @@ void MCAsmStreamer::emitExplicitComments() {
|
|||
void MCAsmStreamer::ChangeSection(MCSection *Section,
|
||||
const MCExpr *Subsection) {
|
||||
assert(Section && "Cannot switch to a null section!");
|
||||
Section->PrintSwitchToSection(*MAI, OS, Subsection);
|
||||
Section->PrintSwitchToSection(
|
||||
*MAI, getContext().getObjectFileInfo()->getTargetTriple(), OS,
|
||||
Subsection);
|
||||
}
|
||||
|
||||
void MCAsmStreamer::EmitLabel(MCSymbol *Symbol) {
|
||||
|
|
|
@ -37,7 +37,7 @@ void MCSectionCOFF::setSelection(int Selection) const {
|
|||
Characteristics |= COFF::IMAGE_SCN_LNK_COMDAT;
|
||||
}
|
||||
|
||||
void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI,
|
||||
void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
|
||||
raw_ostream &OS,
|
||||
const MCExpr *Subsection) const {
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ static void printName(raw_ostream &OS, StringRef Name) {
|
|||
OS << '"';
|
||||
}
|
||||
|
||||
void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI,
|
||||
void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
|
||||
raw_ostream &OS,
|
||||
const MCExpr *Subsection) const {
|
||||
|
||||
|
@ -106,12 +106,17 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI,
|
|||
OS << 'T';
|
||||
|
||||
// If there are target-specific flags, print them.
|
||||
if (Flags & ELF::XCORE_SHF_CP_SECTION)
|
||||
OS << 'c';
|
||||
if (Flags & ELF::XCORE_SHF_DP_SECTION)
|
||||
OS << 'd';
|
||||
if (Flags & ELF::SHF_ARM_PURECODE)
|
||||
OS << 'y';
|
||||
Triple::ArchType Arch = T.getArch();
|
||||
if (Arch == Triple::xcore) {
|
||||
if (Flags & ELF::XCORE_SHF_CP_SECTION)
|
||||
OS << 'c';
|
||||
if (Flags & ELF::XCORE_SHF_DP_SECTION)
|
||||
OS << 'd';
|
||||
} else if (Arch == Triple::arm || Arch == Triple::armeb ||
|
||||
Arch == Triple::thumb || Arch == Triple::thumbeb) {
|
||||
if (Flags & ELF::SHF_ARM_PURECODE)
|
||||
OS << 'y';
|
||||
}
|
||||
|
||||
OS << '"';
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ MCSectionMachO::MCSectionMachO(StringRef Segment, StringRef Section,
|
|||
}
|
||||
}
|
||||
|
||||
void MCSectionMachO::PrintSwitchToSection(const MCAsmInfo &MAI,
|
||||
void MCSectionMachO::PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
|
||||
raw_ostream &OS,
|
||||
const MCExpr *Subsection) const {
|
||||
OS << "\t.section\t" << getSegmentName() << ',' << getSectionName();
|
||||
|
|
|
@ -31,7 +31,7 @@ public:
|
|||
|
||||
/// Override this as NVPTX has its own way of printing switching
|
||||
/// to a section.
|
||||
void PrintSwitchToSection(const MCAsmInfo &MAI,
|
||||
void PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
|
||||
raw_ostream &OS,
|
||||
const MCExpr *Subsection) const override {}
|
||||
|
||||
|
|
Loading…
Reference in New Issue