public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Remove general_symbol_info.language_specific.cplus_specific
@ 2014-11-26  3:52 Doug Evans
  2014-12-03  2:39 ` Doug Evans
  0 siblings, 1 reply; 2+ messages in thread
From: Doug Evans @ 2014-11-26  3:52 UTC (permalink / raw)
  To: gdb-patches; +Cc: swagiaal, sergiodj

Hi.

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).

Regression tested on amd64-linux.

2014-11-25  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.

diff --git a/gdb/symtab.c b/gdb/symtab.c
index 345c20d..a52f7c0 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -473,40 +473,15 @@ gdb_mangle_name (struct type *type, int method_id, int signature_id)
   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
-   correctly allocated.  For C++ symbols a cplus_specific struct is
-   allocated so OBJFILE must not be NULL.  If this is a non C++ symbol
-   OBJFILE can be NULL.  */
+   correctly allocated.  */
 
 void
 symbol_set_demangled_name (struct general_symbol_info *gsymbol,
                            const char *name,
                            struct obstack *obstack)
 {
-  if (gsymbol->language == language_cplus)
-    {
-      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 (gsymbol->language == language_ada)
     {
       if (name == NULL)
 	{
@@ -528,14 +503,7 @@ symbol_set_demangled_name (struct general_symbol_info *gsymbol,
 const char *
 symbol_get_demangled_name (const struct general_symbol_info *gsymbol)
 {
-  if (gsymbol->language == language_cplus)
-    {
-      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->language == language_ada)
     {
       if (!gsymbol->ada_mangled)
 	return NULL;
@@ -555,7 +523,8 @@ symbol_set_language (struct general_symbol_info *gsymbol,
 		     struct obstack *obstack)
 {
   gsymbol->language = language;
-  if (gsymbol->language == language_d
+  if (gsymbol->language == language_cplus
+      || gsymbol->language == language_d
       || gsymbol->language == language_go
       || gsymbol->language == language_java
       || gsymbol->language == language_objc
@@ -568,8 +537,6 @@ symbol_set_language (struct general_symbol_info *gsymbol,
       gdb_assert (gsymbol->ada_mangled == 0);
       gsymbol->language_specific.obstack = obstack;
     }
-  else if (gsymbol->language == language_cplus)
-    gsymbol->language_specific.cplus_specific = NULL;
   else
     {
       memset (&gsymbol->language_specific, 0,
diff --git a/gdb/symtab.h b/gdb/symtab.h
index 473c85c..57d234d 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -80,13 +80,6 @@ struct common_block;
 
    --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,
    including minimal symbols, partial symbols, and full symbols.  In a
    multilanguage environment, some language specific information may need to
@@ -141,14 +134,12 @@ struct general_symbol_info
     struct obstack *obstack;
 
     /* 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
     {
       const char *demangled_name;
     }
     mangled_lang;
-
-    struct cplus_specific *cplus_specific;
   }
   language_specific;
 

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] Remove general_symbol_info.language_specific.cplus_specific
  2014-11-26  3:52 [PATCH] Remove general_symbol_info.language_specific.cplus_specific Doug Evans
@ 2014-12-03  2:39 ` Doug Evans
  0 siblings, 0 replies; 2+ messages in thread
From: Doug Evans @ 2014-12-03  2:39 UTC (permalink / raw)
  To: gdb-patches, swagiaal, sergiodj

Doug Evans writes:
 > Hi.
 > 
 > 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).
 > 
 > Regression tested on amd64-linux.
 > 
 > 2014-11-25  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.

Committed.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-12-03  2:39 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-11-26  3:52 [PATCH] Remove general_symbol_info.language_specific.cplus_specific Doug Evans
2014-12-03  2:39 ` Doug Evans

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).