LLVM 24.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
16#include "llvm/MC/MCAsmInfo.h"
17#include "llvm/MC/MCContext.h"
19#include "llvm/MC/MCSection.h"
29#include "llvm/MC/SectionKind.h"
31
32using namespace llvm;
33
34static bool useCompactUnwind(const Triple &T) {
35 // Only on darwin.
36 if (!T.isOSDarwin())
37 return false;
38
39 // aarch64 always has it.
40 if (T.getArch() == Triple::aarch64 || T.getArch() == Triple::aarch64_32)
41 return true;
42
43 // armv7k always has it.
44 if (T.isWatchABI())
45 return true;
46
47 // Use it on newer version of OS X.
48 if (T.isMacOSX() && !T.isMacOSXVersionLT(10, 6))
49 return true;
50
51 // And the iOS simulator.
52 if (T.isiOS() && T.isX86())
53 return true;
54
55 // The rest of the simulators always have it.
56 if (T.isSimulatorEnvironment())
57 return true;
58
59 // XROS always has it.
60 if (T.isXROS())
61 return true;
62
63 return false;
64}
65
66void MCObjectFileInfo::initMachOMCObjectFileInfo(const Triple &T) {
67 EHFrameSection = Ctx->getMachOSection(
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()) {
82 break;
85 break;
89 break;
90 }
91
93
94 TextSection // .text
95 = Ctx->getMachOSection("__TEXT", "__text",
98 DataSection // .data
99 = Ctx->getMachOSection("__DATA", "__data", 0, SectionKind::getData());
100
101 // BSSSection might not be expected initialized on msvc.
102 BSSSection = nullptr;
103
104 TLSDataSection // .tdata
105 = Ctx->getMachOSection("__DATA", "__thread_data",
108 TLSBSSSection // .tbss
109 = Ctx->getMachOSection("__DATA", "__thread_bss",
112
113 // TODO: Verify datarel below.
114 TLSTLVSection // .tlv
115 = Ctx->getMachOSection("__DATA", "__thread_vars",
118
119 TLSThreadInitSection = Ctx->getMachOSection(
120 "__DATA", "__thread_init", MachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS,
122
123 CStringSection // .cstring
124 = Ctx->getMachOSection("__TEXT", "__cstring",
128 = Ctx->getMachOSection("__TEXT","__ustring", 0,
130 FourByteConstantSection // .literal4
131 = Ctx->getMachOSection("__TEXT", "__literal4",
134 EightByteConstantSection // .literal8
135 = Ctx->getMachOSection("__TEXT", "__literal8",
138
139 SixteenByteConstantSection // .literal16
140 = Ctx->getMachOSection("__TEXT", "__literal16",
143
144 ReadOnlySection // .const
145 = Ctx->getMachOSection("__TEXT", "__const", 0,
147
148 // If the target is not powerpc, map the coal sections to the non-coal
149 // sections.
150 //
151 // "__TEXT/__textcoal_nt" => section "__TEXT/__text"
152 // "__TEXT/__const_coal" => section "__TEXT/__const"
153 // "__DATA/__datacoal_nt" => section "__DATA/__data"
154 Triple::ArchType ArchTy = T.getArch();
155
156 ConstDataSection // .const_data
157 = Ctx->getMachOSection("__DATA", "__const", 0,
159
160 if (ArchTy == Triple::ppc || ArchTy == Triple::ppc64) {
162 = Ctx->getMachOSection("__TEXT", "__textcoal_nt",
167 = Ctx->getMachOSection("__TEXT", "__const_coal",
170 DataCoalSection = Ctx->getMachOSection(
171 "__DATA", "__datacoal_nt", MachO::S_COALESCED, SectionKind::getData());
173 } else {
178 }
179
181 = Ctx->getMachOSection("__DATA","__common",
185 = Ctx->getMachOSection("__DATA","__bss", MachO::S_ZEROFILL,
187
188
190 = Ctx->getMachOSection("__DATA", "__la_symbol_ptr",
194 = Ctx->getMachOSection("__DATA", "__nl_symbol_ptr",
197
199 = Ctx->getMachOSection("__DATA", "__thread_ptr",
202
203 AddrSigSection = Ctx->getMachOSection("__DATA", "__llvm_addrsig", 0,
205
206 // Exception Handling.
207 LSDASection = Ctx->getMachOSection("__TEXT", "__gcc_except_tab", 0,
209
210 COFFDebugSymbolsSection = nullptr;
211 COFFDebugTypesSection = nullptr;
213
214 if (useCompactUnwind(T)) {
216 Ctx->getMachOSection("__LD", "__compact_unwind", MachO::S_ATTR_DEBUG,
218
219 if (T.isX86())
220 CompactUnwindDwarfEHFrameOnly = 0x04000000; // UNWIND_X86_64_MODE_DWARF
221 else if (T.getArch() == Triple::aarch64 || T.getArch() == Triple::aarch64_32)
222 CompactUnwindDwarfEHFrameOnly = 0x03000000; // UNWIND_ARM64_MODE_DWARF
223 else if (T.getArch() == Triple::arm || T.getArch() == Triple::thumb)
224 CompactUnwindDwarfEHFrameOnly = 0x04000000; // UNWIND_ARM_MODE_DWARF
225 }
226
227 // Debug Information.
229 Ctx->getMachOSection("__DWARF", "__debug_names", MachO::S_ATTR_DEBUG,
230 SectionKind::getMetadata(), "debug_names_begin");
232 Ctx->getMachOSection("__DWARF", "__apple_names", MachO::S_ATTR_DEBUG,
233 SectionKind::getMetadata(), "names_begin");
235 Ctx->getMachOSection("__DWARF", "__apple_objc", MachO::S_ATTR_DEBUG,
236 SectionKind::getMetadata(), "objc_begin");
237 // 16 character section limit...
239 Ctx->getMachOSection("__DWARF", "__apple_namespac", MachO::S_ATTR_DEBUG,
240 SectionKind::getMetadata(), "namespac_begin");
242 Ctx->getMachOSection("__DWARF", "__apple_types", MachO::S_ATTR_DEBUG,
243 SectionKind::getMetadata(), "types_begin");
244
246 Ctx->getMachOSection("__DWARF", "__swift_ast", MachO::S_ATTR_DEBUG,
248
250 Ctx->getMachOSection("__DWARF", "__debug_abbrev", MachO::S_ATTR_DEBUG,
251 SectionKind::getMetadata(), "section_abbrev");
253 Ctx->getMachOSection("__DWARF", "__debug_info", MachO::S_ATTR_DEBUG,
254 SectionKind::getMetadata(), "section_info");
256 Ctx->getMachOSection("__DWARF", "__debug_line", MachO::S_ATTR_DEBUG,
257 SectionKind::getMetadata(), "section_line");
259 Ctx->getMachOSection("__DWARF", "__debug_line_str", MachO::S_ATTR_DEBUG,
260 SectionKind::getMetadata(), "section_line_str");
262 Ctx->getMachOSection("__DWARF", "__debug_frame", MachO::S_ATTR_DEBUG,
263 SectionKind::getMetadata(), "section_frame");
265 Ctx->getMachOSection("__DWARF", "__debug_pubnames", MachO::S_ATTR_DEBUG,
268 Ctx->getMachOSection("__DWARF", "__debug_pubtypes", MachO::S_ATTR_DEBUG,
271 Ctx->getMachOSection("__DWARF", "__debug_gnu_pubn", MachO::S_ATTR_DEBUG,
274 Ctx->getMachOSection("__DWARF", "__debug_gnu_pubt", MachO::S_ATTR_DEBUG,
277 Ctx->getMachOSection("__DWARF", "__debug_str", MachO::S_ATTR_DEBUG,
278 SectionKind::getMetadata(), "info_string");
280 Ctx->getMachOSection("__DWARF", "__debug_str_offs", MachO::S_ATTR_DEBUG,
281 SectionKind::getMetadata(), "section_str_off");
283 Ctx->getMachOSection("__DWARF", "__debug_addr", MachO::S_ATTR_DEBUG,
284 SectionKind::getMetadata(), "section_info");
286 Ctx->getMachOSection("__DWARF", "__debug_loc", MachO::S_ATTR_DEBUG,
287 SectionKind::getMetadata(), "section_debug_loc");
289 Ctx->getMachOSection("__DWARF", "__debug_loclists", MachO::S_ATTR_DEBUG,
290 SectionKind::getMetadata(), "section_debug_loc");
291
293 Ctx->getMachOSection("__DWARF", "__debug_aranges", MachO::S_ATTR_DEBUG,
296 Ctx->getMachOSection("__DWARF", "__debug_ranges", MachO::S_ATTR_DEBUG,
297 SectionKind::getMetadata(), "debug_range");
299 Ctx->getMachOSection("__DWARF", "__debug_rnglists", MachO::S_ATTR_DEBUG,
300 SectionKind::getMetadata(), "debug_range");
302 Ctx->getMachOSection("__DWARF", "__debug_macinfo", MachO::S_ATTR_DEBUG,
303 SectionKind::getMetadata(), "debug_macinfo");
305 Ctx->getMachOSection("__DWARF", "__debug_macro", MachO::S_ATTR_DEBUG,
306 SectionKind::getMetadata(), "debug_macro");
308 Ctx->getMachOSection("__DWARF", "__debug_inlined", MachO::S_ATTR_DEBUG,
311 Ctx->getMachOSection("__DWARF", "__debug_cu_index", MachO::S_ATTR_DEBUG,
314 Ctx->getMachOSection("__DWARF", "__debug_tu_index", MachO::S_ATTR_DEBUG,
316 StackMapSection = Ctx->getMachOSection("__LLVM_STACKMAPS", "__llvm_stackmaps",
318
319 FaultMapSection = Ctx->getMachOSection("__LLVM_FAULTMAPS", "__llvm_faultmaps",
321
322 RemarksSection = Ctx->getMachOSection(
323 "__LLVM", "__remarks", MachO::S_ATTR_DEBUG, SectionKind::getMetadata());
324
325 // Emit the pseudoprobe sections in the __LLVM segment. Current ld ignores the
326 // __LLVM and __DWARF segment, so the probe metadata is dropped from the final
327 // linked image on every toolchain.
328 PseudoProbeSection = Ctx->getMachOSection(
329 "__LLVM", "__probes", MachO::S_ATTR_DEBUG | MachO::S_ATTR_NO_DEAD_STRIP,
332 Ctx->getMachOSection("__LLVM", "__probe_descs",
335
336 // The architecture of dsymutil makes it very difficult to copy the Swift
337 // reflection metadata sections into the __TEXT segment, so dsymutil creates
338 // these sections in the __DWARF segment instead.
339 if (!Ctx->getSwift5ReflectionSegmentName().empty()) {
340#define HANDLE_SWIFT_SECTION(KIND, MACHO, ELF, COFF) \
341 Swift5ReflectionSections \
342 [llvm::binaryformat::Swift5ReflectionSectionKind::KIND] = \
343 Ctx->getMachOSection(Ctx->getSwift5ReflectionSegmentName().data(), \
344 MACHO, 0, SectionKind::getMetadata());
345#include "llvm/BinaryFormat/Swift.def"
346 }
347
349}
350
351void MCObjectFileInfo::initELFMCObjectFileInfo(const Triple &T, bool Large) {
352 switch (T.getArch()) {
353 case Triple::mips:
354 case Triple::mipsel:
355 case Triple::mips64:
356 case Triple::mips64el:
357 // We cannot use DW_EH_PE_sdata8 for the large PositionIndependent case
358 // since there is no R_MIPS_PC64 relocation (only a 32-bit version).
359 // In fact DW_EH_PE_sdata4 is enough for us now, and GNU ld doesn't
360 // support pcrel|sdata8 well. Let's use sdata4 for now.
361 if (PositionIndependent)
363 else
364 FDECFIEncoding = Ctx->getAsmInfo().getCodePointerSize() == 4
367 break;
368 case Triple::ppc64:
369 case Triple::ppc64le:
370 case Triple::aarch64:
372 case Triple::x86_64:
374 ((Large || Ctx->getTargetOptions().LargeEHEncoding)
377 break;
378 case Triple::bpfel:
379 case Triple::bpfeb:
381 break;
382 case Triple::hexagon:
384 PositionIndependent ? dwarf::DW_EH_PE_pcrel : dwarf::DW_EH_PE_absptr;
385 break;
386 case Triple::xtensa:
388 break;
389 default:
391 break;
392 }
393
394 unsigned EHSectionType = T.getArch() == Triple::x86_64
397 switch (T.getArch()) {
398 case Triple::x86_64:
399 SFrameABIArch = sframe::ABI::AMD64EndianLittle;
400 break;
401 case Triple::aarch64:
402 SFrameABIArch = sframe::ABI::AArch64EndianLittle;
403 break;
405 SFrameABIArch = sframe::ABI::AArch64EndianBig;
406 break;
407 default:
408 break;
409 }
410
411 // Solaris requires different flags for .eh_frame to seemingly every other
412 // platform.
413 unsigned EHSectionFlags = ELF::SHF_ALLOC;
414 if (T.isOSSolaris() && T.getArch() != Triple::x86_64)
415 EHSectionFlags |= ELF::SHF_WRITE;
416
417 // ELF
418 BSSSection = Ctx->getELFSection(".bss", ELF::SHT_NOBITS,
420
421 TextSection = Ctx->getELFSection(".text", ELF::SHT_PROGBITS,
423
424 DataSection = Ctx->getELFSection(".data", ELF::SHT_PROGBITS,
426
428 Ctx->getELFSection(".rodata", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
429
431 Ctx->getELFSection(".tdata", ELF::SHT_PROGBITS,
433
434 TLSBSSSection = Ctx->getELFSection(
436
437 DataRelROSection = Ctx->getELFSection(".data.rel.ro", ELF::SHT_PROGBITS,
439
440 MergeableConst4Section = Ctx->getELFSection(
441 ".rodata.cst4", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_MERGE, 4);
442
443 MergeableConst8Section = Ctx->getELFSection(
444 ".rodata.cst8", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_MERGE, 8);
445
446 MergeableConst16Section = Ctx->getELFSection(
447 ".rodata.cst16", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_MERGE, 16);
448
449 MergeableConst32Section = Ctx->getELFSection(
450 ".rodata.cst32", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_MERGE, 32);
451
452 // Exception Handling Sections.
453
454 // FIXME: We're emitting LSDA info into a readonly section on ELF, even though
455 // it contains relocatable pointers. In PIC mode, this is probably a big
456 // runtime hit for C++ apps. Either the contents of the LSDA need to be
457 // adjusted or this should be a data section.
458 LSDASection = Ctx->getELFSection(".gcc_except_table", ELF::SHT_PROGBITS,
460
461 COFFDebugSymbolsSection = nullptr;
462 COFFDebugTypesSection = nullptr;
463
464 unsigned DebugSecType = ELF::SHT_PROGBITS;
465
466 // MIPS .debug_* sections should have SHT_MIPS_DWARF section type
467 // to distinguish among sections contain DWARF and ECOFF debug formats.
468 // Sections with ECOFF debug format are obsoleted and marked by SHT_PROGBITS.
469 if (T.isMIPS())
470 DebugSecType = ELF::SHT_MIPS_DWARF;
471
472 // Debug Info Sections.
474 Ctx->getELFSection(".debug_abbrev", DebugSecType, 0);
475 DwarfInfoSection = Ctx->getELFSection(".debug_info", DebugSecType, 0);
476 DwarfLineSection = Ctx->getELFSection(".debug_line", DebugSecType, 0);
478 Ctx->getELFSection(".debug_line_str", DebugSecType,
480 DwarfFrameSection = Ctx->getELFSection(".debug_frame", DebugSecType, 0);
482 Ctx->getELFSection(".debug_pubnames", DebugSecType, 0);
484 Ctx->getELFSection(".debug_pubtypes", DebugSecType, 0);
486 Ctx->getELFSection(".debug_gnu_pubnames", DebugSecType, 0);
488 Ctx->getELFSection(".debug_gnu_pubtypes", DebugSecType, 0);
490 Ctx->getELFSection(".debug_str", DebugSecType,
492 DwarfLocSection = Ctx->getELFSection(".debug_loc", DebugSecType, 0);
494 Ctx->getELFSection(".debug_aranges", DebugSecType, 0);
496 Ctx->getELFSection(".debug_ranges", DebugSecType, 0);
498 Ctx->getELFSection(".debug_macinfo", DebugSecType, 0);
499 DwarfMacroSection = Ctx->getELFSection(".debug_macro", DebugSecType, 0);
500
501 // DWARF5 Experimental Debug Info
502
503 // Accelerator Tables
505 Ctx->getELFSection(".debug_names", ELF::SHT_PROGBITS, 0);
507 Ctx->getELFSection(".apple_names", ELF::SHT_PROGBITS, 0);
509 Ctx->getELFSection(".apple_objc", ELF::SHT_PROGBITS, 0);
511 Ctx->getELFSection(".apple_namespaces", ELF::SHT_PROGBITS, 0);
513 Ctx->getELFSection(".apple_types", ELF::SHT_PROGBITS, 0);
514
515 // String Offset and Address Sections
517 Ctx->getELFSection(".debug_str_offsets", DebugSecType, 0);
518 DwarfAddrSection = Ctx->getELFSection(".debug_addr", DebugSecType, 0);
519 DwarfRnglistsSection = Ctx->getELFSection(".debug_rnglists", DebugSecType, 0);
520 DwarfLoclistsSection = Ctx->getELFSection(".debug_loclists", DebugSecType, 0);
521
522 // Fission Sections
524 Ctx->getELFSection(".debug_info.dwo", DebugSecType, ELF::SHF_EXCLUDE);
526 Ctx->getELFSection(".debug_types.dwo", DebugSecType, ELF::SHF_EXCLUDE);
528 Ctx->getELFSection(".debug_abbrev.dwo", DebugSecType, ELF::SHF_EXCLUDE);
529 DwarfStrDWOSection = Ctx->getELFSection(
530 ".debug_str.dwo", DebugSecType,
533 Ctx->getELFSection(".debug_line.dwo", DebugSecType, ELF::SHF_EXCLUDE);
535 Ctx->getELFSection(".debug_loc.dwo", DebugSecType, ELF::SHF_EXCLUDE);
536 DwarfStrOffDWOSection = Ctx->getELFSection(".debug_str_offsets.dwo",
537 DebugSecType, ELF::SHF_EXCLUDE);
539 Ctx->getELFSection(".debug_rnglists.dwo", DebugSecType, ELF::SHF_EXCLUDE);
541 Ctx->getELFSection(".debug_macinfo.dwo", DebugSecType, ELF::SHF_EXCLUDE);
543 Ctx->getELFSection(".debug_macro.dwo", DebugSecType, ELF::SHF_EXCLUDE);
544
546 Ctx->getELFSection(".debug_loclists.dwo", DebugSecType, ELF::SHF_EXCLUDE);
547
548 // DWP Sections
550 Ctx->getELFSection(".debug_cu_index", DebugSecType, 0);
552 Ctx->getELFSection(".debug_tu_index", DebugSecType, 0);
553
555 Ctx->getELFSection(".llvm_stackmaps", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
556
558 Ctx->getELFSection(".llvm_faultmaps", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
559
561 Ctx->getELFSection(".eh_frame", EHSectionType, EHSectionFlags);
562
564 Ctx->getELFSection(".sframe", ELF::SHT_GNU_SFRAME, ELF::SHF_ALLOC);
565
567 Ctx->getELFSection(".llvm.callgraph", ELF::SHT_LLVM_CALL_GRAPH, 0);
568
569 StackSizesSection = Ctx->getELFSection(".stack_sizes", ELF::SHT_PROGBITS, 0);
570
571 PseudoProbeSection = Ctx->getELFSection(".pseudo_probe", DebugSecType, 0);
573 Ctx->getELFSection(".pseudo_probe_desc", DebugSecType, 0);
574
575 LLVMStatsSection = Ctx->getELFSection(".llvm_stats", ELF::SHT_PROGBITS, 0);
576}
577
578void MCObjectFileInfo::initGOFFMCObjectFileInfo(const Triple &T) {
579 MCSectionGOFF *RootSDSection = Ctx->getGOFFSection(
582
583 MCSectionGOFF *ADAEDSection = Ctx->getGOFFSection(
585 GOFF::EDAttr{false, GOFF::ESD_RMODE_64, GOFF::ESD_NS_Parts,
588 RootSDSection);
589 ADAEDSection->setAlignment(Align(16)); // Quadword
590 ADASection = Ctx->getGOFFSection(SectionKind::getData(), "#S",
591 GOFF::PRAttr{false, GOFF::ESD_EXE_DATA,
594 ADAEDSection);
595
596 TextSection = Ctx->getGOFFSection(
601 RootSDSection);
602 TextSection->setAlignment(Align(8)); // Doubleword
603
604 MCSectionGOFF *PPA2ListEDSection = Ctx->getGOFFSection(
606 GOFF::EDAttr{true, GOFF::ESD_RMODE_64, GOFF::ESD_NS_Parts,
609 RootSDSection);
610 PPA2ListEDSection->setAlignment(Align(8)); // Doubleword
611 PPA2ListSection = Ctx->getGOFFSection(SectionKind::getData(), ".&ppa2",
612 GOFF::PRAttr{true, GOFF::ESD_EXE_DATA,
615 PPA2ListEDSection);
616
617 IDRLSection = Ctx->getGOFFSection(
618 SectionKind::getData(), "B_IDRL",
622 RootSDSection);
623 IDRLSection->setAlignment(Align(8)); // Doubleword
624
625 // Debug Info Sections. The ED name is the same used by the XL compiler.
626 auto InitDebugSection = [this,
627 RootSDSection](StringRef EDName,
628 StringRef LDName) -> MCSectionGOFF * {
629 MCSectionGOFF *ED = Ctx->getGOFFSection(
630 SectionKind::getMetadata(), EDName,
631 GOFF::EDAttr{false, GOFF::ESD_RMODE_64, GOFF::ESD_NS_Parts,
634 RootSDSection);
635 ED->setAlignment(Align(8)); // Doubleword
636 // At least for llc, this function is called twice! (See function
637 // compileModule() in llc.cpp). Since the context is not cleared, the
638 // already allocated section is returned above. We only add the begin symbol
639 // if it is not yet set to avoid an assertion.
640 MCSymbolGOFF *LD = static_cast<MCSymbolGOFF *>(ED->getBeginSymbol());
641 if (!LD) {
642 LD = static_cast<MCSymbolGOFF *>(getContext().getOrCreateSymbol(LDName));
643 LD->setCodeData(GOFF::ESD_EXE_DATA);
644 LD->setWeak(false);
645 LD->setLinkage(GOFF::ESD_LT_XPLink);
646 LD->setExternal(false);
647 ED->setBeginSymbol(LD);
648 } else
649 assert(LD->getName() == LDName && "Wrong label name");
650 return ED;
651 };
652 DwarfAbbrevSection = InitDebugSection("D_ABREV", ".debug_abbrev");
653 DwarfInfoSection = InitDebugSection("D_INFO", ".debug_info");
654 DwarfLineSection = InitDebugSection("D_LINE", ".debug_line");
655 DwarfFrameSection = InitDebugSection("D_FRAME", ".debug_frame");
656 DwarfPubNamesSection = InitDebugSection("D_PBNMS", ".debug_pubnames");
657 DwarfPubTypesSection = InitDebugSection("D_PTYPES", ".debug_pubtypes");
658 DwarfStrSection = InitDebugSection("D_STR", ".debug_str");
659 DwarfLocSection = InitDebugSection("D_LOC", ".debug_loc");
660 DwarfARangesSection = InitDebugSection("D_ARNGE", ".debug_aranges");
661 DwarfRangesSection = InitDebugSection("D_RNGES", ".debug_ranges");
662 DwarfMacinfoSection = InitDebugSection("D_MACIN", ".debug_macinfo");
663
664 // DWARF 5 sections.
665 DwarfDebugNamesSection = InitDebugSection("D_NAMES", ".debug_names");
666 DwarfStrOffSection = InitDebugSection("D_STROFFS", ".debug_str_offsets");
667 DwarfAddrSection = InitDebugSection("D_ADDR", ".debug_addr");
668 DwarfRnglistsSection = InitDebugSection("D_RNGLISTS", ".debug_rnglists");
669 DwarfLoclistsSection = InitDebugSection("D_LOCLISTS", ".debug_loclists");
670 DwarfLineStrSection = InitDebugSection("D_LINESTR", ".debug_line_str");
671
672 // Special GNU sections.
673 DwarfGnuPubNamesSection = InitDebugSection("D_GPBNMS", ".debug_gnu_pubnames");
675 InitDebugSection("D_GPTYPES", ".debug_gnu_pubtypes");
676
677 // Accelerator Tables.
678 DwarfAccelNamesSection = InitDebugSection("D_APPLNMS", ".apple_names");
680 InitDebugSection("D_APPLNMSP", ".apple_namespaces");
681 DwarfAccelTypesSection = InitDebugSection("D_APPLTYPS", ".apple_types");
682 DwarfAccelObjCSection = InitDebugSection("D_APPLOBJC", ".apple_objc");
683
684 // Fission Sections
685 DwarfInfoDWOSection = InitDebugSection("D_INFO_DWO", ".debug_info.dwo");
686 DwarfTypesDWOSection = InitDebugSection("D_TYPES_DWO", ".debug_types.dwo");
687 DwarfAbbrevDWOSection = InitDebugSection("D_ABREV_DWO", ".debug_abbrev.dwo");
688 DwarfStrDWOSection = InitDebugSection("D_STR_DWO", ".debug_str.dwo");
689 DwarfLineDWOSection = InitDebugSection("D_LINE_DWO", ".debug_line.dwo");
690 DwarfLocDWOSection = InitDebugSection("D_LOC_DWO", ".debug_loc.dwo");
692 InitDebugSection("D_STROFFS_DWO", ".debug_str_offsets.dwo");
694 InitDebugSection("D_RNGLISTS_DWO", ".debug_rnglists.dwo");
696 InitDebugSection("D_MACINFO_DWO", ".debug_macinfo.dwo");
697 DwarfMacroDWOSection = InitDebugSection("D_MACRO_DWO", ".debug_macro.dwo");
699 InitDebugSection("D_LOCLISTS_DWO", ".debug_loclists.dwo");
700}
701
702void MCObjectFileInfo::initCOFFMCObjectFileInfo(const Triple &T) {
704 Ctx->getCOFFSection(".eh_frame", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
706
707 // Set the `IMAGE_SCN_MEM_16BIT` flag when compiling for thumb mode. This is
708 // used to indicate to the linker that the text segment contains thumb instructions
709 // and to set the ISA selection bit for calls accordingly.
710 const bool IsThumb = T.getArch() == Triple::thumb;
711
712 // COFF
713 BSSSection = Ctx->getCOFFSection(
716 TextSection = Ctx->getCOFFSection(
717 ".text",
721 DataSection = Ctx->getCOFFSection(
725 Ctx->getCOFFSection(".rdata", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
727
728 if (T.getArch() == Triple::x86_64 || T.getArch() == Triple::aarch64 ||
729 T.getArch() == Triple::arm || T.getArch() == Triple::thumb) {
730 // On Windows with SEH, the LSDA is emitted into the .xdata section
731 LSDASection = nullptr;
732 } else {
733 LSDASection = Ctx->getCOFFSection(".gcc_except_table",
736 }
737
738 if (T.getArch() == Triple::aarch64) {
740 Ctx->getCOFFSection(".impcall", COFF::IMAGE_SCN_LNK_INFO);
741 } else if (T.getArch() == Triple::x86_64) {
742 // Import Call Optimization on x64 leverages the same metadata as the
743 // retpoline mitigation, hence the unusual section name.
745 Ctx->getCOFFSection(".retplne", COFF::IMAGE_SCN_LNK_INFO);
746 }
747
748 // Debug info.
750 Ctx->getCOFFSection(".debug$S", (COFF::IMAGE_SCN_MEM_DISCARDABLE |
754 Ctx->getCOFFSection(".debug$T", (COFF::IMAGE_SCN_MEM_DISCARDABLE |
758 Ctx->getCOFFSection(".debug$H", (COFF::IMAGE_SCN_MEM_DISCARDABLE |
761
762 DwarfAbbrevSection = Ctx->getCOFFSection(
763 ".debug_abbrev", COFF::IMAGE_SCN_MEM_DISCARDABLE |
766 DwarfInfoSection = Ctx->getCOFFSection(
767 ".debug_info", COFF::IMAGE_SCN_MEM_DISCARDABLE |
770 DwarfLineSection = Ctx->getCOFFSection(
771 ".debug_line", COFF::IMAGE_SCN_MEM_DISCARDABLE |
774 DwarfLineStrSection = Ctx->getCOFFSection(
775 ".debug_line_str", COFF::IMAGE_SCN_MEM_DISCARDABLE |
778 DwarfFrameSection = Ctx->getCOFFSection(
779 ".debug_frame", COFF::IMAGE_SCN_MEM_DISCARDABLE |
782 DwarfPubNamesSection = Ctx->getCOFFSection(
783 ".debug_pubnames", COFF::IMAGE_SCN_MEM_DISCARDABLE |
786 DwarfPubTypesSection = Ctx->getCOFFSection(
787 ".debug_pubtypes", COFF::IMAGE_SCN_MEM_DISCARDABLE |
790 DwarfGnuPubNamesSection = Ctx->getCOFFSection(
791 ".debug_gnu_pubnames", COFF::IMAGE_SCN_MEM_DISCARDABLE |
794 DwarfGnuPubTypesSection = Ctx->getCOFFSection(
795 ".debug_gnu_pubtypes", COFF::IMAGE_SCN_MEM_DISCARDABLE |
798 DwarfStrSection = Ctx->getCOFFSection(
799 ".debug_str", COFF::IMAGE_SCN_MEM_DISCARDABLE |
802 DwarfStrOffSection = Ctx->getCOFFSection(
803 ".debug_str_offsets", COFF::IMAGE_SCN_MEM_DISCARDABLE |
806 DwarfLocSection = Ctx->getCOFFSection(
807 ".debug_loc", COFF::IMAGE_SCN_MEM_DISCARDABLE |
810 DwarfLoclistsSection = Ctx->getCOFFSection(
811 ".debug_loclists", COFF::IMAGE_SCN_MEM_DISCARDABLE |
814 DwarfARangesSection = Ctx->getCOFFSection(
815 ".debug_aranges", COFF::IMAGE_SCN_MEM_DISCARDABLE |
818 DwarfRangesSection = Ctx->getCOFFSection(
819 ".debug_ranges", COFF::IMAGE_SCN_MEM_DISCARDABLE |
822 DwarfRnglistsSection = Ctx->getCOFFSection(
823 ".debug_rnglists", COFF::IMAGE_SCN_MEM_DISCARDABLE |
826 DwarfMacinfoSection = Ctx->getCOFFSection(
827 ".debug_macinfo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
830 DwarfMacroSection = Ctx->getCOFFSection(
831 ".debug_macro", COFF::IMAGE_SCN_MEM_DISCARDABLE |
834 DwarfMacinfoDWOSection = Ctx->getCOFFSection(
835 ".debug_macinfo.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
839 DwarfMacroDWOSection = Ctx->getCOFFSection(
840 ".debug_macro.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
844 DwarfInfoDWOSection = Ctx->getCOFFSection(
845 ".debug_info.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
849 DwarfTypesDWOSection = Ctx->getCOFFSection(
850 ".debug_types.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
854 DwarfAbbrevDWOSection = Ctx->getCOFFSection(
855 ".debug_abbrev.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
859 DwarfStrDWOSection = Ctx->getCOFFSection(
860 ".debug_str.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
864 DwarfLineDWOSection = Ctx->getCOFFSection(
865 ".debug_line.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
869 DwarfLocDWOSection = Ctx->getCOFFSection(
870 ".debug_loc.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
874 DwarfLoclistsDWOSection = Ctx->getCOFFSection(
875 ".debug_loclists.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
879 DwarfStrOffDWOSection = Ctx->getCOFFSection(
880 ".debug_str_offsets.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
884 DwarfRnglistsDWOSection = Ctx->getCOFFSection(
885 ".debug_rnglists.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
889 DwarfAddrSection = Ctx->getCOFFSection(
890 ".debug_addr", COFF::IMAGE_SCN_MEM_DISCARDABLE |
893 DwarfCUIndexSection = Ctx->getCOFFSection(
894 ".debug_cu_index", COFF::IMAGE_SCN_MEM_DISCARDABLE |
897 DwarfTUIndexSection = Ctx->getCOFFSection(
898 ".debug_tu_index", COFF::IMAGE_SCN_MEM_DISCARDABLE |
901 DwarfDebugNamesSection = Ctx->getCOFFSection(
902 ".debug_names", COFF::IMAGE_SCN_MEM_DISCARDABLE |
905 DwarfAccelNamesSection = Ctx->getCOFFSection(
906 ".apple_names", COFF::IMAGE_SCN_MEM_DISCARDABLE |
909 DwarfAccelNamespaceSection = Ctx->getCOFFSection(
910 ".apple_namespaces", COFF::IMAGE_SCN_MEM_DISCARDABLE |
913 DwarfAccelTypesSection = Ctx->getCOFFSection(
914 ".apple_types", COFF::IMAGE_SCN_MEM_DISCARDABLE |
917 DwarfAccelObjCSection = Ctx->getCOFFSection(
918 ".apple_objc", COFF::IMAGE_SCN_MEM_DISCARDABLE |
921
922 DrectveSection = Ctx->getCOFFSection(
924
926 Ctx->getCOFFSection(".pdata", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
928
930 Ctx->getCOFFSection(".xdata", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
932
933 SXDataSection = Ctx->getCOFFSection(".sxdata", COFF::IMAGE_SCN_LNK_INFO);
934
936 Ctx->getCOFFSection(".gehcont$y", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
938
940 Ctx->getCOFFSection(".gfids$y", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
942
944 Ctx->getCOFFSection(".giats$y", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
946
948 Ctx->getCOFFSection(".gljmp$y", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
950
951 TLSDataSection = Ctx->getCOFFSection(
954
955 StackMapSection = Ctx->getCOFFSection(".llvm_stackmaps",
958
959 // Set IMAGE_SCN_MEM_DISCARDABLE so that lld will not truncate section name.
960 PseudoProbeSection = Ctx->getCOFFSection(
961 ".pseudo_probe", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
964 PseudoProbeDescSection = Ctx->getCOFFSection(
965 ".pseudo_probe_desc", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
968}
969
970void MCObjectFileInfo::initSPIRVMCObjectFileInfo(const Triple &T) {
971 // Put everything in a single binary section.
972 TextSection = Ctx->getSPIRVSection();
973}
974
975void MCObjectFileInfo::initWasmMCObjectFileInfo(const Triple &T) {
976 TextSection = Ctx->getWasmSection(".text", SectionKind::getText());
977 DataSection = Ctx->getWasmSection(".data", SectionKind::getData());
978
980 Ctx->getWasmSection(".debug_line", SectionKind::getMetadata());
982 Ctx->getWasmSection(".debug_line_str", SectionKind::getMetadata(),
984 DwarfStrSection = Ctx->getWasmSection(
987 Ctx->getWasmSection(".debug_loc", SectionKind::getMetadata());
989 Ctx->getWasmSection(".debug_abbrev", SectionKind::getMetadata());
990 DwarfARangesSection = Ctx->getWasmSection(".debug_aranges", SectionKind::getMetadata());
992 Ctx->getWasmSection(".debug_ranges", SectionKind::getMetadata());
994 Ctx->getWasmSection(".debug_macinfo", SectionKind::getMetadata());
996 Ctx->getWasmSection(".debug_macro", SectionKind::getMetadata());
997 DwarfCUIndexSection = Ctx->getWasmSection(".debug_cu_index", SectionKind::getMetadata());
998 DwarfTUIndexSection = Ctx->getWasmSection(".debug_tu_index", SectionKind::getMetadata());
1000 Ctx->getWasmSection(".debug_info", SectionKind::getMetadata());
1001 DwarfFrameSection = Ctx->getWasmSection(".debug_frame", SectionKind::getMetadata());
1002 DwarfPubNamesSection = Ctx->getWasmSection(".debug_pubnames", SectionKind::getMetadata());
1003 DwarfPubTypesSection = Ctx->getWasmSection(".debug_pubtypes", SectionKind::getMetadata());
1005 Ctx->getWasmSection(".debug_gnu_pubnames", SectionKind::getMetadata());
1007 Ctx->getWasmSection(".debug_gnu_pubtypes", SectionKind::getMetadata());
1008
1010 Ctx->getWasmSection(".debug_names", SectionKind::getMetadata());
1012 Ctx->getWasmSection(".debug_str_offsets", SectionKind::getMetadata());
1014 Ctx->getWasmSection(".debug_addr", SectionKind::getMetadata());
1016 Ctx->getWasmSection(".debug_rnglists", SectionKind::getMetadata());
1018 Ctx->getWasmSection(".debug_loclists", SectionKind::getMetadata());
1019
1020 // Fission Sections
1022 Ctx->getWasmSection(".debug_info.dwo", SectionKind::getMetadata());
1024 Ctx->getWasmSection(".debug_types.dwo", SectionKind::getMetadata());
1026 Ctx->getWasmSection(".debug_abbrev.dwo", SectionKind::getMetadata());
1028 Ctx->getWasmSection(".debug_str.dwo", SectionKind::getMetadata(),
1031 Ctx->getWasmSection(".debug_line.dwo", SectionKind::getMetadata());
1033 Ctx->getWasmSection(".debug_loc.dwo", SectionKind::getMetadata());
1035 Ctx->getWasmSection(".debug_str_offsets.dwo", SectionKind::getMetadata());
1037 Ctx->getWasmSection(".debug_rnglists.dwo", SectionKind::getMetadata());
1039 Ctx->getWasmSection(".debug_macinfo.dwo", SectionKind::getMetadata());
1041 Ctx->getWasmSection(".debug_macro.dwo", SectionKind::getMetadata());
1042
1044 Ctx->getWasmSection(".debug_loclists.dwo", SectionKind::getMetadata());
1045
1046 // DWP Sections
1048 Ctx->getWasmSection(".debug_cu_index", SectionKind::getMetadata());
1050 Ctx->getWasmSection(".debug_tu_index", SectionKind::getMetadata());
1051
1052 // Wasm use data section for LSDA.
1053 // TODO Consider putting each function's exception table in a separate
1054 // section, as in -function-sections, to facilitate lld's --gc-section.
1055 LSDASection = Ctx->getWasmSection(".rodata.gcc_except_table",
1057
1058 // TODO: Define more sections.
1059}
1060
1061void MCObjectFileInfo::initXCOFFMCObjectFileInfo(const Triple &T) {
1062 // The default csect for program code. Functions without a specified section
1063 // get placed into this csect. The choice of csect name is not a property of
1064 // the ABI or object file format, but various tools rely on the section
1065 // name being empty (considering named symbols to be "user symbol names").
1066 TextSection = Ctx->getXCOFFSection(
1067 "..text..", // Use a non-null name to work around an AIX assembler bug...
1069 XCOFF::CsectProperties(XCOFF::StorageMappingClass::XMC_PR, XCOFF::XTY_SD),
1070 /* MultiSymbolsAllowed*/ true);
1071
1072 // ... but use a null name when generating the symbol table.
1073 MCSectionXCOFF *TS = static_cast<MCSectionXCOFF *>(TextSection);
1075 TS->setSymbolTableName("");
1076
1077 DataSection = Ctx->getXCOFFSection(
1078 ".data", SectionKind::getData(),
1079 XCOFF::CsectProperties(XCOFF::StorageMappingClass::XMC_RW, XCOFF::XTY_SD),
1080 /* MultiSymbolsAllowed*/ true);
1081
1082 ReadOnlySection = Ctx->getXCOFFSection(
1083 ".rodata", SectionKind::getReadOnly(),
1084 XCOFF::CsectProperties(XCOFF::StorageMappingClass::XMC_RO, XCOFF::XTY_SD),
1085 /* MultiSymbolsAllowed*/ true);
1086 ReadOnlySection->setAlignment(Align(4));
1087
1088 ReadOnly8Section = Ctx->getXCOFFSection(
1089 ".rodata.8", SectionKind::getReadOnly(),
1090 XCOFF::CsectProperties(XCOFF::StorageMappingClass::XMC_RO, XCOFF::XTY_SD),
1091 /* MultiSymbolsAllowed*/ true);
1092 ReadOnly8Section->setAlignment(Align(8));
1093
1094 ReadOnly16Section = Ctx->getXCOFFSection(
1095 ".rodata.16", SectionKind::getReadOnly(),
1096 XCOFF::CsectProperties(XCOFF::StorageMappingClass::XMC_RO, XCOFF::XTY_SD),
1097 /* MultiSymbolsAllowed*/ true);
1098 ReadOnly16Section->setAlignment(Align(16));
1099
1100 TLSDataSection = Ctx->getXCOFFSection(
1101 ".tdata", SectionKind::getThreadData(),
1102 XCOFF::CsectProperties(XCOFF::StorageMappingClass::XMC_TL, XCOFF::XTY_SD),
1103 /* MultiSymbolsAllowed*/ true);
1104
1105 TOCBaseSection = Ctx->getXCOFFSection(
1106 "TOC", SectionKind::getData(),
1107 XCOFF::CsectProperties(XCOFF::StorageMappingClass::XMC_TC0,
1108 XCOFF::XTY_SD));
1109
1110 // The TOC-base always has 0 size, but 4 byte alignment.
1111 TOCBaseSection->setAlignment(Align(4));
1112
1113 LSDASection = Ctx->getXCOFFSection(
1114 ".gcc_except_table", SectionKind::getReadOnly(),
1115 XCOFF::CsectProperties(XCOFF::StorageMappingClass::XMC_RO,
1116 XCOFF::XTY_SD));
1117
1118 CompactUnwindSection = Ctx->getXCOFFSection(
1119 ".eh_info_table", SectionKind::getData(),
1120 XCOFF::CsectProperties(XCOFF::StorageMappingClass::XMC_RW,
1121 XCOFF::XTY_SD));
1122
1123 // DWARF sections for XCOFF are not csects. They are special STYP_DWARF
1124 // sections, and the individual DWARF sections are distinguished by their
1125 // section subtype.
1126 DwarfAbbrevSection = Ctx->getXCOFFSection(
1127 ".dwabrev", SectionKind::getMetadata(),
1128 /* CsectProperties */ std::nullopt,
1129 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWABREV);
1130
1131 DwarfInfoSection = Ctx->getXCOFFSection(
1132 ".dwinfo", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
1133 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWINFO);
1134
1135 DwarfLineSection = Ctx->getXCOFFSection(
1136 ".dwline", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
1137 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWLINE);
1138
1139 DwarfFrameSection = Ctx->getXCOFFSection(
1140 ".dwframe", SectionKind::getMetadata(),
1141 /* CsectProperties */ std::nullopt,
1142 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWFRAME);
1143
1144 DwarfPubNamesSection = Ctx->getXCOFFSection(
1145 ".dwpbnms", SectionKind::getMetadata(),
1146 /* CsectProperties */ std::nullopt,
1147 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWPBNMS);
1148
1149 DwarfPubTypesSection = Ctx->getXCOFFSection(
1150 ".dwpbtyp", SectionKind::getMetadata(),
1151 /* CsectProperties */ std::nullopt,
1152 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWPBTYP);
1153
1154 DwarfStrSection = Ctx->getXCOFFSection(
1155 ".dwstr", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
1156 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWSTR);
1157
1158 DwarfLocSection = Ctx->getXCOFFSection(
1159 ".dwloc", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
1160 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWLOC);
1161
1162 DwarfARangesSection = Ctx->getXCOFFSection(
1163 ".dwarnge", SectionKind::getMetadata(),
1164 /* CsectProperties */ std::nullopt,
1165 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWARNGE);
1166
1167 DwarfRangesSection = Ctx->getXCOFFSection(
1168 ".dwrnges", SectionKind::getMetadata(),
1169 /* CsectProperties */ std::nullopt,
1170 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWRNGES);
1171
1172 DwarfMacinfoSection = Ctx->getXCOFFSection(
1173 ".dwmac", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
1174 /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWMAC);
1175}
1176
1177void MCObjectFileInfo::initDXContainerObjectFileInfo(const Triple &T) {
1178 // At the moment the DXBC section should end up empty.
1179 TextSection = Ctx->getDXContainerSection("DXBC", SectionKind::getText());
1180}
1181
1183
1185 bool LargeCodeModel) {
1186 PositionIndependent = PIC;
1187 Ctx = &MCCtx;
1188
1189 // Common.
1192
1194
1196
1197 EHFrameSection = nullptr; // Created on demand.
1198 SFrameSection = nullptr; // Created on demand.
1199 CompactUnwindSection = nullptr; // Used only by selected targets.
1200 DwarfAccelNamesSection = nullptr; // Used only by selected targets.
1201 DwarfAccelObjCSection = nullptr; // Used only by selected targets.
1202 DwarfAccelNamespaceSection = nullptr; // Used only by selected targets.
1203 DwarfAccelTypesSection = nullptr; // Used only by selected targets.
1204
1205 const Triple &TheTriple = Ctx->getTargetTriple();
1206 switch (Ctx->getObjectFileType()) {
1207 case MCContext::IsMachO:
1208 initMachOMCObjectFileInfo(TheTriple);
1209 break;
1210 case MCContext::IsCOFF:
1211 initCOFFMCObjectFileInfo(TheTriple);
1212 break;
1213 case MCContext::IsELF:
1214 initELFMCObjectFileInfo(TheTriple, LargeCodeModel);
1215 break;
1216 case MCContext::IsGOFF:
1217 initGOFFMCObjectFileInfo(TheTriple);
1218 break;
1219 case MCContext::IsSPIRV:
1220 initSPIRVMCObjectFileInfo(TheTriple);
1221 break;
1222 case MCContext::IsWasm:
1223 initWasmMCObjectFileInfo(TheTriple);
1224 break;
1225 case MCContext::IsXCOFF:
1226 initXCOFFMCObjectFileInfo(TheTriple);
1227 break;
1229 initDXContainerObjectFileInfo(TheTriple);
1230 break;
1231 }
1232}
1233
1234MCSection *MCObjectFileInfo::getDwarfComdatSection(const char *Name,
1235 uint64_t Hash) const {
1236 switch (Ctx->getTargetTriple().getObjectFormat()) {
1237 case Triple::ELF:
1238 return Ctx->getELFSection(Name, ELF::SHT_PROGBITS, ELF::SHF_GROUP, 0,
1239 utostr(Hash), /*IsComdat=*/true);
1240 case Triple::Wasm:
1241 return Ctx->getWasmSection(Name, SectionKind::getMetadata(), 0,
1243 case Triple::MachO:
1244 case Triple::COFF:
1245 case Triple::GOFF:
1246 case Triple::SPIRV:
1247 case Triple::XCOFF:
1250 report_fatal_error("Cannot get DWARF comdat section for this object file "
1251 "format: not implemented.");
1252 break;
1253 }
1254 llvm_unreachable("Unknown ObjectFormatType");
1255}
1256
1257MCSection *
1259 if (Ctx->getObjectFileType() != MCContext::IsELF)
1260 return CallGraphSection;
1261
1262 const MCSectionELF &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1263 unsigned Flags = ELF::SHF_LINK_ORDER;
1264 StringRef GroupName;
1265 if (const MCSymbol *Group = ElfSec.getGroup()) {
1266 GroupName = Group->getName();
1267 Flags |= ELF::SHF_GROUP;
1268 }
1269
1270 return Ctx->getELFSection(
1271 ".llvm.callgraph", ELF::SHT_LLVM_CALL_GRAPH, Flags, 0, GroupName,
1272 /*IsComdat=*/true, ElfSec.getUniqueID(),
1273 static_cast<const MCSymbolELF *>(TextSec.getBeginSymbol()));
1274}
1275
1276MCSection *
1278 if ((Ctx->getObjectFileType() != MCContext::IsELF) ||
1279 Ctx->getTargetTriple().isPS4())
1280 return StackSizesSection;
1281
1282 const MCSectionELF &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1283 unsigned Flags = ELF::SHF_LINK_ORDER;
1284 StringRef GroupName;
1285 if (const MCSymbol *Group = ElfSec.getGroup()) {
1286 GroupName = Group->getName();
1287 Flags |= ELF::SHF_GROUP;
1288 }
1289
1290 return Ctx->getELFSection(
1291 ".stack_sizes", ELF::SHT_PROGBITS, Flags, 0, GroupName, true,
1292 ElfSec.getUniqueID(),
1293 static_cast<const MCSymbolELF *>(TextSec.getBeginSymbol()));
1294}
1295
1296MCSection *
1298 constexpr StringLiteral Name = ".llvm_bb_addr_map";
1299 if (Ctx->getObjectFileType() == MCContext::IsELF) {
1300 const MCSectionELF &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1301 unsigned Flags = ELF::SHF_LINK_ORDER;
1302 StringRef GroupName;
1303 if (const MCSymbol *Group = ElfSec.getGroup()) {
1304 GroupName = Group->getName();
1305 Flags |= ELF::SHF_GROUP;
1306 }
1307
1308 // Use the text section's begin symbol and unique ID to create a separate
1309 // .llvm_bb_addr_map section associated with every unique text section.
1310 return Ctx->getELFSection(
1311 Name, ELF::SHT_LLVM_BB_ADDR_MAP, Flags, 0, GroupName, true,
1312 ElfSec.getUniqueID(),
1313 static_cast<const MCSymbolELF *>(TextSec.getBeginSymbol()));
1314 } else if (Ctx->getObjectFileType() == MCContext::IsCOFF) {
1315 StringRef COMDATSymName;
1316 int Selection = 0;
1317 unsigned Characteristics = COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
1320 const auto &COFFSec = static_cast<const MCSectionCOFF &>(TextSec);
1321 if (const MCSymbol *COMDATSym = COFFSec.getCOMDATSymbol()) {
1322 if (!Ctx->getAsmInfo().hasCOFFAssociativeComdats())
1323 report_fatal_error("BB address map requires associative COMDAT "
1324 "support for COMDAT functions");
1325 COMDATSymName = COMDATSym->getName();
1326 Characteristics |= COFF::IMAGE_SCN_LNK_COMDAT;
1328 }
1329 return Ctx->getCOFFSection(Name, Characteristics, COMDATSymName, Selection,
1330 COFFSec.getUniqueID());
1331 }
1332
1333 return nullptr;
1334}
1335
1336MCSection *
1338 if (Ctx->getObjectFileType() != MCContext::IsELF)
1339 return nullptr;
1340
1341 const MCSectionELF &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1342 unsigned Flags = ELF::SHF_LINK_ORDER | ELF::SHF_ALLOC;
1343 StringRef GroupName;
1344 if (const MCSymbol *Group = ElfSec.getGroup()) {
1345 GroupName = Group->getName();
1346 Flags |= ELF::SHF_GROUP;
1347 }
1348
1349 return Ctx->getELFSection(
1350 ".kcfi_traps", ELF::SHT_PROGBITS, Flags, 0, GroupName,
1351 /*IsComdat=*/true, ElfSec.getUniqueID(),
1352 static_cast<const MCSymbolELF *>(TextSec.getBeginSymbol()));
1353}
1354
1355MCSection *
1357 auto ObjFileType = Ctx->getObjectFileType();
1358 if (ObjFileType == MCContext::IsELF) {
1359 const auto &ElfSec = static_cast<const MCSectionELF &>(TextSec);
1360 unsigned Flags = ELF::SHF_LINK_ORDER;
1361 StringRef GroupName;
1362 if (const MCSymbol *Group = ElfSec.getGroup()) {
1363 GroupName = Group->getName();
1364 Flags |= ELF::SHF_GROUP;
1365 }
1366 return Ctx->getELFSection(
1367 PseudoProbeSection->getName(), ELF::SHT_PROGBITS, Flags, 0, GroupName,
1368 true, ElfSec.getUniqueID(),
1369 static_cast<const MCSymbolELF *>(TextSec.getBeginSymbol()));
1370 } else if (ObjFileType == MCContext::IsCOFF) {
1371 StringRef COMDATSymName = "";
1372 int Selection = 0;
1373 unsigned Characteristics =
1374 static_cast<MCSectionCOFF *>(PseudoProbeSection)->getCharacteristics();
1375 const auto &COFFSec = static_cast<const MCSectionCOFF &>(TextSec);
1376 if (const MCSymbol *COMDATSym = COFFSec.getCOMDATSymbol()) {
1377 // Associate .pseudo_probe to its function section.
1378 COMDATSymName = COMDATSym->getName();
1379 Characteristics |= COFF::IMAGE_SCN_LNK_COMDAT;
1381 }
1382 return Ctx->getCOFFSection(PseudoProbeSection->getName(), Characteristics,
1383 COMDATSymName, Selection, COFFSec.getUniqueID());
1384 }
1385
1386 return PseudoProbeSection;
1387}
1388
1389MCSection *
1391 uint64_t FuncHash) const {
1392 if (!Ctx->getTargetTriple().supportsCOMDAT() || FuncName.empty())
1394
1395 // Create a separate comdat group for each function's descriptor in order
1396 // for the linker to deduplicate. The duplication, must be from different
1397 // translation unit, can come from:
1398 // 1. Inline functions defined in header files;
1399 // 2. ThinLTO imported functions;
1400 // 3. Weak-linkage definitions.
1401 // Use a concatenation of the section name, function name, and function hash
1402 // as the group name so that descriptors with different hashes (due to user
1403 // code not following ODR or compiler codegen inconsistencies) get separate
1404 // COMDAT sections instead of being silently dropped (ELF) or causing linker
1405 // errors (COFF). Duplicate GUIDs with mismatching hashes are detected
1406 // during descriptor decoding and reported by llvm-profgen.
1407 auto ObjFileType = Ctx->getObjectFileType();
1408 if (ObjFileType == MCContext::IsELF) {
1409 auto *S = static_cast<MCSectionELF *>(PseudoProbeDescSection);
1410 auto Flags = S->getFlags() | ELF::SHF_GROUP;
1411 return Ctx->getELFSection(
1412 S->getName(), S->getType(), Flags, S->getEntrySize(),
1413 S->getName() + "_" + FuncName + "." + Twine::utohexstr(FuncHash),
1414 /*IsComdat=*/true);
1415 } else if (ObjFileType == MCContext::IsCOFF) {
1416 auto *S = static_cast<MCSectionCOFF *>(PseudoProbeDescSection);
1417 unsigned Characteristics =
1418 S->getCharacteristics() | COFF::IMAGE_SCN_LNK_COMDAT;
1419 std::string COMDATSymName =
1420 (S->getName() + "_" + FuncName + "." + Twine::utohexstr(FuncHash))
1421 .str();
1422 return Ctx->getCOFFSection(S->getName(), Characteristics, COMDATSymName,
1424 }
1425
1427}
1428
1432
1434 const MCSection *TextSec) const {
1435 if (Ctx->getObjectFileType() != MCContext::IsELF)
1436 return nullptr;
1437
1438 // SHF_WRITE for relocations, and let user post-process data in-place.
1440
1441 if (!TextSec)
1442 TextSec = getTextSection();
1443
1444 StringRef GroupName;
1445 const auto &ElfSec = static_cast<const MCSectionELF &>(*TextSec);
1446 if (const MCSymbol *Group = ElfSec.getGroup()) {
1447 GroupName = Group->getName();
1448 Flags |= ELF::SHF_GROUP;
1449 }
1450 return Ctx->getELFSection(
1451 Name, ELF::SHT_PROGBITS, Flags, 0, GroupName, true, ElfSec.getUniqueID(),
1452 static_cast<const MCSymbolELF *>(TextSec->getBeginSymbol()));
1453}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
amdgpu AMDGPU DAG DAG Pattern Instruction Selection
static bool useCompactUnwind(const Triple &T)
This file declares the MCSectionGOFF class, which contains all of the necessary machine code sections...
This file contains the MCSymbolGOFF class.
#define T
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.
Context object for machine code objects.
Definition MCContext.h:83
LLVM_ABI MCSymbol * getOrCreateSymbol(const Twine &Name)
Lookup the symbol inside with the specified Name.
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 * MergeableConst16Section
MCSection * COFFGlobalTypeHashesSection
MCSection * SFrameSection
SFrame section.
MCSection * DwarfGnuPubTypesSection
Section for newer gnu pubtypes.
MCSection * getLLVMStatsSection() const
MCSection * TextSection
Section directive for standard text.
MCSection * TLSDataSection
Section directive for Thread Local data. ELF, MachO, COFF, and Wasm.
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, uint64_t FuncHash) const
MCSection * DwarfLoclistsSection
The DWARF v5 locations list section.
MCSection * PseudoProbeSection
Section for pseudo probe information used by AutoFDO.
MCSection * FourByteConstantSection
MCSection * getStackSizesSection(const MCSection &TextSec) const
MCSection * DwarfRnglistsSection
The DWARF v5 range list section.
const MCSection * DwarfDebugInlineSection
MCSection * getBBAddrMapSection(const MCSection &TextSec) const
MCSection * LazySymbolPointerSection
MCSection * RemarksSection
Remarks section.
MCSection * getPseudoProbeSection(const MCSection &TextSec) const
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 * TLSTLVSection
Section for thread local structure information.
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.
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.
unsigned FDECFIEncoding
FDE CFI encoding.
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 * DwarfGnuPubNamesSection
Section for newer gnu pubnames.
MCSection * StackMapSection
StackMap section.
MCContext & getContext() const
MCSection * DwarfAccelNamespaceSection
MCSection * DataSection
Section directive for standard data.
This represents a section on Windows.
This represents a section on linux, lots of unix variants and some bare metal systems.
unsigned getFlags() const
unsigned getUniqueID() const
const MCSymbolELF * getGroup() const
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:580
void setAlignment(Align Value)
Definition MCSection.h:665
static constexpr unsigned NonUniqueID
Definition MCSection.h:585
void setBeginSymbol(MCSymbol *Sym)
Definition MCSection.h:657
MCSymbol * getBeginSymbol()
Definition MCSection.h:653
void setSymbolTableName(StringRef STN)
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition MCSymbol.h:42
static SectionKind getThreadData()
static SectionKind getMetadata()
static SectionKind getMergeable2ByteCString()
static SectionKind getMergeableConst4()
static SectionKind getText()
static SectionKind getReadOnlyWithRel()
static SectionKind getData()
static SectionKind getMergeableConst8()
static SectionKind getBSS()
static SectionKind getThreadBSS()
static SectionKind getMergeableConst16()
static SectionKind getMergeable1ByteCString()
static SectionKind getReadOnly()
A wrapper around a string literal that serves as a proxy for constructing global tables of StringRefs...
Definition StringRef.h:888
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
constexpr bool empty() const
Check if the string is empty.
Definition StringRef.h:141
Triple - Helper class for working with autoconf configuration names.
Definition Triple.h:48
@ UnknownObjectFormat
Definition Triple.h:419
static Twine utohexstr(uint64_t Val)
Definition Twine.h:385
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
constexpr char Align[]
Key for Kernel::Arg::Metadata::mAlign.
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
@ SHF_MERGE
Definition ELF.h:1264
@ SHF_STRINGS
Definition ELF.h:1267
@ SHF_EXCLUDE
Definition ELF.h:1292
@ SHF_ALLOC
Definition ELF.h:1258
@ SHF_LINK_ORDER
Definition ELF.h:1273
@ SHF_GROUP
Definition ELF.h:1280
@ SHF_WRITE
Definition ELF.h:1255
@ SHF_TLS
Definition ELF.h:1283
@ SHF_EXECINSTR
Definition ELF.h:1261
@ SHT_PROGBITS
Definition ELF.h:1156
@ SHT_NOBITS
Definition ELF.h:1163
@ SHT_LLVM_CALL_GRAPH
Definition ELF.h:1199
@ SHT_MIPS_DWARF
Definition ELF.h:1236
@ SHT_LLVM_BB_ADDR_MAP
Definition ELF.h:1194
@ SHT_GNU_SFRAME
Definition ELF.h:1204
@ SHT_X86_64_UNWIND
Definition ELF.h:1232
@ 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
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_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
@ S_ATTR_DEBUG
S_ATTR_DEBUG - A debug section.
Definition MachO.h:207
@ S_ATTR_NO_DEAD_STRIP
S_ATTR_NO_DEAD_STRIP - No dead stripping.
Definition MachO.h:200
@ 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
@ 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:962
@ DW_EH_PE_sdata4
Definition Dwarf.h:959
@ DW_EH_PE_sdata8
Definition Dwarf.h:960
@ DW_EH_PE_absptr
Definition Dwarf.h:951
@ WASM_SEG_FLAG_STRINGS
Definition Wasm.h:238
This is an optimization pass for GlobalISel generic memory operations.
std::string utostr(uint64_t X, bool isNeg=false)
FuncHash
Definition InstrProf.h:78
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
Definition Error.cpp:163