From f0a4b570b43765effcf5b4a1b12c47b9aab1b16f Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Sun, 13 Jan 2013 18:52:45 +0000 Subject: [PATCH] gdb/ * source.c (symtab_to_fullname): Apply rewrite_source_path also for non-existing files. gdb/testsuite/ * gdb.mi/mi-fullname-deleted.exp: Set srcfileabssubst and initdir. (set substitute-path): New test. (fullname present): Remove content. (substituted fullname): New test. --- gdb/ChangeLog | 5 +++++ gdb/source.c | 21 +++++++++++++++++--- gdb/testsuite/ChangeLog | 7 +++++++ gdb/testsuite/gdb.mi/mi-fullname-deleted.exp | 12 ++++++++++- 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index fb9545da04..5495385010 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2013-01-13 Jan Kratochvil + + * source.c (symtab_to_fullname): Apply rewrite_source_path also for + non-existing files. + 2013-01-11 Jan Kratochvil * macrocmd.c (macro_inform_no_debuginfo): Use puts_filtered instead of diff --git a/gdb/source.c b/gdb/source.c index 6e12896d5f..ca6b4f316d 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -1094,10 +1094,25 @@ symtab_to_fullname (struct symtab *s) if (fd >= 0) close (fd); - else if (s->dirname == NULL) - s->fullname = xstrdup (s->filename); else - s->fullname = concat (s->dirname, SLASH_STRING, s->filename, NULL); + { + char *fullname; + struct cleanup *back_to; + + /* rewrite_source_path would be applied by find_and_open_source, we + should report the pathname where GDB tried to find the file. */ + + if (s->dirname == NULL) + fullname = xstrdup (s->filename); + else + fullname = concat (s->dirname, SLASH_STRING, s->filename, NULL); + + back_to = make_cleanup (xfree, fullname); + s->fullname = rewrite_source_path (fullname); + if (s->fullname == NULL) + s->fullname = xstrdup (fullname); + do_cleanups (back_to); + } } return s->fullname; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index e6e4c50052..3e366d98e6 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2013-01-13 Jan Kratochvil + + * gdb.mi/mi-fullname-deleted.exp: Set srcfileabssubst and initdir. + (set substitute-path): New test. + (fullname present): Remove content. + (substituted fullname): New test. + 2013-01-13 Joel Brobecker * gdb.python/py-finish-breakpoint.exp: Add skip_python_tests diff --git a/gdb/testsuite/gdb.mi/mi-fullname-deleted.exp b/gdb/testsuite/gdb.mi/mi-fullname-deleted.exp index c2c822f4ea..1b9fd5ccfb 100644 --- a/gdb/testsuite/gdb.mi/mi-fullname-deleted.exp +++ b/gdb/testsuite/gdb.mi/mi-fullname-deleted.exp @@ -24,6 +24,12 @@ if [mi_gdb_start] { standard_testfile set srcfileabs [standard_output_file $srcfile] +if { [regsub {^(/[^/]+)/} $srcfileabs {\1subst/} srcfileabssubst] != 1 + || [regsub {^(/[^/]+)/.*$} $srcfileabs {\1} initdir] != 1 } { + xfail "Missing root subdirectory" + return -1 +} + set f [open $srcfileabs "w"] puts $f "int main (void) { return 0; }" close $f @@ -38,4 +44,8 @@ file delete -- $srcfileabs mi_gdb_reinitialize_dir $srcdir/$subdir mi_gdb_load ${binfile} -mi_gdb_test "-file-list-exec-source-file" ".*\",fullname=\"[string_to_regexp $srcfileabs]\".*" "fullname present" +mi_gdb_test "-interpreter-exec console \"set substitute-path ${initdir} ${initdir}subst\"" {\^done} "set substitute-path" + +mi_gdb_test "-file-list-exec-source-file" ".*\",fullname=\".*\".*" "fullname present" + +mi_gdb_test "-file-list-exec-source-file" ".*\",fullname=\"[string_to_regexp $srcfileabssubst]\".*" "substituted fullname"