source: chapter08/stripping.xml@ fd4792b

multilib
Last change on this file since fd4792b was fd4792b, checked in by Thomas Trepl (Moody) <thomas@…>, 20 months ago

Automatic merge of trunk into multilib

  • Property mode set to 100644
File size: 6.3 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
67for LIB in $save_usrlib; do
68 objcopy --only-keep-debug $LIB $LIB.dbg
69 cp $LIB /tmp/$LIB
70 strip --strip-unneeded /tmp/$LIB
71 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
72 install -vm755 /tmp/$LIB /usr/lib
73 rm /tmp/$LIB
74done</userinput>
75<userinput arch="ml_32,ml_all">
76cd /usr/lib32
77for LIB in $save_usrlib; do
78 objcopy --only-keep-debug $LIB $LIB.dbg
79 cp $LIB /tmp/$LIB
80 strip --strip-unneeded /tmp/$LIB
81 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
82 install -vm755 /tmp/$LIB /usr/lib32
83 rm /tmp/$LIB
84done</userinput>
85<userinput arch="ml_x32,ml_all">
86cd /usr/libx32
87for LIB in $save_usrlib; do
88 objcopy --only-keep-debug $LIB $LIB.dbg
89 cp $LIB /tmp/$LIB
90 strip --strip-unneeded /tmp/$LIB
91 objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
92 install -vm755 /tmp/$LIB /usr/libx32
93 rm /tmp/$LIB
94done</userinput><userinput>
95
96online_usrbin="bash find strip"
97online_usrlib="libbfd-&binutils-version;.so
98 libhistory.so.&readline-soversion;
99 libncursesw.so.&ncurses-version;
100 libm.so.6
101 libreadline.so.&readline-soversion;
102 libz.so.&zlib-version;
103 $(cd /usr/lib; find libnss*.so* -type f)"
104
105for BIN in $online_usrbin; do
106 cp /usr/bin/$BIN /tmp/$BIN
107 strip --strip-unneeded /tmp/$BIN
108 install -vm755 /tmp/$BIN /usr/bin
109 rm /tmp/$BIN
110done
111
112for LIB in $online_usrlib; do
113 cp /usr/lib/$LIB /tmp/$LIB
114 strip --strip-unneeded /tmp/$LIB
115 install -vm755 /tmp/$LIB /usr/lib
116 rm /tmp/$LIB
117done</userinput><userinput arch="ml_32,ml_all">
118for LIB in $online_usrlib; do
119 cp /usr/lib32/$LIB /tmp/$LIB
120 strip --strip-unneeded /tmp/$LIB
121 install -vm755 /tmp/$LIB /usr/lib32
122 rm /tmp/$LIB
123done</userinput><userinput arch="ml_x32,ml_all">
124for LIB in $online_usrlib; do
125 cp /usr/libx32/$LIB /tmp/$LIB
126 strip --strip-unneeded /tmp/$LIB
127 install -vm755 /tmp/$LIB /usr/libx32
128 rm /tmp/$LIB
129done</userinput><userinput>
130
131for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \
132 $(find /usr/lib -type f -name \*.a) \
133 $(find /usr/{bin,sbin,libexec} -type f); do
134 case "$online_usrbin $online_usrlib $save_usrlib" in
135 *$(basename $i)* )
136 ;;
137 * ) strip --strip-unneeded $i
138 ;;
139 esac
140done</userinput><userinput arch="ml_32,ml_all">
141for i in $(find /usr/lib32 -type f -name \*.so* ! -name \*dbg) \
142 $(find /usr/lib32 -type f -name \*.a); do
143 case "$online_usrbin $online_usrlib $save_usrlib" in
144 *$(basename $i)* )
145 ;;
146 * ) strip --strip-unneeded $i
147 ;;
148 esac
149done</userinput><userinput arch="ml_x32,ml_all">
150for i in $(find /usr/libx32 -type f -name \*.so* ! -name \*dbg) \
151 $(find /usr/libx32 -type f -name \*.a); do
152 case "$online_usrbin $online_usrlib $save_usrlib" in
153 *$(basename $i)* )
154 ;;
155 * ) strip --strip-unneeded $i
156 ;;
157 esac
158done</userinput><userinput>
159
160unset BIN LIB save_usrlib online_usrbin online_usrlib
161</userinput></screen>
162
163 <para>A large number of files will be reported as having their file
164 format not recognized. These warnings can be safely ignored. They
165 indicate that those files are scripts instead of binaries.</para>
166
167</sect1>
Note: See TracBrowser for help on using the repository browser.