119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===-- MObjectFileInfo.cpp - Object File Information ---------------------===// 219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// The LLVM Compiler Infrastructure 419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// This file is distributed under the University of Illinois Open Source 619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// License. See LICENSE.TXT for details. 719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===----------------------------------------------------------------------===// 919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/MC/MCObjectFileInfo.h" 1119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/MC/MCContext.h" 1219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/MC/MCSection.h" 1319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/MC/MCSectionCOFF.h" 1419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/MC/MCSectionELF.h" 1519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/MC/MCSectionMachO.h" 1619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/ADT/Triple.h" 1719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanusing namespace llvm; 1819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanvoid MCObjectFileInfo::InitMachOMCObjectFileInfo(Triple T) { 2019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // MachO 2119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman IsFunctionEHFrameSymbolPrivate = false; 2219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SupportsWeakOmittedEHFrame = false; 2319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 2419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel 2519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman | dwarf::DW_EH_PE_sdata4; 2619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman LSDAEncoding = FDEEncoding = FDECFIEncoding = dwarf::DW_EH_PE_pcrel; 2719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | 2819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman dwarf::DW_EH_PE_sdata4; 2919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 3019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // .comm doesn't support alignment before Leopard. 3119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman if (T.isMacOSX() && T.isMacOSXVersionLT(10, 5)) 3219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman CommDirectiveSupportsAlignment = false; 3319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 3419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TextSection // .text 3519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__TEXT", "__text", 3619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_PURE_INSTRUCTIONS, 3719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getText()); 3819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DataSection // .data 3919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__DATA", "__data", 0, 4019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 4119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 4219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TLSDataSection // .tdata 4319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__DATA", "__thread_data", 4419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_THREAD_LOCAL_REGULAR, 4519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 4619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TLSBSSSection // .tbss 4719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__DATA", "__thread_bss", 4819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_THREAD_LOCAL_ZEROFILL, 4919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getThreadBSS()); 5019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 5119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // TODO: Verify datarel below. 5219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TLSTLVSection // .tlv 5319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__DATA", "__thread_vars", 5419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_THREAD_LOCAL_VARIABLES, 5519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 5619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 5719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TLSThreadInitSection 5819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__DATA", "__thread_init", 5919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS, 6019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 6119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 6219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman CStringSection // .cstring 6319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__TEXT", "__cstring", 6419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_CSTRING_LITERALS, 6519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMergeable1ByteCString()); 6619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman UStringSection 6719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__TEXT","__ustring", 0, 6819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMergeable2ByteCString()); 6919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman FourByteConstantSection // .literal4 7019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__TEXT", "__literal4", 7119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_4BYTE_LITERALS, 7219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMergeableConst4()); 7319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman EightByteConstantSection // .literal8 7419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__TEXT", "__literal8", 7519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_8BYTE_LITERALS, 7619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMergeableConst8()); 7719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 7819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // ld_classic doesn't support .literal16 in 32-bit mode, and ld64 falls back 7919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // to using it in -static mode. 8019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SixteenByteConstantSection = 0; 8119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman if (RelocM != Reloc::Static && 8219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman T.getArch() != Triple::x86_64 && T.getArch() != Triple::ppc64) 8319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SixteenByteConstantSection = // .literal16 8419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__TEXT", "__literal16", 8519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_16BYTE_LITERALS, 8619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMergeableConst16()); 8719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 8819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ReadOnlySection // .const 8919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__TEXT", "__const", 0, 9019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getReadOnly()); 9119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 9219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TextCoalSection 9319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__TEXT", "__textcoal_nt", 9419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_COALESCED | 9519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_PURE_INSTRUCTIONS, 9619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getText()); 9719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ConstTextCoalSection 9819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__TEXT", "__const_coal", 9919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_COALESCED, 10019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getReadOnly()); 10119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ConstDataSection // .const_data 10219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__DATA", "__const", 0, 10319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getReadOnlyWithRel()); 10419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DataCoalSection 10519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__DATA","__datacoal_nt", 10619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_COALESCED, 10719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 10819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DataCommonSection 10919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__DATA","__common", 11019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ZEROFILL, 11119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getBSS()); 11219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DataBSSSection 11319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__DATA","__bss", MCSectionMachO::S_ZEROFILL, 11419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getBSS()); 11519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 11619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 11719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman LazySymbolPointerSection 11819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__DATA", "__la_symbol_ptr", 11919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_LAZY_SYMBOL_POINTERS, 12019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 12119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman NonLazySymbolPointerSection 12219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__DATA", "__nl_symbol_ptr", 12319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_NON_LAZY_SYMBOL_POINTERS, 12419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 12519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 12619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman if (RelocM == Reloc::Static) { 12719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman StaticCtorSection 12819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__TEXT", "__constructor", 0, 12919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 13019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman StaticDtorSection 13119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__TEXT", "__destructor", 0, 13219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 13319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman } else { 13419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman StaticCtorSection 13519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__DATA", "__mod_init_func", 13619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_MOD_INIT_FUNC_POINTERS, 13719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 13819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman StaticDtorSection 13919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman = Ctx->getMachOSection("__DATA", "__mod_term_func", 14019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_MOD_TERM_FUNC_POINTERS, 14119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 14219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman } 14319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 14419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // Exception Handling. 14519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman LSDASection = Ctx->getMachOSection("__TEXT", "__gcc_except_tab", 0, 14619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getReadOnlyWithRel()); 14719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 14819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman if (T.isMacOSX() && !T.isMacOSXVersionLT(10, 6)) 14919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman CompactUnwindSection = 15019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__LD", "__compact_unwind", 15119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_DEBUG, 15219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getReadOnly()); 15319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 15419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // Debug Information. 15519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfAbbrevSection = 15619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__DWARF", "__debug_abbrev", 15719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_DEBUG, 15819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 15919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfInfoSection = 16019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__DWARF", "__debug_info", 16119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_DEBUG, 16219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 16319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfLineSection = 16419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__DWARF", "__debug_line", 16519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_DEBUG, 16619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 16719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfFrameSection = 16819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__DWARF", "__debug_frame", 16919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_DEBUG, 17019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 17119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfPubNamesSection = 17219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__DWARF", "__debug_pubnames", 17319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_DEBUG, 17419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 17519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfPubTypesSection = 17619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__DWARF", "__debug_pubtypes", 17719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_DEBUG, 17819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 17919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfStrSection = 18019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__DWARF", "__debug_str", 18119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_DEBUG, 18219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 18319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfLocSection = 18419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__DWARF", "__debug_loc", 18519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_DEBUG, 18619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 18719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfARangesSection = 18819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__DWARF", "__debug_aranges", 18919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_DEBUG, 19019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 19119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfRangesSection = 19219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__DWARF", "__debug_ranges", 19319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_DEBUG, 19419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 19519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfMacroInfoSection = 19619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__DWARF", "__debug_macinfo", 19719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_DEBUG, 19819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 19919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfDebugInlineSection = 20019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__DWARF", "__debug_inlined", 20119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_DEBUG, 20219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 20319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 20419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TLSExtraDataSection = TLSTLVSection; 20519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 20619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 20719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanvoid MCObjectFileInfo::InitELFMCObjectFileInfo(Triple T) { 20819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman if (T.getArch() == Triple::x86) { 20919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman PersonalityEncoding = (RelocM == Reloc::PIC_) 21019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ? dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4 21119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman : dwarf::DW_EH_PE_absptr; 21219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman LSDAEncoding = (RelocM == Reloc::PIC_) 21319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ? dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4 21419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman : dwarf::DW_EH_PE_absptr; 21519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman FDEEncoding = FDECFIEncoding = (RelocM == Reloc::PIC_) 21619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ? dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4 21719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman : dwarf::DW_EH_PE_absptr; 21819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TTypeEncoding = (RelocM == Reloc::PIC_) 21919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ? dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4 22019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman : dwarf::DW_EH_PE_absptr; 22119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman } else if (T.getArch() == Triple::x86_64) { 22219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman FDECFIEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; 22319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 22419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman if (RelocM == Reloc::PIC_) { 22519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman PersonalityEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | 22619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ((CMModel == CodeModel::Small || CMModel == CodeModel::Medium) 22719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ? dwarf::DW_EH_PE_sdata4 : dwarf::DW_EH_PE_sdata8); 22819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman LSDAEncoding = dwarf::DW_EH_PE_pcrel | 22919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman (CMModel == CodeModel::Small 23019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ? dwarf::DW_EH_PE_sdata4 : dwarf::DW_EH_PE_sdata8); 23119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman FDEEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4; 23219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | 23319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ((CMModel == CodeModel::Small || CMModel == CodeModel::Medium) 23419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ? dwarf::DW_EH_PE_sdata4 : dwarf::DW_EH_PE_sdata8); 23519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman } else { 23619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman PersonalityEncoding = 23719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman (CMModel == CodeModel::Small || CMModel == CodeModel::Medium) 23819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ? dwarf::DW_EH_PE_udata4 : dwarf::DW_EH_PE_absptr; 23919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman LSDAEncoding = (CMModel == CodeModel::Small) 24019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ? dwarf::DW_EH_PE_udata4 : dwarf::DW_EH_PE_absptr; 24119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman FDEEncoding = dwarf::DW_EH_PE_udata4; 24219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TTypeEncoding = (CMModel == CodeModel::Small) 24319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ? dwarf::DW_EH_PE_udata4 : dwarf::DW_EH_PE_absptr; 24419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman } 24519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman } 24619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 24719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // ELF 24819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman BSSSection = 24919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".bss", ELF::SHT_NOBITS, 25019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_WRITE |ELF::SHF_ALLOC, 25119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getBSS()); 25219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 25319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TextSection = 25419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".text", ELF::SHT_PROGBITS, 25519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_EXECINSTR | 25619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC, 25719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getText()); 25819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 25919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DataSection = 26019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".data", ELF::SHT_PROGBITS, 26119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_WRITE |ELF::SHF_ALLOC, 26219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 26319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 26419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ReadOnlySection = 26519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".rodata", ELF::SHT_PROGBITS, 26619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC, 26719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getReadOnly()); 26819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 26919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TLSDataSection = 27019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".tdata", ELF::SHT_PROGBITS, 27119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC | ELF::SHF_TLS | 27219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_WRITE, 27319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getThreadData()); 27419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 27519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TLSBSSSection = 27619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".tbss", ELF::SHT_NOBITS, 27719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC | ELF::SHF_TLS | 27819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_WRITE, 27919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getThreadBSS()); 28019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 28119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DataRelSection = 28219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".data.rel", ELF::SHT_PROGBITS, 28319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC |ELF::SHF_WRITE, 28419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 28519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 28619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DataRelLocalSection = 28719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".data.rel.local", ELF::SHT_PROGBITS, 28819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC |ELF::SHF_WRITE, 28919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRelLocal()); 29019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 29119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DataRelROSection = 29219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".data.rel.ro", ELF::SHT_PROGBITS, 29319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC |ELF::SHF_WRITE, 29419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getReadOnlyWithRel()); 29519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 29619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DataRelROLocalSection = 29719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".data.rel.ro.local", ELF::SHT_PROGBITS, 29819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC |ELF::SHF_WRITE, 29919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getReadOnlyWithRelLocal()); 30019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 30119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MergeableConst4Section = 30219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".rodata.cst4", ELF::SHT_PROGBITS, 30319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC |ELF::SHF_MERGE, 30419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMergeableConst4()); 30519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 30619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MergeableConst8Section = 30719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".rodata.cst8", ELF::SHT_PROGBITS, 30819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC |ELF::SHF_MERGE, 30919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMergeableConst8()); 31019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 31119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MergeableConst16Section = 31219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".rodata.cst16", ELF::SHT_PROGBITS, 31319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC |ELF::SHF_MERGE, 31419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMergeableConst16()); 31519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 31619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman StaticCtorSection = 31719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".ctors", ELF::SHT_PROGBITS, 31819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC |ELF::SHF_WRITE, 31919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 32019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 32119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman StaticDtorSection = 32219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".dtors", ELF::SHT_PROGBITS, 32319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC |ELF::SHF_WRITE, 32419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 32519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 32619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // Exception Handling Sections. 32719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 32819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // FIXME: We're emitting LSDA info into a readonly section on ELF, even though 32919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // it contains relocatable pointers. In PIC mode, this is probably a big 33019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // runtime hit for C++ apps. Either the contents of the LSDA need to be 33119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // adjusted or this should be a data section. 33219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman LSDASection = 33319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".gcc_except_table", ELF::SHT_PROGBITS, 33419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC, 33519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getReadOnly()); 33619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 33719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // Debug Info Sections. 33819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfAbbrevSection = 33919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".debug_abbrev", ELF::SHT_PROGBITS, 0, 34019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 34119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfInfoSection = 34219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".debug_info", ELF::SHT_PROGBITS, 0, 34319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 34419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfLineSection = 34519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".debug_line", ELF::SHT_PROGBITS, 0, 34619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 34719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfFrameSection = 34819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".debug_frame", ELF::SHT_PROGBITS, 0, 34919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 35019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfPubNamesSection = 35119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".debug_pubnames", ELF::SHT_PROGBITS, 0, 35219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 35319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfPubTypesSection = 35419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".debug_pubtypes", ELF::SHT_PROGBITS, 0, 35519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 35619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfStrSection = 35719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".debug_str", ELF::SHT_PROGBITS, 0, 35819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 35919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfLocSection = 36019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".debug_loc", ELF::SHT_PROGBITS, 0, 36119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 36219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfARangesSection = 36319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".debug_aranges", ELF::SHT_PROGBITS, 0, 36419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 36519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfRangesSection = 36619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".debug_ranges", ELF::SHT_PROGBITS, 0, 36719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 36819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfMacroInfoSection = 36919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".debug_macinfo", ELF::SHT_PROGBITS, 0, 37019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 37119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 37219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 37319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 37419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanvoid MCObjectFileInfo::InitCOFFMCObjectFileInfo(Triple T) { 37519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // COFF 37619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TextSection = 37719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".text", 37819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_CNT_CODE | 37919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_EXECUTE | 38019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 38119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getText()); 38219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DataSection = 38319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".data", 38419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | 38519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ | 38619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_WRITE, 38719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 38819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ReadOnlySection = 38919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".rdata", 39019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | 39119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 39219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getReadOnly()); 39319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman StaticCtorSection = 39419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".ctors", 39519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | 39619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ | 39719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_WRITE, 39819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 39919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman StaticDtorSection = 40019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".dtors", 40119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | 40219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ | 40319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_WRITE, 40419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 40519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 40619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // FIXME: We're emitting LSDA info into a readonly section on COFF, even 40719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // though it contains relocatable pointers. In PIC mode, this is probably a 40819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // big runtime hit for C++ apps. Either the contents of the LSDA need to be 40919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // adjusted or this should be a data section. 41019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman LSDASection = 41119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".gcc_except_table", 41219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | 41319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 41419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getReadOnly()); 41519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 41619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // Debug info. 41719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfAbbrevSection = 41819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".debug_abbrev", 41919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_DISCARDABLE | 42019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 42119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 42219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfInfoSection = 42319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".debug_info", 42419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_DISCARDABLE | 42519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 42619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 42719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfLineSection = 42819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".debug_line", 42919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_DISCARDABLE | 43019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 43119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 43219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfFrameSection = 43319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".debug_frame", 43419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_DISCARDABLE | 43519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 43619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 43719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfPubNamesSection = 43819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".debug_pubnames", 43919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_DISCARDABLE | 44019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 44119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 44219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfPubTypesSection = 44319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".debug_pubtypes", 44419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_DISCARDABLE | 44519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 44619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 44719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfStrSection = 44819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".debug_str", 44919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_DISCARDABLE | 45019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 45119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 45219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfLocSection = 45319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".debug_loc", 45419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_DISCARDABLE | 45519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 45619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 45719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfARangesSection = 45819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".debug_aranges", 45919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_DISCARDABLE | 46019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 46119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 46219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfRangesSection = 46319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".debug_ranges", 46419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_DISCARDABLE | 46519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 46619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 46719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DwarfMacroInfoSection = 46819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".debug_macinfo", 46919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_DISCARDABLE | 47019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ, 47119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 47219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 47319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman DrectveSection = 47419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".drectve", 47519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_LNK_INFO, 47619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getMetadata()); 47719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 47819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman PDataSection = 47919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".pdata", 48019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | 48119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ | 48219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_WRITE, 48319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 48419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 48519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman XDataSection = 48619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".xdata", 48719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | 48819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ | 48919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_WRITE, 49019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 49119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 49219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 49319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanvoid MCObjectFileInfo::InitMCObjectFileInfo(StringRef TT, Reloc::Model relocm, 49419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman CodeModel::Model cm, 49519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCContext &ctx) { 49619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman RelocM = relocm; 49719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman CMModel = cm; 49819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx = &ctx; 49919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 50019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // Common. 50119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman CommDirectiveSupportsAlignment = true; 50219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SupportsWeakOmittedEHFrame = true; 50319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman IsFunctionEHFrameSymbolPrivate = true; 50419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 50519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman PersonalityEncoding = LSDAEncoding = FDEEncoding = FDECFIEncoding = 50619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman TTypeEncoding = dwarf::DW_EH_PE_absptr; 50719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 50819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman EHFrameSection = 0; // Created on demand. 50919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman CompactUnwindSection = 0; // Used only by selected targets. 51019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 51119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Triple T(TT); 51219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Triple::ArchType Arch = T.getArch(); 51319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // FIXME: Checking for Arch here to filter out bogus triples such as 51419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman // cellspu-apple-darwin. Perhaps we should fix in Triple? 51519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman if ((Arch == Triple::x86 || Arch == Triple::x86_64 || 51619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Arch == Triple::arm || Arch == Triple::thumb || 51719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Arch == Triple::ppc || Arch == Triple::ppc64 || 51819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Arch == Triple::UnknownArch) && 51919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman (T.isOSDarwin() || T.getEnvironment() == Triple::MachO)) { 52019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Env = IsMachO; 52119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman InitMachOMCObjectFileInfo(T); 52219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman } else if ((Arch == Triple::x86 || Arch == Triple::x86_64) && 52319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman (T.getOS() == Triple::MinGW32 || T.getOS() == Triple::Cygwin || 52419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman T.getOS() == Triple::Win32)) { 52519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Env = IsCOFF; 52619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman InitCOFFMCObjectFileInfo(T); 52719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman } else { 52819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Env = IsELF; 52919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman InitELFMCObjectFileInfo(T); 53019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman } 53119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 53219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 53319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanvoid MCObjectFileInfo::InitEHFrameSection() { 53419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman if (Env == IsMachO) 53519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman EHFrameSection = 53619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getMachOSection("__TEXT", "__eh_frame", 53719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_COALESCED | 53819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_NO_TOC | 53919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_STRIP_STATIC_SYMS | 54019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman MCSectionMachO::S_ATTR_LIVE_SUPPORT, 54119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getReadOnly()); 54219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman else if (Env == IsELF) 54319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman EHFrameSection = 54419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getELFSection(".eh_frame", ELF::SHT_PROGBITS, 54519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman ELF::SHF_ALLOC, 54619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 54719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman else 54819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman EHFrameSection = 54919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman Ctx->getCOFFSection(".eh_frame", 55019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | 55119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_READ | 55219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman COFF::IMAGE_SCN_MEM_WRITE, 55319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman SectionKind::getDataRel()); 55419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} 555