diff options
-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 |