Remove cplus_specific from general_symbol_info.
This patch reverts the addition of cplus_specific added here: 2010-07-16 Sami Wagiaalla <swagiaal@redhat.com> * symtab.h (symbol_set_demangled_name): Now takes an optional objfile* argument. (cplus_specific): New struct. * symtab.c (symbol_set_demangled_name): Updated. Use cplus_specific for cplus symbols. (symbol_get_demangled_name): Retrive the name from the cplus_specific struct for cplus symbols. (symbol_init_language_specific): Set cplus_specific for cplus symbols. (symbol_set_names): Pass objfile to symbol_set_demangled_name. * symtab.c (symbol_init_cplus_specific): New function. It was added in anticipation of improved template support: https://sourceware.org/ml/gdb-patches/2010-05/msg00594.html https://sourceware.org/ml/gdb-patches/2010-07/msg00284.html However, minsyms pay the price for this space too. For my standard benchmark this patch gets back 44MB of memory when gdb starts. [There's still ~440MB of memory used by the demangled ELF symbols of this benchmark, but that's another topic.] When the improved templated support is added, I wonder if this can be moved to struct symbol. Hmmm, we already have a special version of struct symbol for templates (struct template_symbol). gdb/ChangeLog: * symtab.c (symbol_init_cplus_specific): Delete. (symbol_set_demangled_name): Remove special c++ support. (symbol_get_demangled_name, symbol_set_language): Ditto. * symtab.h (struct cplus_specific): Delete. (struct general_symbol_info) <language_specific>: Remove cplus_specific.
This commit is contained in:
parent
31c0ebfe8b
commit
7c5fdd25eb
|
@ -1,3 +1,12 @@
|
||||||
|
2014-12-02 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
|
* symtab.c (symbol_init_cplus_specific): Delete.
|
||||||
|
(symbol_set_demangled_name): Remove special c++ support.
|
||||||
|
(symbol_get_demangled_name, symbol_set_language): Ditto.
|
||||||
|
* symtab.h (struct cplus_specific): Delete.
|
||||||
|
(struct general_symbol_info) <language_specific>: Remove
|
||||||
|
cplus_specific.
|
||||||
|
|
||||||
2014-12-02 Doug Evans <dje@google.com>
|
2014-12-02 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
PR symtab/17602
|
PR symtab/17602
|
||||||
|
|
43
gdb/symtab.c
43
gdb/symtab.c
|
@ -473,40 +473,15 @@ gdb_mangle_name (struct type *type, int method_id, int signature_id)
|
||||||
return (mangled_name);
|
return (mangled_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize the cplus_specific structure. 'cplus_specific' should
|
|
||||||
only be allocated for use with cplus symbols. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
symbol_init_cplus_specific (struct general_symbol_info *gsymbol,
|
|
||||||
struct obstack *obstack)
|
|
||||||
{
|
|
||||||
/* A language_specific structure should not have been previously
|
|
||||||
initialized. */
|
|
||||||
gdb_assert (gsymbol->language_specific.cplus_specific == NULL);
|
|
||||||
gdb_assert (obstack != NULL);
|
|
||||||
|
|
||||||
gsymbol->language_specific.cplus_specific =
|
|
||||||
OBSTACK_ZALLOC (obstack, struct cplus_specific);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set the demangled name of GSYMBOL to NAME. NAME must be already
|
/* Set the demangled name of GSYMBOL to NAME. NAME must be already
|
||||||
correctly allocated. For C++ symbols a cplus_specific struct is
|
correctly allocated. */
|
||||||
allocated so OBJFILE must not be NULL. If this is a non C++ symbol
|
|
||||||
OBJFILE can be NULL. */
|
|
||||||
|
|
||||||
void
|
void
|
||||||
symbol_set_demangled_name (struct general_symbol_info *gsymbol,
|
symbol_set_demangled_name (struct general_symbol_info *gsymbol,
|
||||||
const char *name,
|
const char *name,
|
||||||
struct obstack *obstack)
|
struct obstack *obstack)
|
||||||
{
|
{
|
||||||
if (gsymbol->language == language_cplus)
|
if (gsymbol->language == language_ada)
|
||||||
{
|
|
||||||
if (gsymbol->language_specific.cplus_specific == NULL)
|
|
||||||
symbol_init_cplus_specific (gsymbol, obstack);
|
|
||||||
|
|
||||||
gsymbol->language_specific.cplus_specific->demangled_name = name;
|
|
||||||
}
|
|
||||||
else if (gsymbol->language == language_ada)
|
|
||||||
{
|
{
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
{
|
{
|
||||||
|
@ -528,14 +503,7 @@ symbol_set_demangled_name (struct general_symbol_info *gsymbol,
|
||||||
const char *
|
const char *
|
||||||
symbol_get_demangled_name (const struct general_symbol_info *gsymbol)
|
symbol_get_demangled_name (const struct general_symbol_info *gsymbol)
|
||||||
{
|
{
|
||||||
if (gsymbol->language == language_cplus)
|
if (gsymbol->language == language_ada)
|
||||||
{
|
|
||||||
if (gsymbol->language_specific.cplus_specific != NULL)
|
|
||||||
return gsymbol->language_specific.cplus_specific->demangled_name;
|
|
||||||
else
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else if (gsymbol->language == language_ada)
|
|
||||||
{
|
{
|
||||||
if (!gsymbol->ada_mangled)
|
if (!gsymbol->ada_mangled)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -555,7 +523,8 @@ symbol_set_language (struct general_symbol_info *gsymbol,
|
||||||
struct obstack *obstack)
|
struct obstack *obstack)
|
||||||
{
|
{
|
||||||
gsymbol->language = language;
|
gsymbol->language = language;
|
||||||
if (gsymbol->language == language_d
|
if (gsymbol->language == language_cplus
|
||||||
|
|| gsymbol->language == language_d
|
||||||
|| gsymbol->language == language_go
|
|| gsymbol->language == language_go
|
||||||
|| gsymbol->language == language_java
|
|| gsymbol->language == language_java
|
||||||
|| gsymbol->language == language_objc
|
|| gsymbol->language == language_objc
|
||||||
|
@ -568,8 +537,6 @@ symbol_set_language (struct general_symbol_info *gsymbol,
|
||||||
gdb_assert (gsymbol->ada_mangled == 0);
|
gdb_assert (gsymbol->ada_mangled == 0);
|
||||||
gsymbol->language_specific.obstack = obstack;
|
gsymbol->language_specific.obstack = obstack;
|
||||||
}
|
}
|
||||||
else if (gsymbol->language == language_cplus)
|
|
||||||
gsymbol->language_specific.cplus_specific = NULL;
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memset (&gsymbol->language_specific, 0,
|
memset (&gsymbol->language_specific, 0,
|
||||||
|
|
11
gdb/symtab.h
11
gdb/symtab.h
|
@ -80,13 +80,6 @@ struct common_block;
|
||||||
|
|
||||||
--chastain 2003-08-21 */
|
--chastain 2003-08-21 */
|
||||||
|
|
||||||
/* Struct for storing C++ specific information. Allocated when needed. */
|
|
||||||
|
|
||||||
struct cplus_specific
|
|
||||||
{
|
|
||||||
const char *demangled_name;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Define a structure for the information that is common to all symbol types,
|
/* Define a structure for the information that is common to all symbol types,
|
||||||
including minimal symbols, partial symbols, and full symbols. In a
|
including minimal symbols, partial symbols, and full symbols. In a
|
||||||
multilanguage environment, some language specific information may need to
|
multilanguage environment, some language specific information may need to
|
||||||
|
@ -141,14 +134,12 @@ struct general_symbol_info
|
||||||
struct obstack *obstack;
|
struct obstack *obstack;
|
||||||
|
|
||||||
/* This is used by languages which wish to store a demangled name.
|
/* This is used by languages which wish to store a demangled name.
|
||||||
currently used by Ada, Java, and Objective C. */
|
currently used by Ada, C++, Java, and Objective C. */
|
||||||
struct mangled_lang
|
struct mangled_lang
|
||||||
{
|
{
|
||||||
const char *demangled_name;
|
const char *demangled_name;
|
||||||
}
|
}
|
||||||
mangled_lang;
|
mangled_lang;
|
||||||
|
|
||||||
struct cplus_specific *cplus_specific;
|
|
||||||
}
|
}
|
||||||
language_specific;
|
language_specific;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue