| //===- MCSection.h - Machine Code Sections ----------------------*- C++ -*-===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This file declares the MCSection class. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef LLVM_MC_MCSECTION_H | |
| #define LLVM_MC_MCSECTION_H | |
| #include "llvm/ADT/StringRef.h" | |
| #include "llvm/MC/SectionKind.h" | |
| #include "llvm/Support/Casting.h" | |
| namespace llvm { | |
| class MCContext; | |
| class MCAsmInfo; | |
| class raw_ostream; | |
| /// MCSection - Instances of this class represent a uniqued identifier for a | |
| /// section in the current translation unit. The MCContext class uniques and | |
| /// creates these. | |
| class MCSection { | |
| public: | |
| enum SectionVariant { | |
| SV_COFF = 0, | |
| SV_ELF, | |
| SV_MachO | |
| }; | |
| private: | |
| MCSection(const MCSection&); // DO NOT IMPLEMENT | |
| void operator=(const MCSection&); // DO NOT IMPLEMENT | |
| protected: | |
| MCSection(SectionVariant V, SectionKind K) : Variant(V), Kind(K) {} | |
| SectionVariant Variant; | |
| SectionKind Kind; | |
| public: | |
| virtual ~MCSection(); | |
| SectionKind getKind() const { return Kind; } | |
| SectionVariant getVariant() const { return Variant; } | |
| virtual void PrintSwitchToSection(const MCAsmInfo &MAI, | |
| raw_ostream &OS) const = 0; | |
| /// isBaseAddressKnownZero - Return true if we know that this section will | |
| /// get a base address of zero. In cases where we know that this is true we | |
| /// can emit section offsets as direct references to avoid a subtraction | |
| /// from the base of the section, saving a relocation. | |
| virtual bool isBaseAddressKnownZero() const { | |
| return false; | |
| } | |
| // UseCodeAlign - Return true if a .align directive should use | |
| // "optimized nops" to fill instead of 0s. | |
| virtual bool UseCodeAlign() const = 0; | |
| /// isVirtualSection - Check whether this section is "virtual", that is | |
| /// has no actual object file contents. | |
| virtual bool isVirtualSection() const = 0; | |
| static bool classof(const MCSection *) { return true; } | |
| }; | |
| } // end namespace llvm | |
| #endif |