gdb/tui: fairer distribution of excess space during apply
[binutils-gdb.git] / gdb / jit.c
index 9d844bfb4b2bc63f4db43555f17eb5eb2f9954f4..a727143e68b2ca30e60f79fd615b1022a335d04b 100644 (file)
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -71,7 +71,7 @@ static void
 show_jit_debug (struct ui_file *file, int from_tty,
                struct cmd_list_element *c, const char *value)
 {
-  fprintf_filtered (file, _("JIT debugging is %s.\n"), value);
+  gdb_printf (file, _("JIT debugging is %s.\n"), value);
 }
 
 /* Implementation of the "maintenance info jit" command.  */
@@ -82,6 +82,8 @@ maint_info_jit_cmd (const char *args, int from_tty)
   inferior *inf = current_inferior ();
   bool printed_header = false;
 
+  gdb::optional<ui_out_emit_table> table_emitter;
+
   /* Print a line for each JIT-ed objfile.  */
   for (objfile *obj : inf->pspace->objfiles ())
     {
@@ -90,11 +92,35 @@ maint_info_jit_cmd (const char *args, int from_tty)
 
       if (!printed_header)
        {
-         printf_filtered ("Base address of known JIT-ed objfiles:\n");
+         table_emitter.emplace (current_uiout, 3, -1, "jit-created-objfiles");
+
+         /* The +2 allows for the leading '0x', then one character for
+            every 4-bits.  */
+         int addr_width = 2 + (gdbarch_ptr_bit (obj->arch ()) / 4);
+
+         /* The std::max here selects between the width of an address (as
+            a string) and the width of the column header string.  */
+         current_uiout->table_header (std::max (addr_width, 22), ui_left,
+                                      "jit_code_entry-address",
+                                      "jit_code_entry address");
+         current_uiout->table_header (std::max (addr_width, 15), ui_left,
+                                      "symfile-address", "symfile address");
+         current_uiout->table_header (20, ui_left,
+                                      "symfile-size", "symfile size");
+         current_uiout->table_body ();
+
          printed_header = true;
        }
 
-      printf_filtered ("  %s\n", paddress (obj->arch (), obj->jited_data->addr));
+      ui_out_emit_tuple tuple_emitter (current_uiout, "jit-objfile");
+
+      current_uiout->field_core_addr ("jit_code_entry-address", obj->arch (),
+                                     obj->jited_data->addr);
+      current_uiout->field_core_addr ("symfile-address", obj->arch (),
+                                     obj->jited_data->symfile_addr);
+      current_uiout->field_unsigned ("symfile-size",
+                                     obj->jited_data->symfile_size);
+      current_uiout->text ("\n");
     }
 }
 
@@ -211,11 +237,13 @@ get_jiter_objfile_data (objfile *objf)
    at inferior address ENTRY.  */
 
 static void
-add_objfile_entry (struct objfile *objfile, CORE_ADDR entry)
+add_objfile_entry (struct objfile *objfile, CORE_ADDR entry,
+                  CORE_ADDR symfile_addr, ULONGEST symfile_size)
 {
   gdb_assert (objfile->jited_data == nullptr);
 
-  objfile->jited_data.reset (new jited_objfile_data (entry));
+  objfile->jited_data.reset (new jited_objfile_data (entry, symfile_addr,
+                                                    symfile_size));
 }
 
 /* Helper function for reading the global JIT descriptor from remote
@@ -251,8 +279,8 @@ jit_read_descriptor (gdbarch *gdbarch,
   err = target_read_memory (addr, desc_buf, desc_size);
   if (err)
     {
-      fprintf_unfiltered (gdb_stderr, _("Unable to read JIT descriptor from "
-                                       "remote memory\n"));
+      gdb_printf (gdb_stderr, _("Unable to read JIT descriptor from "
+                               "remote memory\n"));
       return false;
     }
 
@@ -559,10 +587,10 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
       BLOCK_END (new_block) = (CORE_ADDR) gdb_block_iter.end;
 
       /* The name.  */
-      SYMBOL_DOMAIN (block_name) = VAR_DOMAIN;
-      SYMBOL_ACLASS_INDEX (block_name) = LOC_BLOCK;
+      block_name->set_domain (VAR_DOMAIN);
+      block_name->set_aclass_index (LOC_BLOCK);
       symbol_set_symtab (block_name, filetab);
-      SYMBOL_TYPE (block_name) = lookup_function_type (block_type);
+      block_name->set_type (lookup_function_type (block_type));
       SYMBOL_BLOCK_VALUE (block_name) = new_block;
 
       block_name->m_name = obstack_strdup (&objfile->objfile_obstack,
@@ -644,7 +672,9 @@ jit_object_close_impl (struct gdb_symbol_callbacks *cb,
   for (gdb_symtab &symtab : obj->symtabs)
     finalize_symtab (&symtab, objfile);
 
-  add_objfile_entry (objfile, priv_data->entry_addr);
+  add_objfile_entry (objfile, priv_data->entry_addr,
+                    priv_data->entry.symfile_addr,
+                    priv_data->entry.symfile_size);
 
   delete obj;
 }
@@ -731,8 +761,8 @@ jit_bfd_try_read_symtab (struct jit_code_entry *code_entry,
       (code_entry->symfile_addr, code_entry->symfile_size, gnutarget));
   if (nbfd == NULL)
     {
-      fputs_unfiltered (_("Error opening JITed symbol file, ignoring it.\n"),
-                       gdb_stderr);
+      gdb_puts (_("Error opening JITed symbol file, ignoring it.\n"),
+               gdb_stderr);
       return;
     }
 
@@ -740,7 +770,7 @@ jit_bfd_try_read_symtab (struct jit_code_entry *code_entry,
      We would segfault later without this line.  */
   if (!bfd_check_format (nbfd.get (), bfd_object))
     {
-      fprintf_unfiltered (gdb_stderr, _("\
+      gdb_printf (gdb_stderr, _("\
 JITed symbol file is not an object file, ignoring it.\n"));
       return;
     }
@@ -773,7 +803,8 @@ JITed symbol file is not an object file, ignoring it.\n"));
                                      &sai,
                                      OBJF_SHARED | OBJF_NOT_FILENAME, NULL);
 
-  add_objfile_entry (objfile, entry_addr);
+  add_objfile_entry (objfile, entry_addr, code_entry->symfile_addr,
+                    code_entry->symfile_size);
 }
 
 /* This function registers code associated with a JIT code entry.  It uses the
@@ -1151,10 +1182,10 @@ jit_inferior_init (inferior *inf)
       /* Check that the version number agrees with that we support.  */
       if (descriptor.version != 1)
        {
-         fprintf_unfiltered (gdb_stderr,
-                             _("Unsupported JIT protocol version %ld "
-                               "in descriptor (expected 1)\n"),
-                             (long) descriptor.version);
+         gdb_printf (gdb_stderr,
+                     _("Unsupported JIT protocol version %ld "
+                       "in descriptor (expected 1)\n"),
+                     (long) descriptor.version);
          continue;
        }
 
@@ -1243,10 +1274,10 @@ jit_event_handler (gdbarch *gdbarch, objfile *jiter)
       {
        objfile *jited = jit_find_objf_with_entry_addr (entry_addr);
        if (jited == nullptr)
-         fprintf_unfiltered (gdb_stderr,
-                             _("Unable to find JITed code "
-                               "entry at address: %s\n"),
-                             paddress (gdbarch, entry_addr));
+         gdb_printf (gdb_stderr,
+                     _("Unable to find JITed code "
+                       "entry at address: %s\n"),
+                     paddress (gdbarch, entry_addr));
        else
          jited->unlink ();