diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-08-28 20:13:31 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-08-28 20:13:31 +0000 |
commit | b43d51de956be1ce30e6e7943153201cd1362ead (patch) | |
tree | b48abd75f94bee80b4200cda9bc40eeb71e6f753 /llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | |
parent | 9e32475f18c118987e523b0b6713515a106040c4 (diff) | |
download | llvm-b43d51de956be1ce30e6e7943153201cd1362ead.zip llvm-b43d51de956be1ce30e6e7943153201cd1362ead.tar.gz llvm-b43d51de956be1ce30e6e7943153201cd1362ead.tar.bz2 |
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.
llvm-svn: 216682
Diffstat (limited to 'llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp')
-rw-r--r-- | llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 55e1756..8820d10 100644 --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -626,7 +626,9 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, cast<GlobalVariable>(GV)) < 32) 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()) return FourByteConstantSection; if (Kind.isMergeableConst8()) |