MachO: don't emit L... private symbols in do_not_dead_strip sections.
authorTim Northover <t.p.northover@gmail.com>
Thu, 15 Jul 2021 13:21:42 +0000 (14:21 +0100)
committerTim Northover <t.p.northover@gmail.com>
Thu, 15 Jul 2021 13:40:43 +0000 (14:40 +0100)
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
llvm/test/CodeGen/X86/osx-private-labels.ll

index ace475d..56fdbc1 100644 (file)
@@ -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<MCSectionMachO>(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;
 }
 
index d7f0251..ebc0a60 100644 (file)
@@ -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