LLVM 20.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
14#include "llvm/MC/MCAsmInfo.h"
15#include "llvm/MC/MCContext.h"
16#include "llvm/MC/MCSection.h"
27
28using namespace llvm;
29
30static bool useCompactUnwind(const Triple &T) {
31 // Only on darwin.
32 if (!T.isOSDarwin())
33 return false;
34
35 // aarch64 always has it.
36 if (T.getArch() == Triple::aarch64 || T.getArch() == Triple::aarch64_32)
37 return true;
38
39 // armv7k always has it.
40 if (T.isWatchABI())
41 return true;
42
43 // Use it on newer version of OS X.
44 if (T.isMacOSX() && !T.isMacOSXVersionLT(10, 6))
45 return true;
46
47 // And the iOS simulator.
48 if (T.isiOS() && T.isX86())
49 return true;
50
51 // The rest of the simulators always have it.
52 if (T.isSimulatorEnvironment())
53 return true;
54
55 // XROS always has it.
56 if (T.isXROS())
57 return true;
58
59 return false;
60}
61
62void MCObjectFileInfo::initMachOMCObjectFileInfo(const Triple &T) {
63 // MachO
65
67 "__TEXT", "__eh_frame",
71
72 if (T.isOSDarwin() &&
73 (T.getArch() == Triple::aarch64 || T.getArch() == Triple::aarch64_32 ||
74 T.isSimulatorEnvironment()))
76
77 switch (Ctx->emitDwarfUnwindInfo()) {
80 break;
83 break;
87 break;
88 }
89
91
92 TextSection // .text
93 = Ctx->getMachOSection("__TEXT", "__text",
96 DataSection // .data
97 = Ctx->getMachOSection("__DATA", "__data", 0, SectionKind::getData());
98
99 // BSSSection might not be expected initialized on msvc.
100 BSSSection = nullptr;
101
102 TLSDataSection // .tdata
103 = Ctx->getMachOSection("__DATA", "__thread_data",
106 TLSBSSSection // .tbss
107 = Ctx->getMachOSection("__DATA", "__thread_bss",
110
111 // TODO: Verify datarel below.
112 TLSTLVSection // .tlv
113 = Ctx->getMachOSection("__DATA", "__thread_vars",
116
118 "__DATA", "__thread_init", MachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS,
120
121 CStringSection // .cstring
122 = Ctx->getMachOSection("__TEXT", "__cstring",
126 = Ctx->getMachOSection("__TEXT","__ustring", 0,
128 FourByteConstantSection // .literal4
129 = Ctx->getMachOSection("__TEXT", "__literal4",
132 EightByteConstantSection // .literal8
133 = Ctx->getMachOSection("__TEXT", "__literal8",
136
137 SixteenByteConstantSection // .literal16
138 = Ctx->getMachOSection("__TEXT", "__literal16",
141
142 ReadOnlySection // .const
143 = Ctx->getMachOSection("__TEXT", "__const", 0,
145
146 // If the target is not powerpc, map the coal sections to the non-coal
147 // sections.
148 //
149 // "__TEXT/__textcoal_nt" => section "__TEXT/__text"
150 // "__TEXT/__const_coal" => section "__TEXT/__const"
151 // "__DATA/__datacoal_nt" => section "__DATA/__data"
152 Triple::ArchType ArchTy = T.getArch();
153
154 ConstDataSection // .const_data
155 = Ctx->getMachOSection("__DATA", "__const", 0,
157
158 if (ArchTy == Triple::ppc || ArchTy == Triple::ppc64) {
160 = Ctx->getMachOSection("__TEXT", "__textcoal_nt",
165 = Ctx->getMachOSection("__TEXT", "__const_coal",
169 "__DATA", "__datacoal_nt", MachO::S_COALESCED, SectionKind::getData());
171 } else {
176 }
177
179 = Ctx->getMachOSection("__DATA","__common",
183 = Ctx->getMachOSection("__DATA","__bss", MachO::S_ZEROFILL,
185
186
188 = Ctx->getMachOSection("__DATA", "__la_symbol_ptr",
192 = Ctx->getMachOSection("__DATA", "__nl_symbol_ptr",
195
197 = Ctx->getMachOSection("__DATA", "__thread_ptr",
200
201 AddrSigSection = Ctx->getMachOSection("__DATA", "__llvm_addrsig", 0,
203
204 // Exception Handling.
205 LSDASection = Ctx->getMachOSection("__TEXT", "__gcc_except_tab", 0,
207
208 COFFDebugSymbolsSection = nullptr;
209 COFFDebugTypesSection = nullptr;
211
212 if (useCompactUnwind(T)) {
214 Ctx->getMachOSection("__LD", "__compact_unwind", MachO::S_ATTR_DEBUG,
216
217 if (T.isX86())
218 CompactUnwindDwarfEHFrameOnly = 0x04000000; // UNWIND_X86_64_MODE_DWARF
219 else if (T.getArch() == Triple::aarch64 || T.getArch() == Triple::aarch64_32)
220 CompactUnwindDwarfEHFrameOnly = 0x03000000; // UNWIND_ARM64_MODE_DWARF
221 else if (T.getArch() == Triple::arm || T.getArch() == Triple::thumb)
222 CompactUnwindDwarfEHFrameOnly = 0x04000000; // UNWIND_ARM_MODE_DWARF
223 }
224
225 // Debug Information.
227 Ctx->getMachOSection("__DWARF", "__debug_names", MachO::S_ATTR_DEBUG,
228 SectionKind::getMetadata(), "debug_names_begin");
230 Ctx->getMachOSection("__DWARF", "__apple_names", MachO::S_ATTR_DEBUG,
231 SectionKind::getMetadata(), "names_begin");
233 Ctx->getMachOSection("__DWARF", "__apple_objc", MachO::S_ATTR_DEBUG,
234 SectionKind::getMetadata(), "objc_begin");
235 // 16 character section limit...
237 Ctx->getMachOSection("__DWARF", "__apple_namespac", MachO::S_ATTR_DEBUG,
238 SectionKind::getMetadata(), "namespac_begin");
240 Ctx->getMachOSection("__DWARF", "__apple_types", MachO::S_ATTR_DEBUG,
241 SectionKind::getMetadata(), "types_begin");
242
244 Ctx->getMachOSection("__DWARF", "__swift_ast", MachO::S_ATTR_DEBUG,
246
248 Ctx->getMachOSection("__DWARF", "__debug_abbrev", MachO::S_ATTR_DEBUG,
249 SectionKind::getMetadata(), "section_abbrev");
251 Ctx->getMachOSection("__DWARF", "__debug_info", MachO::S_ATTR_DEBUG,
252 SectionKind::getMetadata(), "section_info");
254 Ctx->getMachOSection("__DWARF", "__debug_line", MachO::S_ATTR_DEBUG,
255 SectionKind::getMetadata(), "section_line");
257 Ctx->getMachOSection("__DWARF", "__debug_line_str", MachO::S_ATTR_DEBUG,
258 SectionKind::getMetadata(), "section_line_str");
260 Ctx->getMachOSection("__DWARF", "__debug_frame", MachO::S_ATTR_DEBUG,
261 SectionKind::getMetadata(), "section_frame");
263 Ctx->getMachOSection("__DWARF", "__debug_pubnames", MachO::S_ATTR_DEBUG,
266 Ctx->getMachOSection("__DWARF", "__debug_pubtypes", MachO::S_ATTR_DEBUG,
269 Ctx->getMachOSection("__DWARF", "__debug_gnu_pubn", MachO::S_ATTR_DEBUG,
272 Ctx->getMachOSection("__DWARF", "__debug_gnu_pubt", MachO::S_ATTR_DEBUG,
275 Ctx->getMachOSection("__DWARF", "__debug_str", MachO::S_ATTR_DEBUG,
276 SectionKind::getMetadata(), "info_string");
278 Ctx->getMachOSection("__DWARF", "__debug_str_offs", MachO::S_ATTR_DEBUG,
279 SectionKind::getMetadata(), "section_str_off");
281 Ctx->getMachOSection("__DWARF", "__debug_addr", MachO::S_ATTR_DEBUG,
282 SectionKind::getMetadata(), "section_info");
284 Ctx->getMachOSection("__DWARF", "__debug_loc", MachO::S_ATTR_DEBUG,
285 SectionKind::getMetadata(), "section_debug_loc");
287 Ctx->getMachOSection("__DWARF", "__debug_loclists", MachO::S_ATTR_DEBUG,
288 SectionKind::getMetadata(), "section_debug_loc");
289
291 Ctx->getMachOSection("__DWARF", "__debug_aranges", MachO::S_ATTR_DEBUG,
294 Ctx->getMachOSection("__DWARF", "__debug_ranges", MachO::S_ATTR_DEBUG,
295 SectionKind::getMetadata(), "debug_range");
297 Ctx->getMachOSection("__DWARF", "__debug_rnglists", MachO::S_ATTR_DEBUG,
298 SectionKind::getMetadata(), "debug_range");
300 Ctx->getMachOSection("__DWARF", "__debug_macinfo", MachO::S_ATTR_DEBUG,
301 SectionKind::getMetadata(), "debug_macinfo");
303 Ctx->getMachOSection("__DWARF", "__debug_macro", MachO::S_ATTR_DEBUG,
304 SectionKind::getMetadata(), "debug_macro");
306 Ctx->getMachOSection("__DWARF", "__debug_inlined", MachO::S_ATTR_DEBUG,
309 Ctx->getMachOSection("__DWARF", "__debug_cu_index", MachO::S_ATTR_DEBUG,
312 Ctx->getMachOSection("__DWARF", "__debug_tu_index", MachO::S_ATTR_DEBUG,
314 StackMapSection = Ctx->getMachOSection("__LLVM_STACKMAPS", "__llvm_stackmaps",
316
317 FaultMapSection = Ctx->getMachOSection("__LLVM_FAULTMAPS", "__llvm_faultmaps",
319
321 "__LLVM", "__remarks", MachO::S_ATTR_DEBUG, SectionKind::getMetadata());
322
323 // The architecture of dsymutil makes it very difficult to copy the Swift
324 // reflection metadata sections into the __TEXT segment, so dsymutil creates
325 // these sections in the __DWARF segment instead.
327#define HANDLE_SWIFT_SECTION(KIND, MACHO, ELF, COFF) \
328 Swift5ReflectionSections \
329 [llvm::binaryformat::Swift5ReflectionSectionKind::KIND] = \
330 Ctx->getMachOSection(Ctx->getSwift5ReflectionSegmentName().data(), \
331 MACHO, 0, SectionKind::getMetadata());
332#include "llvm/BinaryFormat/Swift.def"
333 }
334
336}
337
338void MCObjectFileInfo::initELFMCObjectFileInfo(const Triple &T, bool Large) {
339 switch (T.getArch()) {
340 case Triple::mips:
341 case Triple::mipsel:
342 case Triple::mips64:
343 case Triple::mips64el:
344 // We cannot use DW_EH_PE_sdata8 for the large PositionIndependent case
345 // since there is no R_MIPS_PC64 relocation (only a 32-bit version).
346 // In fact DW_EH_PE_sdata4 is enough for us now, and GNU ld doesn't
347 // support pcrel|sdata8 well. Let's use sdata4 for now.
348 if (PositionIndependent)
350 else
354 break;
355 case Triple::ppc64:
356 case Triple::ppc64le:
357 case Triple::aarch64:
359 case Triple::x86_64:
362 break;
363 case Triple::bpfel:
364 case Triple::bpfeb:
366 break;
367 case Triple::hexagon:
369 PositionIndependent ? dwarf::DW_EH_PE_pcrel : dwarf::DW_EH_PE_absptr;
370 break;
371 case Triple::xtensa:
373 break;
374 default:
376 break;
377 }
378
379 unsigned EHSectionType = T.getArch() == Triple::x86_64
382
383 // Solaris requires different flags for .eh_frame to seemingly every other
384 // platform.
385 unsigned EHSectionFlags = ELF::SHF_ALLOC;
386 if (T.isOSSolaris() && T.getArch() != Triple::x86_64)
387 EHSectionFlags |= ELF::SHF_WRITE;
388
389 // ELF
392
395
398
401
403 Ctx->getELFSection(".tdata", ELF::SHT_PROGBITS,
405
408
409 DataRelROSection = Ctx->getELFSection(".data.rel.ro", ELF::SHT_PROGBITS,
411
413 Ctx->getELFSection(".rodata.cst4", ELF::SHT_PROGBITS,
415
417 Ctx->getELFSection(".rodata.cst8", ELF::SHT_PROGBITS,
419
421 Ctx->getELFSection(".rodata.cst16", ELF::SHT_PROGBITS,
423
425 Ctx->getELFSection(".rodata.cst32", ELF::SHT_PROGBITS,
427
428 // Exception Handling Sections.
429
430 // FIXME: We're emitting LSDA info into a readonly section on ELF, even though
431 // it contains relocatable pointers. In PIC mode, this is probably a big
432 // runtime hit for C++ apps. Either the contents of the LSDA need to be
433 // adjusted or this should be a data section.
434 LSDASection = Ctx->getELFSection(".gcc_except_table", ELF::SHT_PROGBITS,
436
437 COFFDebugSymbolsSection = nullptr;
438 COFFDebugTypesSection = nullptr;
439
440 unsigned DebugSecType = ELF::SHT_PROGBITS;
441
442 // MIPS .debug_* sections should have SHT_MIPS_DWARF section type
443 // to distinguish among sections contain DWARF and ECOFF debug formats.
444 // Sections with ECOFF debug format are obsoleted and marked by SHT_PROGBITS.
445 if (T.isMIPS())
446 DebugSecType = ELF::SHT_MIPS_DWARF;
447
448 // Debug Info Sections.
450 Ctx->getELFSection(".debug_abbrev", DebugSecType, 0);
451 DwarfInfoSection = Ctx->getELFSection(".debug_info", DebugSecType, 0);
452 DwarfLineSection = Ctx->getELFSection(".debug_line", DebugSecType, 0);
454 Ctx->getELFSection(".debug_line_str", DebugSecType,
456 DwarfFrameSection = Ctx->getELFSection(".debug_frame", DebugSecType, 0);
458 Ctx->getELFSection(".debug_pubnames", DebugSecType, 0);
460 Ctx->getELFSection(".debug_pubtypes", DebugSecType, 0);
462 Ctx->getELFSection(".debug_gnu_pubnames", DebugSecType, 0);
464 Ctx->getELFSection(".debug_gnu_pubtypes", DebugSecType, 0);
466 Ctx->getELFSection(".debug_str", DebugSecType,
468 DwarfLocSection = Ctx->getELFSection(".debug_loc", DebugSecType, 0);
470 Ctx->getELFSection(".debug_aranges", DebugSecType, 0);
472 Ctx->getELFSection(".debug_ranges", DebugSecType, 0);
474 Ctx->getELFSection(".debug_macinfo", DebugSecType, 0);
475 DwarfMacroSection = Ctx->getELFSection(".debug_macro", DebugSecType, 0);
476
477 // DWARF5 Experimental Debug Info
478
479 // Accelerator Tables
481 Ctx->getELFSection(".debug_names", ELF::SHT_PROGBITS, 0);
483 Ctx->getELFSection(".apple_names", ELF::SHT_PROGBITS, 0);
485 Ctx->getELFSection(".apple_objc", ELF::SHT_PROGBITS, 0);
487 Ctx->getELFSection(".apple_namespaces", ELF::SHT_PROGBITS, 0);
489 Ctx->getELFSection(".apple_types", ELF::SHT_PROGBITS, 0);
490
491 // String Offset and Address Sections
493 Ctx->getELFSection(".debug_str_offsets", DebugSecType, 0);
494 DwarfAddrSection = Ctx->getELFSection(".debug_addr", DebugSecType, 0);
495 DwarfRnglistsSection = Ctx->getELFSection(".debug_rnglists", DebugSecType, 0);
496 DwarfLoclistsSection = Ctx->getELFSection(".debug_loclists", DebugSecType, 0);
497
498 // Fission Sections
500 Ctx->getELFSection(".debug_info.dwo", DebugSecType, ELF::SHF_EXCLUDE);
502 Ctx->getELFSection(".debug_types.dwo", DebugSecType, ELF::SHF_EXCLUDE);
504 Ctx->getELFSection(".debug_abbrev.dwo", DebugSecType, ELF::SHF_EXCLUDE);
506 ".debug_str.dwo", DebugSecType,
509 Ctx->getELFSection(".debug_line.dwo", DebugSecType, ELF::SHF_EXCLUDE);
511 Ctx->getELFSection(".debug_loc.dwo", DebugSecType, ELF::SHF_EXCLUDE);
512 DwarfStrOffDWOSection = Ctx->getELFSection(".debug_str_offsets.dwo",
513 DebugSecType, ELF::SHF_EXCLUDE);
515 Ctx->getELFSection(".debug_rnglists.dwo", DebugSecType, ELF::SHF_EXCLUDE);
517 Ctx->getELFSection(".debug_macinfo.dwo", DebugSecType, ELF::SHF_EXCLUDE);
519 Ctx->getELFSection(".debug_macro.dwo", DebugSecType, ELF::SHF_EXCLUDE);
520
522 Ctx->getELFSection(".debug_loclists.dwo", DebugSecType, ELF::SHF_EXCLUDE);
523
524 // DWP Sections
526 Ctx->getELFSection(".debug_cu_index", DebugSecType, 0);
528 Ctx->getELFSection(".debug_tu_index", DebugSecType, 0);
529
531 Ctx->getELFSection(".llvm_stackmaps", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
532
534 Ctx->getELFSection(".llvm_faultmaps", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
535
537 Ctx->getELFSection(".eh_frame", EHSectionType, EHSectionFlags);
538
539 StackSizesSection = Ctx->getELFSection(".stack_sizes", ELF::SHT_PROGBITS, 0);
540
541 PseudoProbeSection = Ctx->getELFSection(".pseudo_probe", DebugSecType, 0);
543 Ctx->getELFSection(".pseudo_probe_desc", DebugSecType, 0);
544
545 LLVMStatsSection = Ctx->getELFSection(".llvm_stats", ELF::SHT_PROGBITS, 0);
546}
547
548void MCObjectFileInfo::initGOFFMCObjectFileInfo(const Triple &T) {
549 TextSection = Ctx->getGOFFSection(".text", SectionKind::getText(), nullptr);
550 BSSSection = Ctx->getGOFFSection(".bss", SectionKind::getBSS(), nullptr);
555
557 Ctx->getGOFFSection(".ppa2list", SectionKind::getData(), nullptr);
558
559 ADASection = Ctx->getGOFFSection(".ada", SectionKind::getData(), nullptr);
560 IDRLSection = Ctx->getGOFFSection("B_IDRL", SectionKind::getData(), nullptr);
561}
562
563void MCObjectFileInfo::initCOFFMCObjectFileInfo(const Triple &T) {
567
568 // Set the `IMAGE_SCN_MEM_16BIT` flag when compiling for thumb mode. This is
569 // used to indicate to the linker that the text segment contains thumb instructions
570 // and to set the ISA selection bit for calls accordingly.
571 const bool IsThumb = T.getArch() == Triple::thumb;
572
573 // COFF
578 ".text",
588
589 if (T.getArch() == Triple::x86_64 || T.getArch() == Triple::aarch64 ||
590 T.getArch() == Triple::arm || T.getArch() == Triple::thumb) {
591 // On Windows with SEH, the LSDA is emitted into the .xdata section
592 LSDASection = nullptr;
593 } else {
594 LSDASection = Ctx->getCOFFSection(".gcc_except_table",
597 }
598
599 if (T.getArch() == Triple::aarch64) {
602 }
603
604 // Debug info.
617
619 ".debug_abbrev", COFF::IMAGE_SCN_MEM_DISCARDABLE |
623 ".debug_info", COFF::IMAGE_SCN_MEM_DISCARDABLE |
627 ".debug_line", COFF::IMAGE_SCN_MEM_DISCARDABLE |
631 ".debug_line_str", COFF::IMAGE_SCN_MEM_DISCARDABLE |
635 ".debug_frame", COFF::IMAGE_SCN_MEM_DISCARDABLE |
639 ".debug_pubnames", COFF::IMAGE_SCN_MEM_DISCARDABLE |
643 ".debug_pubtypes", COFF::IMAGE_SCN_MEM_DISCARDABLE |
647 ".debug_gnu_pubnames", COFF::IMAGE_SCN_MEM_DISCARDABLE |
651 ".debug_gnu_pubtypes", COFF::IMAGE_SCN_MEM_DISCARDABLE |
655 ".debug_str", COFF::IMAGE_SCN_MEM_DISCARDABLE |
659 ".debug_str_offsets", COFF::IMAGE_SCN_MEM_DISCARDABLE |
663 ".debug_loc", COFF::IMAGE_SCN_MEM_DISCARDABLE |
667 ".debug_loclists", COFF::IMAGE_SCN_MEM_DISCARDABLE |
671 ".debug_aranges", COFF::IMAGE_SCN_MEM_DISCARDABLE |
675 ".debug_ranges", COFF::IMAGE_SCN_MEM_DISCARDABLE |
679 ".debug_rnglists", COFF::IMAGE_SCN_MEM_DISCARDABLE |
683 ".debug_macinfo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
687 ".debug_macro", COFF::IMAGE_SCN_MEM_DISCARDABLE |
691 ".debug_macinfo.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
695 ".debug_macro.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
699 ".debug_info.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
703 ".debug_types.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
707 ".debug_abbrev.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
711 ".debug_str.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
715 ".debug_line.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
719 ".debug_loc.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
723 ".debug_str_offsets.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
727 ".debug_addr", COFF::IMAGE_SCN_MEM_DISCARDABLE |
731 ".debug_cu_index", COFF::IMAGE_SCN_MEM_DISCARDABLE |
735 ".debug_tu_index", COFF::IMAGE_SCN_MEM_DISCARDABLE |
739 ".debug_names", COFF::IMAGE_SCN_MEM_DISCARDABLE |
743 ".apple_names", COFF::IMAGE_SCN_MEM_DISCARDABLE |
747 ".apple_namespaces", COFF::IMAGE_SCN_MEM_DISCARDABLE |
751 ".apple_types", COFF::IMAGE_SCN_MEM_DISCARDABLE |
755 ".apple_objc", COFF::IMAGE_SCN_MEM_DISCARDABLE |
758
761
765
769
771
775
779
783
787
791
792 StackMapSection = Ctx->getCOFFSection(".llvm_stackmaps",
795}
796
797void MCObjectFileInfo::initSPIRVMCObjectFileInfo(const Triple &T) {
798 // Put everything in a single binary section.
800}
801
802void MCObjectFileInfo::initWasmMCObjectFileInfo(const Triple &T) {
805
807 Ctx->getWasmSection(".debug_line", SectionKind::getMetadata());
809 Ctx->getWasmSection(".debug_line_str", SectionKind::getMetadata(),
814 Ctx->getWasmSection(".debug_loc", SectionKind::getMetadata());
816 Ctx->getWasmSection(".debug_abbrev", SectionKind::getMetadata());
819 Ctx->getWasmSection(".debug_ranges", SectionKind::getMetadata());
821 Ctx->getWasmSection(".debug_macinfo", SectionKind::getMetadata());
823 Ctx->getWasmSection(".debug_macro", SectionKind::getMetadata());
827 Ctx->getWasmSection(".debug_info", SectionKind::getMetadata());
832 Ctx->getWasmSection(".debug_gnu_pubnames", SectionKind::getMetadata());
834 Ctx->getWasmSection(".debug_gnu_pubtypes", SectionKind::getMetadata());
835
837 Ctx->getWasmSection(".debug_names", SectionKind::getMetadata());
839 Ctx->getWasmSection(".debug_str_offsets", SectionKind::getMetadata());
841 Ctx->getWasmSection(".debug_addr", SectionKind::getMetadata());
843 Ctx->getWasmSection(".debug_rnglists", SectionKind::getMetadata());
845 Ctx->getWasmSection(".debug_loclists", SectionKind::getMetadata());
846
847 // Fission Sections
849 Ctx->getWasmSection(".debug_info.dwo", SectionKind::getMetadata());
851 Ctx->getWasmSection(".debug_types.dwo", SectionKind::getMetadata());
853 Ctx->getWasmSection(".debug_abbrev.dwo", SectionKind::getMetadata());
855 Ctx->getWasmSection(".debug_str.dwo", SectionKind::getMetadata(),
858 Ctx->getWasmSection(".debug_line.dwo", SectionKind::getMetadata());
860 Ctx->getWasmSection(".debug_loc.dwo", SectionKind::getMetadata());
862 Ctx->getWasmSection(".debug_str_offsets.dwo", SectionKind::getMetadata());
864 Ctx->getWasmSection(".debug_rnglists.dwo", SectionKind::getMetadata());
866 Ctx->getWasmSection(".debug_macinfo.dwo", SectionKind::getMetadata());
868 Ctx->getWasmSection(".debug_macro.dwo", SectionKind::getMetadata());
869
871 Ctx->getWasmSection(".debug_loclists.dwo", SectionKind::getMetadata());
872
873 // DWP Sections
875 Ctx->getWasmSection(".debug_cu_index", SectionKind::getMetadata());
877 Ctx->getWasmSection(".debug_tu_index", SectionKind::getMetadata());
878
879 // Wasm use data section for LSDA.
880 // TODO Consider putting each function's exception table in a separate
881 // section, as in -function-sections, to facilitate lld's --gc-section.
882 LSDASection = Ctx->getWasmSection(".rodata.gcc_except_table",
884
885 // TODO: Define more sections.
886}
887
888void MCObjectFileInfo::initXCOFFMCObjectFileInfo(const Triple &T) {
889 // The default csect for program code. Functions without a specified section
890 // get placed into this csect. The choice of csect name is not a property of
891 // the ABI or object file format, but various tools rely on the section
892 // name being empty (considering named symbols to be "user symbol names").
894 "..text..", // Use a non-null name to work around an AIX assembler bug...
897 /* MultiSymbolsAllowed*/ true);
898
899 // ... but use a null name when generating the symbol table.
900 MCSectionXCOFF *TS = static_cast<MCSectionXCOFF *>(TextSection);
902 TS->setSymbolTableName("");
903
905 ".data", SectionKind::getData(),
907 /* MultiSymbolsAllowed*/ true);
908
910 ".rodata", SectionKind::getReadOnly(),
912 /* MultiSymbolsAllowed*/ true);
914
916 ".rodata.8", SectionKind::getReadOnly(),
918 /* MultiSymbolsAllowed*/ true);
920
922 ".rodata.16", SectionKind::getReadOnly(),
924 /* MultiSymbolsAllowed*/ true);
926
928 ".tdata", SectionKind::getThreadData(),
930 /* MultiSymbolsAllowed*/ true);
931
933 "TOC", SectionKind::getData(),
936
937 // The TOC-base always has 0 size, but 4 byte alignment.
939
941 ".gcc_except_table", SectionKind::getReadOnly(),
944
946 ".eh_info_table", SectionKind::getData(),
949
950 // DWARF sections for XCOFF are not csects. They are special STYP_DWARF
951 // sections, and the individual DWARF sections are distinguished by their
952 // section subtype.
954 ".dwabrev", SectionKind::getMetadata(),
955 /* CsectProperties */ std::nullopt,
956 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWABREV);
957
959 ".dwinfo", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
960 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWINFO);
961
963 ".dwline", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
964 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWLINE);
965
967 ".dwframe", SectionKind::getMetadata(),
968 /* CsectProperties */ std::nullopt,
969 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWFRAME);
970
972 ".dwpbnms", SectionKind::getMetadata(),
973 /* CsectProperties */ std::nullopt,
974 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWPBNMS);
975
977 ".dwpbtyp", SectionKind::getMetadata(),
978 /* CsectProperties */ std::nullopt,
979 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWPBTYP);
980
982 ".dwstr", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
983 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWSTR);
984
986 ".dwloc", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
987 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWLOC);
988
990 ".dwarnge", SectionKind::getMetadata(),
991 /* CsectProperties */ std::nullopt,
992 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWARNGE);
993
995 ".dwrnges", SectionKind::getMetadata(),
996 /* CsectProperties */ std::nullopt,
997 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWRNGES);
998
1000 ".dwmac", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
1001 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWMAC);
1002}
1003
1004void MCObjectFileInfo::initDXContainerObjectFileInfo(const Triple &T) {
1005 // At the moment the DXBC section should end up empty.
1007}
1008
1010
1012 bool LargeCodeModel) {
1013 PositionIndependent = PIC;
1014 Ctx = &MCCtx;
1015
1016 // Common.
1020
1022
1024
1025 EHFrameSection = nullptr; // Created on demand.
1026 CompactUnwindSection = nullptr; // Used only by selected targets.
1027 DwarfAccelNamesSection = nullptr; // Used only by selected targets.
1028 DwarfAccelObjCSection = nullptr; // Used only by selected targets.
1029 DwarfAccelNamespaceSection = nullptr; // Used only by selected targets.
1030 DwarfAccelTypesSection = nullptr; // Used only by selected targets.
1031
1032 const Triple &TheTriple = Ctx->getTargetTriple();
1033 switch (Ctx->getObjectFileType()) {
1034 case MCContext::IsMachO:
1035 initMachOMCObjectFileInfo(TheTriple);
1036 break;
1037 case MCContext::IsCOFF:
1038 initCOFFMCObjectFileInfo(TheTriple);
1039 break;
1040 case MCContext::IsELF:
1041 initELFMCObjectFileInfo(TheTriple, LargeCodeModel);
1042 break;
1043 case MCContext::IsGOFF:
1044 initGOFFMCObjectFileInfo(TheTriple);
1045 break;
1046 case MCContext::IsSPIRV:
1047 initSPIRVMCObjectFileInfo(TheTriple);
1048 break;
1049 case MCContext::IsWasm:
1050 initWasmMCObjectFileInfo(TheTriple);
1051 break;
1052 case MCContext::IsXCOFF:
1053 initXCOFFMCObjectFileInfo(TheTriple);
1054 break;
1056 initDXContainerObjectFileInfo(TheTriple);
1057 break;
1058 }
1059}
1060
1061MCSection *MCObjectFileInfo::getDwarfComdatSection(const char *Name,
1062 uint64_t Hash) const {
1063 switch (Ctx->getTargetTriple().getObjectFormat()) {
1064 case Triple::ELF:
1066 utostr(Hash), /*IsComdat=*/true);
1067 case Triple::Wasm:
1069 utostr(Hash), MCContext::GenericSectionID);
1070 case Triple::MachO:
1071 case Triple::COFF:
1072 case Triple::GOFF:
1073 case Triple::SPIRV:
1074 case Triple::XCOFF:
1077 report_fatal_error("Cannot get DWARF comdat section for this object file "
1078 "format: not implemented.");
1079 break;
1080 }
1081 llvm_unreachable("Unknown ObjectFormatType");
1082}
1083
1084MCSection *
1086 if ((Ctx->getObjectFileType() != MCContext::IsELF) ||
1087 Ctx->getTargetTriple().isPS4())
1088 return StackSizesSection;
1089
1090 const MCSectionELF &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1091 unsigned Flags = ELF::SHF_LINK_ORDER;
1092 StringRef GroupName;
1093 if (const MCSymbol *Group = ElfSec.getGroup()) {
1094 GroupName = Group->getName();
1095 Flags |= ELF::SHF_GROUP;
1096 }
1097
1098 return Ctx->getELFSection(".stack_sizes", ELF::SHT_PROGBITS, Flags, 0,
1099 GroupName, true, ElfSec.getUniqueID(),
1100 cast<MCSymbolELF>(TextSec.getBeginSymbol()));
1101}
1102
1103MCSection *
1105 if (Ctx->getObjectFileType() != MCContext::IsELF)
1106 return nullptr;
1107
1108 const MCSectionELF &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1109 unsigned Flags = ELF::SHF_LINK_ORDER;
1110 StringRef GroupName;
1111 if (const MCSymbol *Group = ElfSec.getGroup()) {
1112 GroupName = Group->getName();
1113 Flags |= ELF::SHF_GROUP;
1114 }
1115
1116 // Use the text section's begin symbol and unique ID to create a separate
1117 // .llvm_bb_addr_map section associated with every unique text section.
1118 return Ctx->getELFSection(".llvm_bb_addr_map", ELF::SHT_LLVM_BB_ADDR_MAP,
1119 Flags, 0, GroupName, true, ElfSec.getUniqueID(),
1120 cast<MCSymbolELF>(TextSec.getBeginSymbol()));
1121}
1122
1123MCSection *
1125 if (Ctx->getObjectFileType() != MCContext::IsELF)
1126 return nullptr;
1127
1128 const MCSectionELF &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1129 unsigned Flags = ELF::SHF_LINK_ORDER | ELF::SHF_ALLOC;
1130 StringRef GroupName;
1131 if (const MCSymbol *Group = ElfSec.getGroup()) {
1132 GroupName = Group->getName();
1133 Flags |= ELF::SHF_GROUP;
1134 }
1135
1136 return Ctx->getELFSection(".kcfi_traps", ELF::SHT_PROGBITS, Flags, 0,
1137 GroupName,
1138 /*IsComdat=*/true, ElfSec.getUniqueID(),
1139 cast<MCSymbolELF>(TextSec.getBeginSymbol()));
1140}
1141
1142MCSection *
1144 if (Ctx->getObjectFileType() != MCContext::IsELF)
1145 return PseudoProbeSection;
1146
1147 const auto &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1148 unsigned Flags = ELF::SHF_LINK_ORDER;
1149 StringRef GroupName;
1150 if (const MCSymbol *Group = ElfSec.getGroup()) {
1151 GroupName = Group->getName();
1152 Flags |= ELF::SHF_GROUP;
1153 }
1154
1156 Flags, 0, GroupName, true, ElfSec.getUniqueID(),
1157 cast<MCSymbolELF>(TextSec.getBeginSymbol()));
1158}
1159
1160MCSection *
1162 if (Ctx->getObjectFileType() == MCContext::IsELF) {
1163 // Create a separate comdat group for each function's descriptor in order
1164 // for the linker to deduplicate. The duplication, must be from different
1165 // tranlation unit, can come from:
1166 // 1. Inline functions defined in header files;
1167 // 2. ThinLTO imported funcions;
1168 // 3. Weak-linkage definitions.
1169 // Use a concatenation of the section name and the function name as the
1170 // group name so that descriptor-only groups won't be folded with groups of
1171 // code.
1172 if (Ctx->getTargetTriple().supportsCOMDAT() && !FuncName.empty()) {
1173 auto *S = static_cast<MCSectionELF *>(PseudoProbeDescSection);
1174 auto Flags = S->getFlags() | ELF::SHF_GROUP;
1175 return Ctx->getELFSection(S->getName(), S->getType(), Flags,
1176 S->getEntrySize(),
1177 S->getName() + "_" + FuncName,
1178 /*IsComdat=*/true);
1179 }
1180 }
1182}
1183
1185 return LLVMStatsSection;
1186}
1187
1189 const MCSection *TextSec) const {
1190 if (Ctx->getObjectFileType() != MCContext::IsELF)
1191 return nullptr;
1192
1193 // SHF_WRITE for relocations, and let user post-process data in-place.
1195
1196 if (!TextSec)
1197 TextSec = getTextSection();
1198
1199 StringRef GroupName;
1200 const auto &ElfSec = static_cast<const MCSectionELF &>(*TextSec);
1201 if (const MCSymbol *Group = ElfSec.getGroup()) {
1202 GroupName = Group->getName();
1203 Flags |= ELF::SHF_GROUP;
1204 }
1205 return Ctx->getELFSection(Name, ELF::SHT_PROGBITS, Flags, 0, GroupName, true,
1206 ElfSec.getUniqueID(),
1207 cast<MCSymbolELF>(TextSec->getBeginSymbol()));
1208}
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 some functions that are useful when dealing with strings.
unsigned getCodePointerSize() const
Get the code pointer size in bytes.
Definition: MCAsmInfo.h:449
Context object for machine code objects.
Definition: MCContext.h:83
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:488
Environment getObjectFileType() const
Definition: MCContext.h:395
MCSectionWasm * getWasmSection(const Twine &Section, SectionKind K, unsigned Flags=0)
Definition: MCContext.h:628
MCSectionELF * getELFSection(const Twine &Section, unsigned Type, unsigned Flags)
Definition: MCContext.h:551
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:805
const StringRef & getSwift5ReflectionSegmentName() const
Definition: MCContext.h:397
MCSectionCOFF * getCOFFSection(StringRef Section, unsigned Characteristics, StringRef COMDATSymName, int Selection, unsigned UniqueID=GenericSectionID)
Definition: MCContext.cpp:692
MCSectionGOFF * getGOFFSection(StringRef Section, SectionKind Kind, MCSection *Parent, uint32_t Subsection=0)
Definition: MCContext.cpp:674
const MCAsmInfo * getAsmInfo() const
Definition: MCContext.h:412
MCSectionDXContainer * getDXContainerSection(StringRef Section, SectionKind K)
Get the section for the provided Section name.
Definition: MCContext.cpp:872
MCSectionSPIRV * getSPIRVSection()
Definition: MCContext.cpp:865
EmitDwarfUnwindType emitDwarfUnwindInfo() const
Definition: MCContext.cpp:936
@ GenericSectionID
Pass this value as the UniqueID during section creation to get the generic section with the given nam...
Definition: MCContext.h:534
const Triple & getTargetTriple() const
Definition: MCContext.h:400
MCSection * NonLazySymbolPointerSection
MCSection * TLSBSSSection
Section directive for Thread Local uninitialized data.
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 * MergeableConst4Section
MCSection * DwarfMacinfoSection
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 * DwarfRangesSection
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
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 * 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 linux, lots of unix variants and some bare metal systems.
Definition: MCSectionELF.h:27
unsigned getUniqueID() const
Definition: MCSectionELF.h:94
const MCSymbolELF * getGroup() const
Definition: MCSectionELF.h:84
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:36
void setAlignment(Align Value)
Definition: MCSection.h:147
StringRef getName() const
Definition: MCSection.h:130
MCSymbol * getBeginSymbol()
Definition: MCSection.h:135
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:41
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:51
constexpr bool empty() const
empty - Check if the string is empty.
Definition: StringRef.h:147
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
bool isPS4() const
Tests whether the target is the PS4 platform.
Definition: Triple.h:768
ObjectFormatType getObjectFormat() const
Get the object format for this triple.
Definition: Triple.h:409
bool supportsCOMDAT() const
Tests whether the target supports comdat.
Definition: Triple.h:1095
@ aarch64_be
Definition: Triple.h:52
@ mips64el
Definition: Triple.h:67
@ aarch64_32
Definition: Triple.h:53
@ DXContainer
Definition: Triple.h:311
@ UnknownObjectFormat
Definition: Triple.h:308
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
SectionCharacteristics
Definition: COFF.h:297
@ IMAGE_SCN_LNK_REMOVE
Definition: COFF.h:307
@ IMAGE_SCN_CNT_CODE
Definition: COFF.h:302
@ IMAGE_SCN_MEM_READ
Definition: COFF.h:335
@ IMAGE_SCN_MEM_EXECUTE
Definition: COFF.h:334
@ IMAGE_SCN_CNT_UNINITIALIZED_DATA
Definition: COFF.h:304
@ IMAGE_SCN_MEM_DISCARDABLE
Definition: COFF.h:330
@ IMAGE_SCN_LNK_INFO
Definition: COFF.h:306
@ IMAGE_SCN_MEM_16BIT
Definition: COFF.h:311
@ IMAGE_SCN_CNT_INITIALIZED_DATA
Definition: COFF.h:303
@ IMAGE_SCN_MEM_WRITE
Definition: COFF.h:336
@ SHT_PROGBITS
Definition: ELF.h:1098
@ SHT_NOBITS
Definition: ELF.h:1105
@ SHT_MIPS_DWARF
Definition: ELF.h:1174
@ SHT_LLVM_BB_ADDR_MAP
Definition: ELF.h:1138
@ SHT_X86_64_UNWIND
Definition: ELF.h:1170
@ SHF_MERGE
Definition: ELF.h:1202
@ SHF_STRINGS
Definition: ELF.h:1205
@ SHF_EXCLUDE
Definition: ELF.h:1230
@ SHF_ALLOC
Definition: ELF.h:1196
@ SHF_LINK_ORDER
Definition: ELF.h:1211
@ SHF_GROUP
Definition: ELF.h:1218
@ SHF_WRITE
Definition: ELF.h:1193
@ SHF_TLS
Definition: ELF.h:1221
@ SHF_EXECINSTR
Definition: ELF.h:1199
@ SK_PPA1
Definition: GOFF.h:169
@ SK_PPA2
Definition: GOFF.h:170
@ 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:159
@ SSUBTYP_DWFRAME
DWARF frame section.
Definition: XCOFF.h:164
@ SSUBTYP_DWABREV
DWARF abbrev section.
Definition: XCOFF.h:160
@ SSUBTYP_DWINFO
DWARF info section.
Definition: XCOFF.h:155
@ SSUBTYP_DWRNGES
DWARF ranges section.
Definition: XCOFF.h:162
@ SSUBTYP_DWLOC
DWARF loc section.
Definition: XCOFF.h:163
@ SSUBTYP_DWMAC
DWARF macinfo section.
Definition: XCOFF.h:165
@ SSUBTYP_DWPBNMS
DWARF pubnames section.
Definition: XCOFF.h:157
@ SSUBTYP_DWPBTYP
DWARF pubtypes section.
Definition: XCOFF.h:158
@ SSUBTYP_DWLINE
DWARF line section.
Definition: XCOFF.h:156
@ SSUBTYP_DWSTR
DWARF str section.
Definition: XCOFF.h:161
@ XMC_TC0
TOC Anchor for TOC Addressability.
Definition: XCOFF.h:118
@ XMC_RW
Read Write Data.
Definition: XCOFF.h:117
@ XMC_TL
Initialized thread-local variable.
Definition: XCOFF.h:126
@ XMC_RO
Read Only Constant.
Definition: XCOFF.h:106
@ XMC_PR
Program Code.
Definition: XCOFF.h:105
@ XTY_SD
Csect definition for initialized storage.
Definition: XCOFF.h:242
@ DW_EH_PE_pcrel
Definition: Dwarf.h:858
@ DW_EH_PE_sdata4
Definition: Dwarf.h:855
@ DW_EH_PE_sdata8
Definition: Dwarf.h:856
@ DW_EH_PE_absptr
Definition: Dwarf.h:847
@ WASM_SEG_FLAG_STRINGS
Definition: Wasm.h:225
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
Definition: Error.cpp:167
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition: Alignment.h:39