From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1174 invoked by alias); 5 Jan 2011 19:36:34 -0000 Received: (qmail 958 invoked by uid 22791); 5 Jan 2011 19:36:33 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_HELO_PASS,TW_BJ,TW_YM,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (74.125.121.67) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 05 Jan 2011 19:36:26 +0000 Received: from wpaz9.hot.corp.google.com (wpaz9.hot.corp.google.com [172.24.198.73]) by smtp-out.google.com with ESMTP id p05JaNvm007872 for ; Wed, 5 Jan 2011 11:36:24 -0800 Received: from elbrus2.mtv.corp.google.com (elbrus2.mtv.corp.google.com [172.18.116.96]) by wpaz9.hot.corp.google.com with ESMTP id p05JaMUw021483; Wed, 5 Jan 2011 11:36:22 -0800 Received: by elbrus2.mtv.corp.google.com (Postfix, from userid 74925) id A8CBF190B3A; Wed, 5 Jan 2011 11:36:21 -0800 (PST) To: gdb-patches@sourceware.org Cc: ppluzhnikov@google.com Subject: [patch] Add "debug jit" for easier tracing of JIT support internals Message-Id: <20110105193621.A8CBF190B3A@elbrus2.mtv.corp.google.com> Date: Wed, 05 Jan 2011 19:36:00 -0000 From: ppluzhnikov@google.com (Paul Pluzhnikov) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-01/txt/msg00082.txt.bz2 Greetings, This is on the rather obvious side ... Thanks, -- Paul Pluzhnikov 2010-01-05 Paul Pluzhnikov * jit.c (jit_debug): New variable. (show_jit_debug): New function. (jit_register_code, jit_inferior_init): Add debug output. (_initialize_jit): Register "debug jit" command. 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 19:35:32 -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,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 @@ -219,6 +232,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 +334,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 +354,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 +367,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 +487,15 @@ 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. Higher numbers are more\n\ +verbose."), + 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 ();