source: chapter08/stripping.xml@ 942e81de

11.2 11.2-rc1 11.3 11.3-rc1 12.0 12.0-rc1 12.1 12.1-rc1 12.2 12.2-rc1 bdubbs/gcc13 multilib renodr/libudev-from-systemd trunk xry111/arm64 xry111/arm64-12.0 xry111/clfs-ng xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1 xry111/loongarch-12.2 xry111/mips64el xry111/multilib xry111/pip3 xry111/rust-wip-20221008 xry111/update-glibc
Last change on this file since 942e81de was 942e81de, checked in by Xi Ruoyao <xry111@…>, 2 years ago

stripping: also mention symbol table bisides debug symbols

  • Property mode set to 100644
File size: 4.6 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
7
8<sect1 id="ch-system-stripping">
9 <?dbhtml filename="stripping.html"?>
10
11 <title>Stripping</title>
12
13 <para>This section is optional. If the intended user is not a
14 programmer and does not plan to do
15 any debugging on the system software, the system size can be decreased
16 by about 2 GB by removing the debugging symbols and unneeded symbol table
17 entries from binaries and libraries. This causes no inconvenience other
18 than not being able to debug the software fully anymore.</para>
19
20 <para>Most people who use the commands mentioned below do not
21 experience any difficulties. However, it is easy to make a typo and
22 render the new system unusable, so before running the
23 <command>strip</command> commands, it is a good idea to make a
24 backup of the LFS system in its current state.</para>
25
26 <para>A <command>strip</command> command with
27 <parameter>--strip-unneeded</parameter> option removes all debug symbols
28 from a binary or library. And, it removes all symbol table entries not
29 needed by the linker (for static libraries) or dynamic linker (for
30 dynamic-linked binaries and shared libraries).</para>
31
32 <para>The debugging symbols for selected libraries are placed
33 in separate files. This debugging information is needed if running
34 regression tests that use <ulink
35 url='&blfs-book;/general/valgrind.html'>valgrind</ulink> or <ulink
36 url='&blfs-book;/general/gdb.html'>gdb</ulink> later in BLFS.
37 </para>
38
39 <para>Note that <command>strip</command> will overwrite the binary or library
40 file it is processing. This can crash the processes using code or data from
41 the file. If the process running <command>strip</command> itself is
42 affected, the binary or library being stripped can be destroyed and can
43 make the system completely unusable. To avoid it, we'll copy some libraries
44 and binaries into <filename class="directory">/tmp</filename>, strip them
45 there, and install them back with the <command>install</command> command.
46 Read the related entry in <xref linkend="pkgmgmt-upgrade-issues"/> for the
47 rationale to use the <command>install</command> command here.</para>
48
49 <note><para>The ELF loader's name is ld-linux-x86-64.so.2 on 64-bit systems
50 and ld-linux.so.2 on 32-bit systems. The construct below selects the
51 correct name for the current architecture, excluding anything ending
52 with <quote>g</quote>, in case the commands below have already been
53 run.</para></note>
54
55<!-- also of interest are libgfortan, libgo, libgomp, and libobjc from GCC -->
56
57<!--<screen><userinput>save_lib="ld-2.25.so libc-2.25.so libpthread-2.25.so libthread_db-1.0.so"-->
58<screen><userinput>save_usrlib="$(cd /usr/lib; ls ld-linux*[^g])
59 libc.so.6
60 libthread_db.so.1
61 libquadmath.so.&libquadmath-version;
62 libstdc++.so.&libstdcpp-version;
63 libitm.so.&libitm-version;
64 libatomic.so.&libatomic-version;"
65
66cd /usr/lib
67
68for LIB in $save_usrlib; do
69 objcopy --only-keep-debug $LIB $LIB.dbg
70 cp $LIB /tmp/$LIB
71 strip --strip-unneeded /tmp/$LIB
72 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
73 install -vm755 /tmp/$LIB /usr/lib
74 rm /tmp/$LIB
75done
76
77online_usrbin="bash find strip"
78online_usrlib="libbfd-&binutils-version;.so
79 libhistory.so.&readline-soversion;
80 libncursesw.so.&ncurses-version;
81 libm.so.6
82 libreadline.so.&readline-soversion;
83 libz.so.&zlib-version;
84 $(cd /usr/lib; find libnss*.so* -type f)"
85
86for BIN in $online_usrbin; do
87 cp /usr/bin/$BIN /tmp/$BIN
88 strip --strip-unneeded /tmp/$BIN
89 install -vm755 /tmp/$BIN /usr/bin
90 rm /tmp/$BIN
91done
92
93for LIB in $online_usrlib; do
94 cp /usr/lib/$LIB /tmp/$LIB
95 strip --strip-unneeded /tmp/$LIB
96 install -vm755 /tmp/$LIB /usr/lib
97 rm /tmp/$LIB
98done
99
100for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \
101 $(find /usr/lib -type f -name \*.a) \
102 $(find /usr/{bin,sbin,libexec} -type f); do
103 case "$online_usrbin $online_usrlib $save_usrlib" in
104 *$(basename $i)* )
105 ;;
106 * ) strip --strip-unneeded $i
107 ;;
108 esac
109done
110
111unset BIN LIB save_usrlib online_usrbin online_usrlib
112</userinput></screen>
113
114 <para>A large number of files will be reported as having their file
115 format not recognized. These warnings can be safely ignored. They
116 indicate that those files are scripts instead of binaries.</para>
117
118</sect1>
Note: See TracBrowser for help on using the repository browser.