From 5d7632ee72c51b518bde17e385b71c5d3f0d2560 Mon Sep 17 00:00:00 2001 From: Tim Northover Date: Thu, 15 Jul 2021 14:21:42 +0100 Subject: [PATCH] MachO: don't emit L... private symbols in do_not_dead_strip sections. The linker can sometimes drop the do_not_dead_strip if it can't associate the atom with a symbol (the other place to specify no dead-stripping in MachO files). --- llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 9 ++++----- llvm/test/CodeGen/X86/osx-private-labels.ll | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index ace475d..56fdbc1 100644 --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -1480,11 +1480,10 @@ static bool canUsePrivateLabel(const MCAsmInfo &AsmInfo, if (!AsmInfo.isSectionAtomizableBySymbols(Section)) return true; - // If it is not dead stripped, it is safe to use private labels. - const MCSectionMachO &SMO = cast(Section); - if (SMO.hasAttribute(MachO::S_ATTR_NO_DEAD_STRIP)) - return true; - + // FIXME: we should be able to use private labels for sections that can't be + // dead-stripped (there's no issue with blocking atomization there), but `ld + // -r` sometimes drops the no_dead_strip attribute from sections so for safety + // we don't allow it. return false; } diff --git a/llvm/test/CodeGen/X86/osx-private-labels.ll b/llvm/test/CodeGen/X86/osx-private-labels.ll index d7f0251..ebc0a60 100644 --- a/llvm/test/CodeGen/X86/osx-private-labels.ll +++ b/llvm/test/CodeGen/X86/osx-private-labels.ll @@ -73,7 +73,7 @@ @private13 = private global i32 42, section "__DATA, __objc_classlist, regular, no_dead_strip" ; CHECK: .section __DATA,__objc_classlist,regular,no_dead_strip ; CHECK-NEXT: .p2align 2 -; CHECK-NEXT: L_private13: +; CHECK-NEXT: _private13: @private14 = private global [4 x i8] c"zed\00", section "__TEXT,__objc_classname,cstring_literals" ; CHECK: .section __TEXT,__objc_classname,cstring_literals -- 2.7.4