Index: jit.c =================================================================== RCS file: /cvs/src/src/gdb/jit.c,v retrieving revision 1.8 diff -u -p -r1.8 jit.c --- jit.c 1 Jan 2011 15:33:09 -0000 1.8 +++ jit.c 5 Jan 2011 21:46:10 -0000 @@ -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,10 @@ 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; + /* Helper cleanup function to clear an integer flag like the one above. */ static void @@ -219,6 +225,13 @@ jit_register_code (struct gdbarch *gdbar 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 = %zu\n", + paddress (gdbarch, code_entry->symfile_addr), + 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 +327,11 @@ jit_inferior_init (struct gdbarch *gdbar 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 +347,10 @@ jit_inferior_init (struct gdbarch *gdbar 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 +360,11 @@ jit_inferior_init (struct gdbarch *gdbar 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 +480,13 @@ 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, NULL, + &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: doc/gdb.texinfo =================================================================== RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v retrieving revision 1.783 diff -u -p -r1.783 gdb.texinfo --- doc/gdb.texinfo 5 Jan 2011 05:09:52 -0000 1.783 +++ doc/gdb.texinfo 5 Jan 2011 21:46:11 -0000 @@ -19955,6 +19955,11 @@ The default is off. @file{infrun.c} con 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 +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