aboutsummaryrefslogtreecommitdiff
path: root/binutils/c++filt.1
blob: 3132ac9c67e18062a493f74a63e67a401ac31b9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
.\" Copyright (c) 1991 Free Software Foundation
.\" See section COPYING for conditions for redistribution
.TH c++filt 1 "June 1993" "cygnus support" "GNU Development Tools"
.de BP
.sp
.ti \-.2i
\(**
..

.SH NAME
c++filt \- demangle C++ symbols

.SH SYNOPSIS
.hy 0
.na
.TP
.B c++filt
.RB "[\|" \-_ | \-\-strip-underscores "\|]"
.RB "[\|" "\-s {gnu,lucid,arm} " | " \-\-format={gnu,lucid,arm}" "\|]"
.RB "[\|" \-\-help "\|]"
.RB "[\|" \-\-version "\|]"
.RB "[\|" symbol "...\|]"
.SH DESCRIPTION
The C++ language provides function overloading, which means that you can
write many functions with the same name (providing each takes parameters
of different types).  All C++ function names are encoded into a
low-level assembly label (this process is known as
.I mangling\c
).  The 
.B c++filt
program does the inverse mapping: it decodes (\fIdemangles\fR)
low-level names into user-level names so that the linker can keep
these overloaded functions from clashing.
.PP
Every alphanumeric word (consisting of letters, digits, underscores,
dollars, or periods) seen in the input is a potential label.  If the
label decodes into a C++ name, the C++ name replaces the low-level
name in the output.
.PP
You can use
.B c++filt
to decipher individual symbols by specifying these symbols on the
command line.
.PP
If no
.B symbol
arguments are given,
.B c++filt
reads symbol names from the standard input and writes the demangled
names to the standard output.  All results are printed on the standard
output.
.SH OPTIONS
.TP
.B \-_
.TP
.B \-\-strip\-underscores
On some systems, both the C and C++ compilers put an
underscore in front of every name.  For example, the C name 
.B foo
gets the low-level name 
.BR _foo .
This option removes the leading underscore.

.TP
.B "\-s {gnu,lucid,arm}"
.TP
.B \-\-format={gnu,lucid,arm}
GNU
.B nm
can decode three different methods of mangling, used by different C++
compilers.  This option selects which method it uses: the one used by
the GNU compiler, the one used by the Lucid compiler, or the one
specified by the C++ Annotated Reference Manual.  The default is the
GNU style.

.TP
.B \-\-help
Print a summary of the options to
.B c++filt
and exit.

.TP
.B \-\-version
Print the version number of
.B c++filt
and exit.

.SH "SEE ALSO"
.RB "`\|" binutils "\|'" 
entry in 
.B
info\c
\&; 
.I
The GNU Binary Utilities\c
\&, Roland H. Pesch (June 1993).

.SH COPYING
Copyright (c) 1993 Free Software Foundation, Inc.
.PP
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.
.PP
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one.
.PP
Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that this permission notice may be included in
translations approved by the Free Software Foundation instead of in
the original English.