[PATCH] D135082: [lld-macho] Mark aliased symbols as noDeadStrip
Keith Smiley via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 4 14:53:09 PDT 2022
keith updated this revision to Diff 465170.
keith added a comment.
Update test with ld64 context
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D135082/new/
https://reviews.llvm.org/D135082
Files:
lld/MachO/Driver.cpp
lld/MachO/MarkLive.cpp
lld/test/MachO/alias-option.s
Index: lld/test/MachO/alias-option.s
===================================================================
--- lld/test/MachO/alias-option.s
+++ lld/test/MachO/alias-option.s
@@ -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
Index: lld/MachO/MarkLive.cpp
===================================================================
--- lld/MachO/MarkLive.cpp
+++ lld/MachO/MarkLive.cpp
@@ -229,7 +229,7 @@
// 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,
Index: lld/MachO/Driver.cpp
===================================================================
--- lld/MachO/Driver.cpp
+++ lld/MachO/Driver.cpp
@@ -1241,7 +1241,8 @@
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()));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D135082.465170.patch
Type: text/x-patch
Size: 2007 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221004/8f94ab80/attachment.bin>
More information about the llvm-commits
mailing list