* dvp-dis.c (print_dma): Change length from 16 to 8.
[deliverable/binutils-gdb.git] / gdb / demangle.c
index 2fead9af3dac8653b3d24bc0eea48ab1f4375deb..2d1ad2a90f8bd475398d3d1558a21c7e22002bed 100644 (file)
@@ -1,5 +1,5 @@
 /* Basic C++ demangling support for GDB.
-   Copyright 1991, 1992 Free Software Foundation, Inc.
+   Copyright 1991, 1992, 1996 Free Software Foundation, Inc.
    Written by Fred Fish at Cygnus Support.
 
 This file is part of GDB.
@@ -16,7 +16,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 
 /*  This file contains support code for C++ demangling that is common
@@ -70,6 +70,9 @@ static const struct demangler
   {NULL, unknown_demangling, NULL}
 };
 
+static void
+set_demangling_command PARAMS ((char *, int, struct cmd_list_element *));
+
 /* set current demangling style.  called by the "set demangling" command
    after it has updated the current_demangling_style_string to match
    what the user has entered.
@@ -159,7 +162,32 @@ set_demangling_style (style)
       free (current_demangling_style_string);
     }
   current_demangling_style_string = savestring (style, strlen (style));
-  set_demangling_command ((char *) NULL, 0);
+  set_demangling_command ((char *) NULL, 0, (struct cmd_list_element *) NULL);
+}
+
+/* In order to allow a single demangler executable to demangle strings
+   using various common values of CPLUS_MARKER, as well as any specific
+   one set at compile time, we maintain a string containing all the
+   commonly used ones, and check to see if the marker we are looking for
+   is in that string.  CPLUS_MARKER is usually '$' on systems where the
+   assembler can deal with that.  Where the assembler can't, it's usually
+   '.' (but on many systems '.' is used for other things).  We put the
+   current defined CPLUS_MARKER first (which defaults to '$'), followed
+   by the next most common value, followed by an explicit '$' in case
+   the value of CPLUS_MARKER is not '$'.
+
+   We could avoid this if we could just get g++ to tell us what the actual
+   cplus marker character is as part of the debug information, perhaps by
+   ensuring that it is the character that terminates the gcc<n>_compiled
+   marker symbol (FIXME). */
+
+static char cplus_markers[] = { CPLUS_MARKER, '.', '$', '\0' };
+
+int
+is_cplus_marker (c)
+     int c;
+{
+  return c && strchr (cplus_markers, c) != NULL;
 }
 
 void
This page took 0.023383 seconds and 4 git commands to generate.