MCSectionCOFF.h revision eb40a0fd98c44ecc6360e7fab33cf9e9911bed4f
1eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner//===- MCSectionCOFF.h - COFF Machine Code Sections -------------*- C++ -*-===// 2eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// 3eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// The LLVM Compiler Infrastructure 4eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// 5eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// This file is distributed under the University of Illinois Open Source 6eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// License. See LICENSE.TXT for details. 7eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// 8eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner//===----------------------------------------------------------------------===// 9eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// 10eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// This file declares the MCSectionCOFF class. 11eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner// 12eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner//===----------------------------------------------------------------------===// 13eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 14eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner#ifndef LLVM_MC_MCSECTIONCOFF_H 15eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner#define LLVM_MC_MCSECTIONCOFF_H 16eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 17eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner#include "llvm/MC/MCSection.h" 18eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 19eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattnernamespace llvm { 20eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 21eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner/// MCSectionCOFF - This represents a section on Windows 22eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner class MCSectionCOFF : public MCSection { 23eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner // The memory for this string is stored in the same MCContext as *this. 24eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner StringRef SectionName; 25eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 26eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner /// Flags - This is the Characteristics field of a section, drawn 27eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner /// from the enums below. 28eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner unsigned Flags; 29eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 30eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner private: 31eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner friend class MCContext; 32eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner MCSectionCOFF(StringRef Section, unsigned flags, SectionKind K) 33eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner : MCSection(K), SectionName(Section), Flags(flags) { 34eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner } 35eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner ~MCSectionCOFF(); 36eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 37eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner public: 38eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner /// ShouldOmitSectionDirective - Decides whether a '.section' directive 39eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner /// should be printed before the section name 40eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner bool ShouldOmitSectionDirective(StringRef Name, const MCAsmInfo &MAI) const; 41eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 42eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner /// Valid section flags. 43eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner enum { 44eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_TYPE_NO_PAD = 0x00000008, 45eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_CNT_CODE = 0x00000020, 46eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040, 47eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080, 48eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_LNK_OTHER = 0x00000100, 49eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_LNK_INFO = 0x00000200, 50eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_LNK_REMOVE = 0x00000800, 51eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_LNK_COMDAT = 0x00001000, 52eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_MEM_FARDATA = 0x00008000, 53eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_MEM_PURGEABLE = 0x00020000, 54eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_MEM_16BIT = 0x00020000, 55eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_MEM_LOCKED = 0x00040000, 56eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_MEM_PRELOAD = 0x00080000, 57eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_ALIGN_1BYTES = 0x00100000, 58eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_ALIGN_2BYTES = 0x00200000, 59eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_ALIGN_4BYTES = 0x00300000, 60eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_ALIGN_8BYTES = 0x00400000, 61eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_ALIGN_16BYTES = 0x00500000, 62eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_ALIGN_32BYTES = 0x00600000, 63eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_ALIGN_64BYTES = 0x00700000, 64eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_LNK_NRELOC_OVFL = 0x01000000, 65eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_MEM_DISCARDABLE = 0x02000000, 66eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_MEM_NOT_CACHED = 0x04000000, 67eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_MEM_NOT_PAGED = 0x08000000, 68eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_MEM_SHARED = 0x10000000, 69eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_MEM_EXECUTE = 0x20000000, 70eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_MEM_READ = 0x40000000, 71eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner IMAGE_SCN_MEM_WRITE = 0x80000000 72eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner }; 73eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 74eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner StringRef getSectionName() const { return SectionName; } 75eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner unsigned getFlags() const { return Flags; } 76eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 77eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner virtual void PrintSwitchToSection(const MCAsmInfo &MAI, 78eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner raw_ostream &OS) const; 79eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner }; 80eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 81eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner} // end namespace llvm 82eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner 83eb40a0fd98c44ecc6360e7fab33cf9e9911bed4fChris Lattner#endif 84