summaryrefslogtreecommitdiff
path: root/gdb/skip.c
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2013-02-03 16:13:31 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2013-02-03 16:13:31 +0000
commit05cba821addfe83535ad36f7487d1d2bbac48ba2 (patch)
tree01f05878995058932e67caa78def1d1df1e572d5 /gdb/skip.c
parent1b56eb55405f0222188073473e1ab563899424ca (diff)
gdb/
* ada-lang.c (user_select_syms): Replace symtab->filename refererences by symtab_to_filename_for_display calls. * breakpoint.c (print_breakpoint_location, resolve_sal_pc): Likewise. (clear_command): New variable sal_fullname, initialize it. Replace compare_filenames_for_search by filename_cmp with sal_fullname. (say_where, update_static_tracepoint): Replace symtab->filename refererences by symtab_to_filename_for_display calls. * cli/cli-cmds.c (edit_command, list_command, ambiguous_line_spec): Likewise. * dwarf2read.c: Include source.h. (fixup_go_packaging): Replace symtab->filename refererences by symtab_to_filename_for_display calls. * linespec.c (add_sal_to_sals): Rename variable filename to fullname. Replace symtab->filename refererences by symtab_to_filename_for_display calls. (create_sals_line_offset, convert_linespec_to_sals): New variable fullname, initialize it, replace symtab->filename reference by the variable. * linux-fork.c: Include source.h. (info_checkpoints_command): Replace symtab->filename refererences by symtab_to_filename_for_display calls. * macroscope.c (sal_macro_scope): Replace symtab->filename refererences by symtab_to_filename_for_display calls. * mdebugread.c: Include source.h. (psymtab_to_symtab_1): Replace symtab->filename refererences by symtab_to_filename_for_display calls. * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file) (mi_cmd_file_list_exec_source_files): Likewise. * printcmd.c: Include source.h. (build_address_symbolic): Replace symtab->filename refererences by symtab_to_filename_for_display calls. * psymtab.c (partial_map_symtabs_matching_filename) (read_psymtabs_with_fullname): Call compare_filenames_for_search also with psymtab_to_fullname. * python/py-symtab.c (stpy_str): Replace symtab->filename refererences by symtab_to_filename_for_display calls. (stpy_get_filename): New variable filename, initialize it, use instead of symtab->filename refererences. (salpy_str): Make variable filename const char *. Replace symtab->filename refererences by symtab_to_filename_for_display calls. * skip.c: Include source.h and filenames.h. (skip_file_command): Remove const from the symtab variable. Replace symtab->filename refererences by symtab_to_fullname call. (function_name_is_marked_for_skip): New variables searched_for_fullname and fullname. Use them to search also with symtab's fullname. * source.c (find_source_lines): Replace symtab->filename refererences by symtab_to_filename_for_display calls. (print_source_lines_base): New variable filename, use it instead of symtab->filename. Replace symtab->filename refererences by symtab_to_filename_for_display calls. (line_info, forward_search_command): Replace symtab->filename refererences by symtab_to_filename_for_display calls. (reverse_search_command): Replace symtab->filename refererences by symtab_to_filename_for_display calls. New variable filename for it. * stack.c (frame_info): Likewise. * symmisc.c: Include source.h. (dump_objfile, dump_symtab_1, maintenance_print_symbols) (maintenance_info_symtabs): Replace symtab->filename refererences by symtab_to_filename_for_display calls. * symtab.c (iterate_over_some_symtabs): Call compare_filenames_for_search also with symtab_to_fullname. (lookup_symbol_aux_quick, basic_lookup_transparent_type_quick): Replace symtab->filename refererences by symtab_to_filename_for_display calls. (find_line_symtab): Replace symtab->filename refererences by symtab_to_filename_for_display calls. (file_matches): Replace filename_cmp by compare_filenames_for_search. (print_symbol_info): Make the last parameter const char *. New variable s_filename. Use it in the function. (symtab_symbol_info): Make the last_filename variable const char *. Replace symtab->filename refererences by symtab_to_filename_for_display calls. (rbreak_command): New variable fullname. Use it. Replace symtab->filename refererence by symtab_to_filename_for_display call. * tracepoint.c (set_traceframe_context, trace_find_line_command) (print_one_static_tracepoint_marker): Replace symtab->filename refererences by symtab_to_filename_for_display calls. * tui/tui-source.c (tui_set_source_content): New variables filename and s_filename. Replace symtab->filename refererences by this variable. Replace other symtab->filename refererences by symtab_to_filename_for_display calls.
Diffstat (limited to 'gdb/skip.c')
-rw-r--r--gdb/skip.c49
1 files changed, 40 insertions, 9 deletions
diff --git a/gdb/skip.c b/gdb/skip.c
index f8db6f8554..0c002ff568 100644
--- a/gdb/skip.c
+++ b/gdb/skip.c
@@ -32,6 +32,8 @@
#include "objfiles.h"
#include "exceptions.h"
#include "breakpoint.h" /* for get_sal_arch () */
+#include "source.h"
+#include "filenames.h"
struct skiplist_entry
{
@@ -69,7 +71,7 @@ static void
skip_file_command (char *arg, int from_tty)
{
struct skiplist_entry *e;
- const struct symtab *symtab;
+ struct symtab *symtab;
const char *filename = NULL;
/* If no argument was given, try to default to the last
@@ -79,8 +81,10 @@ skip_file_command (char *arg, int from_tty)
symtab = get_last_displayed_symtab ();
if (symtab == NULL)
error (_("No default file now."));
- else
- filename = symtab->filename;
+
+ /* It is not a typo, symtab_to_filename_for_display woule be needlessly
+ ambiguous. */
+ filename = symtab_to_fullname (symtab);
}
else
{
@@ -91,8 +95,9 @@ skip_file_command (char *arg, int from_tty)
if (!nquery (_("\
Ignore file pending future shared library load? ")))
return;
-
}
+ /* Do not use SYMTAB's filename, later loaded shared libraries may match
+ given ARG but not SYMTAB's filename. */
filename = arg;
}
@@ -330,6 +335,8 @@ int
function_name_is_marked_for_skip (const char *function_name,
const struct symtab_and_line *function_sal)
{
+ int searched_for_fullname = 0;
+ const char *fullname = NULL;
struct skiplist_entry *e;
if (function_name == NULL)
@@ -345,11 +352,35 @@ function_name_is_marked_for_skip (const char *function_name,
&& strcmp_iw (function_name, e->function_name) == 0)
return 1;
- if (e->filename != NULL && function_sal->symtab != NULL
- && function_sal->symtab->filename != NULL
- && compare_filenames_for_search (function_sal->symtab->filename,
- e->filename))
- return 1;
+ if (e->filename != NULL)
+ {
+ /* Check first sole SYMTAB->FILENAME. It does not need to be
+ a substring of symtab_to_fullname as it may contain "./" etc. */
+ if (function_sal->symtab != NULL
+ && compare_filenames_for_search (function_sal->symtab->filename,
+ e->filename))
+ return 1;
+
+ /* Before we invoke realpath, which can get expensive when many
+ files are involved, do a quick comparison of the basenames. */
+ if (!basenames_may_differ
+ && (function_sal->symtab == NULL
+ || filename_cmp (lbasename (function_sal->symtab->filename),
+ lbasename (e->filename)) != 0))
+ continue;
+
+ /* Get the filename corresponding to this FUNCTION_SAL, if we haven't
+ yet. */
+ if (!searched_for_fullname)
+ {
+ if (function_sal->symtab != NULL)
+ fullname = symtab_to_fullname (function_sal->symtab);
+ searched_for_fullname = 1;
+ }
+ if (fullname != NULL
+ && compare_filenames_for_search (fullname, e->filename))
+ return 1;
+ }
}
return 0;