source: chapter08/stripping.xml@ a8de3b44

multilib xry111/multilib
Last change on this file since a8de3b44 was 47c0603, checked in by Thomas Trepl <thomas@…>, 21 months ago

Automatic merge of trunk into multilib

  • Property mode set to 100644
File size: 6.3 KB
RevLine 
[3c928f1]1<?xml version="1.0" encoding="ISO-8859-1"?>
[b06ca36]2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
[81fd230]4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
[ddd5542]7
[8a269ec]8<sect1 id="ch-system-stripping">
9 <?dbhtml filename="stripping.html"?>
[ddd5542]10
[8a269ec]11 <title>Stripping</title>
[ddd5542]12
[d672ab7]13 <para>This section is optional. If the intended user is not a
[c32384e]14 programmer and does not plan to do
[9c753b58]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>
[ddd5542]19
[826bbcc]20 <para>Most people who use the commands mentioned below do not
[9c753b58]21 experience any difficulties. However, it is easy to make a mistake and
22 render the new system unusable. So before running the
[826bbcc]23 <command>strip</command> commands, it is a good idea to make a
[ddd5542]24 backup of the LFS system in its current state.</para>
25
[9c753b58]26 <para>A <command>strip</command> command with the
[942e81de]27 <parameter>--strip-unneeded</parameter> option removes all debug symbols
[9c753b58]28 from a binary or library. It also removes all symbol table entries not
[942e81de]29 needed by the linker (for static libraries) or dynamic linker (for
[9c753b58]30 dynamically linked binaries and shared libraries).</para>
[942e81de]31
[9c753b58]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
[d672ab7]35 url='&blfs-book;/general/valgrind.html'>valgrind</ulink> or <ulink
[9c753b58]36 url='&blfs-book;/general/gdb.html'>gdb</ulink> later, in BLFS.
[c32384e]37 </para>
[6c8a79a]38
[11d5dee]39 <para>Note that <command>strip</command> will overwrite the binary or library
[8a269ec]40 file it is processing. This can crash the processes using code or data from
[9c753b58]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
[11d5dee]44 and binaries into <filename class="directory">/tmp</filename>, strip them
[9c753b58]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>
[de28837]48
[a3d6232]49 <note><para>The ELF loader's name is ld-linux-x86-64.so.2 on 64-bit systems
[bcb20b4]50 and ld-linux.so.2 on 32-bit systems. The construct below selects the
[8731bd1]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>
[4350669]54
[6dfcfecc]55<!-- also of interest are libgfortan, libgo, libgomp, and libobjc from GCC -->
[6c8a79a]56
[00abb8f]57<!--<screen><userinput>save_lib="ld-2.25.so libc-2.25.so libpthread-2.25.so libthread_db-1.0.so"-->
[8731bd1]58<screen><userinput>save_usrlib="$(cd /usr/lib; ls ld-linux*[^g])
[adcaf07e]59 libc.so.6
[6094dae]60 libthread_db.so.1
[d672ab7]61 libquadmath.so.&libquadmath-version;
[6094dae]62 libstdc++.so.&libstdcpp-version;
[d672ab7]63 libitm.so.&libitm-version;
64 libatomic.so.&libatomic-version;"
[c32384e]65
66cd /usr/lib
67for LIB in $save_usrlib; do
68 objcopy --only-keep-debug $LIB $LIB.dbg
[ff96923]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
[6dfcfecc]74done</userinput>
75<userinput arch="ml_32,ml_all">
[0ebda11]76cd /usr/lib32
[6dfcfecc]77for LIB in $save_usrlib; do
[3388c22]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
[6dfcfecc]84done</userinput>
85<userinput arch="ml_x32,ml_all">
[0ebda11]86cd /usr/libx32
[6dfcfecc]87for LIB in $save_usrlib; do
[3388c22]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
[6dfcfecc]94done</userinput><userinput>
[b3f1ebb3]95
[de28837]96online_usrbin="bash find strip"
[6094dae]97online_usrlib="libbfd-&binutils-version;.so
[b83366b]98 libhistory.so.&readline-soversion;
[6094dae]99 libncursesw.so.&ncurses-version;
100 libm.so.6
[b83366b]101 libreadline.so.&readline-soversion;
[6094dae]102 libz.so.&zlib-version;
[d1592b9]103 $(cd /usr/lib; find libnss*.so* -type f)"
[de28837]104
105for BIN in $online_usrbin; do
106 cp /usr/bin/$BIN /tmp/$BIN
[08f72423]107 strip --strip-unneeded /tmp/$BIN
[de28837]108 install -vm755 /tmp/$BIN /usr/bin
109 rm /tmp/$BIN
110done
[6c8a79a]111
[de28837]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
[85cd74c2]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>
[658dcab]130
[08f72423]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
[d672ab7]135 *$(basename $i)* )
[11d5dee]136 ;;
[d672ab7]137 * ) strip --strip-unneeded $i
[11d5dee]138 ;;
[de28837]139 esac
[85cd74c2]140done</userinput><userinput arch="ml_32,ml_all">
[9282602]141for i in $(find /usr/lib32 -type f -name \*.so* ! -name \*dbg) \
142 $(find /usr/lib32 -type f -name \*.a); do
[3330d51]143 case "$online_usrbin $online_usrlib $save_usrlib" in
[b8d5542]144 *$(basename $i)* )
145 ;;
146 * ) strip --strip-unneeded $i
147 ;;
[85cd74c2]148 esac
149done</userinput><userinput arch="ml_x32,ml_all">
[9282602]150for i in $(find /usr/libx32 -type f -name \*.so* ! -name \*dbg) \
151 $(find /usr/libx32 -type f -name \*.a); do
[3330d51]152 case "$online_usrbin $online_usrlib $save_usrlib" in
[b8d5542]153 *$(basename $i)* )
154 ;;
155 * ) strip --strip-unneeded $i
156 ;;
[85cd74c2]157 esac
158done</userinput><userinput>
[de28837]159
160unset BIN LIB save_usrlib online_usrbin online_usrlib
161</userinput></screen>
[3c928f1]162
[9c753b58]163 <para>A large number of files will be flagged as errors because their file
164 format is not recognized. These warnings can be safely ignored. They
165 indicate that those files are scripts, not binaries.</para>
[6c8a79a]166
[3c928f1]167</sect1>
Note: See TracBrowser for help on using the repository browser.