ChangeLog rotatation and copyright year update
[deliverable/binutils-gdb.git] / binutils / cxxfilt.c
index bc692712dd1ea9d894b85666e72a471ad8d3ca77..2daf33bee2cf309ad34571fdbc313c7da7fc2cd7 100644 (file)
@@ -1,36 +1,35 @@
 /* Demangler for GNU C++ - main program
-   Copyright 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1989-2015 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
 
-   This file is part of GCC.
+   This file is part of GNU 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 License
-   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 the
+   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.  */
 
-#include "config.h"
+#include "sysdep.h"
 #include "bfd.h"
-#include "bucomm.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[] =
@@ -40,8 +39,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'},
-  {"no-types", no_argument, NULL, 't'},
   {"no-verbose", no_argument, NULL, 'i'},
+  {"types", no_argument, NULL, 't'},
   {"version", no_argument, NULL, 'v'},
   {NULL, no_argument, NULL, 0}
 };
@@ -52,6 +51,9 @@ demangle_it (char *mangled_name)
   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] == '_')
@@ -60,12 +62,12 @@ demangle_it (char *mangled_name)
   result = cplus_demangle (mangled_name + skip_first, flags);
 
   if (result == NULL)
-    puts (mangled_name);
+    printf ("%s", mangled_name);
   else
     {
       if (mangled_name[0] == '.')
        putchar ('.');
-      puts (result);
+      printf ("%s", result);
       free (result);
     }
 }
@@ -99,8 +101,8 @@ Options are:\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\
+  [-t|--types]                Also attempt to demangle type encodings\n\
   [-s|--format ");
   print_demangler_list (stream);
   fprintf (stream, "]\n");
@@ -112,6 +114,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");
+  if (REPORT_BUGS_TO[0] && status == 0)
+    fprintf (stream, _("Report bugs to %s.\n"), REPORT_BUGS_TO);
   exit (status);
 }
 
@@ -191,7 +195,7 @@ main (int argc, char **argv)
          flags &= ~ DMGL_PARAMS;
          break;
        case 't':
-         flags &= ~ DMGL_TYPES;
+         flags |= DMGL_TYPES;
          break;
        case 'i':
          flags &= ~ DMGL_VERBOSE;
@@ -218,7 +222,10 @@ main (int argc, char **argv)
   if (optind < argc)
     {
       for ( ; optind < argc; optind++)
-       demangle_it (argv[optind]);
+       {
+         demangle_it (argv[optind]);
+         putchar ('\n');
+       }
 
       return 0;
     }
@@ -232,6 +239,7 @@ main (int argc, char **argv)
     case edg_demangling:
     case gnat_demangling:
     case gnu_v3_demangling:
+    case dlang_demangling:
     case auto_demangling:
       valid_symbols = standard_symbol_characters ();
       break;
@@ -264,11 +272,18 @@ main (int argc, char **argv)
        {
          mbuffer[i] = 0;
          demangle_it (mbuffer);
-         fflush (stdout);
        }
+
       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;
 }
This page took 0.027185 seconds and 4 git commands to generate.