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 --- 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 @@ - 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 @@ 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 --- 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 --- a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp +++ b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp @@ -99,6 +99,8 @@ 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))