Skip to content
Snippets Groups Projects
Commit 5fc3f9a3 authored by Mike Hommey's avatar Mike Hommey
Browse files

Bug 1836020 - Patch llvm-strip to strip as much as cctools's strip....

Bug 1836020 - Patch llvm-strip to strip as much as cctools's strip. r=firefox-build-system-reviewers,sergesanspaille

Differential Revision: https://phabricator.services.mozilla.com/D179636
parent 4582f2cd
No related branches found
No related tags found
No related merge requests found
From 49abc88612014eb99580a2870257d2bc70b16333 Mon Sep 17 00:00:00 2001
From: Mike Hommey <mh@glandium.org>
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
......@@ -23,6 +23,7 @@
"llvmorg-17-init-8140-gb1bd52cd0d86.patch",
"llvmorg-17-init-11952-g2f0a1699eab7.patch",
"D146664_clang_15.patch",
"D151864.patch",
"win64-ret-null-on-commitment-limit_clang_14.patch",
"compiler-rt-rss-limit-heap-profile.patch"
]
......
......@@ -15,6 +15,7 @@
"revert-llvmorg-14-init-14141-gd6d3000a2f6d.patch",
"revert-llvmorg-14-init-11890-gf86deb18cab6_clang_16.patch",
"D146664.patch",
"D151864.patch",
"win64-ret-null-on-commitment-limit_clang_14.patch",
"compiler-rt-rss-limit-heap-profile.patch"
]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment