[llvm] 0276cc7 - [llvm-objcopy][MachO] Do not strip symbols with the flag REFERENCED_DYNAMICALLY set
Alexander Shaposhnikov via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 11 16:35:33 PDT 2021
Author: Alexander Shaposhnikov
Date: 2021-06-11T16:34:59-07:00
New Revision: 0276cc742bfc0829a56dba043625510b0f61326a
URL: https://github.com/llvm/llvm-project/commit/0276cc742bfc0829a56dba043625510b0f61326a
DIFF: https://github.com/llvm/llvm-project/commit/0276cc742bfc0829a56dba043625510b0f61326a.diff
LOG: [llvm-objcopy][MachO] Do not strip symbols with the flag REFERENCED_DYNAMICALLY set
Do not strip symbols having the flag REFERENCED_DYNAMICALLY set.
Test plan: make check-all
Differential revision: https://reviews.llvm.org/D104092
Added:
Modified:
llvm/test/tools/llvm-objcopy/MachO/Inputs/strip-all-with-dwarf.yaml
llvm/test/tools/llvm-objcopy/MachO/strip-all.test
llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
Removed:
################################################################################
diff --git a/llvm/test/tools/llvm-objcopy/MachO/Inputs/strip-all-with-dwarf.yaml b/llvm/test/tools/llvm-objcopy/MachO/Inputs/strip-all-with-dwarf.yaml
index d7ba537b1986..09a7292ca634 100644
--- a/llvm/test/tools/llvm-objcopy/MachO/Inputs/strip-all-with-dwarf.yaml
+++ b/llvm/test/tools/llvm-objcopy/MachO/Inputs/strip-all-with-dwarf.yaml
@@ -254,9 +254,9 @@ LoadCommands:
- cmd: LC_SYMTAB
cmdsize: 24
symoff: 2136
- nsyms: 3
- stroff: 2184
- strsize: 20
+ nsyms: 4
+ stroff: 2204
+ strsize: 40
- cmd: LC_DYSYMTAB
cmdsize: 80
ilocalsym: 0
@@ -279,23 +279,31 @@ LoadCommands:
nlocrel: 0
LinkEditData:
NameList:
- - n_strx: 1
+ - n_strx: 21
n_type: 0x0E
n_sect: 2
n_desc: 0
n_value: 36
- - n_strx: 11
+ - n_strx: 31
n_type: 0x0F
n_sect: 1
n_desc: 0
n_value: 0
- - n_strx: 6
+ ## __mh_execute_header
+ - n_strx: 1
+ n_type: 0xF
+ n_sect: 1
+ ## ReferencedDynamically (0x10)
+ n_desc: 16
+ n_value: 4294967296
+ - n_strx: 26
n_type: 0x01
n_sect: 0
n_desc: 512
n_value: 4
StringTable:
- ''
+ - __mh_execute_header
- _bar
- _foo
- _main
diff --git a/llvm/test/tools/llvm-objcopy/MachO/strip-all.test b/llvm/test/tools/llvm-objcopy/MachO/strip-all.test
index cb41b353ec53..4d0ed2a3e844 100644
--- a/llvm/test/tools/llvm-objcopy/MachO/strip-all.test
+++ b/llvm/test/tools/llvm-objcopy/MachO/strip-all.test
@@ -45,8 +45,20 @@
# DWARF-NOT: Name: __debug_line
# DWARF: ]
-## Make sure that all relocations and symbols are removed.
+## Make sure that all relocations and symbols
+## (except those which have the flag ReferencedDynamically set) are removed.
# COMMON: Relocations [
# COMMON-NEXT: ]
-# COMMON: Symbols [
+# COMMON-NEXT: Symbols [
+# COMMON-NEXT: Symbol {
+# COMMON-NEXT: Name: __mh_execute_header
+# COMMON-NEXT: Extern
+# COMMON-NEXT: Type: Section
+# COMMON-NEXT: Section: __text
+# COMMON-NEXT: RefType: UndefinedNonLazy
+# COMMON-NEXT: Flags [ (0x10)
+# COMMON-NEXT: ReferencedDynamically (0x10)
+# COMMON-NEXT: ]
+# COMMON-NEXT: Value:
+# COMMON-NEXT: }
# COMMON-NEXT: ]
diff --git a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
index 30c2a166b7be..64326d9fe8d5 100644
--- a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
+++ b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp
@@ -99,6 +99,8 @@ static void updateAndRemoveSymbols(const CommonConfig &Config, Object &Obj) {
return false;
if (Config.KeepUndefined && N->isUndefinedSymbol())
return false;
+ if (N->n_desc & MachO::REFERENCED_DYNAMICALLY)
+ return false;
if (Config.StripAll)
return true;
if (Config.DiscardMode == DiscardType::All && !(N->n_type & MachO::N_EXT))
More information about the llvm-commits
mailing list