From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3908 invoked by alias); 10 Feb 2003 20:10:56 -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 3901 invoked from network); 10 Feb 2003 20:10:55 -0000 Received: from unknown (HELO jackfruit.Stanford.EDU) (171.64.38.136) by 172.16.49.205 with SMTP; 10 Feb 2003 20:10:55 -0000 Received: (from carlton@localhost) by jackfruit.Stanford.EDU (8.11.6/8.11.6) id h1AKAr831526; Mon, 10 Feb 2003 12:10:53 -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: RFA/symtab: Let search_symbols find exact matches References: <20030210160107.GA587@nevyn.them.org> From: David Carlton Date: Mon, 10 Feb 2003 20:10:00 -0000 In-Reply-To: <20030210160107.GA587@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-02/txt/msg00261.txt.bz2 On Mon, 10 Feb 2003 11:01:07 -0500, Daniel Jacobowitz said: > This patch renames search_symbols to search_symbols_aux, and lets it > take an argument that specified regex or exact (well, strcmp_iw) > matching. Then search_symbols becomes a wrapper. > The new function is used by make_symbol_overload_list, which shaves > 50% time off of some tests in the C++ directory if your system libc > has debugging symbols; it removes the bogusity where all psymtabs > were converted to symtabs during overload resolution. Whew. This > cuts memory for namespace.exp from 70MB to 7MB, allowing some of my > hardware to actually run the test without crashing. I love combining functions, but your patch makes me a bit nervous: search_symbols and make_symbol_overload_list are fairly different beasts. If all you want to do is get rid of the aforementioned bogosity, how about the much more modest patch that I've included at the end of this message? Benefits: * It's more or less the minimal patch necessary to avoid converting unnecessary symtabs. * It should be faster: it uses the fact that global psymbols are sorted. Drawbacks: * I'm to busy to spend too much time today thinking about whether or not lookup_partial_symbol really works well enough for this patch to work. It certainly depends on partial symbols being demangled, but they are now. My guess is that lookup_partial_symbol still doesn't work quite right (both because of improper use of SYMBOL_SOURCE_NAME, and because of improper use of strcmp instead of strcmp_iw). The former shouldn't be a big deal; the latter might be a big deal in some situations but probably shouldn't affect lookup_partial_symbol (I _think_). The correct fix there is to fix lookup_partial_symbol, though, rather than avoiding its use. (I have run the patch through the testsuite; it passes, but that means almost nothing, given how little the testsuite exercises partial symbols.) Could be either: * If you really want some of the extra stuff that search_symbols does and that make_symbol_overload_list doesn't (e.g. look at minimal symbols), then of course your patch is a better idea. But if you don't, then probably you should avoid using search_symbols. Anyways, give it a run on your platform to see if it works. Compared to unpatched GDB, I'm getting a 3x memory improvement and a 2x speed improvement when running namespace.exp. (If anybody else out there wants a laugh, just try to figure out what the part of lookup_partial_symbols that this patch removes actually does. It's rather different from what the comment claims...) David Carlton carlton@math.stanford.edu 2003-02-10 David Carlton * symtab.c (make_symbol_overload_list): Only read in partial symtabs containing a matching partial symbol. Index: symtab.c =================================================================== RCS file: /cvs/src/src/gdb/symtab.c,v retrieving revision 1.87 diff -u -p -r1.87 symtab.c --- symtab.c 4 Feb 2003 18:07:01 -0000 1.87 +++ symtab.c 10 Feb 2003 19:35:36 -0000 @@ -4035,8 +4022,8 @@ make_symbol_overload_list (struct symbol sym_return_val = (struct symbol **) xmalloc ((sym_return_val_size + 1) * sizeof (struct symbol *)); sym_return_val[0] = NULL; - /* Look through the partial symtabs for all symbols which begin - by matching OLOAD_NAME. Make sure we read that symbol table in. */ + /* Read in all partial symtabs containing a partial symbol named + OLOAD_NAME. */ ALL_PSYMTABS (objfile, ps) { @@ -4047,26 +4034,9 @@ make_symbol_overload_list (struct symbol if (ps->readin) continue; - for (psym = objfile->global_psymbols.list + ps->globals_offset; - psym < (objfile->global_psymbols.list + ps->globals_offset - + ps->n_global_syms); - psym++) - { - /* If interrupted, then quit. */ - QUIT; - /* This will cause the symbol table to be read if it has not yet been */ - s = PSYMTAB_TO_SYMTAB (ps); - } - - for (psym = objfile->static_psymbols.list + ps->statics_offset; - psym < (objfile->static_psymbols.list + ps->statics_offset - + ps->n_static_syms); - psym++) - { - QUIT; - /* This will cause the symbol table to be read if it has not yet been */ - s = PSYMTAB_TO_SYMTAB (ps); - } + if ((lookup_partial_symbol (ps, oload_name, 1, VAR_NAMESPACE) != NULL) + || (lookup_partial_symbol (ps, oload_name, 0, VAR_NAMESPACE) != NULL)) + PSYMTAB_TO_SYMTAB (ps); } /* Search upwards from currently selected frame (so that we can