From: Rafael Espindola Date: Thu, 12 Feb 2015 23:11:59 +0000 (+0000) Subject: Learn that __DATA,__objc_classrefs is not atomized via symbols. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=ef1d2264bc75534e5bee298791c5fa9c220f68a4;p=oota-llvm.git Learn that __DATA,__objc_classrefs is not atomized via symbols. This should hopefully fix objc on AArch64. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228976 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/MC/MCAsmInfoDarwin.cpp b/lib/MC/MCAsmInfoDarwin.cpp index f7054902f24..a2a2504b4c8 100644 --- a/lib/MC/MCAsmInfoDarwin.cpp +++ b/lib/MC/MCAsmInfoDarwin.cpp @@ -33,6 +33,10 @@ bool MCAsmInfoDarwin::isSectionAtomizableBySymbols( if (SMO.getSegmentName() == "__DATA" && SMO.getSectionName() == "__cfstring") return false; + if (SMO.getSegmentName() == "__DATA" && + SMO.getSectionName() == "__objc_classrefs") + return false; + switch (SMO.getType()) { default: return true; diff --git a/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp b/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp index 6c554fde115..0d9385dcb14 100644 --- a/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp +++ b/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp @@ -134,6 +134,10 @@ static bool canUseLocalRelocation(const MCSectionMachO &Section, RefSec.getSectionName() == "__cfstring") return false; + if (RefSec.getSegmentName() == "__DATA" && + RefSec.getSectionName() == "__objc_classrefs") + return false; + return true; } diff --git a/test/MC/MachO/AArch64/classrefs.s b/test/MC/MachO/AArch64/classrefs.s new file mode 100644 index 00000000000..5edc82ca0b1 --- /dev/null +++ b/test/MC/MachO/AArch64/classrefs.s @@ -0,0 +1,25 @@ +; RUN: llvm-mc -triple arm64-apple-darwin10 %s -filetype=obj -o - | llvm-readobj -r --expand-relocs | FileCheck %s + +; Test that we produce an external relocation with Lbar. We could also produce +; an internal relocation. We just have to be careful to not use another symbol. + +// CHECK: Relocations [ +// CHECK-NEXT: Section __data { +// CHECK-NEXT: Relocation { +// CHECK-NEXT: Offset: 0x0 +// CHECK-NEXT: PCRel: 0 +// CHECK-NEXT: Length: 3 +// CHECK-NEXT: Extern: 1 +// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0) +// CHECK-NEXT: Symbol: Lbar +// CHECK-NEXT: Scattered: 0 +// CHECK-NEXT: } +// CHECK-NEXT: } +// CHECK-NEXT: ] + + .section __DATA,__objc_classrefs,regular,no_dead_strip +Lbar: + + .section __DATA,__data + .quad Lbar +