From 233d95b548ec948c4a6d01cd05c307385dd615fb Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Sun, 3 Feb 2013 16:25:56 +0000 Subject: gdb/ * dwarf2read.c (file_file_name): New function with code from file_full_name. (file_full_name): Move most of the code to file_file_name. (macro_start_file): Rename variable full_name to file_name and use file_file_name for it. Add comp_dir parameter to new_macro_table. * macrocmd.c (show_pp_source_pos): New variable fullname. Replace any macro_source_file->filename access by macro_source_fullname call. * macroscope.c (_initialize_macroscope): Update the new_macro_table caller. * macrotab.c (struct macro_table): New field comp_dir. (macro_include): New variables link_fullname and source_fullname. Replace any macro_source_file->filename access by macro_source_fullname call. (macro_lookup_inclusion): Remove the partial filenames checking code. (check_for_redefinition): New variables source_fullname and found_key_fullname. Replace any macro_source_file->filename access by macro_source_fullname call. (macro_undef): New variables source_fullname and key_fullname. Replace any macro_source_file->filename access by macro_source_fullname call. (macro_lookup_definition): New variables retval and source_fullname. Replace any macro_source_file->filename access by macro_source_fullname call. (foreach_macro): New variable key_fullname. Replace any macro_source_file->filename access by macro_source_fullname call. (foreach_macro_in_scope): New variable datum_fullname. Replace any macro_source_file->filename access by macro_source_fullname call. (new_macro_table): Add parameter comp_dir. Initialize T with it. (macro_source_fullname): New function. * macrotab.h (struct macro_source_file): Extent the filename field comment. (new_macro_table): New parameter comp_dir, add a comment for it. (macro_source_fullname): new declaration. gdb/testsuite/ * gdb.linespec/base/one/header.h: New file. * gdb.linespec/base/two/header.h: New file. * gdb.linespec/macro-relative.c: New file. * gdb.linespec/macro-relative.exp: New file. --- gdb/macrotab.h | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'gdb/macrotab.h') diff --git a/gdb/macrotab.h b/gdb/macrotab.h index eeef7ee..075dfd9 100644 --- a/gdb/macrotab.h +++ b/gdb/macrotab.h @@ -125,7 +125,9 @@ struct macro_source_file a part of. */ struct macro_table *table; - /* A source file --- possibly a header file. */ + /* A source file --- possibly a header file. This filename is relative to + the compilation directory (table->comp_dir), it exactly matches the + symtab->filename content. */ const char *filename; /* The location we were #included from, or zero if we are the @@ -152,7 +154,8 @@ struct macro_source_file xmalloc if OBSTACK is zero. Use BCACHE to store all macro names, arguments, definitions, and anything else that might be the same amongst compilation units in an executable file; if BCACHE is zero, - don't cache these things. + don't cache these things. COMP_DIR optionally contains the compilation + directory of all files for this macro table. Note that, if either OBSTACK or BCACHE are non-zero, then removing information from the table may leak memory. Neither obstacks nor @@ -164,7 +167,8 @@ struct macro_source_file the same source location (although 'gcc -DFOO -UFOO -DFOO=2' does do that in GCC 4.1.2.). */ struct macro_table *new_macro_table (struct obstack *obstack, - struct bcache *bcache); + struct bcache *bcache, + const char *comp_dir); /* Free TABLE, and any macro definitions, source file structures, @@ -347,5 +351,14 @@ void macro_for_each_in_scope (struct macro_source_file *file, int line, macro_callback_fn fn, void *user_data); +/* Return FILE->filename with possibly prepended compilation directory name. + This is raw concatenation without the "set substitute-path" and gdb_realpath + applications done by symtab_to_fullname. Returned string must be freed by + xfree. + + THis function ignores the "set filename-display" setting. Its default + setting is "relative" which is backward compatible but the former behavior + of macro filenames printing was "absolute". */ +extern char *macro_source_fullname (struct macro_source_file *file); #endif /* MACROTAB_H */ -- cgit v1.1