forked from OSchip/llvm-project
[lld-macho] Mark aliased symbols as noDeadStrip
This matches ld64 behavior Differential Revision: https://reviews.llvm.org/D135082
This commit is contained in:
parent
40501f1b41
commit
1d1aa2d013
|
@ -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()));
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue