]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/mi/mi-cmd-file.c
Update copyright year range in all GDB files
[thirdparty/binutils-gdb.git] / gdb / mi / mi-cmd-file.c
index 8c74170b1b5ea4cecb899db12c5bbe57088cf4f7..6e40e5d73648705a5a1e5a013b4bd2a4fc24378c 100644 (file)
@@ -1,5 +1,5 @@
-/* MI Command Set - breakpoint and watchpoint commands.
-   Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+/* MI Command Set - file commands.
+   Copyright (C) 2000-2018 Free Software Foundation, Inc.
    Contributed by Cygnus Solutions (a Red Hat company).
 
    This file is part of GDB.
 #include "defs.h"
 #include "mi-cmds.h"
 #include "mi-getopt.h"
+#include "mi-interp.h"
 #include "ui-out.h"
 #include "symtab.h"
 #include "source.h"
 #include "objfiles.h"
+#include "psymtab.h"
+#include "solib.h"
+#include "solist.h"
+#include "gdb_regex.h"
 
 /* Return to the client the absolute path and line number of the 
-   current file being executed. */
+   current file being executed.  */
 
-enum mi_cmd_result
-mi_cmd_file_list_exec_source_file (char *command, char **argv, int argc)
+void
+mi_cmd_file_list_exec_source_file (const 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);
-
-  ui_out_field_int (uiout, "macro-info", st.symtab->macro_table ? 1 : 0);
-
-  return MI_CMD_DONE;
+  uiout->field_int ("macro-info",
+                   COMPUNIT_MACRO_TABLE (SYMTAB_COMPUNIT (st.symtab)) != NULL);
 }
 
-enum mi_cmd_result
-mi_cmd_file_list_exec_source_files (char *command, char **argv, int argc)
+/* A callback for map_partial_symbol_filenames.  */
+
+static void
+print_partial_file_name (const char *filename, const char *fullname,
+                        void *ignore)
 {
-  struct symtab *s;
-  struct partial_symtab *ps;
-  struct objfile *objfile;
+  struct ui_out *uiout = current_uiout;
 
-  if (!mi_valid_noargs ("mi_cmd_file_list_exec_source_files", argc, argv))
-    error (_("mi_cmd_file_list_exec_source_files: Usage: No args"));
+  uiout->begin (ui_out_type_tuple, NULL);
 
-  /* Print the table header */
-  ui_out_begin (uiout, ui_out_type_list, "files");
+  uiout->field_string ("file", filename);
 
-  /* Look at all of the symtabs */
-  ALL_SYMTABS (objfile, s)
-  {
-    ui_out_begin (uiout, ui_out_type_tuple, NULL);
+  if (fullname)
+    uiout->field_string ("fullname", fullname);
 
-    ui_out_field_string (uiout, "file", s->filename);
+  uiout->end (ui_out_type_tuple);
+}
 
-    /* Extract the fullname if it is not known yet */
-    symtab_to_fullname (s);
+void
+mi_cmd_file_list_exec_source_files (const char *command, char **argv, int argc)
+{
+  struct ui_out *uiout = current_uiout;
+  struct compunit_symtab *cu;
+  struct symtab *s;
+  struct objfile *objfile;
 
-    if (s->fullname)
-      ui_out_field_string (uiout, "fullname", s->fullname);
+  if (!mi_valid_noargs ("-file-list-exec-source-files", argc, argv))
+    error (_("-file-list-exec-source-files: Usage: No args"));
 
-    ui_out_end (uiout, ui_out_type_tuple);
-  }
+  /* Print the table header.  */
+  uiout->begin (ui_out_type_list, "files");
 
-  /* Look at all of the psymtabs */
-  ALL_PSYMTABS (objfile, ps)
+  /* Look at all of the file symtabs.  */
+  ALL_FILETABS (objfile, cu, s)
   {
-    if (!ps->readin)
-      {
-       ui_out_begin (uiout, ui_out_type_tuple, NULL);
+    uiout->begin (ui_out_type_tuple, NULL);
 
-       ui_out_field_string (uiout, "file", ps->filename);
+    uiout->field_string ("file", symtab_to_filename_for_display (s));
+    uiout->field_string ("fullname", symtab_to_fullname (s));
 
-       /* Extract the fullname if it is not known yet */
-       psymtab_to_fullname (ps);
+    uiout->end (ui_out_type_tuple);
+  }
 
-       if (ps->fullname)
-         ui_out_field_string (uiout, "fullname", ps->fullname);
+  map_symbol_filenames (print_partial_file_name, NULL,
+                       1 /*need_fullname*/);
 
-       ui_out_end (uiout, ui_out_type_tuple);
-      }
-  }
+  uiout->end (ui_out_type_list);
+}
 
-  ui_out_end (uiout, ui_out_type_list);
+/* See mi-cmds.h.  */
 
-  return MI_CMD_DONE;
+void
+mi_cmd_file_list_shared_libraries (const char *command, char **argv, int argc)
+{
+  struct ui_out *uiout = current_uiout;
+  const char *pattern;
+  struct so_list *so = NULL;
+
+  switch (argc)
+    {
+    case 0:
+      pattern = NULL;
+      break;
+    case 1:
+      pattern = argv[0];
+      break;
+    default:
+      error (_("Usage: -file-list-shared-libraries [REGEXP]"));
+    }
+
+  if (pattern != NULL)
+    {
+      const char *re_err = re_comp (pattern);
+
+      if (re_err != NULL)
+       error (_("Invalid regexp: %s"), re_err);
+    }
+
+  update_solib_list (1);
+
+  /* Print the table header.  */
+  ui_out_emit_list list_emitter (uiout, "shared-libraries");
+
+  ALL_SO_LIBS (so)
+    {
+      if (so->so_name[0] == '\0')
+       continue;
+      if (pattern != NULL && !re_exec (so->so_name))
+       continue;
+
+      ui_out_emit_tuple tuple_emitter (uiout, NULL);
+      mi_output_solib_attribs (uiout, so);
+    }
 }