From: Sanjoy Das <sanjoy@playingwithpointers.com>
To: gdb-patches@sourceware.org
Cc: Sanjoy Das <sanjoy@playingwithpointers.com>
Subject: [PATCH 4/7] New commands for loading and unloading a reader.
Date: Wed, 24 Aug 2011 18:57:00 -0000 [thread overview]
Message-ID: <1314212467-7391-5-git-send-email-sanjoy@playingwithpointers.com> (raw)
In-Reply-To: <1314212467-7391-1-git-send-email-sanjoy@playingwithpointers.com>
Introduces two new GDB commands - `load-jit-reader' and
`unload-jit-reader'.
---
gdb/jit.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 102 insertions(+), 1 deletions(-)
diff --git a/gdb/jit.c b/gdb/jit.c
index cab27a9..f813625 100644
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -31,6 +31,7 @@
#include "symfile.h"
#include "symtab.h"
#include "target.h"
+#include "gdb-dlfcn.h"
#include "gdb_stat.h"
static const char *jit_reader_dir = NULL;
@@ -115,6 +116,96 @@ mem_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
return 0;
}
+/* One reader that has been loaded successfully, and can potentially be used to
+ parse debug info. */
+static struct jit_reader
+{
+ struct gdb_reader_funcs *functions;
+} *loaded_jit_reader = NULL;
+
+typedef struct gdb_reader_funcs * (reader_init_fn_type) (void);
+static const char *reader_init_fn_sym = "gdb_init_reader";
+
+/* Try to load FILE_NAME as a JIT debug info reader. */
+
+static struct jit_reader *
+jit_reader_load (const char *file_name)
+{
+ void *so;
+ reader_init_fn_type *init_fn;
+ struct jit_reader *new_reader = NULL;
+ struct gdb_reader_funcs *funcs = NULL;
+ struct cleanup *old_cleanups;
+
+ if (jit_debug)
+ fprintf_unfiltered (gdb_stdlog, _("Opening shared object %s.\n"),
+ file_name);
+ so = gdb_dlopen (file_name);
+ old_cleanups = make_cleanup_dlclose (so);
+
+ init_fn = gdb_dlsym (so, reader_init_fn_sym);
+ if (!init_fn)
+ error(_("Could not locate initialization function: %s."),
+ reader_init_fn_sym);
+
+ if (gdb_dlsym (so, "plugin_is_GPL_compatible") == NULL)
+ error(_("Reader not GPL compatible."));
+
+ funcs = init_fn ();
+ if (funcs->reader_version != GDB_READER_INTERFACE_VERSION)
+ error(_("Reader version does not match GDB version."));
+
+ new_reader = XZALLOC (struct jit_reader);
+ new_reader->functions = funcs;
+
+ discard_cleanups (old_cleanups);
+ return new_reader;
+}
+
+/* Provides the jit-reader-load command. */
+
+static void
+jit_reader_load_command (char *args, int from_tty)
+{
+ char so_name[PATH_MAX];
+ int len;
+
+ if (args == NULL)
+ {
+ error (_("No reader name provided."));
+ return;
+ }
+
+ if (loaded_jit_reader != NULL)
+ {
+ error (_("JIT reader already loaded. Run jit-reader-unload first."));
+ return;
+ }
+
+ len = strlen (jit_reader_dir);
+ strcpy(so_name, jit_reader_dir);
+ so_name[len] = '/';
+ so_name[len + 1] = 0;
+
+ strncat (so_name, args, PATH_MAX - (len + 1));
+ loaded_jit_reader = jit_reader_load (so_name);
+}
+
+/* Provides the jit-reader-unload command. */
+
+static void
+jit_reader_unload_command (char *args, int from_tty)
+{
+ if (!loaded_jit_reader)
+ {
+ error(_("No JIT reader loaded."));
+ return;
+ }
+ loaded_jit_reader->functions->destroy (loaded_jit_reader->functions);
+ free (loaded_jit_reader);
+ loaded_jit_reader = NULL;
+}
+
/* Open a BFD from the target's memory. */
static struct bfd *
@@ -535,7 +626,6 @@ jit_event_handler (struct gdbarch *gdbarch)
paddress (gdbarch, entry_addr));
else
jit_unregister_code (objf);
-
break;
default:
error (_("Unknown action_flag value in JIT descriptor!"));
@@ -566,4 +656,15 @@ _initialize_jit (void)
jit_objfile_data = register_objfile_data ();
jit_inferior_data =
register_inferior_data_with_cleanup (jit_inferior_data_cleanup);
+ add_com ("jit-reader-load", no_class, jit_reader_load_command, _("\
+Load FILE as debug info reader and unwinder for JIT compiled code.\n\
+Try to load file FILE as a debug info reader (and unwinder) for\n\
+JIT compiled code. The file is loaded from\n\
+" JIT_READER_DIR ", relocated \n\
+relative to the GDB executable if required.\n\
+Usage is `jit-reader-load FILE`."));
+ add_com ("jit-reader-unload", no_class, jit_reader_unload_command, _("\
+Unload the currently loaded JIT debug info reader.\n\
+See jit-reader-load for how to load JIT debug readers.\n\
+"));
}
--
1.7.5.4
next prev parent reply other threads:[~2011-08-24 18:57 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-24 18:57 JIT Debug Info Reader (re-roll) Sanjoy Das
2011-08-24 18:57 ` [PATCH 2/7] Relocatable directory for loading JIT readers Sanjoy Das
2011-08-24 18:57 ` [PATCH 6/7] New JIT unwinder Sanjoy Das
2011-08-24 19:04 ` Jan Kratochvil
2011-08-24 19:08 ` Sanjoy Das
2011-08-24 18:57 ` [PATCH 7/7] Documentation Sanjoy Das
2011-08-24 20:14 ` Eli Zaretskii
2011-08-24 18:57 ` [PATCH 1/7] Introduce jit-reader.in and modify build system Sanjoy Das
2011-08-24 18:57 ` [PATCH 5/7] Use the loaded reader Sanjoy Das
2011-08-24 18:57 ` [PATCH 3/7] Platform agnostic dynamic loading code Sanjoy Das
2011-08-29 10:03 ` Pedro Alves
2011-08-29 12:54 ` Sanjoy Das
2011-08-29 14:22 ` Pedro Alves
2011-08-30 6:01 ` Sanjoy Das
2011-08-30 18:40 ` Tom Tromey
2011-08-24 18:57 ` Sanjoy Das [this message]
2011-08-27 13:08 [PATCH 6/7] New JIT unwinder Sanjoy Das
[not found] ` <1314518609-10204-1-git-send-email-sanjoy@playingwithpointers.com>
2011-08-28 8:04 ` [PATCH 4/7] New commands for loading and unloading a reader Sanjoy Das
2011-08-30 18:52 ` Tom Tromey
2011-08-27 13:08 JIT Debug Info Reader Sanjoy Das
2011-08-27 13:08 ` [PATCH 4/7] New commands for loading and unloading a reader Sanjoy Das
2011-08-27 14:51 ` Abhijit Halder
2011-08-31 3:31 JIT Reader (re-roll) Sanjoy Das
2011-08-31 3:32 ` [PATCH 4/7] New commands for loading and unloading a reader Sanjoy Das
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1314212467-7391-5-git-send-email-sanjoy@playingwithpointers.com \
--to=sanjoy@playingwithpointers.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox