diff options
| author | diggerlin <digger.llvm@gmail.com> | 2019-11-15 11:30:19 -0500 |
|---|---|---|
| committer | diggerlin <digger.llvm@gmail.com> | 2019-11-15 11:30:19 -0500 |
| commit | 3dfa975fb36fda1d8cff700d4251db330c83bfa3 (patch) | |
| tree | 5b6885b87ecf8718d35c463856303d916b11b819 /llvm/lib | |
| parent | 840c891a8c248f1eb65981f492165b037e126652 (diff) | |
| download | bcm5719-llvm-3dfa975fb36fda1d8cff700d4251db330c83bfa3.tar.gz bcm5719-llvm-3dfa975fb36fda1d8cff700d4251db330c83bfa3.zip | |
Add read-only data assembly writing for aix
SUMMARY:
The patch will emit read-only variable assembly code for aix.
Reviewers: daltenty,Xiangling_Liao
Subscribers: rupprecht, seiyai,hiraditya
Differential Revision: https://reviews.llvm.org/D70182
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/BinaryFormat/XCOFF.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/MC/MCObjectFileInfo.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/MC/MCSectionXCOFF.cpp | 7 | ||||
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp | 4 |
5 files changed, 20 insertions, 1 deletions
diff --git a/llvm/lib/BinaryFormat/XCOFF.cpp b/llvm/lib/BinaryFormat/XCOFF.cpp index 6613b6329c1..001b8077cd3 100644 --- a/llvm/lib/BinaryFormat/XCOFF.cpp +++ b/llvm/lib/BinaryFormat/XCOFF.cpp @@ -22,6 +22,8 @@ StringRef XCOFF::getMappingClassString(XCOFF::StorageMappingClass SMC) { return "TC0"; case XCOFF::XMC_BS: return "BS"; + case XCOFF::XMC_RO: + return "RO"; default: report_fatal_error("Unhandled storage-mapping class."); } diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index f941b98890c..2dc13e9a250 100644 --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -1861,6 +1861,10 @@ MCSection *TargetLoweringObjectFileXCOFF::SelectSectionForGlobal( if (Kind.isBSS()) return DataSection; + if (Kind.isReadOnly() && !Kind.isMergeableConst() && + !Kind.isMergeableCString()) + return ReadOnlySection; + report_fatal_error("XCOFF other section types not yet implemented."); } diff --git a/llvm/lib/MC/MCObjectFileInfo.cpp b/llvm/lib/MC/MCObjectFileInfo.cpp index be195928320..53a9467041c 100644 --- a/llvm/lib/MC/MCObjectFileInfo.cpp +++ b/llvm/lib/MC/MCObjectFileInfo.cpp @@ -777,6 +777,10 @@ void MCObjectFileInfo::initXCOFFMCObjectFileInfo(const Triple &T) { DataSection = Ctx->getXCOFFSection( ".data", XCOFF::StorageMappingClass::XMC_RW, XCOFF::XTY_SD, XCOFF::C_HIDEXT, SectionKind::getData()); + + ReadOnlySection = Ctx->getXCOFFSection( + ".rodata", XCOFF::StorageMappingClass::XMC_RO, XCOFF::XTY_SD, + XCOFF::C_HIDEXT, SectionKind::getReadOnly()); } void MCObjectFileInfo::InitMCObjectFileInfo(const Triple &TheTriple, bool PIC, diff --git a/llvm/lib/MC/MCSectionXCOFF.cpp b/llvm/lib/MC/MCSectionXCOFF.cpp index d00e9322897..f646168d3a4 100644 --- a/llvm/lib/MC/MCSectionXCOFF.cpp +++ b/llvm/lib/MC/MCSectionXCOFF.cpp @@ -27,6 +27,13 @@ void MCSectionXCOFF::PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T, return; } + if (getKind().isReadOnly()) { + if (getMappingClass() != XCOFF::XMC_RO) + report_fatal_error("Unhandled storage-mapping class for .rodata csect."); + OS << "\t.csect " << QualName->getName() << '\n'; + return; + } + if (getKind().isData()) { switch (getMappingClass()) { case XCOFF::XMC_RW: diff --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp index 6feb5ee3373..e4b3d468476 100644 --- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -1747,7 +1747,9 @@ void PPCAIXAsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) { report_fatal_error("COMDAT not yet supported by AIX."); SectionKind GVKind = getObjFileLowering().getKindForGlobal(GV, TM); - if (!GVKind.isCommon() && !GVKind.isBSS() && !GVKind.isData()) + if ((!GVKind.isCommon() && !GVKind.isBSS() && !GVKind.isData() && + !GVKind.isReadOnly()) || + GVKind.isMergeableCString() || GVKind.isMergeableConst()) report_fatal_error("Encountered a global variable kind that is " "not supported yet."); |

