LLVM  10.0.0svn
MCObjectFileInfo.cpp
Go to the documentation of this file.
1 //===-- MCObjectFileInfo.cpp - Object File Information --------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
10 #include "llvm/ADT/StringExtras.h"
11 #include "llvm/ADT/Triple.h"
12 #include "llvm/BinaryFormat/COFF.h"
13 #include "llvm/BinaryFormat/ELF.h"
14 #include "llvm/MC/MCAsmInfo.h"
15 #include "llvm/MC/MCContext.h"
16 #include "llvm/MC/MCSection.h"
17 #include "llvm/MC/MCSectionCOFF.h"
18 #include "llvm/MC/MCSectionELF.h"
19 #include "llvm/MC/MCSectionMachO.h"
20 #include "llvm/MC/MCSectionWasm.h"
21 #include "llvm/MC/MCSectionXCOFF.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  "__LLVM", "__remarks", MachO::S_ATTR_DEBUG, SectionKind::getMetadata());
296 
298 }
299 
300 void MCObjectFileInfo::initELFMCObjectFileInfo(const Triple &T, bool Large) {
301  switch (T.getArch()) {
302  case Triple::mips:
303  case Triple::mipsel:
304  case Triple::mips64:
305  case Triple::mips64el:
309  break;
310  case Triple::ppc64:
311  case Triple::ppc64le:
312  case Triple::x86_64:
315  break;
316  case Triple::bpfel:
317  case Triple::bpfeb:
319  break;
320  case Triple::hexagon:
322  PositionIndependent ? dwarf::DW_EH_PE_pcrel : dwarf::DW_EH_PE_absptr;
323  break;
324  default:
326  break;
327  }
328 
329  unsigned EHSectionType = T.getArch() == Triple::x86_64
332 
333  // Solaris requires different flags for .eh_frame to seemingly every other
334  // platform.
335  unsigned EHSectionFlags = ELF::SHF_ALLOC;
336  if (T.isOSSolaris() && T.getArch() != Triple::x86_64)
337  EHSectionFlags |= ELF::SHF_WRITE;
338 
339  // ELF
342 
345 
348 
351 
353  Ctx->getELFSection(".tdata", ELF::SHT_PROGBITS,
355 
358 
359  DataRelROSection = Ctx->getELFSection(".data.rel.ro", ELF::SHT_PROGBITS,
361 
363  Ctx->getELFSection(".rodata.cst4", ELF::SHT_PROGBITS,
364  ELF::SHF_ALLOC | ELF::SHF_MERGE, 4, "");
365 
367  Ctx->getELFSection(".rodata.cst8", ELF::SHT_PROGBITS,
368  ELF::SHF_ALLOC | ELF::SHF_MERGE, 8, "");
369 
371  Ctx->getELFSection(".rodata.cst16", ELF::SHT_PROGBITS,
372  ELF::SHF_ALLOC | ELF::SHF_MERGE, 16, "");
373 
375  Ctx->getELFSection(".rodata.cst32", ELF::SHT_PROGBITS,
376  ELF::SHF_ALLOC | ELF::SHF_MERGE, 32, "");
377 
378  // Exception Handling Sections.
379 
380  // FIXME: We're emitting LSDA info into a readonly section on ELF, even though
381  // it contains relocatable pointers. In PIC mode, this is probably a big
382  // runtime hit for C++ apps. Either the contents of the LSDA need to be
383  // adjusted or this should be a data section.
384  LSDASection = Ctx->getELFSection(".gcc_except_table", ELF::SHT_PROGBITS,
386 
387  COFFDebugSymbolsSection = nullptr;
388  COFFDebugTypesSection = nullptr;
389 
390  unsigned DebugSecType = ELF::SHT_PROGBITS;
391 
392  // MIPS .debug_* sections should have SHT_MIPS_DWARF section type
393  // to distinguish among sections contain DWARF and ECOFF debug formats.
394  // Sections with ECOFF debug format are obsoleted and marked by SHT_PROGBITS.
395  if (T.isMIPS())
396  DebugSecType = ELF::SHT_MIPS_DWARF;
397 
398  // Debug Info Sections.
400  Ctx->getELFSection(".debug_abbrev", DebugSecType, 0);
401  DwarfInfoSection = Ctx->getELFSection(".debug_info", DebugSecType, 0);
402  DwarfLineSection = Ctx->getELFSection(".debug_line", DebugSecType, 0);
404  Ctx->getELFSection(".debug_line_str", DebugSecType,
406  DwarfFrameSection = Ctx->getELFSection(".debug_frame", DebugSecType, 0);
408  Ctx->getELFSection(".debug_pubnames", DebugSecType, 0);
410  Ctx->getELFSection(".debug_pubtypes", DebugSecType, 0);
412  Ctx->getELFSection(".debug_gnu_pubnames", DebugSecType, 0);
414  Ctx->getELFSection(".debug_gnu_pubtypes", DebugSecType, 0);
416  Ctx->getELFSection(".debug_str", DebugSecType,
418  DwarfLocSection = Ctx->getELFSection(".debug_loc", DebugSecType, 0);
420  Ctx->getELFSection(".debug_aranges", DebugSecType, 0);
422  Ctx->getELFSection(".debug_ranges", DebugSecType, 0);
424  Ctx->getELFSection(".debug_macinfo", DebugSecType, 0);
425 
426  // DWARF5 Experimental Debug Info
427 
428  // Accelerator Tables
430  Ctx->getELFSection(".debug_names", ELF::SHT_PROGBITS, 0);
432  Ctx->getELFSection(".apple_names", ELF::SHT_PROGBITS, 0);
434  Ctx->getELFSection(".apple_objc", ELF::SHT_PROGBITS, 0);
436  Ctx->getELFSection(".apple_namespaces", ELF::SHT_PROGBITS, 0);
438  Ctx->getELFSection(".apple_types", ELF::SHT_PROGBITS, 0);
439 
440  // String Offset and Address Sections
442  Ctx->getELFSection(".debug_str_offsets", DebugSecType, 0);
443  DwarfAddrSection = Ctx->getELFSection(".debug_addr", DebugSecType, 0);
444  DwarfRnglistsSection = Ctx->getELFSection(".debug_rnglists", DebugSecType, 0);
445  DwarfLoclistsSection = Ctx->getELFSection(".debug_loclists", DebugSecType, 0);
446 
447  // Fission Sections
449  Ctx->getELFSection(".debug_info.dwo", DebugSecType, ELF::SHF_EXCLUDE);
451  Ctx->getELFSection(".debug_types.dwo", DebugSecType, ELF::SHF_EXCLUDE);
453  Ctx->getELFSection(".debug_abbrev.dwo", DebugSecType, ELF::SHF_EXCLUDE);
455  ".debug_str.dwo", DebugSecType,
458  Ctx->getELFSection(".debug_line.dwo", DebugSecType, ELF::SHF_EXCLUDE);
460  Ctx->getELFSection(".debug_loc.dwo", DebugSecType, ELF::SHF_EXCLUDE);
461  DwarfStrOffDWOSection = Ctx->getELFSection(".debug_str_offsets.dwo",
462  DebugSecType, ELF::SHF_EXCLUDE);
464  Ctx->getELFSection(".debug_rnglists.dwo", DebugSecType, ELF::SHF_EXCLUDE);
465 
466  // DWP Sections
468  Ctx->getELFSection(".debug_cu_index", DebugSecType, 0);
470  Ctx->getELFSection(".debug_tu_index", DebugSecType, 0);
471 
473  Ctx->getELFSection(".llvm_stackmaps", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
474 
476  Ctx->getELFSection(".llvm_faultmaps", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
477 
479  Ctx->getELFSection(".eh_frame", EHSectionType, EHSectionFlags);
480 
481  StackSizesSection = Ctx->getELFSection(".stack_sizes", ELF::SHT_PROGBITS, 0);
482 
485 }
486 
487 void MCObjectFileInfo::initCOFFMCObjectFileInfo(const Triple &T) {
492 
493  // Set the `IMAGE_SCN_MEM_16BIT` flag when compiling for thumb mode. This is
494  // used to indicate to the linker that the text segment contains thumb instructions
495  // and to set the ISA selection bit for calls accordingly.
496  const bool IsThumb = T.getArch() == Triple::thumb;
497 
499 
500  // COFF
501  BSSSection = Ctx->getCOFFSection(
506  ".text",
518 
519  if (T.getArch() == Triple::x86_64 || T.getArch() == Triple::aarch64) {
520  // On Windows 64 with SEH, the LSDA is emitted into the .xdata section
521  LSDASection = nullptr;
522  } else {
523  LSDASection = Ctx->getCOFFSection(".gcc_except_table",
527  }
528 
529  // Debug info.
541  ".debug$H",
545 
547  ".debug_abbrev",
550  SectionKind::getMetadata(), "section_abbrev");
552  ".debug_info",
555  SectionKind::getMetadata(), "section_info");
557  ".debug_line",
560  SectionKind::getMetadata(), "section_line");
562  ".debug_line_str",
565  SectionKind::getMetadata(), "section_line_str");
567  ".debug_frame",
572  ".debug_pubnames",
577  ".debug_pubtypes",
582  ".debug_gnu_pubnames",
587  ".debug_gnu_pubtypes",
592  ".debug_str",
595  SectionKind::getMetadata(), "info_string");
597  ".debug_str_offsets",
600  SectionKind::getMetadata(), "section_str_off");
602  ".debug_loc",
605  SectionKind::getMetadata(), "section_debug_loc");
607  ".debug_aranges",
612  ".debug_ranges",
615  SectionKind::getMetadata(), "debug_range");
617  ".debug_macinfo",
620  SectionKind::getMetadata(), "debug_macinfo");
622  ".debug_info.dwo",
625  SectionKind::getMetadata(), "section_info_dwo");
627  ".debug_types.dwo",
630  SectionKind::getMetadata(), "section_types_dwo");
632  ".debug_abbrev.dwo",
635  SectionKind::getMetadata(), "section_abbrev_dwo");
637  ".debug_str.dwo",
640  SectionKind::getMetadata(), "skel_string");
642  ".debug_line.dwo",
647  ".debug_loc.dwo",
650  SectionKind::getMetadata(), "skel_loc");
652  ".debug_str_offsets.dwo",
655  SectionKind::getMetadata(), "section_str_off_dwo");
657  ".debug_addr",
660  SectionKind::getMetadata(), "addr_sec");
662  ".debug_cu_index",
667  ".debug_tu_index",
672  ".debug_names",
675  SectionKind::getMetadata(), "debug_names_begin");
677  ".apple_names",
680  SectionKind::getMetadata(), "names_begin");
682  ".apple_namespaces",
685  SectionKind::getMetadata(), "namespac_begin");
687  ".apple_types",
690  SectionKind::getMetadata(), "types_begin");
692  ".apple_objc",
695  SectionKind::getMetadata(), "objc_begin");
696 
700 
704 
708 
711 
712  GFIDsSection = Ctx->getCOFFSection(".gfids$y",
716 
721 
722  StackMapSection = Ctx->getCOFFSection(".llvm_stackmaps",
726 }
727 
728 void MCObjectFileInfo::initWasmMCObjectFileInfo(const Triple &T) {
731 
733  Ctx->getWasmSection(".debug_line", SectionKind::getMetadata());
735  Ctx->getWasmSection(".debug_line_str", SectionKind::getMetadata());
737  Ctx->getWasmSection(".debug_str", SectionKind::getMetadata());
739  Ctx->getWasmSection(".debug_loc", SectionKind::getMetadata());
741  Ctx->getWasmSection(".debug_abbrev", SectionKind::getMetadata());
742  DwarfARangesSection = Ctx->getWasmSection(".debug_aranges", SectionKind::getMetadata());
744  Ctx->getWasmSection(".debug_ranges", SectionKind::getMetadata());
746  Ctx->getWasmSection(".debug_macinfo", SectionKind::getMetadata());
748  DwarfCUIndexSection = Ctx->getWasmSection(".debug_cu_index", SectionKind::getMetadata());
749  DwarfTUIndexSection = Ctx->getWasmSection(".debug_tu_index", SectionKind::getMetadata());
751  Ctx->getWasmSection(".debug_info", SectionKind::getMetadata());
753  DwarfPubNamesSection = Ctx->getWasmSection(".debug_pubnames", SectionKind::getMetadata());
754  DwarfPubTypesSection = Ctx->getWasmSection(".debug_pubtypes", SectionKind::getMetadata());
755 
756  // Wasm use data section for LSDA.
757  // TODO Consider putting each function's exception table in a separate
758  // section, as in -function-sections, to facilitate lld's --gc-section.
759  LSDASection = Ctx->getWasmSection(".rodata.gcc_except_table",
761 
762  // TODO: Define more sections.
763 }
764 
765 void MCObjectFileInfo::initXCOFFMCObjectFileInfo(const Triple &T) {
766  // The default csect for program code. Functions without a specified section
767  // get placed into this csect. The choice of csect name is not a property of
768  // the ABI or object file format. For example, the XL compiler uses an unnamed
769  // csect for program code.
773 }
774 
775 void MCObjectFileInfo::InitMCObjectFileInfo(const Triple &TheTriple, bool PIC,
776  MCContext &ctx,
777  bool LargeCodeModel) {
778  PositionIndependent = PIC;
779  Ctx = &ctx;
780 
781  // Common.
786 
788 
790 
791  EHFrameSection = nullptr; // Created on demand.
792  CompactUnwindSection = nullptr; // Used only by selected targets.
793  DwarfAccelNamesSection = nullptr; // Used only by selected targets.
794  DwarfAccelObjCSection = nullptr; // Used only by selected targets.
795  DwarfAccelNamespaceSection = nullptr; // Used only by selected targets.
796  DwarfAccelTypesSection = nullptr; // Used only by selected targets.
797 
798  TT = TheTriple;
799 
800  switch (TT.getObjectFormat()) {
801  case Triple::MachO:
802  Env = IsMachO;
803  initMachOMCObjectFileInfo(TT);
804  break;
805  case Triple::COFF:
806  if (!TT.isOSWindows())
808  "Cannot initialize MC for non-Windows COFF object files.");
809 
810  Env = IsCOFF;
811  initCOFFMCObjectFileInfo(TT);
812  break;
813  case Triple::ELF:
814  Env = IsELF;
815  initELFMCObjectFileInfo(TT, LargeCodeModel);
816  break;
817  case Triple::Wasm:
818  Env = IsWasm;
819  initWasmMCObjectFileInfo(TT);
820  break;
821  case Triple::XCOFF:
822  Env = IsXCOFF;
823  initXCOFFMCObjectFileInfo(TT);
824  break;
826  report_fatal_error("Cannot initialize MC for unknown object file format.");
827  break;
828  }
829 }
830 
831 MCSection *MCObjectFileInfo::getDwarfComdatSection(const char *Name,
832  uint64_t Hash) const {
833  switch (TT.getObjectFormat()) {
834  case Triple::ELF:
835  return Ctx->getELFSection(Name, ELF::SHT_PROGBITS, ELF::SHF_GROUP, 0,
836  utostr(Hash));
837  case Triple::MachO:
838  case Triple::COFF:
839  case Triple::Wasm:
840  case Triple::XCOFF:
842  report_fatal_error("Cannot get DWARF comdat section for this object file "
843  "format: not implemented.");
844  break;
845  }
846  llvm_unreachable("Unknown ObjectFormatType");
847 }
848 
849 MCSection *
851  if (Env != IsELF)
852  return StackSizesSection;
853 
854  const MCSectionELF &ElfSec = static_cast<const MCSectionELF &>(TextSec);
855  unsigned Flags = ELF::SHF_LINK_ORDER;
856  StringRef GroupName;
857  if (const MCSymbol *Group = ElfSec.getGroup()) {
858  GroupName = Group->getName();
859  Flags |= ELF::SHF_GROUP;
860  }
861 
862  const MCSymbol *Link = TextSec.getBeginSymbol();
864  unsigned UniqueID = It.first->second;
865 
866  return Ctx->getELFSection(".stack_sizes", ELF::SHT_PROGBITS, Flags, 0,
867  GroupName, UniqueID, cast<MCSymbolELF>(Link));
868 }
const MCAsmInfo * getAsmInfo() const
Definition: MCContext.h:318
bool isOSDarwin() const
isOSDarwin - Is this a "Darwin" OS (OS X, iOS, or watchOS).
Definition: Triple.h:481
Instances of this class represent a uniqued identifier for a section in the current translation unit...
Definition: MCSection.h:38
MCSection * MergeableConst4Section
static SectionKind getData()
Definition: SectionKind.h:201
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:131
S_ATTR_PURE_INSTRUCTIONS - Section contains only true machine instructions.
Definition: MachO.h:181
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:139
This class represents lattice values for constants.
Definition: AllocatorList.h:23
bool isMacOSX() const
isMacOSX - Is this a Mac OS X triple.
Definition: Triple.h:453
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:41
MCSection * StackMapSection
StackMap section.
amdgpu Simplify well known AMD library false FunctionCallee Value const Twine & Name
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:487
S_ATTR_STRIP_STATIC_SYMS - Ok to strip static symbols in this section in files with the MY_DYLDLINK f...
Definition: MachO.h:187
MCSection * LazySymbolPointerSection
static SectionKind getMergeableConst8()
Definition: SectionKind.h:192
static SectionKind getMergeableConst16()
Definition: SectionKind.h:193
static SectionKind getMergeable1ByteCString()
Definition: SectionKind.h:182
S_THREAD_LOCAL_VARIABLES - Section with thread local variable structure data.
Definition: MachO.h:164
static SectionKind getMergeableConst4()
Definition: SectionKind.h:191
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:434
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
Definition: DenseMap.h:221
MCSection * MergeableConst32Section
MCSection * DwarfDebugNamesSection
Accelerator table sections.
S_4BYTE_LITERALS - Section with 4 byte literals.
Definition: MachO.h:125
static SectionKind getBSS()
Definition: SectionKind.h:197
MCSection * COFFDebugTypesSection
MCSection * MergeableConst16Section
MCSection * DwarfPubNamesSection
S_8BYTE_LITERALS - Section with 8 byte literals.
Definition: MachO.h:127
MCSection * EightByteConstantSection
MCSection * getStackSizesSection(const MCSection &TextSec) const
bool isOSSolaris() const
Definition: Triple.h:511
MCSection * TLSDataSection
Section directive for Thread Local data. ELF, MachO, COFF, and Wasm.
Context object for machine code objects.
Definition: MCContext.h:65
MCSectionXCOFF * getXCOFFSection(StringRef Section, XCOFF::StorageMappingClass MappingClass, XCOFF::SymbolType CSectType, XCOFF::StorageClass StorageClass, SectionKind K, const char *BeginSymName=nullptr)
Definition: MCContext.cpp:538
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:285
ArchType getArch() const
getArch - Get the parsed architecture type of this triple.
Definition: Triple.h:296
MCSection * ConstDataCoalSection
MCSection * DrectveSection
COFF specific sections.
bool isiOS() const
Is this an iOS triple.
Definition: Triple.h:462
MCSection * DwarfAccelNamesSection
MCSection * DataSection
Section directive for standard data.
SectionCharacteristics
Definition: COFF.h:283
S_ATTR_LIVE_SUPPORT - Blocks are live if they reference live blocks.
Definition: MachO.h:191
bool isOSWindows() const
Tests whether the OS is Windows.
Definition: Triple.h:538
MCSection * ThreadLocalPointerSection
MCSection * DwarfLineStrSection
const MCSymbolELF * getGroup() const
Definition: MCSectionELF.h:75
MCSection * DwarfSwiftASTSection
MCSection * TLSTLVSection
Section for thread local structure information.
S_THREAD_LOCAL_ZEROFILL - Thread local zerofill section.
Definition: MachO.h:161
bool isWatchABI() const
Definition: Triple.h:476
MCSection * RemarksSection
Remarks section.
MCSection * DwarfAccelNamespaceSection
S_THREAD_LOCAL_REGULAR - Thread local data section.
Definition: MachO.h:159
unsigned size() const
Definition: DenseMap.h:125
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:123
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:43
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:133
MCSection * DwarfTypesDWOSection
static SectionKind getThreadBSS()
Definition: SectionKind.h:195
MCSection * DwarfRangesSection
S_THREAD_LOCAL_VARIABLE_POINTERS - Section with pointers to thread local structures.
Definition: MachO.h:167
Program Code.
Definition: XCOFF.h:29
static SectionKind getMetadata()
Definition: SectionKind.h:178
static SectionKind getReadOnlyWithRel()
Definition: SectionKind.h:202
MCSymbol * getBeginSymbol()
Definition: MCSection.h:109
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:170
DenseMap< const MCSymbol *, unsigned > StackSizesUniquing
std::string utostr(uint64_t X, bool isNeg=false)
Definition: StringExtras.h:223
MCSection * DwarfStrOffDWOSection
S_16BYTE_LITERALS - Section with only 16 byte literals.
Definition: MachO.h:152
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:719
MCSection * DwarfAbbrevDWOSection
MCSection * FaultMapSection
FaultMap section.
bool OmitDwarfIfHaveCompactUnwind
OmitDwarfIfHaveCompactUnwind - True if the target object file supports having some functions with com...
MCSection * FourByteConstantSection
Csect definition for initialized storage.
Definition: XCOFF.h:144
static SectionKind getMergeable2ByteCString()
Definition: SectionKind.h:185
void InitMCObjectFileInfo(const Triple &TT, bool PIC, MCContext &ctx, bool LargeCodeModel=false)
unsigned FDECFIEncoding
FDE CFI encoding.
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:326
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:27
S_ATTR_DEBUG - A debug section.
Definition: MachO.h:196
S_ATTR_NO_TOC - Section contains coalesced symbols that are not to be in a ranlib table of contents...
Definition: MachO.h:184
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:438
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:144
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:424
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:48
MCSection * ReadOnlySection
Section that is readonly and can contain arbitrary initialized data.
S_ZEROFILL - Zero fill on demand section.
Definition: MachO.h:121
MCSection * DwarfMacinfoSection
static SectionKind getReadOnly()
Definition: SectionKind.h:181
static SectionKind getText()
Definition: SectionKind.h:179
MCSection * MergeableConst8Section