Set language for C++ special symbols.
authorPierre Muller <muller@ics.u-strasbg.fr>
Thu, 8 Jan 2015 07:53:26 +0000 (08:53 +0100)
committerPierre Muller <muller@ics.u-strasbg.fr>
Thu, 8 Jan 2015 08:01:04 +0000 (09:01 +0100)
The special handling of C++ special symbol
generates symbols that have no language.
Those symbols cannot be displayed correctly in the backtrace stack.

See
https://sourceware.org/bugzilla/show_bug.cgi?id=17811
for details and examples in C++ and pascal language.

The patch below fixes this issue, by
setting language of new symbol before
special handling of special C++ symbols.

2015-01-07  Pierre Muller  <muller@sourceware.org>

PR symtab/17811
* stabsread.c (define_symbol): Set language for C++ special symbols.

gdb/ChangeLog
gdb/stabsread.c

index b188988..2fa7422 100644 (file)
@@ -1,3 +1,8 @@
+2015-01-07  Pierre Muller  <muller@sourceware.org>
+
+       PR symtab/17811
+       * stabsread.c (define_symbol): Set language for C++ special symbols.
+
 2015-01-07  Patrick Palka  <patrick@parcs.ath.cx>
 
        * inflow.c (initial_gdb_ttystate): Tweak comment.
index 212c7fa..6862c52 100644 (file)
@@ -675,6 +675,9 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_LINE (sym) = 0;   /* unknown */
     }
 
+  SYMBOL_SET_LANGUAGE (sym, current_subfile->language,
+                      &objfile->objfile_obstack);
+
   if (is_cplus_marker (string[0]))
     {
       /* Special GNU C++ names.  */
@@ -710,8 +713,6 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
   else
     {
     normal:
-      SYMBOL_SET_LANGUAGE (sym, current_subfile->language,
-                          &objfile->objfile_obstack);
       if (SYMBOL_LANGUAGE (sym) == language_cplus)
        {
          char *name = alloca (p - string + 1);