diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -1870,7 +1870,7 @@ if (Kind.isText()) return TextSection; - if (Kind.isData()) + if (Kind.isData() || Kind.isReadOnlyWithRel()) 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 --- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -1799,7 +1799,7 @@ SectionKind GVKind = getObjFileLowering().getKindForGlobal(GV, TM); if ((!GVKind.isCommon() && !GVKind.isBSS() && !GVKind.isData() && - !GVKind.isReadOnly()) || + !GVKind.isReadOnly() && !GVKind.isReadOnlyWithRel()) || 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-relocation.ll b/llvm/test/CodeGen/PowerPC/aix-readonly-relocation.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/aix-readonly-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