From 49abc88612014eb99580a2870257d2bc70b16333 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Thu, 1 Jun 2023 13:26:51 +0900 Subject: [PATCH] Strip stabs symbols in Mach-O when stripping debug info Differential Revision: https://reviews.llvm.org/D151864 --- llvm/lib/ObjCopy/MachO/MachOObjcopy.cpp | 3 + .../MachO/Inputs/strip-stabs.yaml | 248 ++++++++++++++++++ .../tools/llvm-objcopy/MachO/strip-stabs.test | 17 ++ 3 files changed, 268 insertions(+) create mode 100644 llvm/test/tools/llvm-objcopy/MachO/Inputs/strip-stabs.yaml create mode 100644 llvm/test/tools/llvm-objcopy/MachO/strip-stabs.test diff --git a/llvm/lib/ObjCopy/MachO/MachOObjcopy.cpp b/llvm/lib/ObjCopy/MachO/MachOObjcopy.cpp index d37241682efe..e26b363df21c 100644 --- a/llvm/lib/ObjCopy/MachO/MachOObjcopy.cpp +++ b/llvm/lib/ObjCopy/MachO/MachOObjcopy.cpp @@ -112,6 +112,9 @@ static void updateAndRemoveSymbols(const CommonConfig &Config, if (Config.DiscardMode == DiscardType::All && !(N->n_type & MachO::N_EXT)) return true; // This behavior is consistent with cctools' strip. + if (Config.StripDebug && (N->n_type & MachO::N_STAB)) + return true; + // This behavior is consistent with cctools' strip. if (MachOConfig.StripSwiftSymbols && (Obj.Header.Flags & MachO::MH_DYLDLINK) && Obj.SwiftVersion && *Obj.SwiftVersion && N->isSwiftSymbol()) diff --git a/llvm/test/tools/llvm-objcopy/MachO/Inputs/strip-stabs.yaml b/llvm/test/tools/llvm-objcopy/MachO/Inputs/strip-stabs.yaml new file mode 100644 index 000000000000..3259aa228fed --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/MachO/Inputs/strip-stabs.yaml @@ -0,0 +1,248 @@ +--- !mach-o +FileHeader: + magic: 0xFEEDFACF + cputype: 0x1000007 + cpusubtype: 0x80000003 + filetype: 0x2 + ncmds: 13 + sizeofcmds: 808 + flags: 0x200085 + reserved: 0x0 +LoadCommands: + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: __PAGEZERO + vmaddr: 0 + vmsize: 4294967296 + fileoff: 0 + filesize: 0 + maxprot: 0 + initprot: 0 + nsects: 0 + flags: 0 + - cmd: LC_SEGMENT_64 + cmdsize: 312 + segname: __TEXT + vmaddr: 4294967296 + vmsize: 8192 + fileoff: 0 + filesize: 8192 + maxprot: 5 + initprot: 5 + nsects: 3 + flags: 0 + Sections: + - sectname: __text + segname: __TEXT + addr: 0x100000370 + size: 8 + offset: 0x370 + align: 4 + reloff: 0x0 + nreloc: 0 + flags: 0x80000400 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 554889E531C05DC3 + - sectname: __unwind_info + segname: __TEXT + addr: 0x100000378 + size: 4152 + offset: 0x378 + align: 2 + reloff: 0x0 + nreloc: 0 + flags: 0x0 + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + - sectname: __eh_frame + segname: __TEXT + addr: 0x1000013B0 + size: 24 + offset: 0x13B0 + align: 3 + reloff: 0x0 + nreloc: 0 + flags: 0x6000000B + reserved1: 0x0 + reserved2: 0x0 + reserved3: 0x0 + content: 1400000000000000017A520001781001100C070890010000 + - cmd: LC_SEGMENT_64 + cmdsize: 72 + segname: __LINKEDIT + vmaddr: 4294975488 + vmsize: 272 + fileoff: 8192 + filesize: 272 + maxprot: 1 + initprot: 1 + nsects: 0 + flags: 0 + - cmd: LC_DYLD_INFO_ONLY + cmdsize: 48 + rebase_off: 0 + rebase_size: 0 + bind_off: 0 + bind_size: 0 + weak_bind_off: 0 + weak_bind_size: 0 + lazy_bind_off: 0 + lazy_bind_size: 0 + export_off: 8192 + export_size: 48 + - cmd: LC_SYMTAB + cmdsize: 24 + symoff: 8248 + nsyms: 8 + stroff: 8376 + strsize: 88 + - cmd: LC_DYSYMTAB + cmdsize: 80 + ilocalsym: 0 + nlocalsym: 5 + iextdefsym: 5 + nextdefsym: 2 + iundefsym: 7 + nundefsym: 1 + tocoff: 0 + ntoc: 0 + modtaboff: 0 + nmodtab: 0 + extrefsymoff: 0 + nextrefsyms: 0 + indirectsymoff: 0 + nindirectsyms: 0 + extreloff: 0 + nextrel: 0 + locreloff: 0 + nlocrel: 0 + - cmd: LC_LOAD_DYLINKER + cmdsize: 32 + name: 12 + Content: '/usr/lib/dyld' + ZeroPadBytes: 7 + - cmd: LC_UUID + cmdsize: 24 + uuid: 4C4C44DE-5555-3144-A19D-79B149A02D5F + - cmd: LC_BUILD_VERSION + cmdsize: 32 + platform: 1 + minos: 852736 + sdk: 852736 + ntools: 1 + Tools: + - tool: 3 + version: 1048580 + - cmd: LC_MAIN + cmdsize: 24 + entryoff: 880 + stacksize: 0 + - cmd: LC_LOAD_DYLIB + cmdsize: 56 + dylib: + name: 24 + timestamp: 0 + current_version: 86467587 + compatibility_version: 65536 + Content: '/usr/lib/libSystem.B.dylib' + ZeroPadBytes: 6 + - cmd: LC_FUNCTION_STARTS + cmdsize: 16 + dataoff: 8240 + datasize: 8 + - cmd: LC_DATA_IN_CODE + cmdsize: 16 + dataoff: 8248 + datasize: 0 +LinkEditData: + ExportTrie: + TerminalSize: 0 + NodeOffset: 0 + Name: '' + Flags: 0x0 + Address: 0x0 + Other: 0x0 + ImportName: '' + Children: + - TerminalSize: 0 + NodeOffset: 5 + Name: _ + Flags: 0x0 + Address: 0x0 + Other: 0x0 + ImportName: '' + Children: + - TerminalSize: 3 + NodeOffset: 33 + Name: main + Flags: 0x0 + Address: 0x370 + Other: 0x0 + ImportName: '' + - TerminalSize: 2 + NodeOffset: 38 + Name: _mh_execute_header + Flags: 0x0 + Address: 0x0 + Other: 0x0 + ImportName: '' + NameList: + - n_strx: 45 + n_type: 0x64 + n_sect: 0 + n_desc: 0 + n_value: 0 + - n_strx: 57 + n_type: 0x66 + n_sect: 3 + n_desc: 1 + n_value: 0 + - n_strx: 76 + n_type: 0x24 + n_sect: 1 + n_desc: 0 + n_value: 4294968176 + - n_strx: 1 + n_type: 0x24 + n_sect: 0 + n_desc: 0 + n_value: 8 + - n_strx: 1 + n_type: 0x64 + n_sect: 1 + n_desc: 0 + n_value: 0 + - n_strx: 2 + n_type: 0xF + n_sect: 1 + n_desc: 0 + n_value: 4294968176 + - n_strx: 25 + n_type: 0xF + n_sect: 1 + n_desc: 16 + n_value: 4294967296 + - n_strx: 8 + n_type: 0x1 + n_sect: 0 + n_desc: 256 + n_value: 0 + StringTable: + - ' ' + - _main + - dyld_stub_binder + - __mh_execute_header + - '/tmp/test.c' + - '/tmp/test-6aa924.o' + - _main + - '' + - '' + - '' + - '' + - '' + - '' + FunctionStarts: [ 0x370 ] +... diff --git a/llvm/test/tools/llvm-objcopy/MachO/strip-stabs.test b/llvm/test/tools/llvm-objcopy/MachO/strip-stabs.test new file mode 100644 index 000000000000..90c00f60a152 --- /dev/null +++ b/llvm/test/tools/llvm-objcopy/MachO/strip-stabs.test @@ -0,0 +1,17 @@ +## Show that llvm-objcopy/llvm-strip stabs symbols and debug sections. + +# RUN: yaml2obj %p/Inputs/strip-stabs.yaml -o %t + +# RUN: llvm-objcopy --strip-debug %t %t.stripped + +## Make sure that stabs symbols are stripped. +# RUN: llvm-readobj --symbols %t | FileCheck %s --check-prefix=SYM +# RUN: llvm-readobj --symbols %t.stripped | FileCheck %s --check-prefix=SYM_STRIP + +# SYM: Symbols [ +# SYM-COUNT-5: Type: SymDebugTable ({{.*}}) +# SYM: ] + +# SYM_STRIP: Symbols [ +# SYM_STRIP-NOT: Type: SymDebugTable ({{.*}}) +# SYM_STRIP: ] -- 2.40.0.1.gc689dad23e