From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13065 invoked by alias); 27 Jan 2003 18:53:41 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 13031 invoked from network); 27 Jan 2003 18:53:39 -0000 Received: from unknown (HELO jackfruit.Stanford.EDU) (171.64.38.136) by 172.16.49.205 with SMTP; 27 Jan 2003 18:53:39 -0000 Received: (from carlton@localhost) by jackfruit.Stanford.EDU (8.11.6/8.11.6) id h0RIrZJ01434; Mon, 27 Jan 2003 10:53:35 -0800 X-Authentication-Warning: jackfruit.Stanford.EDU: carlton set sender to carlton@math.stanford.edu using -f To: Daniel Jacobowitz Cc: gdb-patches@sources.redhat.com Subject: Re: RFC: Demangle partial symbols and save memory too References: <20030126222808.GA18132@nevyn.them.org> From: David Carlton Date: Mon, 27 Jan 2003 18:53:00 -0000 In-Reply-To: <20030126222808.GA18132@nevyn.them.org> Message-ID: User-Agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.4 (Common Lisp) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2003-01/txt/msg00732.txt.bz2 On Sun, 26 Jan 2003 17:28:08 -0500, Daniel Jacobowitz said: > So I figured, the demangler is expensive (even after my unreviewed > GCC patch to kill the memory leaks in it). So why not avoid it? > Demangle the names only once, or at least only once per objfile. > Hash them based on the mangled name. Thanks for doing this; I really appreciate it. It will make my life easier. > + > +/* Set both the mangled and demangled (if any) names for GSYMBOL based on > + NAME and LEN. The hash table corresponding to OBJFILE is used, and the > + memory comes from that objfile's symbol_obstack. NAME is copied, so the > + pointer can be discarded after calling this function. */ > + > +void > +symbol_set_names (struct general_symbol_info *gsymbol, > + char *name, int len, struct objfile *objfile) Personally, I'd prefer that name be const char *. And, for that matter, I'd rather have the demangled name member of struct general_symbol_info be a const char *: it will be shared, so changing it really would be bad. But that's really a separate issue; I'll submit a patch for that one myself later. > +{ > + char **slot; > + char *tmpname; > + > + if (objfile->demangled_names_hash == NULL) > + create_demangled_names_hash (objfile); > + > + if (name[len] != 0) > + { > + tmpname = alloca (len + 1); > + memcpy (tmpname, name, len); > + tmpname[len] = 0; > + } > + else > + tmpname = name; Well, I like this better than the last time I saw it, but I'll still give you a hard time. :-) You're assuming that name[len] is readable, for the sake of an optimization that doesn't seem to me to have much of a benefit (it could even be a pessimization if a high enough proportion of names have name[len] nonzero, though that seems unlikely to me). On the other hand, it does seem silly to copy the name if you don't have to; a matter of taste, I suppose. David Carlton carlton@math.stanford.edu