]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/mi/mi-cmd-file.c
Change all_objfiles adapter to be a method on program_space
[thirdparty/binutils-gdb.git] / gdb / mi / mi-cmd-file.c
CommitLineData
2b03b41d 1/* MI Command Set - file commands.
42a4f53d 2 Copyright (C) 2000-2019 Free Software Foundation, Inc.
1abaf70c
BR
3 Contributed by Cygnus Solutions (a Red Hat company).
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
1abaf70c
BR
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
1abaf70c
BR
19
20#include "defs.h"
21#include "mi-cmds.h"
22#include "mi-getopt.h"
51457a05 23#include "mi-interp.h"
1abaf70c
BR
24#include "ui-out.h"
25#include "symtab.h"
26#include "source.h"
57c22c6c 27#include "objfiles.h"
ccefe4c4 28#include "psymtab.h"
51457a05
MAL
29#include "solib.h"
30#include "solist.h"
31#include "gdb_regex.h"
1abaf70c
BR
32
33/* Return to the client the absolute path and line number of the
2b03b41d 34 current file being executed. */
1abaf70c 35
ce8f13f8 36void
9f33b8b7 37mi_cmd_file_list_exec_source_file (const char *command, char **argv, int argc)
1abaf70c
BR
38{
39 struct symtab_and_line st;
79a45e25 40 struct ui_out *uiout = current_uiout;
1abaf70c 41
1b05df00
TT
42 if (!mi_valid_noargs ("-file-list-exec-source-file", argc, argv))
43 error (_("-file-list-exec-source-file: Usage: No args"));
1abaf70c 44
2b03b41d 45 /* Set the default file and line, also get them. */
17784837
NR
46 set_default_source_symtab_and_line ();
47 st = get_current_source_symtab_and_line ();
1abaf70c 48
2b03b41d
SS
49 /* We should always get a symtab. Apparently, filename does not
50 need to be tested for NULL. The documentation in symtab.h
51 suggests it will always be correct. */
1abaf70c 52 if (!st.symtab)
1b05df00 53 error (_("-file-list-exec-source-file: No symtab"));
1abaf70c 54
2b03b41d 55 /* Print to the user the line, filename and fullname. */
112e8700
SM
56 uiout->field_int ("line", st.line);
57 uiout->field_string ("file", symtab_to_filename_for_display (st.symtab));
57c22c6c 58
112e8700 59 uiout->field_string ("fullname", symtab_to_fullname (st.symtab));
1abaf70c 60
112e8700
SM
61 uiout->field_int ("macro-info",
62 COMPUNIT_MACRO_TABLE (SYMTAB_COMPUNIT (st.symtab)) != NULL);
1abaf70c 63}
57c22c6c 64
ccefe4c4 65/* A callback for map_partial_symbol_filenames. */
2b03b41d 66
ccefe4c4
TT
67static void
68print_partial_file_name (const char *filename, const char *fullname,
69 void *ignore)
70{
79a45e25
PA
71 struct ui_out *uiout = current_uiout;
72
112e8700 73 uiout->begin (ui_out_type_tuple, NULL);
ccefe4c4 74
112e8700 75 uiout->field_string ("file", filename);
ccefe4c4
TT
76
77 if (fullname)
112e8700 78 uiout->field_string ("fullname", fullname);
ccefe4c4 79
112e8700 80 uiout->end (ui_out_type_tuple);
ccefe4c4
TT
81}
82
ce8f13f8 83void
9f33b8b7 84mi_cmd_file_list_exec_source_files (const char *command, char **argv, int argc)
57c22c6c 85{
79a45e25 86 struct ui_out *uiout = current_uiout;
57c22c6c 87
1b05df00
TT
88 if (!mi_valid_noargs ("-file-list-exec-source-files", argc, argv))
89 error (_("-file-list-exec-source-files: Usage: No args"));
57c22c6c 90
2b03b41d 91 /* Print the table header. */
112e8700 92 uiout->begin (ui_out_type_list, "files");
57c22c6c 93
43f3e411 94 /* Look at all of the file symtabs. */
2030c079 95 for (objfile *objfile : current_program_space->objfiles ())
8b31193a
TT
96 {
97 for (compunit_symtab *cu : objfile_compunits (objfile))
98 {
99 for (symtab *s : compunit_filetabs (cu))
100 {
101 uiout->begin (ui_out_type_tuple, NULL);
102
103 uiout->field_string ("file", symtab_to_filename_for_display (s));
104 uiout->field_string ("fullname", symtab_to_fullname (s));
105
106 uiout->end (ui_out_type_tuple);
107 }
108 }
109 }
57c22c6c 110
bb4142cf
DE
111 map_symbol_filenames (print_partial_file_name, NULL,
112 1 /*need_fullname*/);
57c22c6c 113
112e8700 114 uiout->end (ui_out_type_list);
57c22c6c 115}
51457a05
MAL
116
117/* See mi-cmds.h. */
118
119void
9f33b8b7 120mi_cmd_file_list_shared_libraries (const char *command, char **argv, int argc)
51457a05
MAL
121{
122 struct ui_out *uiout = current_uiout;
123 const char *pattern;
124 struct so_list *so = NULL;
51457a05
MAL
125
126 switch (argc)
127 {
128 case 0:
129 pattern = NULL;
130 break;
131 case 1:
132 pattern = argv[0];
133 break;
134 default:
135 error (_("Usage: -file-list-shared-libraries [REGEXP]"));
136 }
137
138 if (pattern != NULL)
139 {
140 const char *re_err = re_comp (pattern);
141
142 if (re_err != NULL)
143 error (_("Invalid regexp: %s"), re_err);
144 }
145
146 update_solib_list (1);
147
148 /* Print the table header. */
10f489e5 149 ui_out_emit_list list_emitter (uiout, "shared-libraries");
51457a05
MAL
150
151 ALL_SO_LIBS (so)
152 {
153 if (so->so_name[0] == '\0')
154 continue;
155 if (pattern != NULL && !re_exec (so->so_name))
156 continue;
157
76f9c9cf 158 ui_out_emit_tuple tuple_emitter (uiout, NULL);
51457a05 159 mi_output_solib_attribs (uiout, so);
51457a05 160 }
51457a05 161}