| //===- 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 |