LLVM  8.0.1
MCObjectFileInfo.cpp
Go to the documentation of this file.
1 //===-- MCObjectFileInfo.cpp - Object File Information --------------------===//
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 
11 #include "llvm/ADT/StringExtras.h"
12 #include "llvm/ADT/Triple.h"
13 #include "llvm/BinaryFormat/COFF.h"
14 #include "llvm/BinaryFormat/ELF.h"
15 #include "llvm/MC/MCAsmInfo.h"
16 #include "llvm/MC/MCContext.h"
17 #include "llvm/MC/MCSection.h"
18 #include "llvm/MC/MCSectionCOFF.h"
19 #include "llvm/MC/MCSectionELF.h"
20 #include "llvm/MC/MCSectionMachO.h"
21 #include "llvm/MC/MCSectionWasm.h"
22 
23 using namespace llvm;
24 
25 static bool useCompactUnwind(const Triple &T) {
26  // Only on darwin.
27  if (!T.isOSDarwin())
28  return false;
29 
30  // aarch64 always has it.
31  if (T.getArch() == Triple::aarch64)
32  return true;
33 
34  // armv7k always has it.
35  if (T.isWatchABI())
36  return true;
37 
38  // Use it on newer version of OS X.
39  if (T.isMacOSX() && !T.isMacOSXVersionLT(10, 6))
40  return true;
41 
42  // And the iOS simulator.
43  if (T.isiOS() &&
44  (T.getArch() == Triple::x86_64 || T.getArch() == Triple::x86))
45  return true;
46 
47  return false;
48 }
49 
50 void MCObjectFileInfo::initMachOMCObjectFileInfo(const Triple &T) {
51  // MachO
53 
55  "__TEXT", "__eh_frame",
59 
60  if (T.isOSDarwin() && T.getArch() == Triple::aarch64)
62 
63  if (T.isWatchABI())
65 
67 
68  // .comm doesn't support alignment before Leopard.
69  if (T.isMacOSX() && T.isMacOSXVersionLT(10, 5))
71 
72  TextSection // .text
73  = Ctx->getMachOSection("__TEXT", "__text",
76  DataSection // .data
77  = Ctx->getMachOSection("__DATA", "__data", 0, SectionKind::getData());
78 
79  // BSSSection might not be expected initialized on msvc.
80  BSSSection = nullptr;
81 
82  TLSDataSection // .tdata
83  = Ctx->getMachOSection("__DATA", "__thread_data",
86  TLSBSSSection // .tbss
87  = Ctx->getMachOSection("__DATA", "__thread_bss",
90 
91  // TODO: Verify datarel below.
92  TLSTLVSection // .tlv
93  = Ctx->getMachOSection("__DATA", "__thread_vars",
96 
98  "__DATA", "__thread_init", MachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS,
100 
101  CStringSection // .cstring
102  = Ctx->getMachOSection("__TEXT", "__cstring",
106  = Ctx->getMachOSection("__TEXT","__ustring", 0,
108  FourByteConstantSection // .literal4
109  = Ctx->getMachOSection("__TEXT", "__literal4",
112  EightByteConstantSection // .literal8
113  = Ctx->getMachOSection("__TEXT", "__literal8",
116 
117  SixteenByteConstantSection // .literal16
118  = Ctx->getMachOSection("__TEXT", "__literal16",
121 
122  ReadOnlySection // .const
123  = Ctx->getMachOSection("__TEXT", "__const", 0,
125 
126  // If the target is not powerpc, map the coal sections to the non-coal
127  // sections.
128  //
129  // "__TEXT/__textcoal_nt" => section "__TEXT/__text"
130  // "__TEXT/__const_coal" => section "__TEXT/__const"
131  // "__DATA/__datacoal_nt" => section "__DATA/__data"
132  Triple::ArchType ArchTy = T.getArch();
133 
134  ConstDataSection // .const_data
135  = Ctx->getMachOSection("__DATA", "__const", 0,
137 
138  if (ArchTy == Triple::ppc || ArchTy == Triple::ppc64) {
140  = Ctx->getMachOSection("__TEXT", "__textcoal_nt",
145  = Ctx->getMachOSection("__TEXT", "__const_coal",
149  "__DATA", "__datacoal_nt", MachO::S_COALESCED, SectionKind::getData());
151  } else {
156  }
157 
159  = Ctx->getMachOSection("__DATA","__common",
163  = Ctx->getMachOSection("__DATA","__bss", MachO::S_ZEROFILL,
165 
166 
168  = Ctx->getMachOSection("__DATA", "__la_symbol_ptr",
172  = Ctx->getMachOSection("__DATA", "__nl_symbol_ptr",
175 
177  = Ctx->getMachOSection("__DATA", "__thread_ptr",
180 
181  // Exception Handling.
182  LSDASection = Ctx->getMachOSection("__TEXT", "__gcc_except_tab", 0,
184 
185  COFFDebugSymbolsSection = nullptr;
186  COFFDebugTypesSection = nullptr;
187  COFFGlobalTypeHashesSection = nullptr;
188 
189  if (useCompactUnwind(T)) {
191  Ctx->getMachOSection("__LD", "__compact_unwind", MachO::S_ATTR_DEBUG,
193 
194  if (T.getArch() == Triple::x86_64 || T.getArch() == Triple::x86)
195  CompactUnwindDwarfEHFrameOnly = 0x04000000; // UNWIND_X86_64_MODE_DWARF
196  else if (T.getArch() == Triple::aarch64)
197  CompactUnwindDwarfEHFrameOnly = 0x03000000; // UNWIND_ARM64_MODE_DWARF
198  else if (T.getArch() == Triple::arm || T.getArch() == Triple::thumb)
199  CompactUnwindDwarfEHFrameOnly = 0x04000000; // UNWIND_ARM_MODE_DWARF
200  }
201 
202  // Debug Information.
204  Ctx->getMachOSection("__DWARF", "__debug_names", MachO::S_ATTR_DEBUG,
205  SectionKind::getMetadata(), "debug_names_begin");
207  Ctx->getMachOSection("__DWARF", "__apple_names", MachO::S_ATTR_DEBUG,
208  SectionKind::getMetadata(), "names_begin");
210  Ctx->getMachOSection("__DWARF", "__apple_objc", MachO::S_ATTR_DEBUG,
211  SectionKind::getMetadata(), "objc_begin");
212  // 16 character section limit...
214  Ctx->getMachOSection("__DWARF", "__apple_namespac", MachO::S_ATTR_DEBUG,
215  SectionKind::getMetadata(), "namespac_begin");
217  Ctx->getMachOSection("__DWARF", "__apple_types", MachO::S_ATTR_DEBUG,
218  SectionKind::getMetadata(), "types_begin");
219 
221  Ctx->getMachOSection("__DWARF", "__swift_ast", MachO::S_ATTR_DEBUG,
223 
225  Ctx->getMachOSection("__DWARF", "__debug_abbrev", MachO::S_ATTR_DEBUG,
226  SectionKind::getMetadata(), "section_abbrev");
228  Ctx->getMachOSection("__DWARF", "__debug_info", MachO::S_ATTR_DEBUG,
229  SectionKind::getMetadata(), "section_info");
231  Ctx->getMachOSection("__DWARF", "__debug_line", MachO::S_ATTR_DEBUG,
232  SectionKind::getMetadata(), "section_line");
234  Ctx->getMachOSection("__DWARF", "__debug_line_str", MachO::S_ATTR_DEBUG,
235  SectionKind::getMetadata(), "section_line_str");
237  Ctx->getMachOSection("__DWARF", "__debug_frame", MachO::S_ATTR_DEBUG,
240  Ctx->getMachOSection("__DWARF", "__debug_pubnames", MachO::S_ATTR_DEBUG,
243  Ctx->getMachOSection("__DWARF", "__debug_pubtypes", MachO::S_ATTR_DEBUG,
246  Ctx->getMachOSection("__DWARF", "__debug_gnu_pubn", MachO::S_ATTR_DEBUG,
249  Ctx->getMachOSection("__DWARF", "__debug_gnu_pubt", MachO::S_ATTR_DEBUG,
252  Ctx->getMachOSection("__DWARF", "__debug_str", MachO::S_ATTR_DEBUG,
253  SectionKind::getMetadata(), "info_string");
255  Ctx->getMachOSection("__DWARF", "__debug_str_offs", MachO::S_ATTR_DEBUG,
256  SectionKind::getMetadata(), "section_str_off");
258  Ctx->getMachOSection("__DWARF", "__debug_addr", MachO::S_ATTR_DEBUG,
259  SectionKind::getMetadata(), "section_info");
261  Ctx->getMachOSection("__DWARF", "__debug_loc", MachO::S_ATTR_DEBUG,
262  SectionKind::getMetadata(), "section_debug_loc");
264  Ctx->getMachOSection("__DWARF", "__debug_loclists", MachO::S_ATTR_DEBUG,
265  SectionKind::getMetadata(), "section_debug_loc");
266 
268  Ctx->getMachOSection("__DWARF", "__debug_aranges", MachO::S_ATTR_DEBUG,
271  Ctx->getMachOSection("__DWARF", "__debug_ranges", MachO::S_ATTR_DEBUG,
272  SectionKind::getMetadata(), "debug_range");
274  Ctx->getMachOSection("__DWARF", "__debug_rnglists", MachO::S_ATTR_DEBUG,
275  SectionKind::getMetadata(), "debug_range");
277  Ctx->getMachOSection("__DWARF", "__debug_macinfo", MachO::S_ATTR_DEBUG,
278  SectionKind::getMetadata(), "debug_macinfo");
280  Ctx->getMachOSection("__DWARF", "__debug_inlined", MachO::S_ATTR_DEBUG,
283  Ctx->getMachOSection("__DWARF", "__debug_cu_index", MachO::S_ATTR_DEBUG,
286  Ctx->getMachOSection("__DWARF", "__debug_tu_index", MachO::S_ATTR_DEBUG,
288  StackMapSection = Ctx->getMachOSection("__LLVM_STACKMAPS", "__llvm_stackmaps",
290 
291  FaultMapSection = Ctx->getMachOSection("__LLVM_FAULTMAPS", "__llvm_faultmaps",
293 
295 }
296 
297 void MCObjectFileInfo::initELFMCObjectFileInfo(const Triple &T, bool Large) {
298  switch (T.getArch()) {
299  case Triple::mips:
300  case Triple::mipsel:
301  case Triple::mips64:
302  case Triple::mips64el:
306  break;
307  case Triple::ppc64:
308  case Triple::ppc64le:
309  case Triple::x86_64:
312  break;
313  case Triple::bpfel:
314  case Triple::bpfeb:
316  break;
317  case Triple::hexagon:
319  PositionIndependent ? dwarf::DW_EH_PE_pcrel : dwarf::DW_EH_PE_absptr;
320  break;
321  default:
323  break;
324  }
325 
326  unsigned EHSectionType = T.getArch() == Triple::x86_64
329 
330  // Solaris requires different flags for .eh_frame to seemingly every other
331  // platform.
332  unsigned EHSectionFlags = ELF::SHF_ALLOC;
333  if (T.isOSSolaris() && T.getArch() != Triple::x86_64)
334  EHSectionFlags |= ELF::SHF_WRITE;
335 
336  // ELF
339 
342 
345 
348 
350  Ctx->getELFSection(".tdata", ELF::SHT_PROGBITS,
352 
355 
356  DataRelROSection = Ctx->getELFSection(".data.rel.ro", ELF::SHT_PROGBITS,
358 
360  Ctx->getELFSection(".rodata.cst4", ELF::SHT_PROGBITS,
361  ELF::SHF_ALLOC | ELF::SHF_MERGE, 4, "");
362 
364  Ctx->getELFSection(".rodata.cst8", ELF::SHT_PROGBITS,
365  ELF::SHF_ALLOC | ELF::SHF_MERGE, 8, "");
366 
368  Ctx->getELFSection(".rodata.cst16", ELF::SHT_PROGBITS,
369  ELF::SHF_ALLOC | ELF::SHF_MERGE, 16, "");
370 
372  Ctx->getELFSection(".rodata.cst32", ELF::SHT_PROGBITS,
373  ELF::SHF_ALLOC | ELF::SHF_MERGE, 32, "");
374 
375  // Exception Handling Sections.
376 
377  // FIXME: We're emitting LSDA info into a readonly section on ELF, even though
378  // it contains relocatable pointers. In PIC mode, this is probably a big
379  // runtime hit for C++ apps. Either the contents of the LSDA need to be
380  // adjusted or this should be a data section.
381  LSDASection = Ctx->getELFSection(".gcc_except_table", ELF::SHT_PROGBITS,
383 
384  COFFDebugSymbolsSection = nullptr;
385  COFFDebugTypesSection = nullptr;
386 
387  unsigned DebugSecType = ELF::SHT_PROGBITS;
388 
389  // MIPS .debug_* sections should have SHT_MIPS_DWARF section type
390  // to distinguish among sections contain DWARF and ECOFF debug formats.
391  // Sections with ECOFF debug format are obsoleted and marked by SHT_PROGBITS.
392  if (T.isMIPS())
393  DebugSecType = ELF::SHT_MIPS_DWARF;
394 
395  // Debug Info Sections.
397  Ctx->getELFSection(".debug_abbrev", DebugSecType, 0);
398  DwarfInfoSection = Ctx->getELFSection(".debug_info", DebugSecType, 0);
399  DwarfLineSection = Ctx->getELFSection(".debug_line", DebugSecType, 0);
401  Ctx->getELFSection(".debug_line_str", DebugSecType,
403  DwarfFrameSection = Ctx->getELFSection(".debug_frame", DebugSecType, 0);
405  Ctx->getELFSection(".debug_pubnames", DebugSecType, 0);
407  Ctx->getELFSection(".debug_pubtypes", DebugSecType, 0);
409  Ctx->getELFSection(".debug_gnu_pubnames", DebugSecType, 0);
411  Ctx->getELFSection(".debug_gnu_pubtypes", DebugSecType, 0);
413  Ctx->getELFSection(".debug_str", DebugSecType,
415  DwarfLocSection = Ctx->getELFSection(".debug_loc", DebugSecType, 0);
417  Ctx->getELFSection(".debug_aranges", DebugSecType, 0);
419  Ctx->getELFSection(".debug_ranges", DebugSecType, 0);
421  Ctx->getELFSection(".debug_macinfo", DebugSecType, 0);
422 
423  // DWARF5 Experimental Debug Info
424 
425  // Accelerator Tables
427  Ctx->getELFSection(".debug_names", ELF::SHT_PROGBITS, 0);
429  Ctx->getELFSection(".apple_names", ELF::SHT_PROGBITS, 0);
431  Ctx->getELFSection(".apple_objc", ELF::SHT_PROGBITS, 0);
433  Ctx->getELFSection(".apple_namespaces", ELF::SHT_PROGBITS, 0);
435  Ctx->getELFSection(".apple_types", ELF::SHT_PROGBITS, 0);
436 
437  // String Offset and Address Sections
439  Ctx->getELFSection(".debug_str_offsets", DebugSecType, 0);
440  DwarfAddrSection = Ctx->getELFSection(".debug_addr", DebugSecType, 0);
441  DwarfRnglistsSection = Ctx->getELFSection(".debug_rnglists", DebugSecType, 0);
442  DwarfLoclistsSection = Ctx->getELFSection(".debug_loclists", DebugSecType, 0);
443 
444  // Fission Sections
446  Ctx->getELFSection(".debug_info.dwo", DebugSecType, ELF::SHF_EXCLUDE);
448  Ctx->getELFSection(".debug_types.dwo", DebugSecType, ELF::SHF_EXCLUDE);
450  Ctx->getELFSection(".debug_abbrev.dwo", DebugSecType, ELF::SHF_EXCLUDE);
452  ".debug_str.dwo", DebugSecType,
455  Ctx->getELFSection(".debug_line.dwo", DebugSecType, ELF::SHF_EXCLUDE);
457  Ctx->getELFSection(".debug_loc.dwo", DebugSecType, ELF::SHF_EXCLUDE);
458  DwarfStrOffDWOSection = Ctx->getELFSection(".debug_str_offsets.dwo",
459  DebugSecType, ELF::SHF_EXCLUDE);
461  Ctx->getELFSection(".debug_rnglists.dwo", DebugSecType, ELF::SHF_EXCLUDE);
462 
463  // DWP Sections
465  Ctx->getELFSection(".debug_cu_index", DebugSecType, 0);
467  Ctx->getELFSection(".debug_tu_index", DebugSecType, 0);
468 
470  Ctx->getELFSection(".llvm_stackmaps", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
471 
473  Ctx->getELFSection(".llvm_faultmaps", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
474 
476  Ctx->getELFSection(".eh_frame", EHSectionType, EHSectionFlags);
477 
478  StackSizesSection = Ctx->getELFSection(".stack_sizes", ELF::SHT_PROGBITS, 0);
479 }
480 
481 void MCObjectFileInfo::initCOFFMCObjectFileInfo(const Triple &T) {
486 
487  // Set the `IMAGE_SCN_MEM_16BIT` flag when compiling for thumb mode. This is
488  // used to indicate to the linker that the text segment contains thumb instructions
489  // and to set the ISA selection bit for calls accordingly.
490  const bool IsThumb = T.getArch() == Triple::thumb;
491 
493 
494  // COFF
495  BSSSection = Ctx->getCOFFSection(
500  ".text",
512 
513  if (T.getArch() == Triple::x86_64 || T.getArch() == Triple::aarch64) {
514  // On Windows 64 with SEH, the LSDA is emitted into the .xdata section
515  LSDASection = nullptr;
516  } else {
517  LSDASection = Ctx->getCOFFSection(".gcc_except_table",
521  }
522 
523  // Debug info.
535  ".debug$H",
539 
541  ".debug_abbrev",
544  SectionKind::getMetadata(), "section_abbrev");
546  ".debug_info",
549  SectionKind::getMetadata(), "section_info");
551  ".debug_line",
554  SectionKind::getMetadata(), "section_line");
556  ".debug_line_str",
559  SectionKind::getMetadata(), "section_line_str");
561  ".debug_frame",
566  ".debug_pubnames",
571  ".debug_pubtypes",
576  ".debug_gnu_pubnames",
581  ".debug_gnu_pubtypes",
586  ".debug_str",
589  SectionKind::getMetadata(), "info_string");
591  ".debug_str_offsets",
594  SectionKind::getMetadata(), "section_str_off");
596  ".debug_loc",
599  SectionKind::getMetadata(), "section_debug_loc");
601  ".debug_aranges",
606  ".debug_ranges",
609  SectionKind::getMetadata(), "debug_range");
611  ".debug_macinfo",
614  SectionKind::getMetadata(), "debug_macinfo");
616  ".debug_info.dwo",
619  SectionKind::getMetadata(), "section_info_dwo");
621  ".debug_types.dwo",
624  SectionKind::getMetadata(), "section_types_dwo");
626  ".debug_abbrev.dwo",
629  SectionKind::getMetadata(), "section_abbrev_dwo");
631  ".debug_str.dwo",
634  SectionKind::getMetadata(), "skel_string");
636  ".debug_line.dwo",
641  ".debug_loc.dwo",
644  SectionKind::getMetadata(), "skel_loc");
646  ".debug_str_offsets.dwo",
649  SectionKind::getMetadata(), "section_str_off_dwo");
651  ".debug_addr",
654  SectionKind::getMetadata(), "addr_sec");
656  ".debug_cu_index",
661  ".debug_tu_index",
666  ".debug_names",
669  SectionKind::getMetadata(), "debug_names_begin");
671  ".apple_names",
674  SectionKind::getMetadata(), "names_begin");
676  ".apple_namespaces",
679  SectionKind::getMetadata(), "namespac_begin");
681  ".apple_types",
684  SectionKind::getMetadata(), "types_begin");
686  ".apple_objc",
689  SectionKind::getMetadata(), "objc_begin");
690 
694 
698 
702 
705 
706  GFIDsSection = Ctx->getCOFFSection(".gfids$y",
710 
715 
716  StackMapSection = Ctx->getCOFFSection(".llvm_stackmaps",
720 }
721 
722 void MCObjectFileInfo::initWasmMCObjectFileInfo(const Triple &T) {
725 
727  Ctx->getWasmSection(".debug_line", SectionKind::getMetadata());
729  Ctx->getWasmSection(".debug_line_str", SectionKind::getMetadata());
731  Ctx->getWasmSection(".debug_str", SectionKind::getMetadata());
733  Ctx->getWasmSection(".debug_loc", SectionKind::getMetadata());
735  Ctx->getWasmSection(".debug_abbrev", SectionKind::getMetadata());
736  DwarfARangesSection = Ctx->getWasmSection(".debug_aranges", SectionKind::getMetadata());
738  Ctx->getWasmSection(".debug_ranges", SectionKind::getMetadata());
740  Ctx->getWasmSection(".debug_macinfo", SectionKind::getMetadata());
742  DwarfCUIndexSection = Ctx->getWasmSection(".debug_cu_index", SectionKind::getMetadata());
743  DwarfTUIndexSection = Ctx->getWasmSection(".debug_tu_index", SectionKind::getMetadata());
745  Ctx->getWasmSection(".debug_info", SectionKind::getMetadata());
747  DwarfPubNamesSection = Ctx->getWasmSection(".debug_pubnames", SectionKind::getMetadata());
748  DwarfPubTypesSection = Ctx->getWasmSection(".debug_pubtypes", SectionKind::getMetadata());
749 
750  // Wasm use data section for LSDA.
751  // TODO Consider putting each function's exception table in a separate
752  // section, as in -function-sections, to facilitate lld's --gc-section.
753  LSDASection = Ctx->getWasmSection(".rodata.gcc_except_table",
755 
756  // TODO: Define more sections.
757 }
758 
759 void MCObjectFileInfo::InitMCObjectFileInfo(const Triple &TheTriple, bool PIC,
760  MCContext &ctx,
761  bool LargeCodeModel) {
762  PositionIndependent = PIC;
763  Ctx = &ctx;
764 
765  // Common.
770 
772 
774 
775  EHFrameSection = nullptr; // Created on demand.
776  CompactUnwindSection = nullptr; // Used only by selected targets.
777  DwarfAccelNamesSection = nullptr; // Used only by selected targets.
778  DwarfAccelObjCSection = nullptr; // Used only by selected targets.
779  DwarfAccelNamespaceSection = nullptr; // Used only by selected targets.
780  DwarfAccelTypesSection = nullptr; // Used only by selected targets.
781 
782  TT = TheTriple;
783 
784  switch (TT.getObjectFormat()) {
785  case Triple::MachO:
786  Env = IsMachO;
787  initMachOMCObjectFileInfo(TT);
788  break;
789  case Triple::COFF:
790  if (!TT.isOSWindows())
792  "Cannot initialize MC for non-Windows COFF object files.");
793 
794  Env = IsCOFF;
795  initCOFFMCObjectFileInfo(TT);
796  break;
797  case Triple::ELF:
798  Env = IsELF;
799  initELFMCObjectFileInfo(TT, LargeCodeModel);
800  break;
801  case Triple::Wasm:
802  Env = IsWasm;
803  initWasmMCObjectFileInfo(TT);
804  break;
806  report_fatal_error("Cannot initialize MC for unknown object file format.");
807  break;
808  }
809 }
810 
811 MCSection *MCObjectFileInfo::getDwarfComdatSection(const char *Name,
812  uint64_t Hash) const {
813  switch (TT.getObjectFormat()) {
814  case Triple::ELF:
815  return Ctx->getELFSection(Name, ELF::SHT_PROGBITS, ELF::SHF_GROUP, 0,
816  utostr(Hash));
817  case Triple::MachO:
818  case Triple::COFF:
819  case Triple::Wasm:
821  report_fatal_error("Cannot get DWARF comdat section for this object file "
822  "format: not implemented.");
823  break;
824  }
825  llvm_unreachable("Unknown ObjectFormatType");
826 }
827 
828 MCSection *
830  if (Env != IsELF)
831  return StackSizesSection;
832 
833  const MCSectionELF &ElfSec = static_cast<const MCSectionELF &>(TextSec);
834  unsigned Flags = ELF::SHF_LINK_ORDER;
835  StringRef GroupName;
836  if (const MCSymbol *Group = ElfSec.getGroup()) {
837  GroupName = Group->getName();
838  Flags |= ELF::SHF_GROUP;
839  }
840 
841  const MCSymbol *Link = TextSec.getBeginSymbol();
843  unsigned UniqueID = It.first->second;
844 
845  return Ctx->getELFSection(".stack_sizes", ELF::SHT_PROGBITS, Flags, 0,
846  GroupName, UniqueID, cast<MCSymbolELF>(Link));
847 }
const MCAsmInfo * getAsmInfo() const
Definition: MCContext.h:293
bool isOSDarwin() const
isOSDarwin - Is this a "Darwin" OS (OS X, iOS, or watchOS).
Definition: Triple.h:475
Instances of this class represent a uniqued identifier for a section in the current translation unit...
Definition: MCSection.h:39
MCSection * MergeableConst4Section
static SectionKind getData()
Definition: SectionKind.h:202
MCSection * DwarfStrOffSection
The DWARF v5 string offset and address table sections.
S_NON_LAZY_SYMBOL_POINTERS - Section with non-lazy symbol pointers.
Definition: MachO.h:132
LLVM_ATTRIBUTE_NORETURN void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
Definition: Error.cpp:140
This class represents lattice values for constants.
Definition: AllocatorList.h:24
bool isMacOSX() const
isMacOSX - Is this a Mac OS X triple.
Definition: Triple.h:447
MCSection * DwarfPubTypesSection
MCSection * DwarfGnuPubTypesSection
Section for newer gnu pubtypes.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:42
MCSection * StackMapSection
StackMap section.
MCSection * SixteenByteConstantSection
MCSection * DwarfRnglistsSection
The DWARF v5 range list section.
MCSection * TextSection
Section directive for standard text.
MCSection * ConstTextCoalSection
MCSectionWasm * getWasmSection(const Twine &Section, SectionKind K)
Definition: MCContext.h:454
MCSection * LazySymbolPointerSection
static SectionKind getMergeableConst8()
Definition: SectionKind.h:193
static SectionKind getMergeableConst16()
Definition: SectionKind.h:194
static SectionKind getMergeable1ByteCString()
Definition: SectionKind.h:183
S_THREAD_LOCAL_VARIABLES - Section with thread local variable structure data.
Definition: MachO.h:165
static SectionKind getMergeableConst4()
Definition: SectionKind.h:192
static bool useCompactUnwind(const Triple &T)
MCSectionCOFF * getCOFFSection(StringRef Section, unsigned Characteristics, SectionKind Kind, StringRef COMDATSymName, int Selection, unsigned UniqueID=GenericSectionID, const char *BeginSymName=nullptr)
Definition: MCContext.cpp:422
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
Definition: DenseMap.h:221
MCSection * MergeableConst32Section
MCSection * DwarfDebugNamesSection
Accelerator table sections.
amdgpu Simplify well known AMD library false Value Value const Twine & Name
S_4BYTE_LITERALS - Section with 4 byte literals.
Definition: MachO.h:126
static SectionKind getBSS()
Definition: SectionKind.h:198
MCSection * COFFDebugTypesSection
MCSection * MergeableConst16Section
MCSection * DwarfPubNamesSection
S_8BYTE_LITERALS - Section with 8 byte literals.
Definition: MachO.h:128
MCSection * EightByteConstantSection
MCSection * getStackSizesSection(const MCSection &TextSec) const
bool isOSSolaris() const
Definition: Triple.h:501
MCSection * TLSDataSection
Section directive for Thread Local data. ELF, MachO, COFF, and Wasm.
Context object for machine code objects.
Definition: MCContext.h:63
const MCSection * DwarfDebugInlineSection
MCSectionMachO * getMachOSection(StringRef Segment, StringRef Section, unsigned TypeAndAttributes, unsigned Reserved2, SectionKind K, const char *BeginSymName=nullptr)
Return the MCSection for the specified mach-o section.
Definition: MCContext.cpp:273
ArchType getArch() const
getArch - Get the parsed architecture type of this triple.
Definition: Triple.h:290
S_ATTR_PURE_INSTRUCTIONS - Section contains only true machine instructions.
Definition: MachO.h:182
MCSection * ConstDataCoalSection
MCSection * DrectveSection
COFF specific sections.
bool isiOS() const
Is this an iOS triple.
Definition: Triple.h:456
MCSection * DwarfAccelNamesSection
MCSection * DataSection
Section directive for standard data.
SectionCharacteristics
Definition: COFF.h:284
bool isOSWindows() const
Tests whether the OS is Windows.
Definition: Triple.h:567
MCSection * ThreadLocalPointerSection
MCSection * DwarfLineStrSection
const MCSymbolELF * getGroup() const
Definition: MCSectionELF.h:78
MCSection * DwarfSwiftASTSection
MCSection * TLSTLVSection
Section for thread local structure information.
S_THREAD_LOCAL_ZEROFILL - Thread local zerofill section.
Definition: MachO.h:162
bool isWatchABI() const
Definition: Triple.h:470
MCSection * DwarfAccelNamespaceSection
S_ATTR_LIVE_SUPPORT - Blocks are live if they reference live blocks.
Definition: MachO.h:192
S_THREAD_LOCAL_REGULAR - Thread local data section.
Definition: MachO.h:160
unsigned size() const
Definition: DenseMap.h:126
bool SupportsCompactUnwindWithoutEHFrame
True if the target object file supports emitting a compact unwind section without an associated EH fr...
S_CSTRING_LITERALS - Section with literal C strings.
Definition: MachO.h:124
bool CommDirectiveSupportsAlignment
True if .comm supports alignment.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
MCSection * COFFDebugSymbolsSection
MCSection * DwarfAbbrevSection
MCSection * EHFrameSection
EH frame section.
MCSection * DwarfLoclistsSection
The DWARF v5 locations list section.
S_LAZY_SYMBOL_POINTERS - Section with lazy symbol pointers.
Definition: MachO.h:134
MCSection * DwarfTypesDWOSection
static SectionKind getThreadBSS()
Definition: SectionKind.h:196
MCSection * DwarfRangesSection
S_THREAD_LOCAL_VARIABLE_POINTERS - Section with pointers to thread local structures.
Definition: MachO.h:168
static SectionKind getMetadata()
Definition: SectionKind.h:179
static SectionKind getReadOnlyWithRel()
Definition: SectionKind.h:203
MCSymbol * getBeginSymbol()
Definition: MCSection.h:110
MCSection * DwarfARangesSection
MCSection * CompactUnwindSection
If exception handling is supported by the target and the target can support a compact representation ...
MCSection * DwarfAccelTypesSection
S_THREAD_LOCAL_INIT_FUNCTION_POINTERS - Section with thread local variable initialization pointers to...
Definition: MachO.h:171
DenseMap< const MCSymbol *, unsigned > StackSizesUniquing
std::string utostr(uint64_t X, bool isNeg=false)
Definition: StringExtras.h:224
MCSection * DwarfStrOffDWOSection
S_ATTR_NO_TOC - Section contains coalesced symbols that are not to be in a ranlib table of contents...
Definition: MachO.h:185
S_16BYTE_LITERALS - Section with only 16 byte literals.
Definition: MachO.h:153
MCSection * DwarfGnuPubNamesSection
Section for newer gnu pubnames.
bool isMIPS() const
Tests whether the target is MIPS (little and big endian, 32- or 64-bit).
Definition: Triple.h:690
MCSection * DwarfAbbrevDWOSection
MCSection * FaultMapSection
FaultMap section.
bool OmitDwarfIfHaveCompactUnwind
OmitDwarfIfHaveCompactUnwind - True if the target object file supports having some functions with com...
MCSection * FourByteConstantSection
static SectionKind getMergeable2ByteCString()
Definition: SectionKind.h:186
void InitMCObjectFileInfo(const Triple &TT, bool PIC, MCContext &ctx, bool LargeCodeModel=false)
unsigned FDECFIEncoding
FDE CFI encoding.
S_ATTR_DEBUG - A debug section.
Definition: MachO.h:197
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.
ObjectFormatType getObjectFormat() const
getFormat - Get the object format for this triple.
Definition: Triple.h:320
unsigned CompactUnwindDwarfEHFrameOnly
Compact unwind encoding indicating that we should emit only an EH frame.
MCSection * StackSizesSection
Section containing metadata on function stack sizes.
This represents a section on linux, lots of unix variants and some bare metal systems.
Definition: MCSectionELF.h:28
bool isMacOSXVersionLT(unsigned Major, unsigned Minor=0, unsigned Micro=0) const
isMacOSXVersionLT - Comparison function for checking OS X version compatibility, which handles suppor...
Definition: Triple.h:432
MCSection * DwarfAccelObjCSection
unsigned getCodePointerSize() const
Get the code pointer size in bytes.
Definition: MCAsmInfo.h:396
S_COALESCED - Section contains symbols that are to be coalesced.
Definition: MachO.h:145
MCSection * COFFGlobalTypeHashesSection
MCSection * TLSBSSSection
Section directive for Thread Local uninitialized data.
MCSection * NonLazySymbolPointerSection
MCSectionELF * getELFSection(const Twine &Section, unsigned Type, unsigned Flags)
Definition: MCContext.h:389
const MCSection * TLSThreadInitSection
Section for thread local data initialization functions.
MCSection * DwarfRnglistsDWOSection
The DWARF v5 range list section for fission.
bool SupportsWeakOmittedEHFrame
True if target object file supports a weak_definition of constant 0 for an omitted EH frame...
MCSection * BSSSection
Section that is default initialized to zero.
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
S_ATTR_STRIP_STATIC_SYMS - Ok to strip static symbols in this section in files with the MY_DYLDLINK f...
Definition: MachO.h:188
MCSection * ReadOnlySection
Section that is readonly and can contain arbitrary initialized data.
S_ZEROFILL - Zero fill on demand section.
Definition: MachO.h:122
MCSection * DwarfMacinfoSection
static SectionKind getReadOnly()
Definition: SectionKind.h:182
static SectionKind getText()
Definition: SectionKind.h:180
MCSection * MergeableConst8Section