diff options
author | diggerlin <digger.llvm@gmail.com> | 2020-01-14 13:21:49 -0500 |
---|---|---|
committer | diggerlin <digger.llvm@gmail.com> | 2020-01-14 13:21:49 -0500 |
commit | eb23cc136b68b24e63dd765b87d1facecd622695 (patch) | |
tree | 0db075852f3f90809a10ab58e2f276921834fbe6 | |
parent | 3e32b7e12701de772b1cdf855b42253650a1e997 (diff) | |
download | bcm5719-llvm-eb23cc136b68b24e63dd765b87d1facecd622695.tar.gz bcm5719-llvm-eb23cc136b68b24e63dd765b87d1facecd622695.zip |
[AIX][XCOFF] Supporting the ReadOnlyWithRel SectionKnd
SUMMARY:
In this patch we put the global variable in a Csect which's SectionKind is "ReadOnlyWithRel" into Data Section.
Reviewers: hubert.reinterpretcast,jasonliu,Xiangling_L
Subscribers: wuzish, nemanjai, hiraditya
Differential Revision: https://reviews.llvm.org/D72461
-rw-r--r-- | llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp | 3 | ||||
-rw-r--r-- | llvm/test/CodeGen/PowerPC/aix-readonly-with-relocation.ll | 19 |
3 files changed, 24 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 847825ef3ce..8cb9814300d 100644 --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -1870,7 +1870,10 @@ MCSection *TargetLoweringObjectFileXCOFF::SelectSectionForGlobal( if (Kind.isText()) return TextSection; - if (Kind.isData()) + if (Kind.isData() || Kind.isReadOnlyWithRel()) + // TODO: We may put this under option control, because user may want to + // have read-only data with relocations placed into a read-only section by + // the compiler. return DataSection; // Zero initialized data must be emitted to the .data section because external diff --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp index f93f1c00e95..0458f5a2548 100644 --- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -1636,8 +1636,7 @@ void PPCAIXAsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) { TargetLoweringObjectFileXCOFF::getStorageClassForGlobal(GV)); SectionKind GVKind = getObjFileLowering().getKindForGlobal(GV, TM); - if ((!GVKind.isCommon() && !GVKind.isBSS() && !GVKind.isData() && - !GVKind.isReadOnly()) || + if ((!GVKind.isGlobalWriteableData() && !GVKind.isReadOnly()) || GVKind.isMergeable2ByteCString() || GVKind.isMergeable4ByteCString()) report_fatal_error("Encountered a global variable kind that is " "not supported yet."); diff --git a/llvm/test/CodeGen/PowerPC/aix-readonly-with-relocation.ll b/llvm/test/CodeGen/PowerPC/aix-readonly-with-relocation.ll new file mode 100644 index 00000000000..97b39f522a4 --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/aix-readonly-with-relocation.ll @@ -0,0 +1,19 @@ +; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc-ibm-aix-xcoff --relocation-model=pic < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc64-ibm-aix-xcoff --relocation-model=pic < %s | FileCheck --check-prefix=CHECK64 %s + +@a = common global i32 0 +@b = constant i32* @a + +;CHECK: .comm a[RW],4,2 +;CHECK-NEXT: .csect .data[RW] +;CHECK-NEXT: .globl b +;CHECK-NEXT: .align 2 +;CHECK-NEXT: b: +;CHECK-NEXT: .long a + +;CHECK64: .comm a[RW],4,2 +;CHECK64-NEXT: .csect .data[RW] +;CHECK64-NEXT: .globl b +;CHECK64-NEXT: .align 3 +;CHECK64-NEXT: b: +;CHECK64-NEXT: .llong a |