diff options
Diffstat (limited to 'llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp')
-rw-r--r-- | llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 8cb9814..3b5c917 100644 --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -1832,6 +1832,22 @@ MCSection *TargetLoweringObjectFileXCOFF::getExplicitSectionGlobal( report_fatal_error("XCOFF explicit sections not yet implemented."); } +MCSection *TargetLoweringObjectFileXCOFF::getSectionForExternalReference( + const GlobalObject *GO, const TargetMachine &TM) const { + assert(GO->isDeclaration() && + "Tried to get ER section for a defined global."); + + SmallString<128> Name; + getNameWithPrefix(Name, GO, TM); + XCOFF::StorageClass SC = + TargetLoweringObjectFileXCOFF::getStorageClassForGlobal(GO); + + // Externals go into a csect of type ER. + return getContext().getXCOFFSection( + Name, isa<Function>(GO) ? XCOFF::XMC_DS : XCOFF::XMC_UA, XCOFF::XTY_ER, + SC, SectionKind::getMetadata()); +} + MCSection *TargetLoweringObjectFileXCOFF::SelectSectionForGlobal( const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const { assert(!TM.getFunctionSections() && !TM.getDataSections() && @@ -1951,3 +1967,17 @@ XCOFF::StorageClass TargetLoweringObjectFileXCOFF::getStorageClassForGlobal( "Unhandled linkage when mapping linkage to StorageClass."); } } + +MCSection *TargetLoweringObjectFileXCOFF::getSectionForFunctionDescriptor( + const MCSymbol *FuncSym) const { + return getContext().getXCOFFSection(FuncSym->getName(), XCOFF::XMC_DS, + XCOFF::XTY_SD, XCOFF::C_HIDEXT, + SectionKind::getData()); +} + +MCSection *TargetLoweringObjectFileXCOFF::getSectionForTOCEntry( + const MCSymbol *Sym) const { + return getContext().getXCOFFSection( + cast<MCSymbolXCOFF>(Sym)->getUnqualifiedName(), XCOFF::XMC_TC, + XCOFF::XTY_SD, XCOFF::C_HIDEXT, SectionKind::getData()); +} |