From e1f22e397d320bb11ed9d5ed193af3cd1e84df81 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 6 Nov 2014 02:42:03 +0000 Subject: [PATCH] Allow L symbols in no_dead_strip sections. If a section cannot be dead stripped, it is safe to use L symbols, since the linker will keep all of it in the end. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221431 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 4 ++++ test/CodeGen/X86/osx-private-labels.ll | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index c7570ba76e1..6944f71105b 100644 --- a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -588,6 +588,10 @@ bool TargetLoweringObjectFileMachO::isSectionAtomizableBySymbols( SMO.getSectionName() == "__cfstring") return false; + // no_dead_strip sections are not atomized in practice. + if (SMO.hasAttribute(MachO::S_ATTR_NO_DEAD_STRIP)) + return false; + switch (SMO.getType()) { default: return true; diff --git a/test/CodeGen/X86/osx-private-labels.ll b/test/CodeGen/X86/osx-private-labels.ll index 349ce7d0cc5..7e176442d29 100644 --- a/test/CodeGen/X86/osx-private-labels.ll +++ b/test/CodeGen/X86/osx-private-labels.ll @@ -69,3 +69,8 @@ ; CHECK: .section __DATA,__foobar,interposing ; CHECK-NEXT: .align 3 ; CHECK-NEXT: L_private12: + +@private13 = private global i32 42, section "__DATA, __objc_classlist, regular, no_dead_strip" +; CHECK: .section __DATA,__objc_classlist,regular,no_dead_strip +; CHECK-NEXT: .align 2 +; CHECK-NEXT: L_private13: -- 2.34.1