[lld-macho] Mark aliased symbols as noDeadStrip

This matches ld64 behavior

Differential Revision: https://reviews.llvm.org/D135082
This commit is contained in:
Keith Smiley 2022-10-03 09:13:10 -07:00
parent 40501f1b41
commit 1d1aa2d013
No known key found for this signature in database
GPG Key ID: 33BA60D44C7167F8
3 changed files with 8 additions and 3 deletions

View File

@ -1241,7 +1241,8 @@ static void createAliases() {
for (const auto &pair : config->aliasedSymbols) {
if (const auto &sym = symtab->find(pair.first)) {
if (const auto &defined = dyn_cast<Defined>(sym)) {
symtab->aliasDefined(defined, pair.second, defined->getFile());
symtab->aliasDefined(defined, pair.second, defined->getFile())
->noDeadStrip = true;
} else {
error("TODO: support aliasing to symbols of kind " +
Twine(sym->kind()));

View File

@ -229,7 +229,7 @@ void markLive() {
// FIXME: When we implement these flags, make symbols from them GC
// roots:
// * -reexported_symbol(s_list)
// * -alias(-list)
// * -alias_list
// * -init
// In dylibs and bundles and in executables with -export_dynamic,

View File

@ -21,7 +21,9 @@
# MAIN: [[#%x,FOO_ADDR:]] T _foo
# MAIN: [[#FOO_ADDR]] T _main
# RUN: %lld -alias _foo _bar -alias _main _fake_main %t/main.o %t/foo.o -o %t/multiple.o
## Verify dead stripping doesn't remove the aliased symbol. This behavior differs
## from ld64 where it actually does dead strip only the alias, not the original symbol.
# RUN: %lld -dead_strip -alias _foo _bar -alias _main _fake_main %t/main.o %t/foo.o -o %t/multiple.o
# RUN: llvm-nm %t/multiple.o | FileCheck %s --check-prefix=MULTIPLE
# MULTIPLE: [[#%x,FOO_ADDR:]] T _bar
@ -30,11 +32,13 @@
# MULTIPLE: [[#MAIN_ADDR]] T _main
#--- foo.s
.subsections_via_symbols
.globl _foo
_foo:
ret
#--- main.s
.subsections_via_symbols
.globl _main
_main:
ret