mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-19 23:23:38 -04:00
AArch64: use linker-private symbols for globals in MachO.
We don't use section-relative relocations on AArch64, so all symbols must be at least visible to the linker (i.e. properly global or l_whatever, but not L_whatever). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@303118 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -70,3 +70,11 @@ const MCExpr *AArch64_MachoTargetObjectFile::getIndirectSymViaGOTPCRel(
|
||||
const MCExpr *PC = MCSymbolRefExpr::create(PCSym, getContext());
|
||||
return MCBinaryExpr::createSub(Res, PC, getContext());
|
||||
}
|
||||
|
||||
void AArch64_MachoTargetObjectFile::getNameWithPrefix(
|
||||
SmallVectorImpl<char> &OutName, const GlobalValue *GV,
|
||||
const TargetMachine &TM) const {
|
||||
// AArch64 does not use section-relative relocations so any global symbol must
|
||||
// be accessed via at least a linker-private symbol.
|
||||
getMangler().getNameWithPrefix(OutName, GV, /* CannotUsePrivateLabel */ true);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,9 @@ public:
|
||||
const MCValue &MV, int64_t Offset,
|
||||
MachineModuleInfo *MMI,
|
||||
MCStreamer &Streamer) const override;
|
||||
|
||||
void getNameWithPrefix(SmallVectorImpl<char> &OutName, const GlobalValue *GV,
|
||||
const TargetMachine &TM) const override;
|
||||
};
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
; CHECK-NEXT: stp x29, x30, [sp, #16]
|
||||
; CHECK-NEXT: add x29, sp, #16
|
||||
; CHECK-NEXT: stur wzr, [x29, #-4]
|
||||
; CHECK: adrp x0, L_.str@PAGE
|
||||
; CHECK: add x0, x0, L_.str@PAGEOFF
|
||||
; CHECK: adrp x0, l_.str@PAGE
|
||||
; CHECK: add x0, x0, l_.str@PAGEOFF
|
||||
; CHECK-NEXT: bl _puts
|
||||
; CHECK-NEXT: ldp x29, x30, [sp, #16]
|
||||
; CHECK-NEXT: add sp, sp, #32
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
; RUN: llc -mtriple=arm64-apple-ios %s -o - | FileCheck %s
|
||||
|
||||
; All global symbols must be at-most linker-private for AArch64 because we don't
|
||||
; use section-relative relocations in MachO.
|
||||
|
||||
define i8* @private_sym() {
|
||||
; CHECK-LABEL: private_sym:
|
||||
; CHECK: adrp [[HIBITS:x[0-9]+]], l_var@PAGE
|
||||
; CHECK: add x0, [[HIBITS]], l_var@PAGEOFF
|
||||
|
||||
ret i8* getelementptr([2 x i8], [2 x i8]* @var, i32 0, i32 0)
|
||||
}
|
||||
|
||||
; CHECK: .section __TEXT,__cstring
|
||||
; CHECK: l_var:
|
||||
; CHECK: .asciz "\002"
|
||||
@var = private unnamed_addr constant [2 x i8] [i8 2, i8 0]
|
||||
Reference in New Issue
Block a user