LLVM 22.0.0git
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
15#include "llvm/MC/MCAsmInfo.h"
16#include "llvm/MC/MCContext.h"
18#include "llvm/MC/MCSection.h"
28
29using namespace llvm;
30
31static bool useCompactUnwind(const Triple &T) {
32 // Only on darwin.
33 if (!T.isOSDarwin())
34 return false;
35
36 // aarch64 always has it.
37 if (T.getArch() == Triple::aarch64 || T.getArch() == Triple::aarch64_32)
38 return true;
39
40 // armv7k always has it.
41 if (T.isWatchABI())
42 return true;
43
44 // Use it on newer version of OS X.
45 if (T.isMacOSX() && !T.isMacOSXVersionLT(10, 6))
46 return true;
47
48 // And the iOS simulator.
49 if (T.isiOS() && T.isX86())
50 return true;
51
52 // The rest of the simulators always have it.
53 if (T.isSimulatorEnvironment())
54 return true;
55
56 // XROS always has it.
57 if (T.isXROS())
58 return true;
59
60 return false;
61}
62
63void MCObjectFileInfo::initMachOMCObjectFileInfo(const Triple &T) {
64 // MachO
66
68 "__TEXT", "__eh_frame",
72
73 if (T.isOSDarwin() &&
74 (T.getArch() == Triple::aarch64 || T.getArch() == Triple::aarch64_32 ||
75 T.isSimulatorEnvironment()))
77
78 switch (Ctx->emitDwarfUnwindInfo()) {
81 break;
84 break;
88 break;
89 }
90
92
93 TextSection // .text
94 = Ctx->getMachOSection("__TEXT", "__text",
97 DataSection // .data
98 = Ctx->getMachOSection("__DATA", "__data", 0, SectionKind::getData());
99
100 // BSSSection might not be expected initialized on msvc.
101 BSSSection = nullptr;
102
103 TLSDataSection // .tdata
104 = Ctx->getMachOSection("__DATA", "__thread_data",
107 TLSBSSSection // .tbss
108 = Ctx->getMachOSection("__DATA", "__thread_bss",
111
112 // TODO: Verify datarel below.
113 TLSTLVSection // .tlv
114 = Ctx->getMachOSection("__DATA", "__thread_vars",
117
119 "__DATA", "__thread_init", MachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS,
121
122 CStringSection // .cstring
123 = Ctx->getMachOSection("__TEXT", "__cstring",
127 = Ctx->getMachOSection("__TEXT","__ustring", 0,
129 FourByteConstantSection // .literal4
130 = Ctx->getMachOSection("__TEXT", "__literal4",
133 EightByteConstantSection // .literal8
134 = Ctx->getMachOSection("__TEXT", "__literal8",
137
138 SixteenByteConstantSection // .literal16
139 = Ctx->getMachOSection("__TEXT", "__literal16",
142
143 ReadOnlySection // .const
144 = Ctx->getMachOSection("__TEXT", "__const", 0,
146
147 // If the target is not powerpc, map the coal sections to the non-coal
148 // sections.
149 //
150 // "__TEXT/__textcoal_nt" => section "__TEXT/__text"
151 // "__TEXT/__const_coal" => section "__TEXT/__const"
152 // "__DATA/__datacoal_nt" => section "__DATA/__data"
153 Triple::ArchType ArchTy = T.getArch();
154
155 ConstDataSection // .const_data
156 = Ctx->getMachOSection("__DATA", "__const", 0,
158
159 if (ArchTy == Triple::ppc || ArchTy == Triple::ppc64) {
161 = Ctx->getMachOSection("__TEXT", "__textcoal_nt",
166 = Ctx->getMachOSection("__TEXT", "__const_coal",
170 "__DATA", "__datacoal_nt", MachO::S_COALESCED, SectionKind::getData());
172 } else {
177 }
178
180 = Ctx->getMachOSection("__DATA","__common",
184 = Ctx->getMachOSection("__DATA","__bss", MachO::S_ZEROFILL,
186
187
189 = Ctx->getMachOSection("__DATA", "__la_symbol_ptr",
193 = Ctx->getMachOSection("__DATA", "__nl_symbol_ptr",
196
198 = Ctx->getMachOSection("__DATA", "__thread_ptr",
201
202 AddrSigSection = Ctx->getMachOSection("__DATA", "__llvm_addrsig", 0,
204
205 // Exception Handling.
206 LSDASection = Ctx->getMachOSection("__TEXT", "__gcc_except_tab", 0,
208
209 COFFDebugSymbolsSection = nullptr;
210 COFFDebugTypesSection = nullptr;
212
213 if (useCompactUnwind(T)) {
215 Ctx->getMachOSection("__LD", "__compact_unwind", MachO::S_ATTR_DEBUG,
217
218 if (T.isX86())
219 CompactUnwindDwarfEHFrameOnly = 0x04000000; // UNWIND_X86_64_MODE_DWARF
220 else if (T.getArch() == Triple::aarch64 || T.getArch() == Triple::aarch64_32)
221 CompactUnwindDwarfEHFrameOnly = 0x03000000; // UNWIND_ARM64_MODE_DWARF
222 else if (T.getArch() == Triple::arm || T.getArch() == Triple::thumb)
223 CompactUnwindDwarfEHFrameOnly = 0x04000000; // UNWIND_ARM_MODE_DWARF
224 }
225
226 // Debug Information.
228 Ctx->getMachOSection("__DWARF", "__debug_names", MachO::S_ATTR_DEBUG,
229 SectionKind::getMetadata(), "debug_names_begin");
231 Ctx->getMachOSection("__DWARF", "__apple_names", MachO::S_ATTR_DEBUG,
232 SectionKind::getMetadata(), "names_begin");
234 Ctx->getMachOSection("__DWARF", "__apple_objc", MachO::S_ATTR_DEBUG,
235 SectionKind::getMetadata(), "objc_begin");
236 // 16 character section limit...
238 Ctx->getMachOSection("__DWARF", "__apple_namespac", MachO::S_ATTR_DEBUG,
239 SectionKind::getMetadata(), "namespac_begin");
241 Ctx->getMachOSection("__DWARF", "__apple_types", MachO::S_ATTR_DEBUG,
242 SectionKind::getMetadata(), "types_begin");
243
245 Ctx->getMachOSection("__DWARF", "__swift_ast", MachO::S_ATTR_DEBUG,
247
249 Ctx->getMachOSection("__DWARF", "__debug_abbrev", MachO::S_ATTR_DEBUG,
250 SectionKind::getMetadata(), "section_abbrev");
252 Ctx->getMachOSection("__DWARF", "__debug_info", MachO::S_ATTR_DEBUG,
253 SectionKind::getMetadata(), "section_info");
255 Ctx->getMachOSection("__DWARF", "__debug_line", MachO::S_ATTR_DEBUG,
256 SectionKind::getMetadata(), "section_line");
258 Ctx->getMachOSection("__DWARF", "__debug_line_str", MachO::S_ATTR_DEBUG,
259 SectionKind::getMetadata(), "section_line_str");
261 Ctx->getMachOSection("__DWARF", "__debug_frame", MachO::S_ATTR_DEBUG,
262 SectionKind::getMetadata(), "section_frame");
264 Ctx->getMachOSection("__DWARF", "__debug_pubnames", MachO::S_ATTR_DEBUG,
267 Ctx->getMachOSection("__DWARF", "__debug_pubtypes", MachO::S_ATTR_DEBUG,
270 Ctx->getMachOSection("__DWARF", "__debug_gnu_pubn", MachO::S_ATTR_DEBUG,
273 Ctx->getMachOSection("__DWARF", "__debug_gnu_pubt", MachO::S_ATTR_DEBUG,
276 Ctx->getMachOSection("__DWARF", "__debug_str", MachO::S_ATTR_DEBUG,
277 SectionKind::getMetadata(), "info_string");
279 Ctx->getMachOSection("__DWARF", "__debug_str_offs", MachO::S_ATTR_DEBUG,
280 SectionKind::getMetadata(), "section_str_off");
282 Ctx->getMachOSection("__DWARF", "__debug_addr", MachO::S_ATTR_DEBUG,
283 SectionKind::getMetadata(), "section_info");
285 Ctx->getMachOSection("__DWARF", "__debug_loc", MachO::S_ATTR_DEBUG,
286 SectionKind::getMetadata(), "section_debug_loc");
288 Ctx->getMachOSection("__DWARF", "__debug_loclists", MachO::S_ATTR_DEBUG,
289 SectionKind::getMetadata(), "section_debug_loc");
290
292 Ctx->getMachOSection("__DWARF", "__debug_aranges", MachO::S_ATTR_DEBUG,
295 Ctx->getMachOSection("__DWARF", "__debug_ranges", MachO::S_ATTR_DEBUG,
296 SectionKind::getMetadata(), "debug_range");
298 Ctx->getMachOSection("__DWARF", "__debug_rnglists", MachO::S_ATTR_DEBUG,
299 SectionKind::getMetadata(), "debug_range");
301 Ctx->getMachOSection("__DWARF", "__debug_macinfo", MachO::S_ATTR_DEBUG,
302 SectionKind::getMetadata(), "debug_macinfo");
304 Ctx->getMachOSection("__DWARF", "__debug_macro", MachO::S_ATTR_DEBUG,
305 SectionKind::getMetadata(), "debug_macro");
307 Ctx->getMachOSection("__DWARF", "__debug_inlined", MachO::S_ATTR_DEBUG,
310 Ctx->getMachOSection("__DWARF", "__debug_cu_index", MachO::S_ATTR_DEBUG,
313 Ctx->getMachOSection("__DWARF", "__debug_tu_index", MachO::S_ATTR_DEBUG,
315 StackMapSection = Ctx->getMachOSection("__LLVM_STACKMAPS", "__llvm_stackmaps",
317
318 FaultMapSection = Ctx->getMachOSection("__LLVM_FAULTMAPS", "__llvm_faultmaps",
320
322 "__LLVM", "__remarks", MachO::S_ATTR_DEBUG, SectionKind::getMetadata());
323
324 // The architecture of dsymutil makes it very difficult to copy the Swift
325 // reflection metadata sections into the __TEXT segment, so dsymutil creates
326 // these sections in the __DWARF segment instead.
328#define HANDLE_SWIFT_SECTION(KIND, MACHO, ELF, COFF) \
329 Swift5ReflectionSections \
330 [llvm::binaryformat::Swift5ReflectionSectionKind::KIND] = \
331 Ctx->getMachOSection(Ctx->getSwift5ReflectionSegmentName().data(), \
332 MACHO, 0, SectionKind::getMetadata());
333#include "llvm/BinaryFormat/Swift.def"
334 }
335
337}
338
339void MCObjectFileInfo::initELFMCObjectFileInfo(const Triple &T, bool Large) {
340 switch (T.getArch()) {
341 case Triple::mips:
342 case Triple::mipsel:
343 case Triple::mips64:
344 case Triple::mips64el:
345 // We cannot use DW_EH_PE_sdata8 for the large PositionIndependent case
346 // since there is no R_MIPS_PC64 relocation (only a 32-bit version).
347 // In fact DW_EH_PE_sdata4 is enough for us now, and GNU ld doesn't
348 // support pcrel|sdata8 well. Let's use sdata4 for now.
349 if (PositionIndependent)
351 else
355 break;
356 case Triple::ppc64:
357 case Triple::ppc64le:
358 case Triple::aarch64:
360 case Triple::x86_64:
363 break;
364 case Triple::bpfel:
365 case Triple::bpfeb:
367 break;
368 case Triple::hexagon:
370 PositionIndependent ? dwarf::DW_EH_PE_pcrel : dwarf::DW_EH_PE_absptr;
371 break;
372 case Triple::xtensa:
374 break;
375 default:
377 break;
378 }
379
380 unsigned EHSectionType = T.getArch() == Triple::x86_64
383 switch (T.getArch()) {
384 case Triple::x86_64:
385 SFrameABIArch = sframe::ABI::AMD64EndianLittle;
386 break;
387 case Triple::aarch64:
388 SFrameABIArch = sframe::ABI::AArch64EndianLittle;
389 break;
391 SFrameABIArch = sframe::ABI::AArch64EndianBig;
392 break;
393 default:
394 break;
395 }
396
397 // Solaris requires different flags for .eh_frame to seemingly every other
398 // platform.
399 unsigned EHSectionFlags = ELF::SHF_ALLOC;
400 if (T.isOSSolaris() && T.getArch() != Triple::x86_64)
401 EHSectionFlags |= ELF::SHF_WRITE;
402
403 // ELF
406
409
412
415
417 Ctx->getELFSection(".tdata", ELF::SHT_PROGBITS,
419
422
423 DataRelROSection = Ctx->getELFSection(".data.rel.ro", ELF::SHT_PROGBITS,
425
427 Ctx->getELFSection(".rodata.cst4", ELF::SHT_PROGBITS,
429
431 Ctx->getELFSection(".rodata.cst8", ELF::SHT_PROGBITS,
433
435 Ctx->getELFSection(".rodata.cst16", ELF::SHT_PROGBITS,
437
439 Ctx->getELFSection(".rodata.cst32", ELF::SHT_PROGBITS,
441
442 // Exception Handling Sections.
443
444 // FIXME: We're emitting LSDA info into a readonly section on ELF, even though
445 // it contains relocatable pointers. In PIC mode, this is probably a big
446 // runtime hit for C++ apps. Either the contents of the LSDA need to be
447 // adjusted or this should be a data section.
448 LSDASection = Ctx->getELFSection(".gcc_except_table", ELF::SHT_PROGBITS,
450
451 COFFDebugSymbolsSection = nullptr;
452 COFFDebugTypesSection = nullptr;
453
454 unsigned DebugSecType = ELF::SHT_PROGBITS;
455
456 // MIPS .debug_* sections should have SHT_MIPS_DWARF section type
457 // to distinguish among sections contain DWARF and ECOFF debug formats.
458 // Sections with ECOFF debug format are obsoleted and marked by SHT_PROGBITS.
459 if (T.isMIPS())
460 DebugSecType = ELF::SHT_MIPS_DWARF;
461
462 // Debug Info Sections.
464 Ctx->getELFSection(".debug_abbrev", DebugSecType, 0);
465 DwarfInfoSection = Ctx->getELFSection(".debug_info", DebugSecType, 0);
466 DwarfLineSection = Ctx->getELFSection(".debug_line", DebugSecType, 0);
468 Ctx->getELFSection(".debug_line_str", DebugSecType,
470 DwarfFrameSection = Ctx->getELFSection(".debug_frame", DebugSecType, 0);
472 Ctx->getELFSection(".debug_pubnames", DebugSecType, 0);
474 Ctx->getELFSection(".debug_pubtypes", DebugSecType, 0);
476 Ctx->getELFSection(".debug_gnu_pubnames", DebugSecType, 0);
478 Ctx->getELFSection(".debug_gnu_pubtypes", DebugSecType, 0);
480 Ctx->getELFSection(".debug_str", DebugSecType,
482 DwarfLocSection = Ctx->getELFSection(".debug_loc", DebugSecType, 0);
484 Ctx->getELFSection(".debug_aranges", DebugSecType, 0);
486 Ctx->getELFSection(".debug_ranges", DebugSecType, 0);
488 Ctx->getELFSection(".debug_macinfo", DebugSecType, 0);
489 DwarfMacroSection = Ctx->getELFSection(".debug_macro", DebugSecType, 0);
490
491 // DWARF5 Experimental Debug Info
492
493 // Accelerator Tables
495 Ctx->getELFSection(".debug_names", ELF::SHT_PROGBITS, 0);
497 Ctx->getELFSection(".apple_names", ELF::SHT_PROGBITS, 0);
499 Ctx->getELFSection(".apple_objc", ELF::SHT_PROGBITS, 0);
501 Ctx->getELFSection(".apple_namespaces", ELF::SHT_PROGBITS, 0);
503 Ctx->getELFSection(".apple_types", ELF::SHT_PROGBITS, 0);
504
505 // String Offset and Address Sections
507 Ctx->getELFSection(".debug_str_offsets", DebugSecType, 0);
508 DwarfAddrSection = Ctx->getELFSection(".debug_addr", DebugSecType, 0);
509 DwarfRnglistsSection = Ctx->getELFSection(".debug_rnglists", DebugSecType, 0);
510 DwarfLoclistsSection = Ctx->getELFSection(".debug_loclists", DebugSecType, 0);
511
512 // Fission Sections
514 Ctx->getELFSection(".debug_info.dwo", DebugSecType, ELF::SHF_EXCLUDE);
516 Ctx->getELFSection(".debug_types.dwo", DebugSecType, ELF::SHF_EXCLUDE);
518 Ctx->getELFSection(".debug_abbrev.dwo", DebugSecType, ELF::SHF_EXCLUDE);
520 ".debug_str.dwo", DebugSecType,
523 Ctx->getELFSection(".debug_line.dwo", DebugSecType, ELF::SHF_EXCLUDE);
525 Ctx->getELFSection(".debug_loc.dwo", DebugSecType, ELF::SHF_EXCLUDE);
526 DwarfStrOffDWOSection = Ctx->getELFSection(".debug_str_offsets.dwo",
527 DebugSecType, ELF::SHF_EXCLUDE);
529 Ctx->getELFSection(".debug_rnglists.dwo", DebugSecType, ELF::SHF_EXCLUDE);
531 Ctx->getELFSection(".debug_macinfo.dwo", DebugSecType, ELF::SHF_EXCLUDE);
533 Ctx->getELFSection(".debug_macro.dwo", DebugSecType, ELF::SHF_EXCLUDE);
534
536 Ctx->getELFSection(".debug_loclists.dwo", DebugSecType, ELF::SHF_EXCLUDE);
537
538 // DWP Sections
540 Ctx->getELFSection(".debug_cu_index", DebugSecType, 0);
542 Ctx->getELFSection(".debug_tu_index", DebugSecType, 0);
543
545 Ctx->getELFSection(".llvm_stackmaps", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
546
548 Ctx->getELFSection(".llvm_faultmaps", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
549
551 Ctx->getELFSection(".eh_frame", EHSectionType, EHSectionFlags);
552
555
556 CallGraphSection = Ctx->getELFSection(".callgraph", ELF::SHT_PROGBITS, 0);
557
558 StackSizesSection = Ctx->getELFSection(".stack_sizes", ELF::SHT_PROGBITS, 0);
559
560 PseudoProbeSection = Ctx->getELFSection(".pseudo_probe", DebugSecType, 0);
562 Ctx->getELFSection(".pseudo_probe_desc", DebugSecType, 0);
563
564 LLVMStatsSection = Ctx->getELFSection(".llvm_stats", ELF::SHT_PROGBITS, 0);
565}
566
567void MCObjectFileInfo::initGOFFMCObjectFileInfo(const Triple &T) {
568 MCSectionGOFF *RootSDSection = Ctx->getGOFFSection(
571
572 MCSectionGOFF *ADAEDSection = Ctx->getGOFFSection(
578 RootSDSection);
579 ADASection = Ctx->getGOFFSection(SectionKind::getData(), "#S",
583 ADAEDSection);
584
585 TextSection = Ctx->getGOFFSection(
591 RootSDSection);
592
593 MCSectionGOFF *PPA2ListEDSection = Ctx->getGOFFSection(
599 RootSDSection);
600 PPA2ListSection = Ctx->getGOFFSection(SectionKind::getData(), ".&ppa2",
604 PPA2ListEDSection);
605
606 IDRLSection = Ctx->getGOFFSection(
607 SectionKind::getData(), "B_IDRL",
612 RootSDSection);
613}
614
615void MCObjectFileInfo::initCOFFMCObjectFileInfo(const Triple &T) {
619
620 // Set the `IMAGE_SCN_MEM_16BIT` flag when compiling for thumb mode. This is
621 // used to indicate to the linker that the text segment contains thumb instructions
622 // and to set the ISA selection bit for calls accordingly.
623 const bool IsThumb = T.getArch() == Triple::thumb;
624
625 // COFF
630 ".text",
640
641 if (T.getArch() == Triple::x86_64 || T.getArch() == Triple::aarch64 ||
642 T.getArch() == Triple::arm || T.getArch() == Triple::thumb) {
643 // On Windows with SEH, the LSDA is emitted into the .xdata section
644 LSDASection = nullptr;
645 } else {
646 LSDASection = Ctx->getCOFFSection(".gcc_except_table",
649 }
650
651 if (T.getArch() == Triple::aarch64) {
654 } else if (T.getArch() == Triple::x86_64) {
655 // Import Call Optimization on x64 leverages the same metadata as the
656 // retpoline mitigation, hence the unusual section name.
659 }
660
661 // Debug info.
674
676 ".debug_abbrev", COFF::IMAGE_SCN_MEM_DISCARDABLE |
680 ".debug_info", COFF::IMAGE_SCN_MEM_DISCARDABLE |
684 ".debug_line", COFF::IMAGE_SCN_MEM_DISCARDABLE |
688 ".debug_line_str", COFF::IMAGE_SCN_MEM_DISCARDABLE |
692 ".debug_frame", COFF::IMAGE_SCN_MEM_DISCARDABLE |
696 ".debug_pubnames", COFF::IMAGE_SCN_MEM_DISCARDABLE |
700 ".debug_pubtypes", COFF::IMAGE_SCN_MEM_DISCARDABLE |
704 ".debug_gnu_pubnames", COFF::IMAGE_SCN_MEM_DISCARDABLE |
708 ".debug_gnu_pubtypes", COFF::IMAGE_SCN_MEM_DISCARDABLE |
712 ".debug_str", COFF::IMAGE_SCN_MEM_DISCARDABLE |
716 ".debug_str_offsets", COFF::IMAGE_SCN_MEM_DISCARDABLE |
720 ".debug_loc", COFF::IMAGE_SCN_MEM_DISCARDABLE |
724 ".debug_loclists", COFF::IMAGE_SCN_MEM_DISCARDABLE |
728 ".debug_aranges", COFF::IMAGE_SCN_MEM_DISCARDABLE |
732 ".debug_ranges", COFF::IMAGE_SCN_MEM_DISCARDABLE |
736 ".debug_rnglists", COFF::IMAGE_SCN_MEM_DISCARDABLE |
740 ".debug_macinfo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
744 ".debug_macro", COFF::IMAGE_SCN_MEM_DISCARDABLE |
748 ".debug_macinfo.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
752 ".debug_macro.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
756 ".debug_info.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
760 ".debug_types.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
764 ".debug_abbrev.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
768 ".debug_str.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
772 ".debug_line.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
776 ".debug_loc.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
780 ".debug_str_offsets.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
784 ".debug_addr", COFF::IMAGE_SCN_MEM_DISCARDABLE |
788 ".debug_cu_index", COFF::IMAGE_SCN_MEM_DISCARDABLE |
792 ".debug_tu_index", COFF::IMAGE_SCN_MEM_DISCARDABLE |
796 ".debug_names", COFF::IMAGE_SCN_MEM_DISCARDABLE |
800 ".apple_names", COFF::IMAGE_SCN_MEM_DISCARDABLE |
804 ".apple_namespaces", COFF::IMAGE_SCN_MEM_DISCARDABLE |
808 ".apple_types", COFF::IMAGE_SCN_MEM_DISCARDABLE |
812 ".apple_objc", COFF::IMAGE_SCN_MEM_DISCARDABLE |
815
818
822
826
828
832
836
840
844
848
849 StackMapSection = Ctx->getCOFFSection(".llvm_stackmaps",
852
853 // Set IMAGE_SCN_MEM_DISCARDABLE so that lld will not truncate section name.
855 ".pseudo_probe", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
859 ".pseudo_probe_desc", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
862}
863
864void MCObjectFileInfo::initSPIRVMCObjectFileInfo(const Triple &T) {
865 // Put everything in a single binary section.
867}
868
869void MCObjectFileInfo::initWasmMCObjectFileInfo(const Triple &T) {
872
874 Ctx->getWasmSection(".debug_line", SectionKind::getMetadata());
876 Ctx->getWasmSection(".debug_line_str", SectionKind::getMetadata(),
881 Ctx->getWasmSection(".debug_loc", SectionKind::getMetadata());
883 Ctx->getWasmSection(".debug_abbrev", SectionKind::getMetadata());
886 Ctx->getWasmSection(".debug_ranges", SectionKind::getMetadata());
888 Ctx->getWasmSection(".debug_macinfo", SectionKind::getMetadata());
890 Ctx->getWasmSection(".debug_macro", SectionKind::getMetadata());
894 Ctx->getWasmSection(".debug_info", SectionKind::getMetadata());
899 Ctx->getWasmSection(".debug_gnu_pubnames", SectionKind::getMetadata());
901 Ctx->getWasmSection(".debug_gnu_pubtypes", SectionKind::getMetadata());
902
904 Ctx->getWasmSection(".debug_names", SectionKind::getMetadata());
906 Ctx->getWasmSection(".debug_str_offsets", SectionKind::getMetadata());
908 Ctx->getWasmSection(".debug_addr", SectionKind::getMetadata());
910 Ctx->getWasmSection(".debug_rnglists", SectionKind::getMetadata());
912 Ctx->getWasmSection(".debug_loclists", SectionKind::getMetadata());
913
914 // Fission Sections
916 Ctx->getWasmSection(".debug_info.dwo", SectionKind::getMetadata());
918 Ctx->getWasmSection(".debug_types.dwo", SectionKind::getMetadata());
920 Ctx->getWasmSection(".debug_abbrev.dwo", SectionKind::getMetadata());
922 Ctx->getWasmSection(".debug_str.dwo", SectionKind::getMetadata(),
925 Ctx->getWasmSection(".debug_line.dwo", SectionKind::getMetadata());
927 Ctx->getWasmSection(".debug_loc.dwo", SectionKind::getMetadata());
929 Ctx->getWasmSection(".debug_str_offsets.dwo", SectionKind::getMetadata());
931 Ctx->getWasmSection(".debug_rnglists.dwo", SectionKind::getMetadata());
933 Ctx->getWasmSection(".debug_macinfo.dwo", SectionKind::getMetadata());
935 Ctx->getWasmSection(".debug_macro.dwo", SectionKind::getMetadata());
936
938 Ctx->getWasmSection(".debug_loclists.dwo", SectionKind::getMetadata());
939
940 // DWP Sections
942 Ctx->getWasmSection(".debug_cu_index", SectionKind::getMetadata());
944 Ctx->getWasmSection(".debug_tu_index", SectionKind::getMetadata());
945
946 // Wasm use data section for LSDA.
947 // TODO Consider putting each function's exception table in a separate
948 // section, as in -function-sections, to facilitate lld's --gc-section.
949 LSDASection = Ctx->getWasmSection(".rodata.gcc_except_table",
951
952 // TODO: Define more sections.
953}
954
955void MCObjectFileInfo::initXCOFFMCObjectFileInfo(const Triple &T) {
956 // The default csect for program code. Functions without a specified section
957 // get placed into this csect. The choice of csect name is not a property of
958 // the ABI or object file format, but various tools rely on the section
959 // name being empty (considering named symbols to be "user symbol names").
961 "..text..", // Use a non-null name to work around an AIX assembler bug...
964 /* MultiSymbolsAllowed*/ true);
965
966 // ... but use a null name when generating the symbol table.
967 MCSectionXCOFF *TS = static_cast<MCSectionXCOFF *>(TextSection);
969 TS->setSymbolTableName("");
970
972 ".data", SectionKind::getData(),
974 /* MultiSymbolsAllowed*/ true);
975
977 ".rodata", SectionKind::getReadOnly(),
979 /* MultiSymbolsAllowed*/ true);
981
983 ".rodata.8", SectionKind::getReadOnly(),
985 /* MultiSymbolsAllowed*/ true);
987
989 ".rodata.16", SectionKind::getReadOnly(),
991 /* MultiSymbolsAllowed*/ true);
993
995 ".tdata", SectionKind::getThreadData(),
997 /* MultiSymbolsAllowed*/ true);
998
1000 "TOC", SectionKind::getData(),
1002 XCOFF::XTY_SD));
1003
1004 // The TOC-base always has 0 size, but 4 byte alignment.
1006
1008 ".gcc_except_table", SectionKind::getReadOnly(),
1010 XCOFF::XTY_SD));
1011
1013 ".eh_info_table", SectionKind::getData(),
1015 XCOFF::XTY_SD));
1016
1017 // DWARF sections for XCOFF are not csects. They are special STYP_DWARF
1018 // sections, and the individual DWARF sections are distinguished by their
1019 // section subtype.
1021 ".dwabrev", SectionKind::getMetadata(),
1022 /* CsectProperties */ std::nullopt,
1023 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWABREV);
1024
1026 ".dwinfo", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
1027 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWINFO);
1028
1030 ".dwline", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
1031 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWLINE);
1032
1034 ".dwframe", SectionKind::getMetadata(),
1035 /* CsectProperties */ std::nullopt,
1036 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWFRAME);
1037
1039 ".dwpbnms", SectionKind::getMetadata(),
1040 /* CsectProperties */ std::nullopt,
1041 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWPBNMS);
1042
1044 ".dwpbtyp", SectionKind::getMetadata(),
1045 /* CsectProperties */ std::nullopt,
1046 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWPBTYP);
1047
1049 ".dwstr", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
1050 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWSTR);
1051
1053 ".dwloc", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
1054 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWLOC);
1055
1057 ".dwarnge", SectionKind::getMetadata(),
1058 /* CsectProperties */ std::nullopt,
1059 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWARNGE);
1060
1062 ".dwrnges", SectionKind::getMetadata(),
1063 /* CsectProperties */ std::nullopt,
1064 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWRNGES);
1065
1067 ".dwmac", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
1068 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWMAC);
1069}
1070
1071void MCObjectFileInfo::initDXContainerObjectFileInfo(const Triple &T) {
1072 // At the moment the DXBC section should end up empty.
1074}
1075
1077
1079 bool LargeCodeModel) {
1080 PositionIndependent = PIC;
1081 Ctx = &MCCtx;
1082
1083 // Common.
1087
1089
1091
1092 EHFrameSection = nullptr; // Created on demand.
1093 SFrameSection = nullptr; // Created on demand.
1094 CompactUnwindSection = nullptr; // Used only by selected targets.
1095 DwarfAccelNamesSection = nullptr; // Used only by selected targets.
1096 DwarfAccelObjCSection = nullptr; // Used only by selected targets.
1097 DwarfAccelNamespaceSection = nullptr; // Used only by selected targets.
1098 DwarfAccelTypesSection = nullptr; // Used only by selected targets.
1099
1100 const Triple &TheTriple = Ctx->getTargetTriple();
1101 switch (Ctx->getObjectFileType()) {
1102 case MCContext::IsMachO:
1103 initMachOMCObjectFileInfo(TheTriple);
1104 break;
1105 case MCContext::IsCOFF:
1106 initCOFFMCObjectFileInfo(TheTriple);
1107 break;
1108 case MCContext::IsELF:
1109 initELFMCObjectFileInfo(TheTriple, LargeCodeModel);
1110 break;
1111 case MCContext::IsGOFF:
1112 initGOFFMCObjectFileInfo(TheTriple);
1113 break;
1114 case MCContext::IsSPIRV:
1115 initSPIRVMCObjectFileInfo(TheTriple);
1116 break;
1117 case MCContext::IsWasm:
1118 initWasmMCObjectFileInfo(TheTriple);
1119 break;
1120 case MCContext::IsXCOFF:
1121 initXCOFFMCObjectFileInfo(TheTriple);
1122 break;
1124 initDXContainerObjectFileInfo(TheTriple);
1125 break;
1126 }
1127}
1128
1129MCSection *MCObjectFileInfo::getDwarfComdatSection(const char *Name,
1130 uint64_t Hash) const {
1131 switch (Ctx->getTargetTriple().getObjectFormat()) {
1132 case Triple::ELF:
1134 utostr(Hash), /*IsComdat=*/true);
1135 case Triple::Wasm:
1137 utostr(Hash), MCSection::NonUniqueID);
1138 case Triple::MachO:
1139 case Triple::COFF:
1140 case Triple::GOFF:
1141 case Triple::SPIRV:
1142 case Triple::XCOFF:
1145 report_fatal_error("Cannot get DWARF comdat section for this object file "
1146 "format: not implemented.");
1147 break;
1148 }
1149 llvm_unreachable("Unknown ObjectFormatType");
1150}
1151
1152MCSection *
1154 if (Ctx->getObjectFileType() != MCContext::IsELF)
1155 return CallGraphSection;
1156
1157 const MCSectionELF &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1158 unsigned Flags = ELF::SHF_LINK_ORDER;
1159 StringRef GroupName;
1160 if (const MCSymbol *Group = ElfSec.getGroup()) {
1161 GroupName = Group->getName();
1162 Flags |= ELF::SHF_GROUP;
1163 }
1164
1165 return Ctx->getELFSection(
1166 ".callgraph", ELF::SHT_PROGBITS, Flags, 0, GroupName, true,
1167 ElfSec.getUniqueID(),
1168 static_cast<const MCSymbolELF *>(TextSec.getBeginSymbol()));
1169}
1170
1171MCSection *
1173 if ((Ctx->getObjectFileType() != MCContext::IsELF) ||
1174 Ctx->getTargetTriple().isPS4())
1175 return StackSizesSection;
1176
1177 const MCSectionELF &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1178 unsigned Flags = ELF::SHF_LINK_ORDER;
1179 StringRef GroupName;
1180 if (const MCSymbol *Group = ElfSec.getGroup()) {
1181 GroupName = Group->getName();
1182 Flags |= ELF::SHF_GROUP;
1183 }
1184
1185 return Ctx->getELFSection(
1186 ".stack_sizes", ELF::SHT_PROGBITS, Flags, 0, GroupName, true,
1187 ElfSec.getUniqueID(),
1188 static_cast<const MCSymbolELF *>(TextSec.getBeginSymbol()));
1189}
1190
1191MCSection *
1193 if (Ctx->getObjectFileType() != MCContext::IsELF)
1194 return nullptr;
1195
1196 const MCSectionELF &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1197 unsigned Flags = ELF::SHF_LINK_ORDER;
1198 StringRef GroupName;
1199 if (const MCSymbol *Group = ElfSec.getGroup()) {
1200 GroupName = Group->getName();
1201 Flags |= ELF::SHF_GROUP;
1202 }
1203
1204 // Use the text section's begin symbol and unique ID to create a separate
1205 // .llvm_bb_addr_map section associated with every unique text section.
1206 return Ctx->getELFSection(
1207 ".llvm_bb_addr_map", ELF::SHT_LLVM_BB_ADDR_MAP, Flags, 0, GroupName, true,
1208 ElfSec.getUniqueID(),
1209 static_cast<const MCSymbolELF *>(TextSec.getBeginSymbol()));
1210}
1211
1212MCSection *
1214 if (Ctx->getObjectFileType() != MCContext::IsELF)
1215 return nullptr;
1216
1217 const MCSectionELF &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1218 unsigned Flags = ELF::SHF_LINK_ORDER | ELF::SHF_ALLOC;
1219 StringRef GroupName;
1220 if (const MCSymbol *Group = ElfSec.getGroup()) {
1221 GroupName = Group->getName();
1222 Flags |= ELF::SHF_GROUP;
1223 }
1224
1225 return Ctx->getELFSection(
1226 ".kcfi_traps", ELF::SHT_PROGBITS, Flags, 0, GroupName,
1227 /*IsComdat=*/true, ElfSec.getUniqueID(),
1228 static_cast<const MCSymbolELF *>(TextSec.getBeginSymbol()));
1229}
1230
1231MCSection *
1233 auto ObjFileType = Ctx->getObjectFileType();
1234 if (ObjFileType == MCContext::IsELF) {
1235 const auto &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1236 unsigned Flags = ELF::SHF_LINK_ORDER;
1237 StringRef GroupName;
1238 if (const MCSymbol *Group = ElfSec.getGroup()) {
1239 GroupName = Group->getName();
1240 Flags |= ELF::SHF_GROUP;
1241 }
1242 return Ctx->getELFSection(
1243 PseudoProbeSection->getName(), ELF::SHT_PROGBITS, Flags, 0, GroupName,
1244 true, ElfSec.getUniqueID(),
1245 static_cast<const MCSymbolELF *>(TextSec.getBeginSymbol()));
1246 } else if (ObjFileType == MCContext::IsCOFF) {
1247 StringRef COMDATSymName = "";
1248 int Selection = 0;
1249 unsigned Characteristics =
1250 static_cast<MCSectionCOFF *>(PseudoProbeSection)->getCharacteristics();
1251 const auto &COFFSec = static_cast<const MCSectionCOFF &>(TextSec);
1252 if (const MCSymbol *COMDATSym = COFFSec.getCOMDATSymbol()) {
1253 // Associate .pseudo_probe to its function section.
1254 COMDATSymName = COMDATSym->getName();
1257 }
1259 COMDATSymName, Selection, COFFSec.getUniqueID());
1260 }
1261
1262 return PseudoProbeSection;
1263}
1264
1265MCSection *
1267 if (!Ctx->getTargetTriple().supportsCOMDAT() || FuncName.empty())
1269
1270 // Create a separate comdat group for each function's descriptor in order
1271 // for the linker to deduplicate. The duplication, must be from different
1272 // tranlation unit, can come from:
1273 // 1. Inline functions defined in header files;
1274 // 2. ThinLTO imported funcions;
1275 // 3. Weak-linkage definitions.
1276 // Use a concatenation of the section name and the function name as the
1277 // group name so that descriptor-only groups won't be folded with groups of
1278 // code.
1279 auto ObjFileType = Ctx->getObjectFileType();
1280 if (ObjFileType == MCContext::IsELF) {
1281 auto *S = static_cast<MCSectionELF *>(PseudoProbeDescSection);
1282 auto Flags = S->getFlags() | ELF::SHF_GROUP;
1283 return Ctx->getELFSection(S->getName(), S->getType(), Flags,
1284 S->getEntrySize(), S->getName() + "_" + FuncName,
1285 /*IsComdat=*/true);
1286 } else if (ObjFileType == MCContext::IsCOFF) {
1287 auto *S = static_cast<MCSectionCOFF *>(PseudoProbeDescSection);
1288 unsigned Characteristics =
1289 S->getCharacteristics() | COFF::IMAGE_SCN_LNK_COMDAT;
1290 std::string COMDATSymName = (S->getName() + "_" + FuncName).str();
1291 return Ctx->getCOFFSection(S->getName(), Characteristics, COMDATSymName,
1293 }
1294
1296}
1297
1299 return LLVMStatsSection;
1300}
1301
1303 const MCSection *TextSec) const {
1304 if (Ctx->getObjectFileType() != MCContext::IsELF)
1305 return nullptr;
1306
1307 // SHF_WRITE for relocations, and let user post-process data in-place.
1309
1310 if (!TextSec)
1311 TextSec = getTextSection();
1312
1313 StringRef GroupName;
1314 const auto &ElfSec = static_cast<const MCSectionELF &>(*TextSec);
1315 if (const MCSymbol *Group = ElfSec.getGroup()) {
1316 GroupName = Group->getName();
1317 Flags |= ELF::SHF_GROUP;
1318 }
1319 return Ctx->getELFSection(
1320 Name, ELF::SHT_PROGBITS, Flags, 0, GroupName, true, ElfSec.getUniqueID(),
1321 static_cast<const MCSymbolELF *>(TextSec->getBeginSymbol()));
1322}
amdgpu AMDGPU DAG DAG Pattern Instruction Selection
COFFYAML::WeakExternalCharacteristics Characteristics
Definition: COFFYAML.cpp:350
std::string Name
static bool useCompactUnwind(const Triple &T)
This file declares the MCSectionGOFF class, which contains all of the necessary machine code sections...
PassInstrumentationCallbacks PIC
This file contains data-structure definitions and constants to support unwinding based on ....
This file contains some functions that are useful when dealing with strings.
unsigned getCodePointerSize() const
Get the code pointer size in bytes.
Definition: MCAsmInfo.h:443
Context object for machine code objects.
Definition: MCContext.h:83
LLVM_ABI 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:533
Environment getObjectFileType() const
Definition: MCContext.h:392
LLVM_ABI MCSectionCOFF * getCOFFSection(StringRef Section, unsigned Characteristics, StringRef COMDATSymName, int Selection, unsigned UniqueID=MCSection::NonUniqueID)
Definition: MCContext.cpp:752
MCSectionWasm * getWasmSection(const Twine &Section, SectionKind K, unsigned Flags=0)
Definition: MCContext.h:637
MCSectionELF * getELFSection(const Twine &Section, unsigned Type, unsigned Flags)
Definition: MCContext.h:549
LLVM_ABI MCSectionXCOFF * getXCOFFSection(StringRef Section, SectionKind K, std::optional< XCOFF::CsectProperties > CsectProp=std::nullopt, bool MultiSymbolsAllowed=false, std::optional< XCOFF::DwarfSectionSubtypeFlags > DwarfSubtypeFlags=std::nullopt)
Definition: MCContext.cpp:862
const StringRef & getSwift5ReflectionSegmentName() const
Definition: MCContext.h:397
const MCAsmInfo * getAsmInfo() const
Definition: MCContext.h:412
LLVM_ABI MCSectionDXContainer * getDXContainerSection(StringRef Section, SectionKind K)
Get the section for the provided Section name.
Definition: MCContext.cpp:916
LLVM_ABI MCSectionSPIRV * getSPIRVSection()
Definition: MCContext.cpp:911
LLVM_ABI EmitDwarfUnwindType emitDwarfUnwindInfo() const
Definition: MCContext.cpp:979
const Triple & getTargetTriple() const
Definition: MCContext.h:400
MCSection * NonLazySymbolPointerSection
MCSection * TLSBSSSection
Section directive for Thread Local uninitialized data.
MCSection * CallGraphSection
Section containing call graph metadata.
MCSection * DwarfDebugNamesSection
Accelerator table sections.
const MCSection * TLSThreadInitSection
Section for thread local data initialization functions.
MCSection * DwarfStrOffSection
The DWARF v5 string offset and address table sections.
MCSection * DwarfARangesSection
MCSection * MergeableConst16Section
MCSection * COFFGlobalTypeHashesSection
MCSection * SFrameSection
SFrame section.
MCSection * MergeableConst4Section
MCSection * DwarfPubNamesSection
MCSection * DwarfGnuPubTypesSection
Section for newer gnu pubtypes.
MCSection * getLLVMStatsSection() const
MCSection * TextSection
Section directive for standard text.
MCSection * ConstDataCoalSection
MCSection * ConstTextCoalSection
MCSection * TLSDataSection
Section directive for Thread Local data. ELF, MachO, COFF, and Wasm.
MCSection * MergeableConst8Section
MCSection * ThreadLocalPointerSection
MCSection * LSDASection
If exception handling is supported by the target, this is the section the Language Specific Data Area...
MCSection * CompactUnwindSection
If exception handling is supported by the target and the target can support a compact representation ...
MCSection * COFFDebugSymbolsSection
MCSection * getPseudoProbeDescSection(StringRef FuncName) const
MCSection * DwarfLoclistsSection
The DWARF v5 locations list section.
MCSection * PseudoProbeSection
Section for pseudo probe information used by AutoFDO.
MCSection * FourByteConstantSection
MCSection * DwarfAccelNamesSection
MCSection * getStackSizesSection(const MCSection &TextSec) const
MCSection * DwarfRnglistsSection
The DWARF v5 range list section.
const MCSection * DwarfDebugInlineSection
MCSection * DwarfAbbrevDWOSection
MCSection * getBBAddrMapSection(const MCSection &TextSec) const
MCSection * COFFDebugTypesSection
MCSection * LazySymbolPointerSection
MCSection * RemarksSection
Remarks section.
MCSection * getPseudoProbeSection(const MCSection &TextSec) const
MCSection * PseudoProbeDescSection
MCSection * DwarfPubTypesSection
MCSection * DwarfStrOffDWOSection
MCSection * TLSExtraDataSection
Extra TLS Variable Data section.
MCSection * EHFrameSection
EH frame section.
bool OmitDwarfIfHaveCompactUnwind
OmitDwarfIfHaveCompactUnwind - True if the target object file supports having some functions with com...
MCSection * DrectveSection
COFF specific sections.
MCSection * FaultMapSection
FaultMap section.
MCSection * getKCFITrapSection(const MCSection &TextSec) const
MCSection * DwarfAccelObjCSection
MCSection * TLSTLVSection
Section for thread local structure information.
MCSection * DwarfSwiftASTSection
void initMCObjectFileInfo(MCContext &MCCtx, bool PIC, bool LargeCodeModel=false)
MCSection * DwarfRnglistsDWOSection
The DWARF v5 range and location list sections for fission.
MCSection * ImportCallSection
If import call optimization is supported by the target, this is the section to emit import call data ...
MCSection * MergeableConst32Section
MCSection * SixteenByteConstantSection
MCSection * getPCSection(StringRef Name, const MCSection *TextSec) const
std::optional< sframe::ABI > SFrameABIArch
SFrame ABI architecture byte.
MCSection * DwarfLineStrSection
bool SupportsCompactUnwindWithoutEHFrame
True if the target object file supports emitting a compact unwind section without an associated EH fr...
MCSection * ReadOnlySection
Section that is readonly and can contain arbitrary initialized data.
MCSection * DwarfAbbrevSection
unsigned FDECFIEncoding
FDE CFI encoding.
bool SupportsWeakOmittedEHFrame
True if target object file supports a weak_definition of constant 0 for an omitted EH frame.
MCSection * DwarfLoclistsDWOSection
MCSection * getCallGraphSection(const MCSection &TextSec) const
MCSection * BSSSection
Section that is default initialized to zero.
MCSection * EightByteConstantSection
MCSection * StackSizesSection
Section containing metadata on function stack sizes.
unsigned CompactUnwindDwarfEHFrameOnly
Compact unwind encoding indicating that we should emit only an EH frame.
MCSection * getTextSection() const
MCSection * DwarfTypesDWOSection
MCSection * DwarfGnuPubNamesSection
Section for newer gnu pubnames.
MCSection * StackMapSection
StackMap section.
MCSection * DwarfMacroDWOSection
MCSection * DwarfMacinfoDWOSection
MCSection * DwarfAccelNamespaceSection
MCSection * DwarfAccelTypesSection
MCSection * DataSection
Section directive for standard data.
This represents a section on Windows.
Definition: MCSectionCOFF.h:27
This represents a section on linux, lots of unix variants and some bare metal systems.
Definition: MCSectionELF.h:27
unsigned getUniqueID() const
Definition: MCSectionELF.h:81
const MCSymbolELF * getGroup() const
Definition: MCSectionELF.h:77
void setSymbolTableName(StringRef STN)
MCSymbolXCOFF * getQualNameSymbol() const
Instances of this class represent a uniqued identifier for a section in the current translation unit.
Definition: MCSection.h:496
void setAlignment(Align Value)
Definition: MCSection.h:580
static constexpr unsigned NonUniqueID
Definition: MCSection.h:501
StringRef getName() const
Definition: MCSection.h:565
MCSymbol * getBeginSymbol()
Definition: MCSection.h:568
void setSymbolTableName(StringRef STN)
Definition: MCSymbolXCOFF.h:63
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:42
static SectionKind getThreadData()
Definition: SectionKind.h:207
static SectionKind getMetadata()
Definition: SectionKind.h:188
static SectionKind getMergeable2ByteCString()
Definition: SectionKind.h:196
static SectionKind getMergeableConst4()
Definition: SectionKind.h:202
static SectionKind getText()
Definition: SectionKind.h:190
static SectionKind getReadOnlyWithRel()
Definition: SectionKind.h:214
static SectionKind getData()
Definition: SectionKind.h:213
static SectionKind getMergeableConst8()
Definition: SectionKind.h:203
static SectionKind getBSS()
Definition: SectionKind.h:209
static SectionKind getThreadBSS()
Definition: SectionKind.h:206
static SectionKind getMergeableConst16()
Definition: SectionKind.h:204
static SectionKind getMergeable1ByteCString()
Definition: SectionKind.h:193
static SectionKind getReadOnly()
Definition: SectionKind.h:192
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:55
constexpr bool empty() const
empty - Check if the string is empty.
Definition: StringRef.h:151
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:47
bool isPS4() const
Tests whether the target is the PS4 platform.
Definition: Triple.h:800
ObjectFormatType getObjectFormat() const
Get the object format for this triple.
Definition: Triple.h:435
bool supportsCOMDAT() const
Tests whether the target supports comdat.
Definition: Triple.h:1159
@ aarch64_be
Definition: Triple.h:55
@ mips64el
Definition: Triple.h:70
@ aarch64_32
Definition: Triple.h:56
@ DXContainer
Definition: Triple.h:319
@ UnknownObjectFormat
Definition: Triple.h:316
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
SectionCharacteristics
Definition: COFF.h:298
@ IMAGE_SCN_LNK_REMOVE
Definition: COFF.h:308
@ IMAGE_SCN_CNT_CODE
Definition: COFF.h:303
@ IMAGE_SCN_MEM_READ
Definition: COFF.h:336
@ IMAGE_SCN_MEM_EXECUTE
Definition: COFF.h:335
@ IMAGE_SCN_CNT_UNINITIALIZED_DATA
Definition: COFF.h:305
@ IMAGE_SCN_MEM_DISCARDABLE
Definition: COFF.h:331
@ IMAGE_SCN_LNK_INFO
Definition: COFF.h:307
@ IMAGE_SCN_MEM_16BIT
Definition: COFF.h:312
@ IMAGE_SCN_CNT_INITIALIZED_DATA
Definition: COFF.h:304
@ IMAGE_SCN_LNK_COMDAT
Definition: COFF.h:309
@ IMAGE_SCN_MEM_WRITE
Definition: COFF.h:337
@ IMAGE_COMDAT_SELECT_ASSOCIATIVE
Definition: COFF.h:459
@ IMAGE_COMDAT_SELECT_EXACT_MATCH
Definition: COFF.h:458
@ SHT_PROGBITS
Definition: ELF.h:1140
@ SHT_NOBITS
Definition: ELF.h:1147
@ SHT_MIPS_DWARF
Definition: ELF.h:1218
@ SHT_LLVM_BB_ADDR_MAP
Definition: ELF.h:1178
@ SHT_GNU_SFRAME
Definition: ELF.h:1186
@ SHT_X86_64_UNWIND
Definition: ELF.h:1214
@ SHF_MERGE
Definition: ELF.h:1246
@ SHF_STRINGS
Definition: ELF.h:1249
@ SHF_EXCLUDE
Definition: ELF.h:1274
@ SHF_ALLOC
Definition: ELF.h:1240
@ SHF_LINK_ORDER
Definition: ELF.h:1255
@ SHF_GROUP
Definition: ELF.h:1262
@ SHF_WRITE
Definition: ELF.h:1237
@ SHF_TLS
Definition: ELF.h:1265
@ SHF_EXECINSTR
Definition: ELF.h:1243
@ ESD_LB_Deferred
Definition: GOFF.h:129
@ ESD_LB_NoLoad
Definition: GOFF.h:130
@ ESD_LB_Initial
Definition: GOFF.h:128
constexpr StringLiteral CLASS_WSA
@ ESD_BA_Concatenate
Definition: GOFF.h:98
@ ESD_BA_Merge
Definition: GOFF.h:99
@ ESD_TS_Structured
Definition: GOFF.h:93
@ ESD_TS_ByteOriented
Definition: GOFF.h:92
@ ESD_EXE_DATA
Definition: GOFF.h:111
@ ESD_RQ_1
Definition: GOFF.h:70
@ ESD_RQ_0
Definition: GOFF.h:69
@ ESD_ALIGN_Doubleword
Definition: GOFF.h:148
@ ESD_ALIGN_Quadword
Definition: GOFF.h:149
constexpr StringLiteral CLASS_PPA2
@ ESD_BSC_Section
Definition: GOFF.h:136
@ ESD_LT_OS
Definition: GOFF.h:142
@ ESD_LT_XPLink
Definition: GOFF.h:142
@ ESD_NS_Parts
Definition: GOFF.h:65
@ ESD_NS_NormalName
Definition: GOFF.h:63
@ ESD_TA_Rent
Definition: GOFF.h:106
constexpr StringLiteral CLASS_CODE
@ ESD_RMODE_64
Definition: GOFF.h:88
@ S_ATTR_DEBUG
S_ATTR_DEBUG - A debug section.
Definition: MachO.h:207
@ S_ATTR_NO_TOC
S_ATTR_NO_TOC - Section contains coalesced symbols that are not to be in a ranlib table of contents.
Definition: MachO.h:195
@ S_ATTR_LIVE_SUPPORT
S_ATTR_LIVE_SUPPORT - Blocks are live if they reference live blocks.
Definition: MachO.h:202
@ S_ATTR_PURE_INSTRUCTIONS
S_ATTR_PURE_INSTRUCTIONS - Section contains only true machine instructions.
Definition: MachO.h:192
@ S_ATTR_STRIP_STATIC_SYMS
S_ATTR_STRIP_STATIC_SYMS - Ok to strip static symbols in this section in files with the MY_DYLDLINK f...
Definition: MachO.h:198
@ S_THREAD_LOCAL_VARIABLE_POINTERS
S_THREAD_LOCAL_VARIABLE_POINTERS - Section with pointers to thread local structures.
Definition: MachO.h:175
@ S_16BYTE_LITERALS
S_16BYTE_LITERALS - Section with only 16 byte literals.
Definition: MachO.h:160
@ S_THREAD_LOCAL_INIT_FUNCTION_POINTERS
S_THREAD_LOCAL_INIT_FUNCTION_POINTERS - Section with thread local variable initialization pointers to...
Definition: MachO.h:178
@ S_COALESCED
S_COALESCED - Section contains symbols that are to be coalesced.
Definition: MachO.h:152
@ S_THREAD_LOCAL_ZEROFILL
S_THREAD_LOCAL_ZEROFILL - Thread local zerofill section.
Definition: MachO.h:169
@ S_LAZY_SYMBOL_POINTERS
S_LAZY_SYMBOL_POINTERS - Section with lazy symbol pointers.
Definition: MachO.h:141
@ S_CSTRING_LITERALS
S_CSTRING_LITERALS - Section with literal C strings.
Definition: MachO.h:131
@ S_THREAD_LOCAL_REGULAR
S_THREAD_LOCAL_REGULAR - Thread local data section.
Definition: MachO.h:167
@ S_ZEROFILL
S_ZEROFILL - Zero fill on demand section.
Definition: MachO.h:129
@ S_NON_LAZY_SYMBOL_POINTERS
S_NON_LAZY_SYMBOL_POINTERS - Section with non-lazy symbol pointers.
Definition: MachO.h:139
@ S_4BYTE_LITERALS
S_4BYTE_LITERALS - Section with 4 byte literals.
Definition: MachO.h:133
@ S_8BYTE_LITERALS
S_8BYTE_LITERALS - Section with 8 byte literals.
Definition: MachO.h:135
@ S_THREAD_LOCAL_VARIABLES
S_THREAD_LOCAL_VARIABLES - Section with thread local variable structure data.
Definition: MachO.h:172
@ SSUBTYP_DWARNGE
DWARF aranges section.
Definition: XCOFF.h:160
@ SSUBTYP_DWFRAME
DWARF frame section.
Definition: XCOFF.h:165
@ SSUBTYP_DWABREV
DWARF abbrev section.
Definition: XCOFF.h:161
@ SSUBTYP_DWINFO
DWARF info section.
Definition: XCOFF.h:156
@ SSUBTYP_DWRNGES
DWARF ranges section.
Definition: XCOFF.h:163
@ SSUBTYP_DWLOC
DWARF loc section.
Definition: XCOFF.h:164
@ SSUBTYP_DWMAC
DWARF macinfo section.
Definition: XCOFF.h:166
@ SSUBTYP_DWPBNMS
DWARF pubnames section.
Definition: XCOFF.h:158
@ SSUBTYP_DWPBTYP
DWARF pubtypes section.
Definition: XCOFF.h:159
@ SSUBTYP_DWLINE
DWARF line section.
Definition: XCOFF.h:157
@ SSUBTYP_DWSTR
DWARF str section.
Definition: XCOFF.h:162
@ XMC_TC0
TOC Anchor for TOC Addressability.
Definition: XCOFF.h:119
@ XMC_RW
Read Write Data.
Definition: XCOFF.h:118
@ XMC_TL
Initialized thread-local variable.
Definition: XCOFF.h:127
@ XMC_RO
Read Only Constant.
Definition: XCOFF.h:107
@ XMC_PR
Program Code.
Definition: XCOFF.h:106
@ XTY_SD
Csect definition for initialized storage.
Definition: XCOFF.h:243
@ DW_EH_PE_pcrel
Definition: Dwarf.h:865
@ DW_EH_PE_sdata4
Definition: Dwarf.h:862
@ DW_EH_PE_sdata8
Definition: Dwarf.h:863
@ DW_EH_PE_absptr
Definition: Dwarf.h:854
@ WASM_SEG_FLAG_STRINGS
Definition: Wasm.h:229
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
Definition: Error.cpp:167
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition: Alignment.h:39