Message ID | 20200730002154.5704-1-kuba@kadziolka.net |
---|---|
State | Accepted |
Headers | show |
Series | [bug#42555,v2,core-updates] build-system/gnu: strip with --strip-unneeded | expand |
Context | Check | Description |
---|---|---|
cbaines/comparison | success | View comparision |
cbaines/git branch | success | View Git branch |
cbaines/applying patch | success | View Laminar job |
Hi Jakub, Jakub Kądziołka <kuba@kadziolka.net> skribis: > Apart from debug information, one can also strip some symbols. This can > be a significant difference, the closure of gcc-toolchain@7 got reduced > by 15 MB in my tests. Nice! Now’s a good time to get that patch in on ‘core-updates’. > As per [1], --strip-debug is included in --strip-unneeded, and > the debug files created also contain a copy of the information removed > by --strip-unneeded. Hmm the Binutils manual suggests otherwise (info "(binutils) objcopy"): --8<---------------cut here---------------start------------->8--- '-g' '--strip-debug' Do not copy debugging symbols or sections from the source file. '--strip-unneeded' Strip all symbols that are not needed for relocation processing. --8<---------------cut here---------------end--------------->8--- … but objcopy.c reads this: --8<---------------cut here---------------start------------->8--- else if ((flags & BSF_DEBUGGING) != 0) /* Debugging symbol. */ keep = (strip_symbols != STRIP_DEBUG && strip_symbols != STRIP_UNNEEDED && ! convert_debugging); --8<---------------cut here---------------end--------------->8--- … confirming that ‘--strip-unneeded’ includes ‘--strip-debug’. I submitted a patch for the Binutils manual. > Linux From Scratch suggests that this option shouldn't be used on static > libraries [2], however other sources [3] indicate otherwise. Building a > toolchain with this patch succeeds, and the result works fine for > 'gcc -static hello-world.c'. OK. > [1]: https://stackoverflow.com/a/52555093 Perhaps we can omit this one. In general, I think it’s safer to refer to “primary sources” as Wikipedians would say. > [2]: http://www.linuxfromscratch.org/lfs/view/9.1/chapter05/stripping.html > [3]: https://www.technovelty.org/linux/stripping-shared-libraries.html > > * guix/build/gnu-build-system.scm (strip): Use --strip-unneeded. > * guix/build-system/gnu.scm (static-package, gnu-build, gnu-cross-build): Likewise. LGTM! For the record, I tried ‘--strip-all’ before, but that was problematic for some reason: https://lists.gnu.org/archive/html/guix-devel/2018-03/msg00135.html Thanks, Ludo’.
On Sat Sep 19, 2020 at 4:49 PM CEST, Ludovic Courtès wrote: > Hi Jakub, > > Jakub Kądziołka <kuba@kadziolka.net> skribis: > > > Apart from debug information, one can also strip some symbols. This can > > be a significant difference, the closure of gcc-toolchain@7 got reduced > > by 15 MB in my tests. > > Nice! Now’s a good time to get that patch in on ‘core-updates’. Thanks. Patch pushed (with a small hiccup...) > > [1]: https://stackoverflow.com/a/52555093 > > Perhaps we can omit this one. In general, I think it’s safer to refer > to “primary sources” as Wikipedians would say. The problem with "primary sources" is that the docs on this are quite sparse. I think this link is much more comprehensive. > > [2]: http://www.linuxfromscratch.org/lfs/view/9.1/chapter05/stripping.html > > [3]: https://www.technovelty.org/linux/stripping-shared-libraries.html > > > > * guix/build/gnu-build-system.scm (strip): Use --strip-unneeded. > > * guix/build-system/gnu.scm (static-package, gnu-build, gnu-cross-build): Likewise. > > LGTM! > > For the record, I tried ‘--strip-all’ before, but that was > problematic > for some reason: > > https://lists.gnu.org/archive/html/guix-devel/2018-03/msg00135.html The docs for --strip-all say "Do not copy relocation and symbol information", so I would expect some relocation and/or linking use case to get broken... Regards, Jakub Kądziołka
diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm index 6b481ad45c..2c23197e77 100644 --- a/guix/build-system/gnu.scm +++ b/guix/build-system/gnu.scm @@ -215,7 +215,7 @@ use `--strip-all' as the arguments to `strip'." (arguments (let ((a (default-keyword-arguments (package-arguments p) '(#:configure-flags '() - #:strip-flags '("--strip-debug"))))) + #:strip-flags '("--strip-unneeded"))))) (substitute-keyword-arguments a ((#:configure-flags flags) `(cons* "--disable-shared" "LDFLAGS=-static" ,flags)) @@ -337,7 +337,7 @@ standard packages used as implicit inputs of the GNU build system." (parallel-tests? #t) (patch-shebangs? #t) (strip-binaries? #t) - (strip-flags ''("--strip-debug" + (strip-flags ''("--strip-unneeded" "--enable-deterministic-archives")) (strip-directories ''("lib" "lib64" "libexec" "bin" "sbin")) @@ -492,7 +492,7 @@ is one of `host' or `target'." (parallel-build? #t) (parallel-tests? #t) (patch-shebangs? #t) (strip-binaries? #t) - (strip-flags ''("--strip-debug" + (strip-flags ''("--strip-unneeded" "--enable-deterministic-archives")) (strip-directories ''("lib" "lib64" "libexec" "bin" "sbin")) diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm index 2e7dff2034..d3347c9518 100644 --- a/guix/build/gnu-build-system.scm +++ b/guix/build/gnu-build-system.scm @@ -425,7 +425,7 @@ makefiles." (objcopy-command (if target (string-append target "-objcopy") "objcopy")) - (strip-flags '("--strip-debug" + (strip-flags '("--strip-unneeded" "--enable-deterministic-archives")) (strip-directories '("lib" "lib64" "libexec" "bin" "sbin"))