diff options
author | David Tenty <daltenty@ibm.com> | 2020-01-22 11:09:34 -0500 |
---|---|---|
committer | David Tenty <daltenty@ibm.com> | 2020-01-22 12:09:11 -0500 |
commit | 45a4aaea7fdf21a139b35ad6d25f6c4a150e065f (patch) | |
tree | 08038ec2d516ec723830f6f4b38f1cb1e89e4721 /llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | |
parent | 2d0fcf786c5c7f384e30a955d2e7da46d1f98949 (diff) | |
download | llvm-45a4aaea7fdf21a139b35ad6d25f6c4a150e065f.zip llvm-45a4aaea7fdf21a139b35ad6d25f6c4a150e065f.tar.gz llvm-45a4aaea7fdf21a139b35ad6d25f6c4a150e065f.tar.bz2 |
[NFC][XCOFF] Refactor Csect creation into TargetLoweringObjectFile
Summary:
We create a number of standard types of control sections in multiple places for
things like the function descriptors, external references and the TOC anchor
among others, so it is possible for their properties to be defined
inconsistently in different places. This refactor moves their creation and
properties into functions in the TargetLoweringObjectFile class hierarchy, where
functions for retrieving various special types of sections typically seem
to reside.
Note: There is one case in PPCISelLowering which is specific to function entry
points which we don't address since we don't have access to the TLOF there.
Reviewers: DiggerLin, jasonliu, hubert.reinterpretcast
Reviewed By: jasonliu, hubert.reinterpretcast
Subscribers: wuzish, nemanjai, hiraditya, kbarton, jsji, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D72347
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()); +} |