mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-17 00:50:58 +00:00
[GlobalMerge] Only emit aliases for internal linkage variables for non-Mach-O
On Mach-O emitting aliases for the variables that make up a MergedGlobals variable can cause problems when linking with dead stripping enabled so don't do that, except for external variables where we must emit an alias. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244748 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f7d96a06fb
commit
1a5ed7be24
@ -459,9 +459,16 @@ bool GlobalMerge::doMerge(SmallVectorImpl<GlobalVariable *> &Globals,
|
||||
Globals[k]->replaceAllUsesWith(GEP);
|
||||
Globals[k]->eraseFromParent();
|
||||
|
||||
// Generate a new alias...
|
||||
auto *PTy = cast<PointerType>(GEP->getType());
|
||||
GlobalAlias::create(PTy, Linkage, Name, GEP, &M);
|
||||
// When the linkage is not internal we must emit an alias for the original
|
||||
// variable name as it may be accessed from another object. On non-Mach-O
|
||||
// we can also emit an alias for internal linkage as it's safe to do so.
|
||||
// It's not safe on Mach-O as the alias (and thus the portion of the
|
||||
// MergedGlobals variable) may be dead stripped at link time.
|
||||
if (Linkage != GlobalValue::InternalLinkage ||
|
||||
!TM->getTargetTriple().isOSBinFormatMachO()) {
|
||||
auto *PTy = cast<PointerType>(GEP->getType());
|
||||
GlobalAlias::create(PTy, Linkage, Name, GEP, &M);
|
||||
}
|
||||
|
||||
NumMerged++;
|
||||
}
|
||||
|
@ -23,5 +23,9 @@ define void @f1(i32 %a1, i32 %a2) {
|
||||
;CHECK: .type .L_MergedGlobals,@object // @_MergedGlobals
|
||||
;CHECK: .local .L_MergedGlobals
|
||||
;CHECK: .comm .L_MergedGlobals,8,8
|
||||
;CHECK: m = .L_MergedGlobals
|
||||
;CHECK: n = .L_MergedGlobals+4
|
||||
|
||||
;CHECK-APPLE-IOS: .zerofill __DATA,__bss,l__MergedGlobals,8,3 ; @_MergedGlobals
|
||||
;CHECK-APPLE-IOS-NOT: _m = l__MergedGlobals
|
||||
;CHECK-APPLE-IOS-NOT: _n = l__MergedGlobals+4
|
||||
|
@ -36,11 +36,13 @@ define void @f1(i32 %a1, i32 %a2, i32 %a3) {
|
||||
|
||||
;CHECK-APPLE-IOS: .zerofill __DATA,__bss,l__MergedGlobals.1,4000,4
|
||||
|
||||
;CHECK: z = .L_MergedGlobals
|
||||
;CHECK: .globl x
|
||||
;CHECK: x = .L_MergedGlobals+4
|
||||
;CHECK: .globl y
|
||||
;CHECK: y = .L_MergedGlobals.1
|
||||
|
||||
;CHECK-APPLE-IOS-NOT: _z = l__MergedGlobals
|
||||
;CHECK-APPLE-IOS:.globl _x
|
||||
;CHECK-APPLE-IOS: _x = l__MergedGlobals+4
|
||||
;CHECK-APPLE-IOS:.globl _y
|
||||
|
Loading…
Reference in New Issue
Block a user