aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2010-08-19 09:04:13 +0000
committerJoel Brobecker <brobecker@gnat.com>2010-08-19 09:04:13 +0000
commit2837d59e6b7e523fee86a5a5a050ecb5554ccd1b (patch)
treef41bae681ec9b69e786cde0baf0958b1f1916745
parent35633fef927791e0267443222a23c5338eff6626 (diff)
downloadgdb-2837d59e6b7e523fee86a5a5a050ecb5554ccd1b.zip
gdb-2837d59e6b7e523fee86a5a5a050ecb5554ccd1b.tar.gz
gdb-2837d59e6b7e523fee86a5a5a050ecb5554ccd1b.tar.bz2
Fix regression in -file-list-exec-source-files command.
See http://sourceware.org/ml/gdb/2010-07/msg00118.html for a description of the problem. Namely, the file and fullname fields are inverted in the output of the -file-list-exec-source-files GDB/MI command: (gdb) interpreter-exec mi -file-list-exec-source-files ^done,files=[{file="/takamaka.a/brobecke/ex/list-exec-source-files/foo.c",fullname="foo.c"},{file="/takamaka.a/brobecke/ex/list-exec-source-files/foo.c",fullname="foo.c"},{file="",fullname="init.c"},{file="",fullname="../sysdeps/x86_64/elf/start.S"},{file="",fullname="../sysdeps/x86_64/elf/start.S"}] It turns out to be a silly thinko: The map_symbol_filenames function calls the psymtab version of map_symbol_filenames routine, and this version called the callback function with filename and fullname in the wrong order (fullname/filename instead of filename/fullname). The routine description in symfile.h confirst that expected order for the FUN callback parameters: /* Call a callback for every file defined in OBJFILE. FUN is the callback. It is passed the file's name, the file's full name, and the DATA passed to this function. */ void (*map_symbol_filenames) (struct objfile *objfile, void (*fun) (const char *, const char *, void *), void *data); Fixing this error uncovered another location where the arguments were reversed: maybe_add_partial_symtab_filename. Once the first error was fixed, the debugger would crash while attempting to do completion, because it was given a NULL fullname instead of the non-NULL filename. gdb/ChangeLog: * psymtab.c (map_symbol_filenames_psymtab): Call FUN with the arguments in the correct order. * symtab.c (maybe_add_partial_symtab_filename): Declare the arguments in the correct order.
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/psymtab.c2
-rw-r--r--gdb/symtab.c2
3 files changed, 9 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b889876..580be2b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2010-08-19 Joel Brobecker <brobecker@adacore.com>
+
+ * psymtab.c (map_symbol_filenames_psymtab): Call FUN with
+ the arguments in the correct order.
+ * symtab.c (maybe_add_partial_symtab_filename): Declare
+ the arguments in the correct order.
+
2010-08-19 Jan Kratochvil <jan.kratochvil@redhat.com>
* varobj.c (varobj_create): Replace variable old_fi with old_id,
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index bc47681..228b7a8 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -913,7 +913,7 @@ map_symbol_filenames_psymtab (struct objfile *objfile,
continue;
fullname = psymtab_to_fullname (ps);
- (*fun) (fullname, ps->filename, data);
+ (*fun) (ps->filename, fullname, data);
}
}
diff --git a/gdb/symtab.c b/gdb/symtab.c
index d43d573..baf6d94 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -4072,7 +4072,7 @@ struct add_partial_filename_data
/* A callback for map_partial_symbol_filenames. */
static void
-maybe_add_partial_symtab_filename (const char *fullname, const char *filename,
+maybe_add_partial_symtab_filename (const char *filename, const char *fullname,
void *user_data)
{
struct add_partial_filename_data *data = user_data;