| <html lang="en"> |
| <head> |
| <title>c++filt - 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="elfedit.html#elfedit" title="elfedit"> |
| <link rel="next" href="addr2line.html#addr2line" title="addr2line"> |
| <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> |
| <!-- |
| Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, |
| 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 |
| 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> |
| <link rel="stylesheet" type="text/css" href="../cs.css"> |
| </head> |
| <body> |
| <div class="node"> |
| <a name="c++filt"></a> |
| <a name="c_002b_002bfilt"></a> |
| <p> |
| Next: <a rel="next" accesskey="n" href="addr2line.html#addr2line">addr2line</a>, |
| Previous: <a rel="previous" accesskey="p" href="elfedit.html#elfedit">elfedit</a>, |
| Up: <a rel="up" accesskey="u" href="index.html#Top">Top</a> |
| <hr> |
| </div> |
| |
| <h2 class="chapter">9 c++filt</h2> |
| |
| <p><a name="index-c_002b_002bfilt-120"></a><a name="index-demangling-C_002b_002b-symbols-121"></a> |
| <!-- man title cxxfilt Demangle C++ and Java symbols. --> |
| |
| <pre class="smallexample"> <!-- man begin SYNOPSIS cxxfilt --> |
| c++filt [<samp><span class="option">-_</span></samp>|<samp><span class="option">--strip-underscores</span></samp>] |
| [<samp><span class="option">-n</span></samp>|<samp><span class="option">--no-strip-underscores</span></samp>] |
| [<samp><span class="option">-p</span></samp>|<samp><span class="option">--no-params</span></samp>] |
| [<samp><span class="option">-t</span></samp>|<samp><span class="option">--types</span></samp>] |
| [<samp><span class="option">-i</span></samp>|<samp><span class="option">--no-verbose</span></samp>] |
| [<samp><span class="option">-s</span></samp> <var>format</var>|<samp><span class="option">--format=</span></samp><var>format</var>] |
| [<samp><span class="option">--help</span></samp>] [<samp><span class="option">--version</span></samp>] [<var>symbol</var>...] |
| <!-- man end --> |
| </pre> |
| <!-- man begin DESCRIPTION cxxfilt --> |
| <p><a name="index-cxxfilt-122"></a>The C++ and Java languages provide function overloading, which means |
| that you can write many functions with the same name, providing that |
| each function takes parameters of different types. In order to be |
| able to distinguish these similarly named functions C++ and Java |
| encode them into a low-level assembler name which uniquely identifies |
| each different version. This process is known as <dfn>mangling</dfn>. The |
| <samp><span class="command">c++filt</span></samp> |
| <a rel="footnote" href="#fn-1" name="fnd-1"><sup>1</sup></a> |
| program does the inverse mapping: it decodes (<dfn>demangles</dfn>) low-level |
| names into user-level names so that they can be read. |
| |
| <p>Every alphanumeric word (consisting of letters, digits, underscores, |
| dollars, or periods) seen in the input is a potential mangled name. |
| If the name decodes into a C++ name, the C++ name replaces the |
| low-level name in the output, otherwise the original word is output. |
| In this way you can pass an entire assembler source file, containing |
| mangled names, through <samp><span class="command">c++filt</span></samp> and see the same source file |
| containing demangled names. |
| |
| <p>You can also use <samp><span class="command">c++filt</span></samp> to decipher individual symbols by |
| passing them on the command line: |
| |
| <pre class="example"> c++filt <var>symbol</var> |
| </pre> |
| <p>If no <var>symbol</var> arguments are given, <samp><span class="command">c++filt</span></samp> reads symbol |
| names from the standard input instead. All the results are printed on |
| the standard output. The difference between reading names from the |
| command line versus reading names from the standard input is that |
| command line arguments are expected to be just mangled names and no |
| checking is performed to separate them from surrounding text. Thus |
| for example: |
| |
| <pre class="smallexample"> c++filt -n _Z1fv |
| </pre> |
| <p>will work and demangle the name to “f()” whereas: |
| |
| <pre class="smallexample"> c++filt -n _Z1fv, |
| </pre> |
| <p>will not work. (Note the extra comma at the end of the mangled |
| name which makes it invalid). This command however will work: |
| |
| <pre class="smallexample"> echo _Z1fv, | c++filt -n |
| </pre> |
| <p>and will display “f(),”, i.e., the demangled name followed by a |
| trailing comma. This behaviour is because when the names are read |
| from the standard input it is expected that they might be part of an |
| assembler source file where there might be extra, extraneous |
| characters trailing after a mangled name. For example: |
| |
| <pre class="smallexample"> .type _Z1fv, @function |
| </pre> |
| <!-- man end --> |
| <!-- man begin OPTIONS cxxfilt --> |
| <dl> |
| <dt><samp><span class="env">-_</span></samp><dt><samp><span class="env">--strip-underscores</span></samp><dd>On some systems, both the C and C++ compilers put an underscore in front |
| of every name. For example, the C name <code>foo</code> gets the low-level |
| name <code>_foo</code>. This option removes the initial underscore. Whether |
| <samp><span class="command">c++filt</span></samp> removes the underscore by default is target dependent. |
| |
| <br><dt><samp><span class="env">-n</span></samp><dt><samp><span class="env">--no-strip-underscores</span></samp><dd>Do not remove the initial underscore. |
| |
| <br><dt><samp><span class="env">-p</span></samp><dt><samp><span class="env">--no-params</span></samp><dd>When demangling the name of a function, do not display the types of |
| the function's parameters. |
| |
| <br><dt><samp><span class="env">-t</span></samp><dt><samp><span class="env">--types</span></samp><dd>Attempt to demangle types as well as function names. This is disabled |
| by default since mangled types are normally only used internally in |
| the compiler, and they can be confused with non-mangled names. For example, |
| a function called “a” treated as a mangled type name would be |
| demangled to “signed char”. |
| |
| <br><dt><samp><span class="env">-i</span></samp><dt><samp><span class="env">--no-verbose</span></samp><dd>Do not include implementation details (if any) in the demangled |
| output. |
| |
| <br><dt><samp><span class="env">-s </span><var>format</var></samp><dt><samp><span class="env">--format=</span><var>format</var></samp><dd><samp><span class="command">c++filt</span></samp> can decode various methods of mangling, used by |
| different compilers. The argument to this option selects which |
| method it uses: |
| |
| <dl> |
| <dt><code>auto</code><dd>Automatic selection based on executable (the default method) |
| <br><dt><code>gnu</code><dd>the one used by the <span class="sc">gnu</span> C++ compiler (g++) |
| <br><dt><code>lucid</code><dd>the one used by the Lucid compiler (lcc) |
| <br><dt><code>arm</code><dd>the one specified by the C++ Annotated Reference Manual |
| <br><dt><code>hp</code><dd>the one used by the HP compiler (aCC) |
| <br><dt><code>edg</code><dd>the one used by the EDG compiler |
| <br><dt><code>gnu-v3</code><dd>the one used by the <span class="sc">gnu</span> C++ compiler (g++) with the V3 ABI. |
| <br><dt><code>java</code><dd>the one used by the <span class="sc">gnu</span> Java compiler (gcj) |
| <br><dt><code>gnat</code><dd>the one used by the <span class="sc">gnu</span> Ada compiler (GNAT). |
| </dl> |
| |
| <br><dt><samp><span class="env">--help</span></samp><dd>Print a summary of the options to <samp><span class="command">c++filt</span></samp> and exit. |
| |
| <br><dt><samp><span class="env">--version</span></samp><dd>Print the version number of <samp><span class="command">c++filt</span></samp> and exit. |
| </dl> |
| |
| <!-- man end --> |
| <blockquote> |
| <em>Warning:</em> <samp><span class="command">c++filt</span></samp> is a new utility, and the details of its |
| user interface are subject to change in future releases. In particular, |
| a command-line option may be required in the future to decode a name |
| passed as an argument on the command line; in other words, |
| |
| <pre class="example"> c++filt <var>symbol</var> |
| </pre> |
| <p class="noindent">may in a future release become |
| |
| <pre class="example"> c++filt <var>option</var> <var>symbol</var> |
| </pre> |
| </blockquote> |
| |
| <div class="footnote"> |
| <hr> |
| <h4>Footnotes</h4><p class="footnote"><small>[<a name="fn-1" href="#fnd-1">1</a>]</small> MS-DOS does not allow <kbd>+</kbd> characters in file names, so on |
| MS-DOS this program is named <samp><span class="command">CXXFILT</span></samp>.</p> |
| |
| <hr></div> |
| |
| </body></html> |
| |