Fix indentation in jit.c
[deliverable/binutils-gdb.git] / binutils / cxxfilt.c
index bed0537e477e14bd4d023cf3d60ac5cdc4dc2c1e..7b8210e6cce684a5c1f39600ba089e9292a010ab 100644 (file)
@@ -1,21 +1,20 @@
 /* Demangler for GNU C++ - main program
-   Copyright 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1989-2019 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
@@ -43,6 +42,10 @@ static const struct option long_options[] =
   {"no-verbose", no_argument, NULL, 'i'},
   {"types", no_argument, NULL, 't'},
   {"version", no_argument, NULL, 'v'},
+  {"recurse-limit", no_argument, NULL, 'R'},
+  {"recursion-limit", no_argument, NULL, 'R'},
+  {"no-recurse-limit", no_argument, NULL, 'r'},
+  {"no-recursion-limit", no_argument, NULL, 'r'},
   {NULL, no_argument, NULL, 0}
 };
 
@@ -63,12 +66,12 @@ demangle_it (char *mangled_name)
   result = cplus_demangle (mangled_name + skip_first, flags);
 
   if (result == NULL)
-    printf (mangled_name);
+    printf ("%s", mangled_name);
   else
     {
       if (mangled_name[0] == '.')
        putchar ('.');
-      printf (result);
+      printf ("%s", result);
       free (result);
     }
 }
@@ -88,7 +91,7 @@ print_demangler_list (FILE *stream)
   fprintf (stream, "}");
 }
 
-static void
+ATTRIBUTE_NORETURN static void
 usage (FILE *stream, int status)
 {
   fprintf (stream, "\
@@ -103,6 +106,8 @@ Options are:\n\
   fprintf (stream, "\
   [-p|--no-params]            Do not display function arguments\n\
   [-i|--no-verbose]           Do not show implementation details (if any)\n\
+  [-R|--recurse-limit]        Enable a limit on recursion whilst demangling.  [Default]\n\
+  ]-r|--no-recurse-limit]     Disable a limit on recursion whilst demangling\n\
   [-t|--types]                Also attempt to demangle type encodings\n\
   [-s|--format ");
   print_demangler_list (stream);
@@ -130,42 +135,6 @@ standard_symbol_characters (void)
   return "_$.";
 }
 
-/* Return the string of non-alnum characters that may occur
-   as a valid symbol name component in an HP object file.
-
-   Note that, since HP's compiler generates object code straight from
-   C++ source, without going through an assembler, its mangled
-   identifiers can use all sorts of characters that no assembler would
-   tolerate, so the alphabet this function creates is a little odd.
-   Here are some sample mangled identifiers offered by HP:
-
-       typeid*__XT24AddressIndExpClassMember_
-       [Vftptr]key:__dt__32OrdinaryCompareIndExpClassMemberFv
-       __ct__Q2_9Elf64_Dyn18{unnamed.union.#1}Fv
-
-   This still seems really weird to me, since nowhere else in this
-   file is there anything to recognize curly brackets, parens, etc.
-   I've talked with Srikanth <srikanth@cup.hp.com>, and he assures me
-   this is right, but I still strongly suspect that there's a
-   misunderstanding here.
-
-   If we decide it's better for c++filt to use HP's assembler syntax
-   to scrape identifiers out of its input, here's the definition of
-   the symbol name syntax from the HP assembler manual:
-
-       Symbols are composed of uppercase and lowercase letters, decimal
-       digits, dollar symbol, period (.), ampersand (&), pound sign(#) and
-       underscore (_). A symbol can begin with a letter, digit underscore or
-       dollar sign. If a symbol begins with a digit, it must contain a
-       non-digit character.
-
-   So have fun.  */
-static const char *
-hp_symbol_characters (void)
-{
-  return "_$.<>#,*&[]:(){}";
-}
-
 extern int main (int, char **);
 
 int
@@ -177,10 +146,11 @@ main (int argc, char **argv)
 
   program_name = argv[0];
   xmalloc_set_program_name (program_name);
+  bfd_set_error_program_name (program_name);
 
   expandargv (&argc, &argv);
 
-  while ((c = getopt_long (argc, argv, "_hinps:tv", long_options, (int *) 0)) != EOF)
+  while ((c = getopt_long (argc, argv, "_hinprRs:tv", long_options, (int *) 0)) != EOF)
     {
       switch (c)
        {
@@ -195,6 +165,12 @@ main (int argc, char **argv)
        case 'p':
          flags &= ~ DMGL_PARAMS;
          break;
+       case 'r':
+         flags |= DMGL_NO_RECURSE_LIMIT;
+         break;
+       case 'R':
+         flags &= ~ DMGL_NO_RECURSE_LIMIT;
+         break;
        case 't':
          flags |= DMGL_TYPES;
          break;
@@ -233,18 +209,13 @@ main (int argc, char **argv)
 
   switch (current_demangling_style)
     {
-    case gnu_demangling:
-    case lucid_demangling:
-    case arm_demangling:
+    case auto_demangling:
+    case gnu_v3_demangling:
     case java_demangling:
-    case edg_demangling:
     case gnat_demangling:
-    case gnu_v3_demangling:
-    case auto_demangling:
-      valid_symbols = standard_symbol_characters ();
-      break;
-    case hp_demangling:
-      valid_symbols = hp_symbol_characters ();
+    case dlang_demangling:
+    case rust_demangling:
+       valid_symbols = standard_symbol_characters ();
       break;
     default:
       /* Folks should explicitly indicate the appropriate alphabet for
This page took 0.026016 seconds and 4 git commands to generate.