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