diff options
Diffstat (limited to 'lib/CodeGen/TargetLoweringObjectFileImpl.cpp')
| -rw-r--r-- | lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 461 | 
1 files changed, 230 insertions, 231 deletions
diff --git a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index d6bdb1040f3e..9f959932e6d5 100644 --- a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -38,110 +38,88 @@ using namespace dwarf;  //===----------------------------------------------------------------------===//  //                                  ELF  //===----------------------------------------------------------------------===// -typedef StringMap<const MCSectionELF*> ELFUniqueMapTy; - -TargetLoweringObjectFileELF::~TargetLoweringObjectFileELF() { -  // If we have the section uniquing map, free it. -  delete (ELFUniqueMapTy*)UniquingMap; -} - -const MCSection *TargetLoweringObjectFileELF:: -getELFSection(StringRef Section, unsigned Type, unsigned Flags, -              SectionKind Kind, bool IsExplicit) const { -  if (UniquingMap == 0) -    UniquingMap = new ELFUniqueMapTy(); -  ELFUniqueMapTy &Map = *(ELFUniqueMapTy*)UniquingMap; - -  // Do the lookup, if we have a hit, return it. -  StringMapEntry<const MCSectionELF*> &Entry = Map.GetOrCreateValue(Section); -  if (Entry.getValue()) return Entry.getValue(); - -  MCSectionELF *Result = MCSectionELF::Create(Entry.getKey(), Type, Flags, Kind, -                                              IsExplicit, getContext()); -  Entry.setValue(Result); -  return Result; -}  void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,                                               const TargetMachine &TM) { -  if (UniquingMap != 0) -    ((ELFUniqueMapTy*)UniquingMap)->clear();    TargetLoweringObjectFile::Initialize(Ctx, TM);    BSSSection = -    getELFSection(".bss", MCSectionELF::SHT_NOBITS, -                  MCSectionELF::SHF_WRITE | MCSectionELF::SHF_ALLOC, -                  SectionKind::getBSS()); +    getContext().getELFSection(".bss", MCSectionELF::SHT_NOBITS, +                               MCSectionELF::SHF_WRITE |MCSectionELF::SHF_ALLOC, +                               SectionKind::getBSS());    TextSection = -    getELFSection(".text", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_EXECINSTR | MCSectionELF::SHF_ALLOC, -                  SectionKind::getText()); +    getContext().getELFSection(".text", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_EXECINSTR | +                               MCSectionELF::SHF_ALLOC, +                               SectionKind::getText());    DataSection = -    getELFSection(".data", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_WRITE | MCSectionELF::SHF_ALLOC, -                  SectionKind::getDataRel()); +    getContext().getELFSection(".data", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_WRITE |MCSectionELF::SHF_ALLOC, +                               SectionKind::getDataRel());    ReadOnlySection = -    getELFSection(".rodata", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_ALLOC, -                  SectionKind::getReadOnly()); +    getContext().getELFSection(".rodata", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_ALLOC, +                               SectionKind::getReadOnly());    TLSDataSection = -    getELFSection(".tdata", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_TLS | -                  MCSectionELF::SHF_WRITE, SectionKind::getThreadData()); +    getContext().getELFSection(".tdata", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_TLS | +                               MCSectionELF::SHF_WRITE, +                               SectionKind::getThreadData());    TLSBSSSection = -    getELFSection(".tbss", MCSectionELF::SHT_NOBITS, -                  MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_TLS | -                  MCSectionELF::SHF_WRITE, SectionKind::getThreadBSS()); +    getContext().getELFSection(".tbss", MCSectionELF::SHT_NOBITS, +                               MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_TLS | +                               MCSectionELF::SHF_WRITE, +                               SectionKind::getThreadBSS());    DataRelSection = -    getELFSection(".data.rel", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_WRITE, -                  SectionKind::getDataRel()); +    getContext().getELFSection(".data.rel", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_WRITE, +                               SectionKind::getDataRel());    DataRelLocalSection = -    getELFSection(".data.rel.local", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_WRITE, -                  SectionKind::getDataRelLocal()); +    getContext().getELFSection(".data.rel.local", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_WRITE, +                               SectionKind::getDataRelLocal());    DataRelROSection = -    getELFSection(".data.rel.ro", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_WRITE, -                  SectionKind::getReadOnlyWithRel()); +    getContext().getELFSection(".data.rel.ro", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_WRITE, +                               SectionKind::getReadOnlyWithRel());    DataRelROLocalSection = -    getELFSection(".data.rel.ro.local", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_WRITE, -                  SectionKind::getReadOnlyWithRelLocal()); +    getContext().getELFSection(".data.rel.ro.local", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_WRITE, +                               SectionKind::getReadOnlyWithRelLocal());    MergeableConst4Section = -    getELFSection(".rodata.cst4", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_MERGE, -                  SectionKind::getMergeableConst4()); +    getContext().getELFSection(".rodata.cst4", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_MERGE, +                               SectionKind::getMergeableConst4());    MergeableConst8Section = -    getELFSection(".rodata.cst8", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_MERGE, -                  SectionKind::getMergeableConst8()); +    getContext().getELFSection(".rodata.cst8", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_MERGE, +                               SectionKind::getMergeableConst8());    MergeableConst16Section = -    getELFSection(".rodata.cst16", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_MERGE, -                  SectionKind::getMergeableConst16()); +    getContext().getELFSection(".rodata.cst16", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_MERGE, +                               SectionKind::getMergeableConst16());    StaticCtorSection = -    getELFSection(".ctors", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_WRITE, -                  SectionKind::getDataRel()); +    getContext().getELFSection(".ctors", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_WRITE, +                               SectionKind::getDataRel());    StaticDtorSection = -    getELFSection(".dtors", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_WRITE, -                  SectionKind::getDataRel()); +    getContext().getELFSection(".dtors", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_WRITE, +                               SectionKind::getDataRel());    // Exception Handling Sections. @@ -150,47 +128,48 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,    // runtime hit for C++ apps.  Either the contents of the LSDA need to be    // adjusted or this should be a data section.    LSDASection = -    getELFSection(".gcc_except_table", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_ALLOC, SectionKind::getReadOnly()); +    getContext().getELFSection(".gcc_except_table", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_ALLOC, +                               SectionKind::getReadOnly());    EHFrameSection = -    getELFSection(".eh_frame", MCSectionELF::SHT_PROGBITS, -                  MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_WRITE, -                  SectionKind::getDataRel()); +    getContext().getELFSection(".eh_frame", MCSectionELF::SHT_PROGBITS, +                               MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_WRITE, +                               SectionKind::getDataRel());    // Debug Info Sections.    DwarfAbbrevSection = -    getELFSection(".debug_abbrev", MCSectionELF::SHT_PROGBITS, 0, -                  SectionKind::getMetadata()); +    getContext().getELFSection(".debug_abbrev", MCSectionELF::SHT_PROGBITS, 0, +                               SectionKind::getMetadata());    DwarfInfoSection = -    getELFSection(".debug_info", MCSectionELF::SHT_PROGBITS, 0, -                  SectionKind::getMetadata()); +    getContext().getELFSection(".debug_info", MCSectionELF::SHT_PROGBITS, 0, +                               SectionKind::getMetadata());    DwarfLineSection = -    getELFSection(".debug_line", MCSectionELF::SHT_PROGBITS, 0, -                  SectionKind::getMetadata()); +    getContext().getELFSection(".debug_line", MCSectionELF::SHT_PROGBITS, 0, +                               SectionKind::getMetadata());    DwarfFrameSection = -    getELFSection(".debug_frame", MCSectionELF::SHT_PROGBITS, 0, -                  SectionKind::getMetadata()); +    getContext().getELFSection(".debug_frame", MCSectionELF::SHT_PROGBITS, 0, +                               SectionKind::getMetadata());    DwarfPubNamesSection = -    getELFSection(".debug_pubnames", MCSectionELF::SHT_PROGBITS, 0, -                  SectionKind::getMetadata()); +    getContext().getELFSection(".debug_pubnames", MCSectionELF::SHT_PROGBITS, 0, +                               SectionKind::getMetadata());    DwarfPubTypesSection = -    getELFSection(".debug_pubtypes", MCSectionELF::SHT_PROGBITS, 0, -                  SectionKind::getMetadata()); +    getContext().getELFSection(".debug_pubtypes", MCSectionELF::SHT_PROGBITS, 0, +                               SectionKind::getMetadata());    DwarfStrSection = -    getELFSection(".debug_str", MCSectionELF::SHT_PROGBITS, 0, -                  SectionKind::getMetadata()); +    getContext().getELFSection(".debug_str", MCSectionELF::SHT_PROGBITS, 0, +                               SectionKind::getMetadata());    DwarfLocSection = -    getELFSection(".debug_loc", MCSectionELF::SHT_PROGBITS, 0, -                  SectionKind::getMetadata()); +    getContext().getELFSection(".debug_loc", MCSectionELF::SHT_PROGBITS, 0, +                               SectionKind::getMetadata());    DwarfARangesSection = -    getELFSection(".debug_aranges", MCSectionELF::SHT_PROGBITS, 0, -                  SectionKind::getMetadata()); +    getContext().getELFSection(".debug_aranges", MCSectionELF::SHT_PROGBITS, 0, +                               SectionKind::getMetadata());    DwarfRangesSection = -    getELFSection(".debug_ranges", MCSectionELF::SHT_PROGBITS, 0, -                  SectionKind::getMetadata()); +    getContext().getELFSection(".debug_ranges", MCSectionELF::SHT_PROGBITS, 0, +                               SectionKind::getMetadata());    DwarfMacroInfoSection = -    getELFSection(".debug_macinfo", MCSectionELF::SHT_PROGBITS, 0, -                  SectionKind::getMetadata()); +    getContext().getELFSection(".debug_macinfo", MCSectionELF::SHT_PROGBITS, 0, +                               SectionKind::getMetadata());  } @@ -279,9 +258,9 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,    // Infer section flags from the section name if we can.    Kind = getELFKindForNamedSection(SectionName, Kind); -  return getELFSection(SectionName, -                       getELFSectionType(SectionName, Kind), -                       getELFSectionFlags(Kind), Kind, true); +  return getContext().getELFSection(SectionName, +                                    getELFSectionType(SectionName, Kind), +                                    getELFSectionFlags(Kind), Kind, true);  }  static const char *getSectionPrefixForUniqueGlobal(SectionKind Kind) { @@ -300,19 +279,54 @@ static const char *getSectionPrefixForUniqueGlobal(SectionKind Kind) {    return ".gnu.linkonce.d.rel.ro.";  } +/// getSectionPrefixForGlobal - Return the section prefix name used by options +/// FunctionsSections and DataSections. +static const char *getSectionPrefixForGlobal(SectionKind Kind) { +  if (Kind.isText())                 return ".text."; +  if (Kind.isReadOnly())             return ".rodata."; + +  if (Kind.isThreadData())           return ".tdata."; +  if (Kind.isThreadBSS())            return ".tbss."; + +  if (Kind.isDataNoRel())            return ".data."; +  if (Kind.isDataRelLocal())         return ".data.rel.local."; +  if (Kind.isDataRel())              return ".data.rel."; +  if (Kind.isReadOnlyWithRelLocal()) return ".data.rel.ro.local."; + +  assert(Kind.isReadOnlyWithRel() && "Unknown section kind"); +  return ".data.rel.ro."; +} + +  const MCSection *TargetLoweringObjectFileELF::  SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,                         Mangler *Mang, const TargetMachine &TM) const { +  // If we have -ffunction-section or -fdata-section then we should emit the +  // global value to a uniqued section specifically for it. +  bool EmitUniquedSection; +  if (Kind.isText()) +    EmitUniquedSection = TM.getFunctionSections(); +  else  +    EmitUniquedSection = TM.getDataSections();    // If this global is linkonce/weak and the target handles this by emitting it    // into a 'uniqued' section name, create and return the section now. -  if (GV->isWeakForLinker() && !Kind.isCommon() && !Kind.isBSS()) { -    const char *Prefix = getSectionPrefixForUniqueGlobal(Kind); +  if ((GV->isWeakForLinker() || EmitUniquedSection) && +      !Kind.isCommon() && !Kind.isBSS()) { +    const char *Prefix; +    if (GV->isWeakForLinker()) +      Prefix = getSectionPrefixForUniqueGlobal(Kind); +    else { +      assert(EmitUniquedSection); +      Prefix = getSectionPrefixForGlobal(Kind); +    } +      SmallString<128> Name(Prefix, Prefix+strlen(Prefix));      MCSymbol *Sym = Mang->getSymbol(GV);      Name.append(Sym->getName().begin(), Sym->getName().end()); -    return getELFSection(Name.str(), getELFSectionType(Name.str(), Kind), -                         getELFSectionFlags(Kind), Kind); +    return getContext().getELFSection(Name.str(), +                                      getELFSectionType(Name.str(), Kind), +                                      getELFSectionFlags(Kind), Kind);    }    if (Kind.isText()) return TextSection; @@ -337,11 +351,11 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,      std::string Name = SizeSpec + utostr(Align); -    return getELFSection(Name, MCSectionELF::SHT_PROGBITS, -                         MCSectionELF::SHF_ALLOC | -                         MCSectionELF::SHF_MERGE | -                         MCSectionELF::SHF_STRINGS, -                         Kind); +    return getContext().getELFSection(Name, MCSectionELF::SHT_PROGBITS, +                                      MCSectionELF::SHF_ALLOC | +                                      MCSectionELF::SHF_MERGE | +                                      MCSectionELF::SHF_STRINGS, +                                      Kind);    }    if (Kind.isMergeableConst()) { @@ -426,43 +440,6 @@ getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,  //                                 MachO  //===----------------------------------------------------------------------===// -typedef StringMap<const MCSectionMachO*> MachOUniqueMapTy; - -TargetLoweringObjectFileMachO::~TargetLoweringObjectFileMachO() { -  // If we have the MachO uniquing map, free it. -  delete (MachOUniqueMapTy*)UniquingMap; -} - - -const MCSectionMachO *TargetLoweringObjectFileMachO:: -getMachOSection(StringRef Segment, StringRef Section, -                unsigned TypeAndAttributes, -                unsigned Reserved2, SectionKind Kind) const { -  // We unique sections by their segment/section pair.  The returned section -  // may not have the same flags as the requested section, if so this should be -  // diagnosed by the client as an error. - -  // Create the map if it doesn't already exist. -  if (UniquingMap == 0) -    UniquingMap = new MachOUniqueMapTy(); -  MachOUniqueMapTy &Map = *(MachOUniqueMapTy*)UniquingMap; - -  // Form the name to look up. -  SmallString<64> Name; -  Name += Segment; -  Name.push_back(','); -  Name += Section; - -  // Do the lookup, if we have a hit, return it. -  const MCSectionMachO *&Entry = Map[Name.str()]; -  if (Entry) return Entry; - -  // Otherwise, return a new section. -  return Entry = MCSectionMachO::Create(Segment, Section, TypeAndAttributes, -                                        Reserved2, Kind, getContext()); -} - -  void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,                                                 const TargetMachine &TM) {    // _foo.eh symbols are currently always exported so that the linker knows @@ -473,29 +450,31 @@ void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,    IsFunctionEHFrameSymbolPrivate = false;    SupportsWeakOmittedEHFrame = false; -  if (UniquingMap != 0) -    ((MachOUniqueMapTy*)UniquingMap)->clear();    TargetLoweringObjectFile::Initialize(Ctx, TM);    TextSection // .text -    = getMachOSection("__TEXT", "__text", -                      MCSectionMachO::S_ATTR_PURE_INSTRUCTIONS, -                      SectionKind::getText()); +    = getContext().getMachOSection("__TEXT", "__text", +                                   MCSectionMachO::S_ATTR_PURE_INSTRUCTIONS, +                                   SectionKind::getText());    DataSection // .data -    = getMachOSection("__DATA", "__data", 0, SectionKind::getDataRel()); +    = getContext().getMachOSection("__DATA", "__data", 0, +                                   SectionKind::getDataRel());    CStringSection // .cstring -    = getMachOSection("__TEXT", "__cstring", MCSectionMachO::S_CSTRING_LITERALS, -                      SectionKind::getMergeable1ByteCString()); +    = getContext().getMachOSection("__TEXT", "__cstring",  +                                   MCSectionMachO::S_CSTRING_LITERALS, +                                   SectionKind::getMergeable1ByteCString());    UStringSection -    = getMachOSection("__TEXT","__ustring", 0, -                      SectionKind::getMergeable2ByteCString()); +    = getContext().getMachOSection("__TEXT","__ustring", 0, +                                   SectionKind::getMergeable2ByteCString());    FourByteConstantSection // .literal4 -    = getMachOSection("__TEXT", "__literal4", MCSectionMachO::S_4BYTE_LITERALS, -                      SectionKind::getMergeableConst4()); +    = getContext().getMachOSection("__TEXT", "__literal4", +                                   MCSectionMachO::S_4BYTE_LITERALS, +                                   SectionKind::getMergeableConst4());    EightByteConstantSection // .literal8 -    = getMachOSection("__TEXT", "__literal8", MCSectionMachO::S_8BYTE_LITERALS, -                      SectionKind::getMergeableConst8()); +    = 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. @@ -503,110 +482,130 @@ void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,    if (TM.getRelocationModel() != Reloc::Static &&        TM.getTargetData()->getPointerSize() == 32)      SixteenByteConstantSection =   // .literal16 -      getMachOSection("__TEXT", "__literal16",MCSectionMachO::S_16BYTE_LITERALS, -                      SectionKind::getMergeableConst16()); +      getContext().getMachOSection("__TEXT", "__literal16", +                                   MCSectionMachO::S_16BYTE_LITERALS, +                                   SectionKind::getMergeableConst16());    ReadOnlySection  // .const -    = getMachOSection("__TEXT", "__const", 0, SectionKind::getReadOnly()); +    = getContext().getMachOSection("__TEXT", "__const", 0, +                                   SectionKind::getReadOnly());    TextCoalSection -    = getMachOSection("__TEXT", "__textcoal_nt", -                      MCSectionMachO::S_COALESCED | -                      MCSectionMachO::S_ATTR_PURE_INSTRUCTIONS, -                      SectionKind::getText()); +    = getContext().getMachOSection("__TEXT", "__textcoal_nt", +                                   MCSectionMachO::S_COALESCED | +                                   MCSectionMachO::S_ATTR_PURE_INSTRUCTIONS, +                                   SectionKind::getText());    ConstTextCoalSection -    = getMachOSection("__TEXT", "__const_coal", MCSectionMachO::S_COALESCED, -                      SectionKind::getText()); +    = getContext().getMachOSection("__TEXT", "__const_coal",  +                                   MCSectionMachO::S_COALESCED, +                                   SectionKind::getText());    ConstDataCoalSection -    = getMachOSection("__DATA","__const_coal", MCSectionMachO::S_COALESCED, -                      SectionKind::getText()); +    = getContext().getMachOSection("__DATA","__const_coal", +                                   MCSectionMachO::S_COALESCED, +                                   SectionKind::getText());    ConstDataSection  // .const_data -    = getMachOSection("__DATA", "__const", 0, -                      SectionKind::getReadOnlyWithRel()); +    = getContext().getMachOSection("__DATA", "__const", 0, +                                   SectionKind::getReadOnlyWithRel());    DataCoalSection -    = getMachOSection("__DATA","__datacoal_nt", MCSectionMachO::S_COALESCED, -                      SectionKind::getDataRel()); +    = getContext().getMachOSection("__DATA","__datacoal_nt",  +                                   MCSectionMachO::S_COALESCED, +                                   SectionKind::getDataRel());    DataCommonSection -    = getMachOSection("__DATA","__common", MCSectionMachO::S_ZEROFILL, -                      SectionKind::getBSS()); +    = getContext().getMachOSection("__DATA","__common", +                                   MCSectionMachO::S_ZEROFILL, +                                   SectionKind::getBSS());    DataBSSSection -    = getMachOSection("__DATA","__bss", MCSectionMachO::S_ZEROFILL, -                    SectionKind::getBSS()); +    = getContext().getMachOSection("__DATA","__bss", MCSectionMachO::S_ZEROFILL, +                                   SectionKind::getBSS());    LazySymbolPointerSection -    = getMachOSection("__DATA", "__la_symbol_ptr", -                      MCSectionMachO::S_LAZY_SYMBOL_POINTERS, -                      SectionKind::getMetadata()); +    = getContext().getMachOSection("__DATA", "__la_symbol_ptr", +                                   MCSectionMachO::S_LAZY_SYMBOL_POINTERS, +                                   SectionKind::getMetadata());    NonLazySymbolPointerSection -    = getMachOSection("__DATA", "__nl_symbol_ptr", -                      MCSectionMachO::S_NON_LAZY_SYMBOL_POINTERS, -                      SectionKind::getMetadata()); +    = getContext().getMachOSection("__DATA", "__nl_symbol_ptr", +                                   MCSectionMachO::S_NON_LAZY_SYMBOL_POINTERS, +                                   SectionKind::getMetadata());    if (TM.getRelocationModel() == Reloc::Static) {      StaticCtorSection -      = getMachOSection("__TEXT", "__constructor", 0,SectionKind::getDataRel()); +      = getContext().getMachOSection("__TEXT", "__constructor", 0, +                                     SectionKind::getDataRel());      StaticDtorSection -      = getMachOSection("__TEXT", "__destructor", 0, SectionKind::getDataRel()); +      = getContext().getMachOSection("__TEXT", "__destructor", 0, +                                     SectionKind::getDataRel());    } else {      StaticCtorSection -      = getMachOSection("__DATA", "__mod_init_func", -                        MCSectionMachO::S_MOD_INIT_FUNC_POINTERS, -                        SectionKind::getDataRel()); +      = getContext().getMachOSection("__DATA", "__mod_init_func", +                                     MCSectionMachO::S_MOD_INIT_FUNC_POINTERS, +                                     SectionKind::getDataRel());      StaticDtorSection -      = getMachOSection("__DATA", "__mod_term_func", -                        MCSectionMachO::S_MOD_TERM_FUNC_POINTERS, -                        SectionKind::getDataRel()); +      = getContext().getMachOSection("__DATA", "__mod_term_func", +                                     MCSectionMachO::S_MOD_TERM_FUNC_POINTERS, +                                     SectionKind::getDataRel());    }    // Exception Handling. -  LSDASection = getMachOSection("__TEXT", "__gcc_except_tab", 0, -                                SectionKind::getReadOnlyWithRel()); +  LSDASection = getContext().getMachOSection("__TEXT", "__gcc_except_tab", 0, +                                             SectionKind::getReadOnlyWithRel());    EHFrameSection = -    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()); +    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());    // Debug Information.    DwarfAbbrevSection = -    getMachOSection("__DWARF", "__debug_abbrev", MCSectionMachO::S_ATTR_DEBUG, -                    SectionKind::getMetadata()); +    getContext().getMachOSection("__DWARF", "__debug_abbrev",  +                                 MCSectionMachO::S_ATTR_DEBUG, +                                 SectionKind::getMetadata());    DwarfInfoSection = -    getMachOSection("__DWARF", "__debug_info", MCSectionMachO::S_ATTR_DEBUG, -                    SectionKind::getMetadata()); +    getContext().getMachOSection("__DWARF", "__debug_info", +                                 MCSectionMachO::S_ATTR_DEBUG, +                                 SectionKind::getMetadata());    DwarfLineSection = -    getMachOSection("__DWARF", "__debug_line", MCSectionMachO::S_ATTR_DEBUG, -                    SectionKind::getMetadata()); +    getContext().getMachOSection("__DWARF", "__debug_line", +                                 MCSectionMachO::S_ATTR_DEBUG, +                                 SectionKind::getMetadata());    DwarfFrameSection = -    getMachOSection("__DWARF", "__debug_frame", MCSectionMachO::S_ATTR_DEBUG, -                    SectionKind::getMetadata()); +    getContext().getMachOSection("__DWARF", "__debug_frame", +                                 MCSectionMachO::S_ATTR_DEBUG, +                                 SectionKind::getMetadata());    DwarfPubNamesSection = -    getMachOSection("__DWARF", "__debug_pubnames", MCSectionMachO::S_ATTR_DEBUG, -                    SectionKind::getMetadata()); +    getContext().getMachOSection("__DWARF", "__debug_pubnames", +                                 MCSectionMachO::S_ATTR_DEBUG, +                                 SectionKind::getMetadata());    DwarfPubTypesSection = -    getMachOSection("__DWARF", "__debug_pubtypes", MCSectionMachO::S_ATTR_DEBUG, -                    SectionKind::getMetadata()); +    getContext().getMachOSection("__DWARF", "__debug_pubtypes", +                                 MCSectionMachO::S_ATTR_DEBUG, +                                 SectionKind::getMetadata());    DwarfStrSection = -    getMachOSection("__DWARF", "__debug_str", MCSectionMachO::S_ATTR_DEBUG, -                    SectionKind::getMetadata()); +    getContext().getMachOSection("__DWARF", "__debug_str", +                                 MCSectionMachO::S_ATTR_DEBUG, +                                 SectionKind::getMetadata());    DwarfLocSection = -    getMachOSection("__DWARF", "__debug_loc", MCSectionMachO::S_ATTR_DEBUG, -                    SectionKind::getMetadata()); +    getContext().getMachOSection("__DWARF", "__debug_loc", +                                 MCSectionMachO::S_ATTR_DEBUG, +                                 SectionKind::getMetadata());    DwarfARangesSection = -    getMachOSection("__DWARF", "__debug_aranges", MCSectionMachO::S_ATTR_DEBUG, -                    SectionKind::getMetadata()); +    getContext().getMachOSection("__DWARF", "__debug_aranges", +                                 MCSectionMachO::S_ATTR_DEBUG, +                                 SectionKind::getMetadata());    DwarfRangesSection = -    getMachOSection("__DWARF", "__debug_ranges", MCSectionMachO::S_ATTR_DEBUG, -                    SectionKind::getMetadata()); +    getContext().getMachOSection("__DWARF", "__debug_ranges", +                                 MCSectionMachO::S_ATTR_DEBUG, +                                 SectionKind::getMetadata());    DwarfMacroInfoSection = -    getMachOSection("__DWARF", "__debug_macinfo", MCSectionMachO::S_ATTR_DEBUG, -                    SectionKind::getMetadata()); +    getContext().getMachOSection("__DWARF", "__debug_macinfo", +                                 MCSectionMachO::S_ATTR_DEBUG, +                                 SectionKind::getMetadata());    DwarfDebugInlineSection = -    getMachOSection("__DWARF", "__debug_inlined", MCSectionMachO::S_ATTR_DEBUG, -                    SectionKind::getMetadata()); +    getContext().getMachOSection("__DWARF", "__debug_inlined", +                                 MCSectionMachO::S_ATTR_DEBUG, +                                 SectionKind::getMetadata());  }  const MCSection *TargetLoweringObjectFileMachO:: @@ -619,8 +618,8 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,      MCSectionMachO::ParseSectionSpecifier(GV->getSection(), Segment, Section,                                            TAA, StubSize);    if (!ErrorCode.empty()) { -    // If invalid, report the error with llvm_report_error. -    llvm_report_error("Global variable '" + GV->getNameStr() + +    // If invalid, report the error with report_fatal_error. +    report_fatal_error("Global variable '" + GV->getNameStr() +                        "' has an invalid section specifier '" + GV->getSection()+                        "': " + ErrorCode + ".");      // Fall back to dropping it into the data section. @@ -629,14 +628,14 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,    // Get the section.    const MCSectionMachO *S = -    getMachOSection(Segment, Section, TAA, StubSize, Kind); +    getContext().getMachOSection(Segment, Section, TAA, StubSize, Kind);    // Okay, now that we got the section, verify that the TAA & StubSize agree.    // If the user declared multiple globals with different section flags, we need    // to reject it here.    if (S->getTypeAndAttributes() != TAA || S->getStubSize() != StubSize) { -    // If invalid, report the error with llvm_report_error. -    llvm_report_error("Global variable '" + GV->getNameStr() + +    // If invalid, report the error with report_fatal_error. +    report_fatal_error("Global variable '" + GV->getNameStr() +                        "' section type or attributes does not match previous"                        " section specifier");    } @@ -806,7 +805,7 @@ const MCSection *TargetLoweringObjectFileCOFF::  getCOFFSection(StringRef Name, bool isDirective, SectionKind Kind) const {    // Create the map if it doesn't already exist.    if (UniquingMap == 0) -    UniquingMap = new MachOUniqueMapTy(); +    UniquingMap = new COFFUniqueMapTy();    COFFUniqueMapTy &Map = *(COFFUniqueMapTy*)UniquingMap;    // Do the lookup, if we have a hit, return it.  | 
