mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-12 14:17:59 +00:00
On MachO, don't put non-private constants in mergeable sections.
On MachO, putting a symbol that doesn't start with a 'L' or 'l' in one of the __TEXT,__literal* sections prevents the linker from merging the context of the section. Since private GVs are the ones the get mangled to start with 'L' or 'l', we now only put those on the __TEXT,__literal* sections. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216682 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8317095e97
commit
4bb535027e
@ -626,7 +626,9 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
|||||||
cast<GlobalVariable>(GV)) < 32)
|
cast<GlobalVariable>(GV)) < 32)
|
||||||
return UStringSection;
|
return UStringSection;
|
||||||
|
|
||||||
if (Kind.isMergeableConst()) {
|
// With MachO only variables whose corresponding symbol starts with 'l' or
|
||||||
|
// 'L' can be merged, so we only try merging GVs with private linkage.
|
||||||
|
if (GV->hasPrivateLinkage() && Kind.isMergeableConst()) {
|
||||||
if (Kind.isMergeableConst4())
|
if (Kind.isMergeableConst4())
|
||||||
return FourByteConstantSection;
|
return FourByteConstantSection;
|
||||||
if (Kind.isMergeableConst8())
|
if (Kind.isMergeableConst8())
|
||||||
|
@ -53,21 +53,20 @@ define void @F1() {
|
|||||||
|
|
||||||
|
|
||||||
; _Complex long long const G4 = 34;
|
; _Complex long long const G4 = 34;
|
||||||
@G4 = unnamed_addr constant {i64,i64} { i64 34, i64 0 }
|
@G4 = private unnamed_addr constant {i64,i64} { i64 34, i64 0 }
|
||||||
|
|
||||||
; DARWIN: .section __TEXT,__literal16,16byte_literals
|
; DARWIN: .section __TEXT,__literal16,16byte_literals
|
||||||
; DARWIN: _G4:
|
; DARWIN: L_G4:
|
||||||
; DARWIN: .long 34
|
; DARWIN: .long 34
|
||||||
|
|
||||||
; DARWIN-STATIC: .section __TEXT,__literal16,16byte_literals
|
; DARWIN-STATIC: .section __TEXT,__literal16,16byte_literals
|
||||||
; DARWIN-STATIC: _G4:
|
; DARWIN-STATIC: L_G4:
|
||||||
; DARWIN-STATIC: .long 34
|
; DARWIN-STATIC: .long 34
|
||||||
|
|
||||||
; DARWIN64: .section __TEXT,__literal16,16byte_literals
|
; DARWIN64: .section __TEXT,__literal16,16byte_literals
|
||||||
; DARWIN64: _G4:
|
; DARWIN64: L_G4:
|
||||||
; DARWIN64: .quad 34
|
; DARWIN64: .quad 34
|
||||||
|
|
||||||
|
|
||||||
; int G5 = 47;
|
; int G5 = 47;
|
||||||
@G5 = global i32 47
|
@G5 = global i32 47
|
||||||
|
|
||||||
@ -194,3 +193,23 @@ define void @F1() {
|
|||||||
; WIN32-SECTIONS: L_G14:
|
; WIN32-SECTIONS: L_G14:
|
||||||
; WIN32-SECTIONS: .asciz "foo"
|
; WIN32-SECTIONS: .asciz "foo"
|
||||||
|
|
||||||
|
; cannot be merged on MachO, but can on other formats.
|
||||||
|
@G15 = unnamed_addr constant i64 0
|
||||||
|
|
||||||
|
; LINUX: .section .rodata.cst8,"aM",@progbits,8
|
||||||
|
; LINUX: G15:
|
||||||
|
|
||||||
|
; DARWIN: .section __TEXT,__const
|
||||||
|
; DARWIN: _G15:
|
||||||
|
|
||||||
|
; DARWIN-STATIC: .section __TEXT,__const
|
||||||
|
; DARWIN-STATIC: _G15:
|
||||||
|
|
||||||
|
; DARWIN64: .section __TEXT,__const
|
||||||
|
; DARWIN64: _G15:
|
||||||
|
|
||||||
|
; LINUX-SECTIONS: .section .rodata.G15,"aM",@progbits,8
|
||||||
|
; LINUX-SECTIONS: G15:
|
||||||
|
|
||||||
|
; WIN32-SECTIONS: .section .rdata,"rd",one_only,_G15
|
||||||
|
; WIN32-SECTIONS: _G15:
|
||||||
|
Loading…
Reference in New Issue
Block a user