From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11067 invoked by alias); 26 Nov 2014 03:52:16 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 11056 invoked by uid 89); 26 Nov 2014 03:52:15 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,SPF_PASS,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: mail-pd0-f202.google.com Received: from mail-pd0-f202.google.com (HELO mail-pd0-f202.google.com) (209.85.192.202) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Wed, 26 Nov 2014 03:52:14 +0000 Received: by mail-pd0-f202.google.com with SMTP id w10so302038pde.3 for ; Tue, 25 Nov 2014 19:52:11 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:cc:date:message-id:mime-version :content-type; bh=kGjAQl/Bp1OPjYUWqvh9iL2HARgZcDLIsYo4AMQ7aaI=; b=aPJWsVJ0nJuHefJ3dBZr9U/H8uh4tkY8kvDz2hPX2Kc0d7B8uW/Z0/ZYoPoi3Qr43E U1JYPUrFfLeSGX2I5omUZUCRGECvIARTRTPCOVswDymbqhYbOHXr+zjgeQ1bL3VH0ue8 R7daZ8pXyH2oQOUPuprX71oZRQcnCTNEyrYbI3BsXj5sUS5JmhzaY8H28t8IRdtFNJCl ZkvPw6uhRDwXWxJAYCKR//DGIVVW1mETODJ4Bl/waXjHJDQ3D+fQjDV7G0SR/MOTjUV6 cds/0HAw/Lv+M+5Y1xuesalEMRToCwn7cltgZ8LZC9tJno9HuSFdVs8g11pf7PkvDQzW 991A== X-Gm-Message-State: ALoCoQktqjxfui5Fzw1CLU+GYTCHIctqbhq+SfqNsf8kCplv1FD1/uEae8TQDuPGKmtNWO/8yM7m X-Received: by 10.68.68.173 with SMTP id x13mr19592819pbt.6.1416973931904; Tue, 25 Nov 2014 19:52:11 -0800 (PST) Received: from corpmail-nozzle1-1.hot.corp.google.com ([100.108.1.104]) by gmr-mx.google.com with ESMTPS id e24si127632yhe.3.2014.11.25.19.52.11 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 25 Nov 2014 19:52:11 -0800 (PST) Received: from ruffy.mtv.corp.google.com ([172.17.128.44]) by corpmail-nozzle1-1.hot.corp.google.com with ESMTPS id ULYagCCP.1; Tue, 25 Nov 2014 19:52:11 -0800 From: Doug Evans To: gdb-patches@sourceware.org Subject: [PATCH] Remove general_symbol_info.language_specific.cplus_specific cc: swagiaal@redhat.com, sergiodj@redhat.com Date: Wed, 26 Nov 2014 03:52:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2014-11/txt/msg00638.txt.bz2 Hi. This patch reverts the addition of cplus_specific added here: 2010-07-16 Sami Wagiaalla * 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 * 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) : 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;