|
@@ -43,153 +43,6 @@ using namespace dwarf;
|
|
|
// ELF
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
-TargetLoweringObjectFileELF::TargetLoweringObjectFileELF()
|
|
|
- : TargetLoweringObjectFile(),
|
|
|
- TLSDataSection(0),
|
|
|
- TLSBSSSection(0),
|
|
|
- DataRelSection(0),
|
|
|
- DataRelLocalSection(0),
|
|
|
- DataRelROSection(0),
|
|
|
- DataRelROLocalSection(0),
|
|
|
- MergeableConst4Section(0),
|
|
|
- MergeableConst8Section(0),
|
|
|
- MergeableConst16Section(0) {
|
|
|
-}
|
|
|
-
|
|
|
-void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
|
|
|
- const TargetMachine &TM) {
|
|
|
- TargetLoweringObjectFile::Initialize(Ctx, TM);
|
|
|
-
|
|
|
- BSSSection =
|
|
|
- getContext().getELFSection(".bss", ELF::SHT_NOBITS,
|
|
|
- ELF::SHF_WRITE |ELF::SHF_ALLOC,
|
|
|
- SectionKind::getBSS());
|
|
|
-
|
|
|
- TextSection =
|
|
|
- getContext().getELFSection(".text", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_EXECINSTR |
|
|
|
- ELF::SHF_ALLOC,
|
|
|
- SectionKind::getText());
|
|
|
-
|
|
|
- DataSection =
|
|
|
- getContext().getELFSection(".data", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_WRITE |ELF::SHF_ALLOC,
|
|
|
- SectionKind::getDataRel());
|
|
|
-
|
|
|
- ReadOnlySection =
|
|
|
- getContext().getELFSection(".rodata", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_ALLOC,
|
|
|
- SectionKind::getReadOnly());
|
|
|
-
|
|
|
- TLSDataSection =
|
|
|
- getContext().getELFSection(".tdata", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_ALLOC | ELF::SHF_TLS |
|
|
|
- ELF::SHF_WRITE,
|
|
|
- SectionKind::getThreadData());
|
|
|
-
|
|
|
- TLSBSSSection =
|
|
|
- getContext().getELFSection(".tbss", ELF::SHT_NOBITS,
|
|
|
- ELF::SHF_ALLOC | ELF::SHF_TLS |
|
|
|
- ELF::SHF_WRITE,
|
|
|
- SectionKind::getThreadBSS());
|
|
|
-
|
|
|
- DataRelSection =
|
|
|
- getContext().getELFSection(".data.rel", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_ALLOC |ELF::SHF_WRITE,
|
|
|
- SectionKind::getDataRel());
|
|
|
-
|
|
|
- DataRelLocalSection =
|
|
|
- getContext().getELFSection(".data.rel.local", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_ALLOC |ELF::SHF_WRITE,
|
|
|
- SectionKind::getDataRelLocal());
|
|
|
-
|
|
|
- DataRelROSection =
|
|
|
- getContext().getELFSection(".data.rel.ro", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_ALLOC |ELF::SHF_WRITE,
|
|
|
- SectionKind::getReadOnlyWithRel());
|
|
|
-
|
|
|
- DataRelROLocalSection =
|
|
|
- getContext().getELFSection(".data.rel.ro.local", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_ALLOC |ELF::SHF_WRITE,
|
|
|
- SectionKind::getReadOnlyWithRelLocal());
|
|
|
-
|
|
|
- MergeableConst4Section =
|
|
|
- getContext().getELFSection(".rodata.cst4", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_ALLOC |ELF::SHF_MERGE,
|
|
|
- SectionKind::getMergeableConst4());
|
|
|
-
|
|
|
- MergeableConst8Section =
|
|
|
- getContext().getELFSection(".rodata.cst8", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_ALLOC |ELF::SHF_MERGE,
|
|
|
- SectionKind::getMergeableConst8());
|
|
|
-
|
|
|
- MergeableConst16Section =
|
|
|
- getContext().getELFSection(".rodata.cst16", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_ALLOC |ELF::SHF_MERGE,
|
|
|
- SectionKind::getMergeableConst16());
|
|
|
-
|
|
|
- StaticCtorSection =
|
|
|
- getContext().getELFSection(".ctors", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_ALLOC |ELF::SHF_WRITE,
|
|
|
- SectionKind::getDataRel());
|
|
|
-
|
|
|
- StaticDtorSection =
|
|
|
- getContext().getELFSection(".dtors", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_ALLOC |ELF::SHF_WRITE,
|
|
|
- SectionKind::getDataRel());
|
|
|
-
|
|
|
- // Exception Handling Sections.
|
|
|
-
|
|
|
- // FIXME: We're emitting LSDA info into a readonly section on ELF, even though
|
|
|
- // it contains relocatable pointers. In PIC mode, this is probably a big
|
|
|
- // runtime hit for C++ apps. Either the contents of the LSDA need to be
|
|
|
- // adjusted or this should be a data section.
|
|
|
- LSDASection =
|
|
|
- getContext().getELFSection(".gcc_except_table", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_ALLOC,
|
|
|
- SectionKind::getReadOnly());
|
|
|
- // Debug Info Sections.
|
|
|
- DwarfAbbrevSection =
|
|
|
- getContext().getELFSection(".debug_abbrev", ELF::SHT_PROGBITS, 0,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfInfoSection =
|
|
|
- getContext().getELFSection(".debug_info", ELF::SHT_PROGBITS, 0,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfLineSection =
|
|
|
- getContext().getELFSection(".debug_line", ELF::SHT_PROGBITS, 0,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfFrameSection =
|
|
|
- getContext().getELFSection(".debug_frame", ELF::SHT_PROGBITS, 0,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfPubNamesSection =
|
|
|
- getContext().getELFSection(".debug_pubnames", ELF::SHT_PROGBITS, 0,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfPubTypesSection =
|
|
|
- getContext().getELFSection(".debug_pubtypes", ELF::SHT_PROGBITS, 0,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfStrSection =
|
|
|
- getContext().getELFSection(".debug_str", ELF::SHT_PROGBITS, 0,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfLocSection =
|
|
|
- getContext().getELFSection(".debug_loc", ELF::SHT_PROGBITS, 0,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfARangesSection =
|
|
|
- getContext().getELFSection(".debug_aranges", ELF::SHT_PROGBITS, 0,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfRangesSection =
|
|
|
- getContext().getELFSection(".debug_ranges", ELF::SHT_PROGBITS, 0,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfMacroInfoSection =
|
|
|
- getContext().getELFSection(".debug_macinfo", ELF::SHT_PROGBITS, 0,
|
|
|
- SectionKind::getMetadata());
|
|
|
-}
|
|
|
-
|
|
|
-const MCSection *TargetLoweringObjectFileELF::getEHFrameSection() const {
|
|
|
- return getContext().getELFSection(".eh_frame", ELF::SHT_PROGBITS,
|
|
|
- ELF::SHF_ALLOC,
|
|
|
- SectionKind::getDataRel());
|
|
|
-}
|
|
|
-
|
|
|
MCSymbol *
|
|
|
TargetLoweringObjectFileELF::getCFIPersonalitySymbol(const GlobalValue *GV,
|
|
|
Mangler *Mang,
|
|
@@ -493,221 +346,6 @@ getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,
|
|
|
// MachO
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
-TargetLoweringObjectFileMachO::TargetLoweringObjectFileMachO()
|
|
|
- : TargetLoweringObjectFile(),
|
|
|
- TLSDataSection(0),
|
|
|
- TLSBSSSection(0),
|
|
|
- TLSTLVSection(0),
|
|
|
- TLSThreadInitSection(0),
|
|
|
- CStringSection(0),
|
|
|
- UStringSection(0),
|
|
|
- TextCoalSection(0),
|
|
|
- ConstTextCoalSection(0),
|
|
|
- ConstDataSection(0),
|
|
|
- DataCoalSection(0),
|
|
|
- DataCommonSection(0),
|
|
|
- DataBSSSection(0),
|
|
|
- FourByteConstantSection(0),
|
|
|
- EightByteConstantSection(0),
|
|
|
- SixteenByteConstantSection(0),
|
|
|
- LazySymbolPointerSection(0),
|
|
|
- NonLazySymbolPointerSection(0) {
|
|
|
-}
|
|
|
-
|
|
|
-void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,
|
|
|
- const TargetMachine &TM) {
|
|
|
- IsFunctionEHFrameSymbolPrivate = false;
|
|
|
- SupportsWeakOmittedEHFrame = false;
|
|
|
-
|
|
|
- // .comm doesn't support alignment before Leopard.
|
|
|
- Triple T(((LLVMTargetMachine&)TM).getTargetTriple());
|
|
|
- if (T.isMacOSX() && T.isMacOSXVersionLT(10, 5))
|
|
|
- CommDirectiveSupportsAlignment = false;
|
|
|
-
|
|
|
- TargetLoweringObjectFile::Initialize(Ctx, TM);
|
|
|
-
|
|
|
- TextSection // .text
|
|
|
- = getContext().getMachOSection("__TEXT", "__text",
|
|
|
- MCSectionMachO::S_ATTR_PURE_INSTRUCTIONS,
|
|
|
- SectionKind::getText());
|
|
|
- DataSection // .data
|
|
|
- = getContext().getMachOSection("__DATA", "__data", 0,
|
|
|
- SectionKind::getDataRel());
|
|
|
-
|
|
|
- TLSDataSection // .tdata
|
|
|
- = getContext().getMachOSection("__DATA", "__thread_data",
|
|
|
- MCSectionMachO::S_THREAD_LOCAL_REGULAR,
|
|
|
- SectionKind::getDataRel());
|
|
|
- TLSBSSSection // .tbss
|
|
|
- = getContext().getMachOSection("__DATA", "__thread_bss",
|
|
|
- MCSectionMachO::S_THREAD_LOCAL_ZEROFILL,
|
|
|
- SectionKind::getThreadBSS());
|
|
|
-
|
|
|
- // TODO: Verify datarel below.
|
|
|
- TLSTLVSection // .tlv
|
|
|
- = getContext().getMachOSection("__DATA", "__thread_vars",
|
|
|
- MCSectionMachO::S_THREAD_LOCAL_VARIABLES,
|
|
|
- SectionKind::getDataRel());
|
|
|
-
|
|
|
- TLSThreadInitSection
|
|
|
- = getContext().getMachOSection("__DATA", "__thread_init",
|
|
|
- MCSectionMachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS,
|
|
|
- SectionKind::getDataRel());
|
|
|
-
|
|
|
- CStringSection // .cstring
|
|
|
- = getContext().getMachOSection("__TEXT", "__cstring",
|
|
|
- MCSectionMachO::S_CSTRING_LITERALS,
|
|
|
- SectionKind::getMergeable1ByteCString());
|
|
|
- UStringSection
|
|
|
- = getContext().getMachOSection("__TEXT","__ustring", 0,
|
|
|
- SectionKind::getMergeable2ByteCString());
|
|
|
- FourByteConstantSection // .literal4
|
|
|
- = getContext().getMachOSection("__TEXT", "__literal4",
|
|
|
- MCSectionMachO::S_4BYTE_LITERALS,
|
|
|
- SectionKind::getMergeableConst4());
|
|
|
- EightByteConstantSection // .literal8
|
|
|
- = getContext().getMachOSection("__TEXT", "__literal8",
|
|
|
- MCSectionMachO::S_8BYTE_LITERALS,
|
|
|
- SectionKind::getMergeableConst8());
|
|
|
-
|
|
|
- // ld_classic doesn't support .literal16 in 32-bit mode, and ld64 falls back
|
|
|
- // to using it in -static mode.
|
|
|
- SixteenByteConstantSection = 0;
|
|
|
- if (TM.getRelocationModel() != Reloc::Static &&
|
|
|
- TM.getTargetData()->getPointerSizeInBits() == 32)
|
|
|
- SixteenByteConstantSection = // .literal16
|
|
|
- getContext().getMachOSection("__TEXT", "__literal16",
|
|
|
- MCSectionMachO::S_16BYTE_LITERALS,
|
|
|
- SectionKind::getMergeableConst16());
|
|
|
-
|
|
|
- ReadOnlySection // .const
|
|
|
- = getContext().getMachOSection("__TEXT", "__const", 0,
|
|
|
- SectionKind::getReadOnly());
|
|
|
-
|
|
|
- TextCoalSection
|
|
|
- = getContext().getMachOSection("__TEXT", "__textcoal_nt",
|
|
|
- MCSectionMachO::S_COALESCED |
|
|
|
- MCSectionMachO::S_ATTR_PURE_INSTRUCTIONS,
|
|
|
- SectionKind::getText());
|
|
|
- ConstTextCoalSection
|
|
|
- = getContext().getMachOSection("__TEXT", "__const_coal",
|
|
|
- MCSectionMachO::S_COALESCED,
|
|
|
- SectionKind::getReadOnly());
|
|
|
- ConstDataSection // .const_data
|
|
|
- = getContext().getMachOSection("__DATA", "__const", 0,
|
|
|
- SectionKind::getReadOnlyWithRel());
|
|
|
- DataCoalSection
|
|
|
- = getContext().getMachOSection("__DATA","__datacoal_nt",
|
|
|
- MCSectionMachO::S_COALESCED,
|
|
|
- SectionKind::getDataRel());
|
|
|
- DataCommonSection
|
|
|
- = getContext().getMachOSection("__DATA","__common",
|
|
|
- MCSectionMachO::S_ZEROFILL,
|
|
|
- SectionKind::getBSS());
|
|
|
- DataBSSSection
|
|
|
- = getContext().getMachOSection("__DATA","__bss", MCSectionMachO::S_ZEROFILL,
|
|
|
- SectionKind::getBSS());
|
|
|
-
|
|
|
-
|
|
|
- LazySymbolPointerSection
|
|
|
- = getContext().getMachOSection("__DATA", "__la_symbol_ptr",
|
|
|
- MCSectionMachO::S_LAZY_SYMBOL_POINTERS,
|
|
|
- SectionKind::getMetadata());
|
|
|
- NonLazySymbolPointerSection
|
|
|
- = getContext().getMachOSection("__DATA", "__nl_symbol_ptr",
|
|
|
- MCSectionMachO::S_NON_LAZY_SYMBOL_POINTERS,
|
|
|
- SectionKind::getMetadata());
|
|
|
-
|
|
|
- if (TM.getRelocationModel() == Reloc::Static) {
|
|
|
- StaticCtorSection
|
|
|
- = getContext().getMachOSection("__TEXT", "__constructor", 0,
|
|
|
- SectionKind::getDataRel());
|
|
|
- StaticDtorSection
|
|
|
- = getContext().getMachOSection("__TEXT", "__destructor", 0,
|
|
|
- SectionKind::getDataRel());
|
|
|
- } else {
|
|
|
- StaticCtorSection
|
|
|
- = getContext().getMachOSection("__DATA", "__mod_init_func",
|
|
|
- MCSectionMachO::S_MOD_INIT_FUNC_POINTERS,
|
|
|
- SectionKind::getDataRel());
|
|
|
- StaticDtorSection
|
|
|
- = getContext().getMachOSection("__DATA", "__mod_term_func",
|
|
|
- MCSectionMachO::S_MOD_TERM_FUNC_POINTERS,
|
|
|
- SectionKind::getDataRel());
|
|
|
- }
|
|
|
-
|
|
|
- // Exception Handling.
|
|
|
- LSDASection = getContext().getMachOSection("__TEXT", "__gcc_except_tab", 0,
|
|
|
- SectionKind::getReadOnlyWithRel());
|
|
|
-
|
|
|
- if (T.isMacOSX() && !T.isMacOSXVersionLT(10, 6))
|
|
|
- CompactUnwindSection =
|
|
|
- getContext().getMachOSection("__LD", "__compact_unwind",
|
|
|
- MCSectionMachO::S_ATTR_DEBUG,
|
|
|
- SectionKind::getReadOnly());
|
|
|
-
|
|
|
- // Debug Information.
|
|
|
- DwarfAbbrevSection =
|
|
|
- getContext().getMachOSection("__DWARF", "__debug_abbrev",
|
|
|
- MCSectionMachO::S_ATTR_DEBUG,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfInfoSection =
|
|
|
- getContext().getMachOSection("__DWARF", "__debug_info",
|
|
|
- MCSectionMachO::S_ATTR_DEBUG,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfLineSection =
|
|
|
- getContext().getMachOSection("__DWARF", "__debug_line",
|
|
|
- MCSectionMachO::S_ATTR_DEBUG,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfFrameSection =
|
|
|
- getContext().getMachOSection("__DWARF", "__debug_frame",
|
|
|
- MCSectionMachO::S_ATTR_DEBUG,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfPubNamesSection =
|
|
|
- getContext().getMachOSection("__DWARF", "__debug_pubnames",
|
|
|
- MCSectionMachO::S_ATTR_DEBUG,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfPubTypesSection =
|
|
|
- getContext().getMachOSection("__DWARF", "__debug_pubtypes",
|
|
|
- MCSectionMachO::S_ATTR_DEBUG,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfStrSection =
|
|
|
- getContext().getMachOSection("__DWARF", "__debug_str",
|
|
|
- MCSectionMachO::S_ATTR_DEBUG,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfLocSection =
|
|
|
- getContext().getMachOSection("__DWARF", "__debug_loc",
|
|
|
- MCSectionMachO::S_ATTR_DEBUG,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfARangesSection =
|
|
|
- getContext().getMachOSection("__DWARF", "__debug_aranges",
|
|
|
- MCSectionMachO::S_ATTR_DEBUG,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfRangesSection =
|
|
|
- getContext().getMachOSection("__DWARF", "__debug_ranges",
|
|
|
- MCSectionMachO::S_ATTR_DEBUG,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfMacroInfoSection =
|
|
|
- getContext().getMachOSection("__DWARF", "__debug_macinfo",
|
|
|
- MCSectionMachO::S_ATTR_DEBUG,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfDebugInlineSection =
|
|
|
- getContext().getMachOSection("__DWARF", "__debug_inlined",
|
|
|
- MCSectionMachO::S_ATTR_DEBUG,
|
|
|
- SectionKind::getMetadata());
|
|
|
-
|
|
|
- TLSExtraDataSection = TLSTLVSection;
|
|
|
-}
|
|
|
-
|
|
|
-const MCSection *TargetLoweringObjectFileMachO::getEHFrameSection() const {
|
|
|
- return getContext().getMachOSection("__TEXT", "__eh_frame",
|
|
|
- MCSectionMachO::S_COALESCED |
|
|
|
- MCSectionMachO::S_ATTR_NO_TOC |
|
|
|
- MCSectionMachO::S_ATTR_STRIP_STATIC_SYMS |
|
|
|
- MCSectionMachO::S_ATTR_LIVE_SUPPORT,
|
|
|
- SectionKind::getReadOnly());
|
|
|
-}
|
|
|
-
|
|
|
const MCSection *TargetLoweringObjectFileMachO::
|
|
|
getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
|
|
Mangler *Mang, const TargetMachine &TM) const {
|
|
@@ -925,163 +563,6 @@ unsigned TargetLoweringObjectFileMachO::getTTypeEncoding() const {
|
|
|
// COFF
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
-TargetLoweringObjectFileCOFF::TargetLoweringObjectFileCOFF()
|
|
|
- : TargetLoweringObjectFile(),
|
|
|
- DrectveSection(0),
|
|
|
- PDataSection(0),
|
|
|
- XDataSection(0) {
|
|
|
-}
|
|
|
-
|
|
|
-void TargetLoweringObjectFileCOFF::Initialize(MCContext &Ctx,
|
|
|
- const TargetMachine &TM) {
|
|
|
- TargetLoweringObjectFile::Initialize(Ctx, TM);
|
|
|
- TextSection =
|
|
|
- getContext().getCOFFSection(".text",
|
|
|
- COFF::IMAGE_SCN_CNT_CODE |
|
|
|
- COFF::IMAGE_SCN_MEM_EXECUTE |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getText());
|
|
|
- DataSection =
|
|
|
- getContext().getCOFFSection(".data",
|
|
|
- COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
|
|
|
- COFF::IMAGE_SCN_MEM_READ |
|
|
|
- COFF::IMAGE_SCN_MEM_WRITE,
|
|
|
- SectionKind::getDataRel());
|
|
|
- ReadOnlySection =
|
|
|
- getContext().getCOFFSection(".rdata",
|
|
|
- COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getReadOnly());
|
|
|
- StaticCtorSection =
|
|
|
- getContext().getCOFFSection(".ctors",
|
|
|
- COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
|
|
|
- COFF::IMAGE_SCN_MEM_READ |
|
|
|
- COFF::IMAGE_SCN_MEM_WRITE,
|
|
|
- SectionKind::getDataRel());
|
|
|
- StaticDtorSection =
|
|
|
- getContext().getCOFFSection(".dtors",
|
|
|
- COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
|
|
|
- COFF::IMAGE_SCN_MEM_READ |
|
|
|
- COFF::IMAGE_SCN_MEM_WRITE,
|
|
|
- SectionKind::getDataRel());
|
|
|
-
|
|
|
- // FIXME: We're emitting LSDA info into a readonly section on COFF, even
|
|
|
- // though it contains relocatable pointers. In PIC mode, this is probably a
|
|
|
- // big runtime hit for C++ apps. Either the contents of the LSDA need to be
|
|
|
- // adjusted or this should be a data section.
|
|
|
- LSDASection =
|
|
|
- getContext().getCOFFSection(".gcc_except_table",
|
|
|
- COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getReadOnly());
|
|
|
- // Debug info.
|
|
|
- DwarfAbbrevSection =
|
|
|
- getContext().getCOFFSection(".debug_abbrev",
|
|
|
- COFF::IMAGE_SCN_MEM_DISCARDABLE |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfInfoSection =
|
|
|
- getContext().getCOFFSection(".debug_info",
|
|
|
- COFF::IMAGE_SCN_MEM_DISCARDABLE |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfLineSection =
|
|
|
- getContext().getCOFFSection(".debug_line",
|
|
|
- COFF::IMAGE_SCN_MEM_DISCARDABLE |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfFrameSection =
|
|
|
- getContext().getCOFFSection(".debug_frame",
|
|
|
- COFF::IMAGE_SCN_MEM_DISCARDABLE |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfPubNamesSection =
|
|
|
- getContext().getCOFFSection(".debug_pubnames",
|
|
|
- COFF::IMAGE_SCN_MEM_DISCARDABLE |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfPubTypesSection =
|
|
|
- getContext().getCOFFSection(".debug_pubtypes",
|
|
|
- COFF::IMAGE_SCN_MEM_DISCARDABLE |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfStrSection =
|
|
|
- getContext().getCOFFSection(".debug_str",
|
|
|
- COFF::IMAGE_SCN_MEM_DISCARDABLE |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfLocSection =
|
|
|
- getContext().getCOFFSection(".debug_loc",
|
|
|
- COFF::IMAGE_SCN_MEM_DISCARDABLE |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfARangesSection =
|
|
|
- getContext().getCOFFSection(".debug_aranges",
|
|
|
- COFF::IMAGE_SCN_MEM_DISCARDABLE |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfRangesSection =
|
|
|
- getContext().getCOFFSection(".debug_ranges",
|
|
|
- COFF::IMAGE_SCN_MEM_DISCARDABLE |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getMetadata());
|
|
|
- DwarfMacroInfoSection =
|
|
|
- getContext().getCOFFSection(".debug_macinfo",
|
|
|
- COFF::IMAGE_SCN_MEM_DISCARDABLE |
|
|
|
- COFF::IMAGE_SCN_MEM_READ,
|
|
|
- SectionKind::getMetadata());
|
|
|
-
|
|
|
- DrectveSection =
|
|
|
- getContext().getCOFFSection(".drectve",
|
|
|
- COFF::IMAGE_SCN_LNK_INFO,
|
|
|
- SectionKind::getMetadata());
|
|
|
-
|
|
|
- PDataSection =
|
|
|
- getContext().getCOFFSection(".pdata",
|
|
|
- COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
|
|
|
- COFF::IMAGE_SCN_MEM_READ |
|
|
|
- COFF::IMAGE_SCN_MEM_WRITE,
|
|
|
- SectionKind::getDataRel());
|
|
|
-
|
|
|
- XDataSection =
|
|
|
- getContext().getCOFFSection(".xdata",
|
|
|
- COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
|
|
|
- COFF::IMAGE_SCN_MEM_READ |
|
|
|
- COFF::IMAGE_SCN_MEM_WRITE,
|
|
|
- SectionKind::getDataRel());
|
|
|
-}
|
|
|
-
|
|
|
-const MCSection *TargetLoweringObjectFileCOFF::getEHFrameSection() const {
|
|
|
- return getContext().getCOFFSection(".eh_frame",
|
|
|
- COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
|
|
|
- COFF::IMAGE_SCN_MEM_READ |
|
|
|
- COFF::IMAGE_SCN_MEM_WRITE,
|
|
|
- SectionKind::getDataRel());
|
|
|
-}
|
|
|
-
|
|
|
-const MCSection *TargetLoweringObjectFileCOFF::getWin64EHFuncTableSection(
|
|
|
- StringRef suffix) const {
|
|
|
- if (suffix == "")
|
|
|
- return PDataSection;
|
|
|
- return getContext().getCOFFSection((".pdata"+suffix).str(),
|
|
|
- COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
|
|
|
- COFF::IMAGE_SCN_MEM_READ |
|
|
|
- COFF::IMAGE_SCN_MEM_WRITE,
|
|
|
- SectionKind::getDataRel());
|
|
|
-}
|
|
|
-
|
|
|
-const MCSection *TargetLoweringObjectFileCOFF::getWin64EHTableSection(
|
|
|
- StringRef suffix) const {
|
|
|
- if (suffix == "")
|
|
|
- return XDataSection;
|
|
|
- return getContext().getCOFFSection((".xdata"+suffix).str(),
|
|
|
- COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
|
|
|
- COFF::IMAGE_SCN_MEM_READ |
|
|
|
- COFF::IMAGE_SCN_MEM_WRITE,
|
|
|
- SectionKind::getDataRel());
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
static unsigned
|
|
|
getCOFFSectionFlags(SectionKind K) {
|
|
|
unsigned Flags = 0;
|