[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