ChangeLog:
authorPaul Pluzhnikov <ppluzhnikov@google.com>
Thu, 6 Jan 2011 19:56:44 +0000 (19:56 +0000)
committerPaul Pluzhnikov <ppluzhnikov@google.com>
Thu, 6 Jan 2011 19:56:44 +0000 (19:56 +0000)
2010-01-06  Paul Pluzhnikov  <ppluzhnikov@google.com>

* jit.h (struct jit_code_entry): use ULONGEST for symfile_size.
* jit.c (jit_debug): New variable.
(show_jit_debug): New function.
(struct target_buffer): Use ULONGEST.
(bfd_open_from_target_memory): Likewise.
(jit_register_code, jit_inferior_init): Add debug output.
(_initialize_jit): Register "debug jit" command.

doc/ChangeLog:
2010-01-06  Paul Pluzhnikov  <ppluzhnikov@google.com>

       * gdb.texinfo (Debugging Output): Document "set debug jit".

gdb/ChangeLog
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/jit.c
gdb/jit.h

index d0c6ac8fb63422d3505c554aca7e10dcf9021ebd..bed9bce845000be842d2fb7b0c6b150d73389e11 100644 (file)
@@ -1,3 +1,13 @@
+2010-01-06  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+       * jit.h (struct jit_code_entry): use ULONGEST for symfile_size.
+       * jit.c (jit_debug): New variable.
+       (show_jit_debug): New function.
+       (struct target_buffer): Use ULONGEST.
+       (bfd_open_from_target_memory): Likewise.
+       (jit_register_code, jit_inferior_init): Add debug output.
+       (_initialize_jit): Register "debug jit" command.
+
 2011-01-06  Tom Tromey  <tromey@redhat.com>
 
        * frame.h (enum frame_type) <INLINE_FRAME>: Fix comment.
index 04e47149fc9cc7bd0a510d9ca964b66608513596..992476888c394f219267932c0d0edcdbec6bdc64 100644 (file)
@@ -1,3 +1,7 @@
+2010-01-06  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+       * gdb.texinfo (Debugging Output): Document "set debug jit".
+
 2011-01-06  Tom Tromey  <tromey@redhat.com>
 
        PR python/12133:
index f6a3747951f8db409600a5ecd07c9f4d232ae5e0..a16cf8359ed9d102d381db98e39bac58a41eda75 100644 (file)
@@ -19955,6 +19955,11 @@ The default is off.  @file{infrun.c} contains GDB's runtime state machine used
 for implementing operations such as single-stepping the inferior.
 @item show debug infrun
 Displays the current state of @value{GDBN} inferior debugging.
+@item set debug jit
+@cindex just-in-time compilation, debugging messages
+Turns on or off debugging messages from JIT debug support.
+@item show debug jit
+Displays the current state of @value{GDBN} JIT debugging.
 @item set debug lin-lwp
 @cindex @sc{gnu}/Linux LWP debug messages
 @cindex Linux lightweight processes
index 2f2e401ba23d88e46c6a02cfb165b2f63919b501..cadd7f6dc1105739bd86b91b3c348cefc3c46242 100644 (file)
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -21,6 +21,8 @@
 
 #include "jit.h"
 #include "breakpoint.h"
+#include "command.h"
+#include "gdbcmd.h"
 #include "gdbcore.h"
 #include "observer.h"
 #include "objfiles.h"
@@ -48,6 +50,17 @@ static CORE_ADDR jit_descriptor_addr = 0;
 
 static int registering_code = 0;
 
+/* Non-zero if we want to see trace of jit level stuff.  */
+
+static int jit_debug = 0;
+
+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);
+}
+
 /* Helper cleanup function to clear an integer flag like the one above.  */
 
 static void
@@ -59,7 +72,7 @@ clear_int (void *int_addr)
 struct target_buffer
 {
   CORE_ADDR base;
-  size_t size;
+  ULONGEST size;
 };
 
 /* Openning the file is a no-op.  */
@@ -118,7 +131,7 @@ mem_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
 /* Open a BFD from the target's memory.  */
 
 static struct bfd *
-bfd_open_from_target_memory (CORE_ADDR addr, size_t size, char *target)
+bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size, char *target)
 {
   const char *filename = xstrdup ("<in-memory>");
   struct target_buffer *buffer = xmalloc (sizeof (struct target_buffer));
@@ -219,6 +232,13 @@ jit_register_code (struct gdbarch *gdbarch,
   const struct bfd_arch_info *b;
   CORE_ADDR *entry_addr_ptr;
 
+  if (jit_debug)
+    fprintf_unfiltered (gdb_stdlog,
+                       "jit_register_code, symfile_addr = %s, "
+                       "symfile_size = %s\n",
+                       paddress (gdbarch, code_entry->symfile_addr),
+                       pulongest (code_entry->symfile_size));
+
   nbfd = bfd_open_from_target_memory (code_entry->symfile_addr,
                                       code_entry->symfile_size, gnutarget);
   old_cleanups = make_cleanup_bfd_close (nbfd);
@@ -314,6 +334,11 @@ jit_inferior_init (struct gdbarch *gdbarch)
   struct jit_code_entry cur_entry;
   CORE_ADDR cur_entry_addr;
 
+  if (jit_debug)
+    fprintf_unfiltered (gdb_stdlog,
+                       "jit_inferior_init, registering_code = %d\n",
+                       registering_code);
+
   /* When we register code, GDB resets its breakpoints in case symbols have
      changed.  That in turn calls this handler, which makes us look for new
      code again.  To avoid being re-entered, we check this flag.  */
@@ -329,6 +354,10 @@ jit_inferior_init (struct gdbarch *gdbarch)
   if (reg_addr == 0)
     return;
 
+  if (jit_debug)
+    fprintf_unfiltered (gdb_stdlog, "jit_inferior_init, reg_addr = %s\n",
+                       paddress (gdbarch, reg_addr));
+
   /* Lookup the descriptor symbol and cache the addr.  If it is missing, we
      assume we are not attached to a JIT and return early.  */
   desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL, NULL);
@@ -338,6 +367,11 @@ jit_inferior_init (struct gdbarch *gdbarch)
   if (jit_descriptor_addr == 0)
     return;
 
+  if (jit_debug)
+    fprintf_unfiltered (gdb_stdlog,
+                       "jit_inferior_init, jit_descriptor_addr = %s\n",
+                       paddress (gdbarch, jit_descriptor_addr));
+
   /* Read the descriptor so we can check the version number and load any already
      JITed functions.  */
   jit_read_descriptor (gdbarch, &descriptor);
@@ -453,6 +487,14 @@ extern void _initialize_jit (void);
 void
 _initialize_jit (void)
 {
+  add_setshow_zinteger_cmd ("jit", class_maintenance, &jit_debug, _("\
+Set JIT debugging."), _("\
+Show JIT debugging."), _("\
+When non-zero, JIT debugging is enabled."),
+                           NULL,
+                           show_jit_debug,
+                           &setdebuglist, &showdebuglist);
+
   observer_attach_inferior_created (jit_inferior_created_observer);
   observer_attach_inferior_exit (jit_inferior_exit_hook);
   jit_objfile_data = register_objfile_data ();
index 581fa5825d5e168e8777a1625bbac8020ed2a3c0..8187d52e7b5f91c5c176ff6f3f426ea6e2bc62b2 100644 (file)
--- a/gdb/jit.h
+++ b/gdb/jit.h
@@ -42,7 +42,7 @@ struct jit_code_entry
   CORE_ADDR next_entry;
   CORE_ADDR prev_entry;
   CORE_ADDR symfile_addr;
-  uint64_t symfile_size;
+  ULONGEST symfile_size;
 };
 
 /* This is the global descriptor that the inferior uses to communicate