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