source: chapter08/stripping.xml@ a9b946e

xry111/mips64el
Last change on this file since a9b946e was 444bc9c, checked in by Xi Ruoyao <xry111@…>, 7 months ago

mips64el: adjust strip command for MIPS

  • Property mode set to 100644
File size: 5.4 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
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 <!-- TODO: Zstd is better than Zlib for both speed and size.
33 Unfortunately Valgrind does not support Zstd-compressed debug
34 info yet: https://bugs.kde.org/show_bug.cgi?id=469782 -->
35 <para>The debugging symbols from selected libraries are compressed with
36 <application>Zlib</application> and preserved in separate files. That
37 debugging information is needed to run regression tests with <ulink
38 url='&blfs-book;/general/valgrind.html'>valgrind</ulink> or <ulink
39 url='&blfs-book;/general/gdb.html'>gdb</ulink> later, in BLFS.
40 </para>
41
42 <para>Note that <command>strip</command> will overwrite the binary or library
43 file it is processing. This can crash the processes using code or data from
44 the file. If the process running <command>strip</command> is
45 affected, the binary or library being stripped can be destroyed; this can
46 make the system completely unusable. To avoid this problem we copy some libraries
47 and binaries into <filename class="directory">/tmp</filename>, strip them
48 there, then reinstall them with the <command>install</command> command.
49 (The related entry in <xref linkend="pkgmgmt-upgrade-issues"/> gives the
50 rationale for using the <command>install</command> command here.)</para>
51
52 <note><para>The ELF loader's name may be platform specific.
53 The contruct below selects the correct name for the current architecture,
54 excluding anything ending with <literal>g</literal>, in case the commands
55 below have already been run.</para></note>
56
57 <important>
58 <para>
59 If there is any package whose version is different from the version
60 specified by the book (either following a security advisory or
61 satisfying personal preference), it may be necessary to update the
62 library file name in <envar>save_usrlib</envar> or
63 <envar>online_usrlib</envar>.
64 <emphasis role='bold'>Failing to do so may render the system
65 completely unusable.</emphasis>
66 </para>
67 </important>
68
69<!-- also of interest are libgfortan, libgo, libgomp, and libobjc from GCC -->
70
71<!--<screen><userinput>save_lib="ld-2.25.so libc-2.25.so libpthread-2.25.so libthread_db-1.0.so"-->
72<screen><userinput>save_usrlib="$(cd /usr/lib; ls ld*.so.*[^g])
73 libc.so.6
74 libthread_db.so.1
75 libquadmath.so.&libquadmath-version;
76 libstdc++.so.&libstdcpp-version;
77 libitm.so.&libitm-version;
78 libatomic.so.&libatomic-version;"
79
80cd /usr/lib
81
82for LIB in $save_usrlib; do
83 objcopy --only-keep-debug --compress-debug-sections=zlib $LIB $LIB.dbg
84 cp $LIB /tmp/$LIB
85 strip --strip-unneeded /tmp/$LIB
86 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
87 install -vm755 /tmp/$LIB /usr/lib
88 rm /tmp/$LIB
89done
90
91online_usrbin="bash find strip"
92online_usrlib="libbfd-&binutils-version;.so
93 libsframe.so.&libsframe-version;
94 libhistory.so.&readline-soversion;
95 libncursesw.so.&ncurses-version;
96 libm.so.6
97 libreadline.so.&readline-soversion;
98 libz.so.&zlib-version;
99 libzstd.so.&zstd-version;
100 $(cd /usr/lib; find libnss*.so* -type f)"
101
102for BIN in $online_usrbin; do
103 cp /usr/bin/$BIN /tmp/$BIN
104 strip --strip-unneeded /tmp/$BIN
105 install -vm755 /tmp/$BIN /usr/bin
106 rm /tmp/$BIN
107done
108
109for LIB in $online_usrlib; do
110 cp /usr/lib/$LIB /tmp/$LIB
111 strip --strip-unneeded /tmp/$LIB
112 install -vm755 /tmp/$LIB /usr/lib
113 rm /tmp/$LIB
114done
115
116for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \
117 $(find /usr/lib -type f -name \*.a) \
118 $(find /usr/{bin,sbin,libexec} -type f); do
119 case "$online_usrbin $online_usrlib $save_usrlib" in
120 *$(basename $i)* )
121 ;;
122 * ) strip --strip-unneeded $i
123 ;;
124 esac
125done
126
127unset BIN LIB save_usrlib online_usrbin online_usrlib
128</userinput></screen>
129
130 <para>A large number of files will be flagged as errors because their file
131 format is not recognized. These warnings can be safely ignored. They
132 indicate that those files are scripts, not binaries.</para>
133
134</sect1>
Note: See TracBrowser for help on using the repository browser.