From: dje@google.com (Doug Evans)
To: gdb-patches@sourceware.org
Subject: [patch] Avoid computing fullname if unused.
Date: Mon, 07 Nov 2011 06:37:00 -0000 [thread overview]
Message-ID: <20111107063715.554F5246194@ruffy.mtv.corp.google.com> (raw)
Hi.
"b functi<tab>" 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 <dje@google.com>
* 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);
}
next reply other threads:[~2011-11-07 6:37 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-07 6:37 Doug Evans [this message]
2011-11-07 14:49 ` Tom Tromey
2011-11-11 0:46 ` Doug Evans
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20111107063715.554F5246194@ruffy.mtv.corp.google.com \
--to=dje@google.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox