source: chapter08/stripping.xml@ 1b61cd1

xry111/arm64 xry111/arm64-12.0
Last change on this file since 1b61cd1 was 1b61cd1, checked in by Xi Ruoyao <xry111@…>, 13 months ago

Merge remote-tracking branch 'origin/trunk' into xry111/arm64

  • Property mode set to 100644
File size: 5.1 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 of the system software, the system's size can be decreased
16 by some 2 GB by removing the debugging symbols, and some unnecessary symbol table
17 entries, from binaries and libraries. This causes no real inconvenience for
18 a typical Linux user.</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 mistake 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 the
27 <parameter>--strip-unneeded</parameter> option removes all debug symbols
28 from a binary or library. It also removes all symbol table entries not
29 needed by the linker (for static libraries) or dynamic linker (for
30 dynamically linked binaries and shared libraries).</para>
31
32 <para>The debugging symbols from selected libraries are preserved
33 in separate files. That debugging information is needed to run
34 regression tests with <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> is
42 affected, the binary or library being stripped can be destroyed; this can
43 make the system completely unusable. To avoid this problem we copy some libraries
44 and binaries into <filename class="directory">/tmp</filename>, strip them
45 there, then reinstall them with the <command>install</command> command.
46 (The related entry in <xref linkend="pkgmgmt-upgrade-issues"/> gives the
47 rationale for using the <command>install</command> command here.)</para>
48
49 <note><para>The ELF loader's name is ld-linux-aarch64.so.1 on
50 little-endian systems and ld-linux-aarch64_be.so.1 on big-endian systems.
51 The construct below selects the
52 correct name for the current architecture, excluding anything ending
53 with <quote>g</quote>, in case the commands below have already been
54 run.</para></note>
55
56 <important>
57 <para>
58 If there is any package whose version is different from the version
59 specified by the book (either following a security advisory or
60 satisfying personal preference), it may be necessary to update the
61 library file name in <envar>save_usrlib</envar> or
62 <envar>online_usrlib</envar>.
63 <emphasis role='bold'>Failing to do so may render the system
64 completely unusable.</emphasis>
65 </para>
66 </important>
67
68<!-- also of interest are libgfortan, libgo, libgomp, and libobjc from GCC -->
69
70<!--<screen><userinput>save_lib="ld-2.25.so libc-2.25.so libpthread-2.25.so libthread_db-1.0.so"-->
71<screen><userinput>save_usrlib="$(cd /usr/lib; ls ld-linux*[^g])
72 libc.so.6
73 libthread_db.so.1
74 libquadmath.so.&libquadmath-version;
75 libstdc++.so.&libstdcpp-version;
76 libitm.so.&libitm-version;
77 libatomic.so.&libatomic-version;"
78
79cd /usr/lib
80
81for LIB in $save_usrlib; do
82 objcopy --only-keep-debug $LIB $LIB.dbg
83 cp $LIB /tmp/$LIB
84 strip --strip-unneeded /tmp/$LIB
85 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
86 install -vm755 /tmp/$LIB /usr/lib
87 rm /tmp/$LIB
88done
89
90online_usrbin="bash find strip"
91online_usrlib="libbfd-&binutils-version;.so
92 libsframe.so.0.0.0
93 libhistory.so.&readline-soversion;
94 libncursesw.so.&ncurses-version;
95 libm.so.6
96 libreadline.so.&readline-soversion;
97 libz.so.&zlib-version;
98 $(cd /usr/lib; find libnss*.so* -type f)"
99
100for BIN in $online_usrbin; do
101 cp /usr/bin/$BIN /tmp/$BIN
102 strip --strip-unneeded /tmp/$BIN
103 install -vm755 /tmp/$BIN /usr/bin
104 rm /tmp/$BIN
105done
106
107for LIB in $online_usrlib; do
108 cp /usr/lib/$LIB /tmp/$LIB
109 strip --strip-unneeded /tmp/$LIB
110 install -vm755 /tmp/$LIB /usr/lib
111 rm /tmp/$LIB
112done
113
114for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \
115 $(find /usr/lib -type f -name \*.a) \
116 $(find /usr/{bin,sbin,libexec} -type f); do
117 case "$online_usrbin $online_usrlib $save_usrlib" in
118 *$(basename $i)* )
119 ;;
120 * ) strip --strip-unneeded $i
121 ;;
122 esac
123done
124
125unset BIN LIB save_usrlib online_usrbin online_usrlib
126</userinput></screen>
127
128 <para>A large number of files will be flagged as errors because their file
129 format is not recognized. These warnings can be safely ignored. They
130 indicate that those files are scripts, not binaries.</para>
131
132</sect1>
Note: See TracBrowser for help on using the repository browser.