summaryrefslogtreecommitdiff
path: root/gdb/jit.c
diff options
context:
space:
mode:
authorPaul Pluzhnikov <ppluzhnikov@google.com>2011-01-06 19:56:42 +0000
committerPaul Pluzhnikov <ppluzhnikov@google.com>2011-01-06 19:56:42 +0000
commit0d67ef8877f86c2cd1144e6e1e51c95806a09403 (patch)
treefb4bdc2a5d114109bcff8c5976606afa8d4c6e54 /gdb/jit.c
parentf47b1885bb46d4a0a5963483c6cbcfbe4444a253 (diff)
downloadgdb-0d67ef8877f86c2cd1144e6e1e51c95806a09403.tar.gz
ChangeLog:
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".
Diffstat (limited to 'gdb/jit.c')
-rw-r--r--gdb/jit.c46
1 files changed, 44 insertions, 2 deletions
diff --git a/gdb/jit.c b/gdb/jit.c
index 2f2e401ba23..cadd7f6dc11 100644
--- 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 ();