| <html lang="en"> |
| <head> |
| <title>strip - GNU Binary Utilities</title> |
| <meta http-equiv="Content-Type" content="text/html"> |
| <meta name="description" content="GNU Binary Utilities"> |
| <meta name="generator" content="makeinfo 4.13"> |
| <link title="Top" rel="start" href="index.html#Top"> |
| <link rel="prev" href="strings.html#strings" title="strings"> |
| <link rel="next" href="c_002b_002bfilt.html#c_002b_002bfilt" title="c++filt"> |
| <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> |
| <!-- |
| Copyright (C) 1991-2019 Free Software Foundation, Inc. |
| |
| Permission is granted to copy, distribute and/or modify this document |
| under the terms of the GNU Free Documentation License, Version 1.3 |
| or any later version published by the Free Software Foundation; |
| with no Invariant Sections, with no Front-Cover Texts, and with no |
| Back-Cover Texts. A copy of the license is included in the |
| section entitled ``GNU Free Documentation License''. |
| |
| --> |
| <meta http-equiv="Content-Style-Type" content="text/css"> |
| <style type="text/css"><!-- |
| pre.display { font-family:inherit } |
| pre.format { font-family:inherit } |
| pre.smalldisplay { font-family:inherit; font-size:smaller } |
| pre.smallformat { font-family:inherit; font-size:smaller } |
| pre.smallexample { font-size:smaller } |
| pre.smalllisp { font-size:smaller } |
| span.sc { font-variant:small-caps } |
| span.roman { font-family:serif; font-weight:normal; } |
| span.sansserif { font-family:sans-serif; font-weight:normal; } |
| --></style> |
| </head> |
| <body> |
| <div class="node"> |
| <a name="strip"></a> |
| <p> |
| Next: <a rel="next" accesskey="n" href="c_002b_002bfilt.html#c_002b_002bfilt">c++filt</a>, |
| Previous: <a rel="previous" accesskey="p" href="strings.html#strings">strings</a>, |
| Up: <a rel="up" accesskey="u" href="index.html#Top">Top</a> |
| <hr> |
| </div> |
| |
| <h2 class="chapter">8 strip</h2> |
| |
| <p><a name="index-strip-133"></a><a name="index-removing-symbols-134"></a><a name="index-discarding-symbols-135"></a><a name="index-symbols_002c-discarding-136"></a> |
| <!-- man title strip discard symbols and other data from object files --> |
| |
| <pre class="smallexample"> <!-- man begin SYNOPSIS strip --> |
| strip [<samp><span class="option">-F</span></samp> <var>bfdname</var> |<samp><span class="option">--target=</span></samp><var>bfdname</var>] |
| [<samp><span class="option">-I</span></samp> <var>bfdname</var> |<samp><span class="option">--input-target=</span></samp><var>bfdname</var>] |
| [<samp><span class="option">-O</span></samp> <var>bfdname</var> |<samp><span class="option">--output-target=</span></samp><var>bfdname</var>] |
| [<samp><span class="option">-s</span></samp>|<samp><span class="option">--strip-all</span></samp>] |
| [<samp><span class="option">-S</span></samp>|<samp><span class="option">-g</span></samp>|<samp><span class="option">-d</span></samp>|<samp><span class="option">--strip-debug</span></samp>] |
| [<samp><span class="option">--strip-dwo</span></samp>] |
| [<samp><span class="option">-K</span></samp> <var>symbolname</var>|<samp><span class="option">--keep-symbol=</span></samp><var>symbolname</var>] |
| [<samp><span class="option">-M</span></samp>|<samp><span class="option">--merge-notes</span></samp>][<samp><span class="option">--no-merge-notes</span></samp>] |
| [<samp><span class="option">-N</span></samp> <var>symbolname</var> |<samp><span class="option">--strip-symbol=</span></samp><var>symbolname</var>] |
| [<samp><span class="option">-w</span></samp>|<samp><span class="option">--wildcard</span></samp>] |
| [<samp><span class="option">-x</span></samp>|<samp><span class="option">--discard-all</span></samp>] [<samp><span class="option">-X</span></samp> |<samp><span class="option">--discard-locals</span></samp>] |
| [<samp><span class="option">-R</span></samp> <var>sectionname</var> |<samp><span class="option">--remove-section=</span></samp><var>sectionname</var>] |
| [<samp><span class="option">--remove-relocations=</span></samp><var>sectionpattern</var>] |
| [<samp><span class="option">-o</span></samp> <var>file</var>] [<samp><span class="option">-p</span></samp>|<samp><span class="option">--preserve-dates</span></samp>] |
| [<samp><span class="option">-D</span></samp>|<samp><span class="option">--enable-deterministic-archives</span></samp>] |
| [<samp><span class="option">-U</span></samp>|<samp><span class="option">--disable-deterministic-archives</span></samp>] |
| [<samp><span class="option">--keep-file-symbols</span></samp>] |
| [<samp><span class="option">--only-keep-debug</span></samp>] |
| [<samp><span class="option">-v</span></samp> |<samp><span class="option">--verbose</span></samp>] [<samp><span class="option">-V</span></samp>|<samp><span class="option">--version</span></samp>] |
| [<samp><span class="option">--help</span></samp>] [<samp><span class="option">--info</span></samp>] |
| <var>objfile</var>... |
| <!-- man end --> |
| </pre> |
| <!-- man begin DESCRIPTION strip --> |
| <p><span class="sc">gnu</span> <samp><span class="command">strip</span></samp> discards all symbols from object files |
| <var>objfile</var>. The list of object files may include archives. |
| At least one object file must be given. |
| |
| <p><samp><span class="command">strip</span></samp> modifies the files named in its argument, |
| rather than writing modified copies under different names. |
| |
| <!-- man end --> |
| <!-- man begin OPTIONS strip --> |
| <dl> |
| <dt><samp><span class="env">-F </span><var>bfdname</var></samp><dt><samp><span class="env">--target=</span><var>bfdname</var></samp><dd>Treat the original <var>objfile</var> as a file with the object |
| code format <var>bfdname</var>, and rewrite it in the same format. |
| See <a href="Target-Selection.html#Target-Selection">Target Selection</a>, for more information. |
| |
| <br><dt><samp><span class="env">--help</span></samp><dd>Show a summary of the options to <samp><span class="command">strip</span></samp> and exit. |
| |
| <br><dt><samp><span class="env">--info</span></samp><dd>Display a list showing all architectures and object formats available. |
| |
| <br><dt><samp><span class="env">-I </span><var>bfdname</var></samp><dt><samp><span class="env">--input-target=</span><var>bfdname</var></samp><dd>Treat the original <var>objfile</var> as a file with the object |
| code format <var>bfdname</var>. |
| See <a href="Target-Selection.html#Target-Selection">Target Selection</a>, for more information. |
| |
| <br><dt><samp><span class="env">-O </span><var>bfdname</var></samp><dt><samp><span class="env">--output-target=</span><var>bfdname</var></samp><dd>Replace <var>objfile</var> with a file in the output format <var>bfdname</var>. |
| See <a href="Target-Selection.html#Target-Selection">Target Selection</a>, for more information. |
| |
| <br><dt><samp><span class="env">-R </span><var>sectionname</var></samp><dt><samp><span class="env">--remove-section=</span><var>sectionname</var></samp><dd>Remove any section named <var>sectionname</var> from the output file, in |
| addition to whatever sections would otherwise be removed. This |
| option may be given more than once. Note that using this option |
| inappropriately may make the output file unusable. The wildcard |
| character ‘<samp><span class="samp">*</span></samp>’ may be given at the end of <var>sectionname</var>. If |
| so, then any section starting with <var>sectionname</var> will be removed. |
| |
| <p>If the first character of <var>sectionpattern</var> is the exclamation |
| point (!) then matching sections will not be removed even if an |
| earlier use of <samp><span class="option">--remove-section</span></samp> on the same command line |
| would otherwise remove it. For example: |
| |
| <pre class="smallexample"> --remove-section=.text.* --remove-section=!.text.foo |
| </pre> |
| <p>will remove all sections matching the pattern '.text.*', but will not |
| remove the section '.text.foo'. |
| |
| <br><dt><samp><span class="env">--remove-relocations=</span><var>sectionpattern</var></samp><dd>Remove relocations from the output file for any section matching |
| <var>sectionpattern</var>. This option may be given more than once. Note |
| that using this option inappropriately may make the output file |
| unusable. Wildcard characters are accepted in <var>sectionpattern</var>. |
| For example: |
| |
| <pre class="smallexample"> --remove-relocations=.text.* |
| </pre> |
| <p>will remove the relocations for all sections matching the patter |
| '.text.*'. |
| |
| <p>If the first character of <var>sectionpattern</var> is the exclamation |
| point (!) then matching sections will not have their relocation |
| removed even if an earlier use of <samp><span class="option">--remove-relocations</span></samp> on the |
| same command line would otherwise cause the relocations to be removed. |
| For example: |
| |
| <pre class="smallexample"> --remove-relocations=.text.* --remove-relocations=!.text.foo |
| </pre> |
| <p>will remove all relocations for sections matching the pattern |
| '.text.*', but will not remove relocations for the section |
| '.text.foo'. |
| |
| <br><dt><samp><span class="env">-s</span></samp><dt><samp><span class="env">--strip-all</span></samp><dd>Remove all symbols. |
| |
| <br><dt><samp><span class="env">-g</span></samp><dt><samp><span class="env">-S</span></samp><dt><samp><span class="env">-d</span></samp><dt><samp><span class="env">--strip-debug</span></samp><dd>Remove debugging symbols only. |
| |
| <br><dt><samp><span class="env">--strip-dwo</span></samp><dd>Remove the contents of all DWARF .dwo sections, leaving the |
| remaining debugging sections and all symbols intact. |
| See the description of this option in the <samp><span class="command">objcopy</span></samp> section |
| for more information. |
| |
| <br><dt><samp><span class="env">--strip-unneeded</span></samp><dd>Remove all symbols that are not needed for relocation processing. |
| |
| <br><dt><samp><span class="env">-K </span><var>symbolname</var></samp><dt><samp><span class="env">--keep-symbol=</span><var>symbolname</var></samp><dd>When stripping symbols, keep symbol <var>symbolname</var> even if it would |
| normally be stripped. This option may be given more than once. |
| |
| <br><dt><samp><span class="env">-M</span></samp><dt><samp><span class="env">--merge-notes</span></samp><dt><samp><span class="env">--no-merge-notes</span></samp><dd>For ELF files, attempt (or do not attempt) to reduce the size of any |
| SHT_NOTE type sections by removing duplicate notes. The default is to |
| attempt this reduction unless stripping debug or DWO information. |
| |
| <br><dt><samp><span class="env">-N </span><var>symbolname</var></samp><dt><samp><span class="env">--strip-symbol=</span><var>symbolname</var></samp><dd>Remove symbol <var>symbolname</var> from the source file. This option may be |
| given more than once, and may be combined with strip options other than |
| <samp><span class="option">-K</span></samp>. |
| |
| <br><dt><samp><span class="env">-o </span><var>file</var></samp><dd>Put the stripped output in <var>file</var>, rather than replacing the |
| existing file. When this argument is used, only one <var>objfile</var> |
| argument may be specified. |
| |
| <br><dt><samp><span class="env">-p</span></samp><dt><samp><span class="env">--preserve-dates</span></samp><dd>Preserve the access and modification dates of the file. |
| |
| <br><dt><samp><span class="env">-D</span></samp><dt><samp><span class="env">--enable-deterministic-archives</span></samp><dd><a name="index-deterministic-archives-137"></a><a name="index-g_t_002d_002denable_002ddeterministic_002darchives-138"></a>Operate in <em>deterministic</em> mode. When copying archive members |
| and writing the archive index, use zero for UIDs, GIDs, timestamps, |
| and use consistent file modes for all files. |
| |
| <p>If <samp><span class="file">binutils</span></samp> was configured with |
| <samp><span class="option">--enable-deterministic-archives</span></samp>, then this mode is on by default. |
| It can be disabled with the ‘<samp><span class="samp">-U</span></samp>’ option, below. |
| |
| <br><dt><samp><span class="env">-U</span></samp><dt><samp><span class="env">--disable-deterministic-archives</span></samp><dd><a name="index-deterministic-archives-139"></a><a name="index-g_t_002d_002denable_002ddeterministic_002darchives-140"></a>Do <em>not</em> operate in <em>deterministic</em> mode. This is the |
| inverse of the <samp><span class="option">-D</span></samp> option, above: when copying archive members |
| and writing the archive index, use their actual UID, GID, timestamp, |
| and file mode values. |
| |
| <p>This is the default unless <samp><span class="file">binutils</span></samp> was configured with |
| <samp><span class="option">--enable-deterministic-archives</span></samp>. |
| |
| <br><dt><samp><span class="env">-w</span></samp><dt><samp><span class="env">--wildcard</span></samp><dd>Permit regular expressions in <var>symbolname</var>s used in other command |
| line options. The question mark (?), asterisk (*), backslash (\) and |
| square brackets ([]) operators can be used anywhere in the symbol |
| name. If the first character of the symbol name is the exclamation |
| point (!) then the sense of the switch is reversed for that symbol. |
| For example: |
| |
| <pre class="smallexample"> -w -K !foo -K fo* |
| </pre> |
| <p>would cause strip to only keep symbols that start with the letters |
| “fo”, but to discard the symbol “foo”. |
| |
| <br><dt><samp><span class="env">-x</span></samp><dt><samp><span class="env">--discard-all</span></samp><dd>Remove non-global symbols. |
| |
| <br><dt><samp><span class="env">-X</span></samp><dt><samp><span class="env">--discard-locals</span></samp><dd>Remove compiler-generated local symbols. |
| (These usually start with ‘<samp><span class="samp">L</span></samp>’ or ‘<samp><span class="samp">.</span></samp>’.) |
| |
| <br><dt><samp><span class="env">--keep-file-symbols</span></samp><dd>When stripping a file, perhaps with <samp><span class="option">--strip-debug</span></samp> or |
| <samp><span class="option">--strip-unneeded</span></samp>, retain any symbols specifying source file names, |
| which would otherwise get stripped. |
| |
| <br><dt><samp><span class="env">--only-keep-debug</span></samp><dd>Strip a file, emptying the contents of any sections that would not be |
| stripped by <samp><span class="option">--strip-debug</span></samp> and leaving the debugging sections |
| intact. In ELF files, this preserves all the note sections in the |
| output as well. |
| |
| <p>Note - the section headers of the stripped sections are preserved, |
| including their sizes, but the contents of the section are discarded. |
| The section headers are preserved so that other tools can match up the |
| debuginfo file with the real executable, even if that executable has |
| been relocated to a different address space. |
| |
| <p>The intention is that this option will be used in conjunction with |
| <samp><span class="option">--add-gnu-debuglink</span></samp> to create a two part executable. One a |
| stripped binary which will occupy less space in RAM and in a |
| distribution and the second a debugging information file which is only |
| needed if debugging abilities are required. The suggested procedure |
| to create these files is as follows: |
| |
| <ol type=1 start=1> |
| <li>Link the executable as normal. Assuming that it is called |
| <code>foo</code> then... |
| <li>Run <code>objcopy --only-keep-debug foo foo.dbg</code> to |
| create a file containing the debugging info. |
| <li>Run <code>objcopy --strip-debug foo</code> to create a |
| stripped executable. |
| <li>Run <code>objcopy --add-gnu-debuglink=foo.dbg foo</code> |
| to add a link to the debugging info into the stripped executable. |
| </ol> |
| |
| <p>Note—the choice of <code>.dbg</code> as an extension for the debug info |
| file is arbitrary. Also the <code>--only-keep-debug</code> step is |
| optional. You could instead do this: |
| |
| <ol type=1 start=1> |
| <li>Link the executable as normal. |
| <li>Copy <code>foo</code> to <code>foo.full</code> |
| <li>Run <code>strip --strip-debug foo</code> |
| <li>Run <code>objcopy --add-gnu-debuglink=foo.full foo</code> |
| </ol> |
| |
| <p>i.e., the file pointed to by the <samp><span class="option">--add-gnu-debuglink</span></samp> can be the |
| full executable. It does not have to be a file created by the |
| <samp><span class="option">--only-keep-debug</span></samp> switch. |
| |
| <p>Note—this switch is only intended for use on fully linked files. It |
| does not make sense to use it on object files where the debugging |
| information may be incomplete. Besides the gnu_debuglink feature |
| currently only supports the presence of one filename containing |
| debugging information, not multiple filenames on a one-per-object-file |
| basis. |
| |
| <br><dt><samp><span class="env">-V</span></samp><dt><samp><span class="env">--version</span></samp><dd>Show the version number for <samp><span class="command">strip</span></samp>. |
| |
| <br><dt><samp><span class="env">-v</span></samp><dt><samp><span class="env">--verbose</span></samp><dd>Verbose output: list all object files modified. In the case of |
| archives, ‘<samp><span class="samp">strip -v</span></samp>’ lists all members of the archive. |
| </dl> |
| |
| <!-- man end --> |
| </body></html> |
| |