From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28576 invoked by alias); 7 Nov 2011 06:37:34 -0000 Received: (qmail 28294 invoked by uid 22791); 7 Nov 2011 06:37:32 -0000 X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RP_MATCHES_RCVD,SPF_HELO_PASS,TW_BJ X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (74.125.121.67) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 07 Nov 2011 06:37:19 +0000 Received: from hpaq5.eem.corp.google.com (hpaq5.eem.corp.google.com [172.25.149.5]) by smtp-out.google.com with ESMTP id pA76bHlb016781 for ; Sun, 6 Nov 2011 22:37:17 -0800 Received: from ruffy.mtv.corp.google.com (ruffy.mtv.corp.google.com [172.18.110.50]) by hpaq5.eem.corp.google.com with ESMTP id pA76bFJQ008636 for ; Sun, 6 Nov 2011 22:37:16 -0800 Received: by ruffy.mtv.corp.google.com (Postfix, from userid 67641) id 554F5246194; Sun, 6 Nov 2011 22:37:15 -0800 (PST) To: gdb-patches@sourceware.org Subject: [patch] Avoid computing fullname if unused. Message-Id: <20111107063715.554F5246194@ruffy.mtv.corp.google.com> Date: Mon, 07 Nov 2011 06:37:00 -0000 From: dje@google.com (Doug Evans) X-System-Of-Record: true X-IsSubscribed: yes 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 X-SW-Source: 2011-11/txt/msg00146.txt.bz2 Hi. "b functi" takes longer than it should. gdb spends a lot of time computing a file's "fullname" and then never using the result. See maybe_add_partial_symtab_filename. I will check this in in a few days if there are no objections. 2011-11-06 Doug Evans * dwarf2read.c (dw2_map_symbol_filenames): New parameter `need_fullname'. * psymtab.c (map_symbol_filenames_psymtab): Ditto. (map_partial_symbol_filenames): Ditto. All callers updated. * psymtab.h (map_partial_symbol_filenames): Update prototype. * symfile.h (struct quick_symbol_functions, map_symbol_filenames): New parameter need_fullname. Index: dwarf2read.c =================================================================== RCS file: /cvs/src/src/gdb/dwarf2read.c,v retrieving revision 1.578 diff -u -p -r1.578 dwarf2read.c --- dwarf2read.c 20 Oct 2011 23:13:01 -0000 1.578 +++ dwarf2read.c 7 Nov 2011 06:07:10 -0000 @@ -2810,7 +2817,7 @@ dw2_find_pc_sect_symtab (struct objfile static void dw2_map_symbol_filenames (struct objfile *objfile, symbol_filename_ftype *fun, - void *data) + void *data, int need_fullname) { int i; @@ -2832,8 +2839,12 @@ dw2_map_symbol_filenames (struct objfile for (j = 0; j < file_data->num_file_names; ++j) { - const char *this_real_name = dw2_get_real_path (objfile, file_data, - j); + const char *this_real_name; + + if (need_fullname) + this_real_name = dw2_get_real_path (objfile, file_data, j); + else + this_real_name = NULL; (*fun) (file_data->file_names[j], this_real_name, data); } } Index: psymtab.c =================================================================== RCS file: /cvs/src/src/gdb/psymtab.c,v retrieving revision 1.31 diff -u -p -r1.31 psymtab.c --- psymtab.c 28 Oct 2011 17:29:37 -0000 1.31 +++ psymtab.c 7 Nov 2011 06:07:10 -0000 @@ -1082,7 +1089,8 @@ read_psymtabs_with_filename (struct objf static void map_symbol_filenames_psymtab (struct objfile *objfile, - symbol_filename_ftype *fun, void *data) + symbol_filename_ftype *fun, void *data, + int need_fullname) { struct partial_symtab *ps; @@ -1094,7 +1102,10 @@ map_symbol_filenames_psymtab (struct obj continue; QUIT; - fullname = psymtab_to_fullname (ps); + if (need_fullname) + fullname = psymtab_to_fullname (ps); + else + fullname = NULL; (*fun) (ps->filename, fullname, data); } } @@ -1916,13 +1927,15 @@ expand_partial_symbol_names (int (*fun) } void -map_partial_symbol_filenames (symbol_filename_ftype *fun, void *data) +map_partial_symbol_filenames (symbol_filename_ftype *fun, void *data, + int need_fullname) { struct objfile *objfile; ALL_OBJFILES (objfile) { if (objfile->sf) - objfile->sf->qf->map_symbol_filenames (objfile, fun, data); + objfile->sf->qf->map_symbol_filenames (objfile, fun, data, + need_fullname); } } Index: psymtab.h =================================================================== RCS file: /cvs/src/src/gdb/psymtab.h,v retrieving revision 1.8 diff -u -p -r1.8 psymtab.h --- psymtab.h 10 Jun 2011 21:48:04 -0000 1.8 +++ psymtab.h 7 Nov 2011 06:07:10 -0000 @@ -33,7 +33,8 @@ extern struct bcache *psymbol_bcache_get void expand_partial_symbol_names (int (*fun) (const char *, void *), void *data); -void map_partial_symbol_filenames (symbol_filename_ftype *fun, void *data); +void map_partial_symbol_filenames (symbol_filename_ftype *fun, void *data, + int need_fullname); extern const struct quick_symbol_functions psym_functions; Index: symfile.h =================================================================== RCS file: /cvs/src/src/gdb/symfile.h,v retrieving revision 1.96 diff -u -p -r1.96 symfile.h --- symfile.h 9 Oct 2011 18:37:27 -0000 1.96 +++ symfile.h 7 Nov 2011 06:07:10 -0000 @@ -289,9 +289,11 @@ struct quick_symbol_functions /* Call a callback for every file defined in OBJFILE whose symtab is not already read in. FUN is the callback. It is passed the file's - FILENAME, the file's FULLNAME, and the DATA passed to this function. */ + FILENAME, the file's FULLNAME (if need_fullname is non-zero), and + the DATA passed to this function. */ void (*map_symbol_filenames) (struct objfile *objfile, - symbol_filename_ftype *fun, void *data); + symbol_filename_ftype *fun, void *data, + int need_fullname); }; /* Structure to keep track of symbol reading functions for various Index: symtab.c =================================================================== RCS file: /cvs/src/src/gdb/symtab.c,v retrieving revision 1.285 diff -u -p -r1.285 symtab.c --- symtab.c 29 Oct 2011 07:26:07 -0000 1.285 +++ symtab.c 7 Nov 2011 06:07:10 -0000 @@ -2881,7 +2890,8 @@ sources_info (char *ignore, int from_tty "will be read in on demand:\n\n"); first = 1; - map_partial_symbol_filenames (output_partial_symbol_filename, &first); + map_partial_symbol_filenames (output_partial_symbol_filename, &first, + TRUE /*need_fullname*/); printf_filtered ("\n"); } @@ -4314,7 +4324,8 @@ make_source_files_completion_list (char datum.list = &list; datum.list_used = &list_used; datum.list_alloced = &list_alloced; - map_partial_symbol_filenames (maybe_add_partial_symtab_filename, &datum); + map_partial_symbol_filenames (maybe_add_partial_symtab_filename, &datum, + FALSE /*need_fullname*/); discard_cleanups (back_to); return list; Index: mi/mi-cmd-file.c =================================================================== RCS file: /cvs/src/src/gdb/mi/mi-cmd-file.c,v retrieving revision 1.16 diff -u -p -r1.16 mi-cmd-file.c --- mi/mi-cmd-file.c 4 Aug 2011 19:10:14 -0000 1.16 +++ mi/mi-cmd-file.c 7 Nov 2011 06:07:12 -0000 @@ -109,7 +109,8 @@ mi_cmd_file_list_exec_source_files (char ui_out_end (uiout, ui_out_type_tuple); } - map_partial_symbol_filenames (print_partial_file_name, NULL); + map_partial_symbol_filenames (print_partial_file_name, NULL, + TRUE /*need_fullname*/); ui_out_end (uiout, ui_out_type_list); }