projects
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gdb/
[binutils-gdb.git]
/
binutils
/
cxxfilt.c
diff --git
a/binutils/cxxfilt.c
b/binutils/cxxfilt.c
index bc692712dd1ea9d894b85666e72a471ad8d3ca77..770df9baf6e0307a9e53f3dca0cd38119f295251 100644
(file)
--- a/
binutils/cxxfilt.c
+++ b/
binutils/cxxfilt.c
@@
-1,36
+1,36
@@
/* Demangler for GNU C++ - main program
Copyright 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999,
/* Demangler for GNU C++ - main program
Copyright 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+ 2000, 2001, 2002, 2003, 2005
, 2007
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.uucp)
Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling
Modified by Satish Pai (pai@apollo.hp.com) for HP demangling
Written by James Clark (jjc@jclark.uucp)
Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling
Modified by Satish Pai (pai@apollo.hp.com) for HP demangling
- This file is part of G
CC
.
+ This file is part of G
NU Binutils
.
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 2, or (at your option) any later
- version.
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or (at
+
your option) any later
version.
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
-
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licens
e
- for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See th
e
+
GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to the Free
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to the Free
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "
config
.h"
+#include "
sysdep
.h"
#include "bfd.h"
#include "bfd.h"
-#include "bucomm.h"
#include "libiberty.h"
#include "demangle.h"
#include "getopt.h"
#include "safe-ctype.h"
#include "libiberty.h"
#include "demangle.h"
#include "getopt.h"
#include "safe-ctype.h"
+#include "bucomm.h"
-static int flags = DMGL_PARAMS | DMGL_ANSI | DMGL_VERBOSE
| DMGL_TYPES
;
+static int flags = DMGL_PARAMS | DMGL_ANSI | DMGL_VERBOSE;
static int strip_underscore = TARGET_PREPENDS_UNDERSCORE;
static const struct option long_options[] =
static int strip_underscore = TARGET_PREPENDS_UNDERSCORE;
static const struct option long_options[] =
@@
-40,8
+40,8
@@
static const struct option long_options[] =
{"help", no_argument, NULL, 'h'},
{"no-params", no_argument, NULL, 'p'},
{"no-strip-underscores", no_argument, NULL, 'n'},
{"help", no_argument, NULL, 'h'},
{"no-params", no_argument, NULL, 'p'},
{"no-strip-underscores", no_argument, NULL, 'n'},
- {"no-types", no_argument, NULL, 't'},
{"no-verbose", no_argument, NULL, 'i'},
{"no-verbose", no_argument, NULL, 'i'},
+ {"types", no_argument, NULL, 't'},
{"version", no_argument, NULL, 'v'},
{NULL, no_argument, NULL, 0}
};
{"version", no_argument, NULL, 'v'},
{NULL, no_argument, NULL, 0}
};
@@
-52,6
+52,9
@@
demangle_it (char *mangled_name)
char *result;
unsigned int skip_first = 0;
char *result;
unsigned int skip_first = 0;
+ /* _ and $ are sometimes found at the start of function names
+ in assembler sources in order to distinguish them from other
+ names (eg register names). So skip them here. */
if (mangled_name[0] == '.' || mangled_name[0] == '$')
++skip_first;
if (strip_underscore && mangled_name[skip_first] == '_')
if (mangled_name[0] == '.' || mangled_name[0] == '$')
++skip_first;
if (strip_underscore && mangled_name[skip_first] == '_')
@@
-60,12
+63,12
@@
demangle_it (char *mangled_name)
result = cplus_demangle (mangled_name + skip_first, flags);
if (result == NULL)
result = cplus_demangle (mangled_name + skip_first, flags);
if (result == NULL)
- p
uts (
mangled_name);
+ p
rintf ("%s",
mangled_name);
else
{
if (mangled_name[0] == '.')
putchar ('.');
else
{
if (mangled_name[0] == '.')
putchar ('.');
- p
uts (
result);
+ p
rintf ("%s",
result);
free (result);
}
}
free (result);
}
}
@@
-99,8
+102,8
@@
Options are:\n\
TARGET_PREPENDS_UNDERSCORE ? "" : " (default)");
fprintf (stream, "\
[-p|--no-params] Do not display function arguments\n\
TARGET_PREPENDS_UNDERSCORE ? "" : " (default)");
fprintf (stream, "\
[-p|--no-params] Do not display function arguments\n\
- [-t|--no-types] Do not try to demangle type encodings\n\
[-i|--no-verbose] Do not show implementation details (if any)\n\
[-i|--no-verbose] Do not show implementation details (if any)\n\
+ [-t|--types] Also attempt to demangle type encodings\n\
[-s|--format ");
print_demangler_list (stream);
fprintf (stream, "]\n");
[-s|--format ");
print_demangler_list (stream);
fprintf (stream, "]\n");
@@
-112,6
+115,8
@@
Options are:\n\
Demangled names are displayed to stdout.\n\
If a name cannot be demangled it is just echoed to stdout.\n\
If no names are provided on the command line, stdin is read.\n");
Demangled names are displayed to stdout.\n\
If a name cannot be demangled it is just echoed to stdout.\n\
If no names are provided on the command line, stdin is read.\n");
+ if (REPORT_BUGS_TO[0] && status == 0)
+ fprintf (stream, _("Report bugs to %s.\n"), REPORT_BUGS_TO);
exit (status);
}
exit (status);
}
@@
-191,7
+196,7
@@
main (int argc, char **argv)
flags &= ~ DMGL_PARAMS;
break;
case 't':
flags &= ~ DMGL_PARAMS;
break;
case 't':
- flags
&= ~
DMGL_TYPES;
+ flags
|=
DMGL_TYPES;
break;
case 'i':
flags &= ~ DMGL_VERBOSE;
break;
case 'i':
flags &= ~ DMGL_VERBOSE;
@@
-218,7
+223,10
@@
main (int argc, char **argv)
if (optind < argc)
{
for ( ; optind < argc; optind++)
if (optind < argc)
{
for ( ; optind < argc; optind++)
- demangle_it (argv[optind]);
+ {
+ demangle_it (argv[optind]);
+ putchar ('\n');
+ }
return 0;
}
return 0;
}
@@
-264,11
+272,18
@@
main (int argc, char **argv)
{
mbuffer[i] = 0;
demangle_it (mbuffer);
{
mbuffer[i] = 0;
demangle_it (mbuffer);
- fflush (stdout);
}
}
+
if (c == EOF)
break;
if (c == EOF)
break;
+
+ /* Echo the whitespace characters so that the output looks
+ like the input, only with the mangled names demangled. */
+ putchar (c);
+ if (c == '\n')
+ fflush (stdout);
}
}
+ fflush (stdout);
return 0;
}
return 0;
}