diff options
author | Joel Brobecker <brobecker@gnat.com> | 2010-08-19 09:04:13 +0000 |
---|---|---|
committer | Joel Brobecker <brobecker@gnat.com> | 2010-08-19 09:04:13 +0000 |
commit | 2837d59e6b7e523fee86a5a5a050ecb5554ccd1b (patch) | |
tree | f41bae681ec9b69e786cde0baf0958b1f1916745 /gdb | |
parent | 35633fef927791e0267443222a23c5338eff6626 (diff) | |
download | gdb-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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/psymtab.c | 2 | ||||
-rw-r--r-- | gdb/symtab.c | 2 |
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; |