1fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner//===-- llvm/Target/TargetLoweringObjectFile.h - Object Info ----*- C++ -*-===//
2fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner//
3fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner//                     The LLVM Compiler Infrastructure
4fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner//
5fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner// This file is distributed under the University of Illinois Open Source
6fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner// License. See LICENSE.TXT for details.
7fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner//
8fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner//===----------------------------------------------------------------------===//
9fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner//
10fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner// This file implements classes used to handle lowerings specific to common
11fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner// object file formats.
12fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner//
13fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner//===----------------------------------------------------------------------===//
14fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
15fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner#ifndef LLVM_MC_SECTIONKIND_H
16fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner#define LLVM_MC_SECTIONKIND_H
17fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
18fb299e4a25b845563ff2966719d7e5842a07496cChris Lattnernamespace llvm {
19fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
20fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner/// SectionKind - This is a simple POD value that classifies the properties of
21fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner/// a section.  A section is classified into the deepest possible
22fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner/// classification, and then the target maps them onto their sections based on
23fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner/// what capabilities they have.
24fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner///
25fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner/// The comments below describe these as if they were an inheritance hierarchy
26fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner/// in order to explain the predicates below.
27fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner///
28fb299e4a25b845563ff2966719d7e5842a07496cChris Lattnerclass SectionKind {
29fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  enum Kind {
30fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    /// Metadata - Debug info sections or other metadata.
31fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    Metadata,
32652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
33fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    /// Text - Text section, used for functions and other executable code.
34fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    Text,
35652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
36fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    /// ReadOnly - Data that is never written to at program runtime by the
37fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    /// program or the dynamic linker.  Things in the top-level readonly
38fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    /// SectionKind are not mergeable.
39fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    ReadOnly,
40fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
41db727932a756e5f3f09a436082daa5abe58c923aChris Lattner        /// MergableCString - Any null-terminated string which allows merging.
42db727932a756e5f3f09a436082daa5abe58c923aChris Lattner        /// These values are known to end in a nul value of the specified size,
43db727932a756e5f3f09a436082daa5abe58c923aChris Lattner        /// not otherwise contain a nul value, and be mergable.  This allows the
44db727932a756e5f3f09a436082daa5abe58c923aChris Lattner        /// linker to unique the strings if it so desires.
45db727932a756e5f3f09a436082daa5abe58c923aChris Lattner
46db727932a756e5f3f09a436082daa5abe58c923aChris Lattner           /// Mergeable1ByteCString - 1 byte mergable, null terminated, string.
47db727932a756e5f3f09a436082daa5abe58c923aChris Lattner           Mergeable1ByteCString,
48652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
49db727932a756e5f3f09a436082daa5abe58c923aChris Lattner           /// Mergeable2ByteCString - 2 byte mergable, null terminated, string.
50db727932a756e5f3f09a436082daa5abe58c923aChris Lattner           Mergeable2ByteCString,
51db727932a756e5f3f09a436082daa5abe58c923aChris Lattner
52db727932a756e5f3f09a436082daa5abe58c923aChris Lattner           /// Mergeable4ByteCString - 4 byte mergable, null terminated, string.
53db727932a756e5f3f09a436082daa5abe58c923aChris Lattner           Mergeable4ByteCString,
54db727932a756e5f3f09a436082daa5abe58c923aChris Lattner
55fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner        /// MergeableConst - These are sections for merging fixed-length
56fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner        /// constants together.  For example, this can be used to unique
57fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner        /// constant pool entries etc.
58fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner        MergeableConst,
59652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
60fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner            /// MergeableConst4 - This is a section used by 4-byte constants,
61fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner            /// for example, floats.
62fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner            MergeableConst4,
63652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
64fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner            /// MergeableConst8 - This is a section used by 8-byte constants,
65fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner            /// for example, doubles.
66fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner            MergeableConst8,
67fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
68fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner            /// MergeableConst16 - This is a section used by 16-byte constants,
69fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner            /// for example, vectors.
70fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner            MergeableConst16,
71652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
72fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    /// Writeable - This is the base of all segments that need to be written
73fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    /// to during program runtime.
74652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
75fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner       /// ThreadLocal - This is the base of all TLS segments.  All TLS
76fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner       /// objects must be writeable, otherwise there is no reason for them to
77fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner       /// be thread local!
78652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
79fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           /// ThreadBSS - Zero-initialized TLS data objects.
80fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           ThreadBSS,
81652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
82fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           /// ThreadData - Initialized TLS data objects.
83fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           ThreadData,
84652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
85fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner       /// GlobalWriteableData - Writeable data that is global (not thread
86fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner       /// local).
87652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
88fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           /// BSS - Zero initialized writeable data.
89fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           BSS,
90652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
9166fa6a2d40b8f00da36514afe521ca40f2b5bf39Chris Lattner               /// BSSLocal - This is BSS (zero initialized and writable) data
9266fa6a2d40b8f00da36514afe521ca40f2b5bf39Chris Lattner               /// which has local linkage.
9366fa6a2d40b8f00da36514afe521ca40f2b5bf39Chris Lattner               BSSLocal,
94652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
9566fa6a2d40b8f00da36514afe521ca40f2b5bf39Chris Lattner               /// BSSExtern - This is BSS data with normal external linkage.
9666fa6a2d40b8f00da36514afe521ca40f2b5bf39Chris Lattner               BSSExtern,
97652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
989b7400533f5a2ff9aa2d7bdd899be05dccb033e3Chris Lattner           /// Common - Data with common linkage.  These represent tentative
999b7400533f5a2ff9aa2d7bdd899be05dccb033e3Chris Lattner           /// definitions, which always have a zero initializer and are never
1009b7400533f5a2ff9aa2d7bdd899be05dccb033e3Chris Lattner           /// marked 'constant'.
1019b7400533f5a2ff9aa2d7bdd899be05dccb033e3Chris Lattner           Common,
102fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
103fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           /// DataRel - This is the most general form of data that is written
104fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           /// to by the program, it can have random relocations to arbitrary
105fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           /// globals.
106fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           DataRel,
107fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
108fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner               /// DataRelLocal - This is writeable data that has a non-zero
109fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner               /// initializer and has relocations in it, but all of the
110fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner               /// relocations are known to be within the final linked image
111fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner               /// the global is linked into.
112fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner               DataRelLocal,
113fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
114fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner                   /// DataNoRel - This is writeable data that has a non-zero
115fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner                   /// initializer, but whose initializer is known to have no
116fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner                   /// relocations.
117fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner                   DataNoRel,
118fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
119fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           /// ReadOnlyWithRel - These are global variables that are never
120fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           /// written to by the program, but that have relocations, so they
121fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           /// must be stuck in a writeable section so that the dynamic linker
122fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           /// can write to them.  If it chooses to, the dynamic linker can
123fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           /// mark the pages these globals end up on as read-only after it is
124fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           /// done with its relocation phase.
125fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           ReadOnlyWithRel,
126652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
127fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner               /// ReadOnlyWithRelLocal - This is data that is readonly by the
128fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner               /// program, but must be writeable so that the dynamic linker
129fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner               /// can perform relocations in it.  This is used when we know
130fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner               /// that all the relocations are to globals in this final
131fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner               /// linked image.
132fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner               ReadOnlyWithRelLocal
133652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
13473cd8d2533836e5ff98c34d70e125446c08d20d6Chris Lattner  } K : 8;
135fb299e4a25b845563ff2966719d7e5842a07496cChris Lattnerpublic:
136652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
137fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isMetadata() const { return K == Metadata; }
138fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isText() const { return K == Text; }
139652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
140fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isReadOnly() const {
141db727932a756e5f3f09a436082daa5abe58c923aChris Lattner    return K == ReadOnly || isMergeableCString() ||
142db727932a756e5f3f09a436082daa5abe58c923aChris Lattner           isMergeableConst();
143fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  }
144fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
145db727932a756e5f3f09a436082daa5abe58c923aChris Lattner  bool isMergeableCString() const {
146db727932a756e5f3f09a436082daa5abe58c923aChris Lattner    return K == Mergeable1ByteCString || K == Mergeable2ByteCString ||
147db727932a756e5f3f09a436082daa5abe58c923aChris Lattner           K == Mergeable4ByteCString;
148db727932a756e5f3f09a436082daa5abe58c923aChris Lattner  }
149db727932a756e5f3f09a436082daa5abe58c923aChris Lattner  bool isMergeable1ByteCString() const { return K == Mergeable1ByteCString; }
150db727932a756e5f3f09a436082daa5abe58c923aChris Lattner  bool isMergeable2ByteCString() const { return K == Mergeable2ByteCString; }
151db727932a756e5f3f09a436082daa5abe58c923aChris Lattner  bool isMergeable4ByteCString() const { return K == Mergeable4ByteCString; }
152652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
153fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isMergeableConst() const {
154fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    return K == MergeableConst || K == MergeableConst4 ||
155fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner           K == MergeableConst8 || K == MergeableConst16;
156fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  }
157fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isMergeableConst4() const { return K == MergeableConst4; }
158fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isMergeableConst8() const { return K == MergeableConst8; }
159fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isMergeableConst16() const { return K == MergeableConst16; }
160652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
161fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isWriteable() const {
162fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    return isThreadLocal() || isGlobalWriteableData();
163fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  }
164652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
165fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isThreadLocal() const {
166fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    return K == ThreadData || K == ThreadBSS;
167fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  }
168652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
169652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov  bool isThreadBSS() const { return K == ThreadBSS; }
170652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov  bool isThreadData() const { return K == ThreadData; }
171fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
172fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isGlobalWriteableData() const {
1739b7400533f5a2ff9aa2d7bdd899be05dccb033e3Chris Lattner    return isBSS() || isCommon() || isDataRel() || isReadOnlyWithRel();
174fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  }
175652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
17666fa6a2d40b8f00da36514afe521ca40f2b5bf39Chris Lattner  bool isBSS() const { return K == BSS || K == BSSLocal || K == BSSExtern; }
17766fa6a2d40b8f00da36514afe521ca40f2b5bf39Chris Lattner  bool isBSSLocal() const { return K == BSSLocal; }
17866fa6a2d40b8f00da36514afe521ca40f2b5bf39Chris Lattner  bool isBSSExtern() const { return K == BSSExtern; }
179652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
1809b7400533f5a2ff9aa2d7bdd899be05dccb033e3Chris Lattner  bool isCommon() const { return K == Common; }
181652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
182fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isDataRel() const {
183fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    return K == DataRel || K == DataRelLocal || K == DataNoRel;
184fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  }
185652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
186fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isDataRelLocal() const {
187fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    return K == DataRelLocal || K == DataNoRel;
188fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  }
189fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
190fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isDataNoRel() const { return K == DataNoRel; }
191652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
192fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isReadOnlyWithRel() const {
193fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    return K == ReadOnlyWithRel || K == ReadOnlyWithRelLocal;
194fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  }
195fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
196fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  bool isReadOnlyWithRelLocal() const {
197fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    return K == ReadOnlyWithRelLocal;
198fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  }
199652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkovprivate:
200fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  static SectionKind get(Kind K) {
201fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    SectionKind Res;
202fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    Res.K = K;
203fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner    return Res;
204fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner  }
20536dc04fced6da917f7b55f39f191e76cc54db8d2Chris Lattnerpublic:
206652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
207a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getMetadata() { return get(Metadata); }
208a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getText() { return get(Text); }
209a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getReadOnly() { return get(ReadOnly); }
210db727932a756e5f3f09a436082daa5abe58c923aChris Lattner  static SectionKind getMergeable1ByteCString() {
211db727932a756e5f3f09a436082daa5abe58c923aChris Lattner    return get(Mergeable1ByteCString);
212db727932a756e5f3f09a436082daa5abe58c923aChris Lattner  }
213db727932a756e5f3f09a436082daa5abe58c923aChris Lattner  static SectionKind getMergeable2ByteCString() {
214db727932a756e5f3f09a436082daa5abe58c923aChris Lattner    return get(Mergeable2ByteCString);
215db727932a756e5f3f09a436082daa5abe58c923aChris Lattner  }
216db727932a756e5f3f09a436082daa5abe58c923aChris Lattner  static SectionKind getMergeable4ByteCString() {
217db727932a756e5f3f09a436082daa5abe58c923aChris Lattner    return get(Mergeable4ByteCString);
218db727932a756e5f3f09a436082daa5abe58c923aChris Lattner  }
219a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getMergeableConst() { return get(MergeableConst); }
220a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getMergeableConst4() { return get(MergeableConst4); }
221a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getMergeableConst8() { return get(MergeableConst8); }
222a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getMergeableConst16() { return get(MergeableConst16); }
223a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getThreadBSS() { return get(ThreadBSS); }
224a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getThreadData() { return get(ThreadData); }
225a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getBSS() { return get(BSS); }
22666fa6a2d40b8f00da36514afe521ca40f2b5bf39Chris Lattner  static SectionKind getBSSLocal() { return get(BSSLocal); }
22766fa6a2d40b8f00da36514afe521ca40f2b5bf39Chris Lattner  static SectionKind getBSSExtern() { return get(BSSExtern); }
2289b7400533f5a2ff9aa2d7bdd899be05dccb033e3Chris Lattner  static SectionKind getCommon() { return get(Common); }
229a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getDataRel() { return get(DataRel); }
230a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getDataRelLocal() { return get(DataRelLocal); }
231a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getDataNoRel() { return get(DataNoRel); }
232a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getReadOnlyWithRel() { return get(ReadOnlyWithRel); }
233a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  static SectionKind getReadOnlyWithRelLocal(){
234a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner    return get(ReadOnlyWithRelLocal);
235a945341d921f780e95b14475069c3a9c0d1c6575Chris Lattner  }
236fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner};
237652afaf8b379e44021fe9d64ca8e401c793a3be6Mikhail Glushenkov
238fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner} // end namespace llvm
239fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner
240fb299e4a25b845563ff2966719d7e5842a07496cChris Lattner#endif
241