Re: Enable --build-id for moxie-elf-ld
[deliverable/binutils-gdb.git] / gdb / mi / mi-cmd-file.c
index 0b2b725a0cb72d3514c92f2177bb29048b4a65cd..963c8c7bd2d943e8a84b09403e0b14e1b9c21036 100644 (file)
@@ -1,5 +1,5 @@
 /* MI Command Set - file commands.
-   Copyright (C) 2000-2002, 2007-2012 Free Software Foundation, Inc.
+   Copyright (C) 2000-2019 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.  */
 
 void
-mi_cmd_file_list_exec_source_file (char *command, char **argv, int argc)
+mi_cmd_file_list_exec_source_file (const char *command, char **argv, int argc)
 {
   struct symtab_and_line st;
   struct ui_out *uiout = current_uiout;
@@ -48,18 +52,14 @@ mi_cmd_file_list_exec_source_file (char *command, char **argv, int argc)
   if (!st.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.  */
-  ui_out_field_int (uiout, "line", st.line);
-  ui_out_field_string (uiout, "file", st.symtab->filename);
+  uiout->field_signed ("line", st.line);
+  uiout->field_string ("file", symtab_to_filename_for_display (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_string ("fullname", symtab_to_fullname (st.symtab));
 
-  ui_out_field_int (uiout, "macro-info", st.symtab->macro_table ? 1 : 0);
+  uiout->field_signed ("macro-info",
+                      COMPUNIT_MACRO_TABLE (SYMTAB_COMPUNIT (st.symtab)) != NULL);
 }
 
 /* A callback for map_partial_symbol_filenames.  */
@@ -70,47 +70,92 @@ print_partial_file_name (const char *filename, const char *fullname,
 {
   struct ui_out *uiout = current_uiout;
 
-  ui_out_begin (uiout, ui_out_type_tuple, NULL);
+  uiout->begin (ui_out_type_tuple, NULL);
 
-  ui_out_field_string (uiout, "file", filename);
+  uiout->field_string ("file", filename);
 
   if (fullname)
-    ui_out_field_string (uiout, "fullname", fullname);
+    uiout->field_string ("fullname", fullname);
 
-  ui_out_end (uiout, ui_out_type_tuple);
+  uiout->end (ui_out_type_tuple);
 }
 
 void
-mi_cmd_file_list_exec_source_files (char *command, char **argv, int argc)
+mi_cmd_file_list_exec_source_files (const char *command, char **argv, int argc)
 {
   struct ui_out *uiout = current_uiout;
-  struct symtab *s;
-  struct objfile *objfile;
 
   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");
+  uiout->begin (ui_out_type_list, "files");
 
-  /* Look at all of the symtabs.  */
-  ALL_SYMTABS (objfile, s)
-  {
-    ui_out_begin (uiout, ui_out_type_tuple, NULL);
+  /* Look at all of the file symtabs.  */
+  for (objfile *objfile : current_program_space->objfiles ())
+    {
+      for (compunit_symtab *cu : objfile->compunits ())
+       {
+         for (symtab *s : compunit_filetabs (cu))
+           {
+             uiout->begin (ui_out_type_tuple, NULL);
 
-    ui_out_field_string (uiout, "file", s->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.  */
-    symtab_to_fullname (s);
+             uiout->end (ui_out_type_tuple);
+           }
+       }
+    }
 
-    if (s->fullname)
-      ui_out_field_string (uiout, "fullname", s->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);
+}
 
-  map_partial_symbol_filenames (print_partial_file_name, NULL,
-                               1 /*need_fullname*/);
+/* See mi-cmds.h.  */
 
-  ui_out_end (uiout, ui_out_type_list);
+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);
+    }
 }
This page took 0.027207 seconds and 4 git commands to generate.