X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fmi%2Fmi-cmd-file.c;h=cf1faa5d88633bc45e2301e34591d7fbead0c14f;hb=112e8700a6fd2fed65ca70132c9cbed4132e8bd4;hp=11a9f7806c9c9b23def5d8419b591a8d37035da5;hpb=4c38e0a4fcb69f8586d8db0b9cdb8dbab5980811;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/mi/mi-cmd-file.c b/gdb/mi/mi-cmd-file.c index 11a9f7806c..cf1faa5d88 100644 --- a/gdb/mi/mi-cmd-file.c +++ b/gdb/mi/mi-cmd-file.c @@ -1,6 +1,5 @@ -/* MI Command Set - breakpoint and watchpoint commands. - Copyright (C) 2000, 2001, 2002, 2007, 2008, 2009, 2010 - Free Software Foundation, Inc. +/* MI Command Set - file commands. + Copyright (C) 2000-2016 Free Software Foundation, Inc. Contributed by Cygnus Solutions (a Red Hat company). This file is part of GDB. @@ -25,91 +24,85 @@ #include "symtab.h" #include "source.h" #include "objfiles.h" +#include "psymtab.h" /* Return to the client the absolute path and line number of the - current file being executed. */ + current file being executed. */ void mi_cmd_file_list_exec_source_file (char *command, char **argv, int argc) { struct symtab_and_line st; - int optind = 0; - char *optarg; + struct ui_out *uiout = current_uiout; - if (!mi_valid_noargs ("mi_cmd_file_list_exec_source_file", argc, argv)) - error (_("mi_cmd_file_list_exec_source_file: Usage: No args")); + if (!mi_valid_noargs ("-file-list-exec-source-file", argc, argv)) + error (_("-file-list-exec-source-file: Usage: No args")); - /* Set the default file and line, also get them */ + /* Set the default file and line, also get them. */ set_default_source_symtab_and_line (); st = get_current_source_symtab_and_line (); - /* We should always get a symtab. - Apparently, filename does not need to be tested for NULL. - The documentation in symtab.h suggests it will always be correct */ + /* We should always get a symtab. Apparently, filename does not + need to be tested for NULL. The documentation in symtab.h + suggests it will always be correct. */ if (!st.symtab) - error (_("mi_cmd_file_list_exec_source_file: No symtab")); + error (_("-file-list-exec-source-file: No symtab")); - /* Extract the fullname if it is not known yet */ - symtab_to_fullname (st.symtab); + /* Print to the user the line, filename and fullname. */ + uiout->field_int ("line", st.line); + uiout->field_string ("file", symtab_to_filename_for_display (st.symtab)); - /* Print to the user the line, filename and fullname */ - ui_out_field_int (uiout, "line", st.line); - ui_out_field_string (uiout, "file", st.symtab->filename); + uiout->field_string ("fullname", symtab_to_fullname (st.symtab)); - /* We may not be able to open the file (not available). */ - if (st.symtab->fullname) - ui_out_field_string (uiout, "fullname", st.symtab->fullname); + uiout->field_int ("macro-info", + COMPUNIT_MACRO_TABLE (SYMTAB_COMPUNIT (st.symtab)) != NULL); +} + +/* A callback for map_partial_symbol_filenames. */ + +static void +print_partial_file_name (const char *filename, const char *fullname, + void *ignore) +{ + struct ui_out *uiout = current_uiout; - ui_out_field_int (uiout, "macro-info", st.symtab->macro_table ? 1 : 0); + uiout->begin (ui_out_type_tuple, NULL); + + uiout->field_string ("file", filename); + + if (fullname) + uiout->field_string ("fullname", fullname); + + uiout->end (ui_out_type_tuple); } void mi_cmd_file_list_exec_source_files (char *command, char **argv, int argc) { + struct ui_out *uiout = current_uiout; + struct compunit_symtab *cu; struct symtab *s; - struct partial_symtab *ps; struct objfile *objfile; - if (!mi_valid_noargs ("mi_cmd_file_list_exec_source_files", argc, argv)) - error (_("mi_cmd_file_list_exec_source_files: Usage: No args")); + if (!mi_valid_noargs ("-file-list-exec-source-files", argc, argv)) + error (_("-file-list-exec-source-files: Usage: No args")); - /* Print the table header */ - ui_out_begin (uiout, ui_out_type_list, "files"); + /* Print the table header. */ + uiout->begin (ui_out_type_list, "files"); - /* Look at all of the symtabs */ - ALL_SYMTABS (objfile, s) + /* Look at all of the file symtabs. */ + ALL_FILETABS (objfile, cu, s) { - ui_out_begin (uiout, ui_out_type_tuple, NULL); - - ui_out_field_string (uiout, "file", s->filename); + uiout->begin (ui_out_type_tuple, NULL); - /* Extract the fullname if it is not known yet */ - symtab_to_fullname (s); + uiout->field_string ("file", symtab_to_filename_for_display (s)); + uiout->field_string ("fullname", symtab_to_fullname (s)); - if (s->fullname) - ui_out_field_string (uiout, "fullname", s->fullname); - - ui_out_end (uiout, ui_out_type_tuple); + uiout->end (ui_out_type_tuple); } - /* Look at all of the psymtabs */ - ALL_PSYMTABS (objfile, ps) - { - if (!ps->readin) - { - ui_out_begin (uiout, ui_out_type_tuple, NULL); - - ui_out_field_string (uiout, "file", ps->filename); - - /* Extract the fullname if it is not known yet */ - psymtab_to_fullname (ps); - - if (ps->fullname) - ui_out_field_string (uiout, "fullname", ps->fullname); - - ui_out_end (uiout, ui_out_type_tuple); - } - } + map_symbol_filenames (print_partial_file_name, NULL, + 1 /*need_fullname*/); - ui_out_end (uiout, ui_out_type_list); + uiout->end (ui_out_type_list); }