Dead strip DESC bits should only be set on object files.

It only makes sense to set on N_NO_DEAD_STRIP on a relocatable object file.  Otherwise the bits aren't useful for anything.  Matches the ld64 behaviour.

llvm-svn: 278419
This commit is contained in:
Pete Cooper 2016-08-11 21:27:18 +00:00
parent da2f38e0f4
commit ef5bea9dca
2 changed files with 6 additions and 1 deletions

View File

@ -963,7 +963,8 @@ uint16_t Util::descBits(const DefinedAtom* atom) {
desc |= REFERENCED_DYNAMICALLY;
if (_archHandler.isThumbFunction(*atom))
desc |= N_ARM_THUMB_DEF;
if (atom->deadStrip() == DefinedAtom::deadStripNever) {
if (atom->deadStrip() == DefinedAtom::deadStripNever &&
_ctx.outputMachOType() == llvm::MachO::MH_OBJECT) {
if ((atom->contentType() != DefinedAtom::typeInitializerPtr)
&& (atom->contentType() != DefinedAtom::typeTerminatorPtr))
desc |= N_NO_DEAD_STRIP;

View File

@ -2,6 +2,9 @@
# RUN: lld -flavor darwin -arch x86_64 -export_dynamic -dead_strip %s -dylib %p/Inputs/x86_64/libSystem.yaml -o %t.dylib -print_atoms | FileCheck -check-prefix=CHECK1 %s
# RUN: lld -flavor darwin -arch x86_64 -dead_strip %s -dylib %p/Inputs/x86_64/libSystem.yaml -o %t2.dylib -print_atoms | FileCheck -check-prefix=CHECK2 %s
# RUN: lld -flavor darwin -arch x86_64 -r %s -dylib %p/Inputs/x86_64/libSystem.yaml -o %t3.o
# RUN: llvm-nm -m %t3.o | FileCheck -check-prefix=RELOCATABLE_SYMBOLS %s
#
# Test that -export_dynamic -dead-strip from removing globals.
#
@ -25,3 +28,4 @@ shared-library-atoms:
# CHECK2: name: def
# CHECK2-NOT: name: dead
# RELOCATABLE_SYMBOLS: external def