LLVM  6.0.0svn
MCObjectFileInfo.h
Go to the documentation of this file.
1 //===-- llvm/MC/MCObjectFileInfo.h - Object File Info -----------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file describes common object file formats.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_MC_MCOBJECTFILEINFO_H
15 #define LLVM_MC_MCOBJECTFILEINFO_H
16 
17 #include "llvm/ADT/Triple.h"
18 #include "llvm/Support/CodeGen.h"
19 
20 namespace llvm {
21 class MCContext;
22 class MCSection;
23 
25 protected:
26  /// True if .comm supports alignment. This is a hack for as long as we
27  /// support 10.4 Tiger, whose assembler doesn't support alignment on comm.
29 
30  /// True if target object file supports a weak_definition of constant 0 for an
31  /// omitted EH frame.
33 
34  /// True if the target object file supports emitting a compact unwind section
35  /// without an associated EH frame section.
37 
38  /// OmitDwarfIfHaveCompactUnwind - True if the target object file
39  /// supports having some functions with compact unwind and other with
40  /// dwarf unwind.
42 
43  /// PersonalityEncoding, LSDAEncoding, TTypeEncoding - Some encoding values
44  /// for EH.
46  unsigned LSDAEncoding;
47  unsigned FDECFIEncoding;
48  unsigned TTypeEncoding;
49 
50  /// Compact unwind encoding indicating that we should emit only an EH frame.
52 
53  /// Section directive for standard text.
55 
56  /// Section directive for standard data.
58 
59  /// Section that is default initialized to zero.
61 
62  /// Section that is readonly and can contain arbitrary initialized data.
63  /// Targets are not required to have a readonly section. If they don't,
64  /// various bits of code will fall back to using the data section for
65  /// constants.
67 
68  /// If exception handling is supported by the target, this is the section the
69  /// Language Specific Data Area information is emitted to.
71 
72  /// If exception handling is supported by the target and the target can
73  /// support a compact representation of the CIE and FDE, this is the section
74  /// to emit them into.
76 
77  // Dwarf sections for debug info. If a target supports debug info, these must
78  // be set.
90  // The pubnames section is no longer generated by default. The generation
91  // can be enabled by a compiler flag.
93 
94  /// DWARF5 Experimental Debug Info Sections
95  /// DwarfAccelNamesSection, DwarfAccelObjCSection,
96  /// DwarfAccelNamespaceSection, DwarfAccelTypesSection -
97  /// If we use the DWARF accelerated hash tables then we want to emit these
98  /// sections.
103 
104  // These are used for the Fission separate debug information files.
112 
113  /// The DWARF v5 string offset and address table sections.
116 
117  // These are for Fission DWP files.
120 
121  /// Section for newer gnu pubnames.
123  /// Section for newer gnu pubtypes.
125 
128 
129  /// Extra TLS Variable Data section.
130  ///
131  /// If the target needs to put additional information for a TLS variable,
132  /// it'll go here.
134 
135  /// Section directive for Thread Local data. ELF, MachO, COFF, and Wasm.
136  MCSection *TLSDataSection; // Defaults to ".tdata".
137 
138  /// Section directive for Thread Local uninitialized data.
139  ///
140  /// Null if this target doesn't support a BSS section. ELF and MachO only.
141  MCSection *TLSBSSSection; // Defaults to ".tbss".
142 
143  /// StackMap section.
145 
146  /// FaultMap section.
148 
149  /// EH frame section.
150  ///
151  /// It is initialized on demand so it can be overwritten (with uniquing).
153 
154  // ELF specific sections.
160 
161  // MachO specific sections.
162 
163  /// Section for thread local structure information.
164  ///
165  /// Contains the source code name of the variable, visibility and a pointer to
166  /// the initial value (.tdata or .tbss).
167  MCSection *TLSTLVSection; // Defaults to ".tlv".
168 
169  /// Section for thread local data initialization functions.
170  const MCSection *TLSThreadInitSection; // Defaults to ".thread_init_func".
171 
186 
187  /// COFF specific sections.
192 
193 public:
194  void InitMCObjectFileInfo(const Triple &TT, bool PIC, CodeModel::Model CM,
195  MCContext &ctx);
196 
199  }
202  }
205  }
206 
209  }
210 
211  unsigned getPersonalityEncoding() const { return PersonalityEncoding; }
212  unsigned getLSDAEncoding() const { return LSDAEncoding; }
213  unsigned getFDEEncoding() const { return FDECFIEncoding; }
214  unsigned getTTypeEncoding() const { return TTypeEncoding; }
215 
218  }
219 
220  MCSection *getTextSection() const { return TextSection; }
221  MCSection *getDataSection() const { return DataSection; }
222  MCSection *getBSSSection() const { return BSSSection; }
224  MCSection *getLSDASection() const { return LSDASection; }
234  }
237  }
240  }
246 
247  // DWARF5 Experimental Debug Info Sections
249  return DwarfAccelNamesSection;
250  }
254  }
256  return DwarfAccelTypesSection;
257  }
259  MCSection *getDwarfTypesSection(uint64_t Hash) const;
270 
273  }
275  return COFFDebugTypesSection;
276  }
277 
278 
280  const MCSection *getTLSDataSection() const { return TLSDataSection; }
282 
285 
286  // ELF specific sections.
289  return MergeableConst4Section;
290  }
292  return MergeableConst8Section;
293  }
296  }
299  }
300 
301  // MachO specific sections.
302  const MCSection *getTLSTLVSection() const { return TLSTLVSection; }
304  return TLSThreadInitSection;
305  }
306  const MCSection *getCStringSection() const { return CStringSection; }
307  const MCSection *getUStringSection() const { return UStringSection; }
310  return ConstTextCoalSection;
311  }
312  const MCSection *getConstDataSection() const { return ConstDataSection; }
313  const MCSection *getDataCoalSection() const { return DataCoalSection; }
318  }
321  }
324  }
327  }
330  }
333  }
334 
335  // COFF specific sections.
340 
342  return EHFrameSection;
343  }
344 
346  Environment getObjectFileType() const { return Env; }
347 
348  bool isPositionIndependent() const { return PositionIndependent; }
349 
350 private:
351  Environment Env;
352  bool PositionIndependent;
353  CodeModel::Model CMModel;
354  MCContext *Ctx;
355  Triple TT;
356 
357  void initMachOMCObjectFileInfo(const Triple &T);
358  void initELFMCObjectFileInfo(const Triple &T);
359  void initCOFFMCObjectFileInfo(const Triple &T);
360  void initWasmMCObjectFileInfo(const Triple &T);
361 
362 public:
363  const Triple &getTargetTriple() const { return TT; }
364 };
365 
366 } // end namespace llvm
367 
368 #endif
Instances of this class represent a uniqued identifier for a section in the current translation unit...
Definition: MCSection.h:39
MCSection * MergeableConst4Section
MCSection * DwarfStrOffSection
The DWARF v5 string offset and address table sections.
const MCSection * getConstDataSection() const
MCSection * getDwarfStrOffSection() const
MCSection * getDwarfTUIndexSection() const
MCSection * getDwarfAccelObjCSection() const
MCSection * getDwarfCUIndexSection() const
MCSection * getDwarfStrSection() const
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
MCSection * getCOFFDebugTypesSection() const
const MCSection * getTLSTLVSection() const
MCSection * getDwarfLineSection() const
MCSection * getStackMapSection() const
MCSection * DwarfPubTypesSection
MCSection * getDwarfLocSection() const
MCSection * DwarfGnuPubTypesSection
Section for newer gnu pubtypes.
MCSection * getTLSBSSSection() const
const MCSection * getFourByteConstantSection() const
MCSection * StackMapSection
StackMap section.
MCSection * SixteenByteConstantSection
unsigned PersonalityEncoding
PersonalityEncoding, LSDAEncoding, TTypeEncoding - Some encoding values for EH.
MCSection * TextSection
Section directive for standard text.
MCSection * getEHFrameSection()
MCSection * ConstTextCoalSection
MCSection * getDwarfAccelNamesSection() const
MCSection * LazySymbolPointerSection
MCSection * getDwarfARangesSection() const
bool getSupportsCompactUnwindWithoutEHFrame() const
void InitMCObjectFileInfo(const Triple &TT, bool PIC, CodeModel::Model CM, MCContext &ctx)
MCSection * getDwarfPubNamesSection() const
MCSection * getReadOnlySection() const
MCSection * MergeableConst32Section
MCSection * getDwarfMacinfoSection() const
MCSection * getDwarfLocDWOSection() const
MCSection * COFFDebugTypesSection
const MCSection * getCStringSection() const
MCSection * MergeableConst16Section
MCSection * DwarfPubNamesSection
bool getCommDirectiveSupportsAlignment() const
MCSection * getBSSSection() const
MCSection * getDataSection() const
MCSection * EightByteConstantSection
unsigned getCompactUnwindDwarfEHFrameOnly() const
MCSection * getDwarfFrameSection() const
MCSection * TLSDataSection
Section directive for Thread Local data. ELF, MachO, COFF, and Wasm.
MCSection * getDataBSSSection() const
bool getOmitDwarfIfHaveCompactUnwind() const
Context object for machine code objects.
Definition: MCContext.h:59
MCSection * getSXDataSection() const
const MCSection * DwarfDebugInlineSection
const MCSection * getDwarfDebugInlineSection() const
bool getSupportsWeakOmittedEHFrame() const
MCSection * getCOFFDebugSymbolsSection() const
MCSection * DrectveSection
COFF specific sections.
MCSection * getCompactUnwindSection() const
MCSection * getPDataSection() const
MCSection * DwarfAccelNamesSection
DWARF5 Experimental Debug Info Sections DwarfAccelNamesSection, DwarfAccelObjCSection, DwarfAccelNamespaceSection, DwarfAccelTypesSection - If we use the DWARF accelerated hash tables then we want to emit these sections.
const MCSection * getMergeableConst16Section() const
MCSection * getDwarfAccelTypesSection() const
MCSection * getDwarfAbbrevSection() const
MCSection * DataSection
Section directive for standard data.
unsigned getLSDAEncoding() const
MCSection * getDwarfAbbrevDWOSection() const
MCSection * getTLSExtraDataSection() const
MCSection * getDwarfGnuPubTypesSection() const
MCSection * getDwarfTypesDWOSection() const
MCSection * ThreadLocalPointerSection
MCSection * getDwarfAddrSection() const
MCSection * TLSTLVSection
Section for thread local structure information.
MCSection * getNonLazySymbolPointerSection() const
unsigned getFDEEncoding() const
MCSection * DwarfAccelNamespaceSection
unsigned getPersonalityEncoding() const
MCSection * getDwarfLineDWOSection() const
const MCSection * getMergeableConst8Section() const
Environment getObjectFileType() const
MCSection * getDwarfTypesSection(uint64_t Hash) const
bool SupportsCompactUnwindWithoutEHFrame
True if the target object file supports emitting a compact unwind section without an associated EH fr...
bool CommDirectiveSupportsAlignment
True if .comm supports alignment.
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
MCSection * getDrectveSection() const
MCSection * COFFDebugSymbolsSection
MCSection * DwarfAbbrevSection
MCSection * getThreadLocalPointerSection() const
MCSection * EHFrameSection
EH frame section.
const MCSection * getEightByteConstantSection() const
MCSection * getDataRelROSection() const
MCSection * DwarfTypesDWOSection
MCSection * DwarfRangesSection
const MCSection * getConstTextCoalSection() const
const Triple & getTargetTriple() const
MCSection * DwarfARangesSection
const MCSection * getDataCommonSection() const
MCSection * CompactUnwindSection
If exception handling is supported by the target and the target can support a compact representation ...
MCSection * getDwarfInfoSection() const
MCSection * DwarfAccelTypesSection
MCSection * getDwarfStrOffDWOSection() const
MCSection * DwarfStrOffDWOSection
MCSection * DwarfGnuPubNamesSection
Section for newer gnu pubnames.
MCSection * DwarfAbbrevDWOSection
const MCSection * getMergeableConst4Section() const
MCSection * getDwarfPubTypesSection() const
MCSection * FaultMapSection
FaultMap section.
bool OmitDwarfIfHaveCompactUnwind
OmitDwarfIfHaveCompactUnwind - True if the target object file supports having some functions with com...
MCSection * FourByteConstantSection
MCSection * getDwarfStrDWOSection() const
const MCSection * getMergeableConst32Section() const
MCSection * getXDataSection() const
MCSection * LSDASection
If exception handling is supported by the target, this is the section the Language Specific Data Area...
MCSection * TLSExtraDataSection
Extra TLS Variable Data section.
MCSection * getLazySymbolPointerSection() const
unsigned CompactUnwindDwarfEHFrameOnly
Compact unwind encoding indicating that we should emit only an EH frame.
MCSection * getDwarfGnuPubNamesSection() const
MCSection * DwarfAccelObjCSection
MCSection * getFaultMapSection() const
const MCSection * getTLSThreadInitSection() const
MCSection * getTextSection() const
MCSection * TLSBSSSection
Section directive for Thread Local uninitialized data.
MCSection * NonLazySymbolPointerSection
MCSection * getDwarfAccelNamespaceSection() const
const MCSection * TLSThreadInitSection
Section for thread local data initialization functions.
bool SupportsWeakOmittedEHFrame
True if target object file supports a weak_definition of constant 0 for an omitted EH frame...
MCSection * getLSDASection() const
std::string Hash(const Unit &U)
Definition: FuzzerSHA1.cpp:216
MCSection * getDwarfInfoDWOSection() const
MCSection * BSSSection
Section that is default initialized to zero.
MCSection * ReadOnlySection
Section that is readonly and can contain arbitrary initialized data.
bool isPositionIndependent() const
MCSection * DwarfMacinfoSection
MCSection * getDwarfRangesSection() const
const MCSection * getTLSDataSection() const
unsigned getTTypeEncoding() const
const MCSection * getSixteenByteConstantSection() const
const MCSection * getUStringSection() const
MCSection * getTextCoalSection() const
const MCSection * getDataCoalSection() const
MCSection * MergeableConst8Section