MCSection.h revision dd2ad8432f104282ff43c94457f474ea0a264175
1ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar//===- MCSection.h - Machine Code Sections ----------------------*- C++ -*-===// 2ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar// 3ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar// The LLVM Compiler Infrastructure 4ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar// 5ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar// This file is distributed under the University of Illinois Open Source 6ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar// License. See LICENSE.TXT for details. 7ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar// 8ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar//===----------------------------------------------------------------------===// 9a0faf7ae555eacf75f5a482968b27e447d71c99fChris Lattner// 10a0faf7ae555eacf75f5a482968b27e447d71c99fChris Lattner// This file declares the MCSection class. 11a0faf7ae555eacf75f5a482968b27e447d71c99fChris Lattner// 12a0faf7ae555eacf75f5a482968b27e447d71c99fChris Lattner//===----------------------------------------------------------------------===// 13ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar 14ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar#ifndef LLVM_MC_MCSECTION_H 15ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar#define LLVM_MC_MCSECTION_H 16ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar 17ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar#include <string> 18b5261ebabb215330d6549048b825d236fb3c9b6bDaniel Dunbar#include "llvm/ADT/StringRef.h" 190064e85050e3a324aa66ee29af56546e0c31f6ccChris Lattner#include "llvm/MC/SectionKind.h" 209a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar#include "llvm/Support/Casting.h" 21ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar 22ed47a0409b187d5dcd2bddfd054326fc809d00aeChris Lattnernamespace llvm { 23ed47a0409b187d5dcd2bddfd054326fc809d00aeChris Lattner class MCContext; 24af76e592c7f9deff0e55c13dbb4a34f07f1c7f64Chris Lattner class MCAsmInfo; 25892e18239308f8a02a4c83758616be84a459c19dChris Lattner class raw_ostream; 26dd2ad8432f104282ff43c94457f474ea0a264175Mikhail Glushenkov 27a0faf7ae555eacf75f5a482968b27e447d71c99fChris Lattner /// MCSection - Instances of this class represent a uniqued identifier for a 28a0faf7ae555eacf75f5a482968b27e447d71c99fChris Lattner /// section in the current translation unit. The MCContext class uniques and 29a0faf7ae555eacf75f5a482968b27e447d71c99fChris Lattner /// creates these. 30ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar class MCSection { 319a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar public: 329a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar enum SectionVariant { 339a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar SV_COFF = 0, 349a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar SV_ELF, 359a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar SV_MachO, 369a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar SV_PIC16 379a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar }; 389a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar 399a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar private: 40a0faf7ae555eacf75f5a482968b27e447d71c99fChris Lattner MCSection(const MCSection&); // DO NOT IMPLEMENT 41a0faf7ae555eacf75f5a482968b27e447d71c99fChris Lattner void operator=(const MCSection&); // DO NOT IMPLEMENT 42ed47a0409b187d5dcd2bddfd054326fc809d00aeChris Lattner protected: 439a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar MCSection(SectionVariant V, SectionKind K) : Variant(V), Kind(K) {} 449a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar SectionVariant Variant; 45a87dea4f8c546ca748f1777a8d1cabcc06515d91Chris Lattner SectionKind Kind; 46a0faf7ae555eacf75f5a482968b27e447d71c99fChris Lattner public: 47ed47a0409b187d5dcd2bddfd054326fc809d00aeChris Lattner virtual ~MCSection(); 48a11af531ec48ad84f790b9511f003ac5c934a999Daniel Dunbar 49a87dea4f8c546ca748f1777a8d1cabcc06515d91Chris Lattner SectionKind getKind() const { return Kind; } 509a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar 519a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar SectionVariant getVariant() const { return Variant; } 52dd2ad8432f104282ff43c94457f474ea0a264175Mikhail Glushenkov 5333adcfb4d217f5f23d9bde8ba02b8e48f9605fc5Chris Lattner virtual void PrintSwitchToSection(const MCAsmInfo &MAI, 54892e18239308f8a02a4c83758616be84a459c19dChris Lattner raw_ostream &OS) const = 0; 553d2251361171b1a41bdb2ac71882e69d48617f49Chris Lattner 563d2251361171b1a41bdb2ac71882e69d48617f49Chris Lattner /// isBaseAddressKnownZero - Return true if we know that this section will 573d2251361171b1a41bdb2ac71882e69d48617f49Chris Lattner /// get a base address of zero. In cases where we know that this is true we 583d2251361171b1a41bdb2ac71882e69d48617f49Chris Lattner /// can emit section offsets as direct references to avoid a subtraction 593d2251361171b1a41bdb2ac71882e69d48617f49Chris Lattner /// from the base of the section, saving a relocation. 603d2251361171b1a41bdb2ac71882e69d48617f49Chris Lattner virtual bool isBaseAddressKnownZero() const { 613d2251361171b1a41bdb2ac71882e69d48617f49Chris Lattner return false; 623d2251361171b1a41bdb2ac71882e69d48617f49Chris Lattner } 639a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar 649a744e38607bc3046dffea56efec0b2dfc51d5e4Daniel Dunbar static bool classof(const MCSection *) { return true; } 65ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar }; 66dd2ad8432f104282ff43c94457f474ea0a264175Mikhail Glushenkov 67ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar} // end namespace llvm 68ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar 69ecc63f8687c4eb746b69336316685fe9b224adfbDaniel Dunbar#endif 70