aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/jit/ChangeLog9
-rw-r--r--gcc/jit/jit-playback.c48
-rw-r--r--gcc/jit/jit-playback.h3
3 files changed, 41 insertions, 19 deletions
diff --git a/gcc/jit/ChangeLog b/gcc/jit/ChangeLog
index afe1e66..2d2795d 100644
--- a/gcc/jit/ChangeLog
+++ b/gcc/jit/ChangeLog
@@ -1,3 +1,12 @@
+2014-12-09 David Malcolm <dmalcolm@redhat.com>
+
+ * jit-playback.c (gcc::jit::playback::context::compile): Move the
+ dlopen code into...
+ (gcc::jit::playback::context::dlopen_built_dso): ...this new
+ function.
+ * jit-playback.h (gcc::jit::playback::context::dlopen_built_dso):
+ New function.
+
2014-12-08 David Malcolm <dmalcolm@redhat.com>
* libgccjit++.h: Indent the forward declarations of the classes to
diff --git a/gcc/jit/jit-playback.c b/gcc/jit/jit-playback.c
index cf50fb3..a6de244 100644
--- a/gcc/jit/jit-playback.c
+++ b/gcc/jit/jit-playback.c
@@ -1586,7 +1586,6 @@ result *
playback::context::
compile ()
{
- void *handle = NULL;
const char *ctxt_progname;
result *result_obj = NULL;
@@ -1648,24 +1647,7 @@ compile ()
if (errors_occurred ())
return NULL;
- /* dlopen the .so file. */
- {
- auto_timevar load_timevar (TV_LOAD);
-
- const char *error;
-
- /* Clear any existing error. */
- dlerror ();
-
- handle = dlopen (m_path_so_file, RTLD_NOW | RTLD_LOCAL);
- if ((error = dlerror()) != NULL) {
- add_error (NULL, "%s", error);
- }
- if (handle)
- result_obj = new result (handle);
- else
- result_obj = NULL;
- }
+ result_obj = dlopen_built_dso ();
return result_obj;
}
@@ -1916,6 +1898,34 @@ convert_to_dso (const char *ctxt_progname)
}
}
+/* Dynamically-link the built DSO file into this process, using dlopen.
+ Wrap it up within a jit::result *, and return that.
+ Return NULL if any errors occur, reporting them on this context. */
+
+result *
+playback::context::
+dlopen_built_dso ()
+{
+ auto_timevar load_timevar (TV_LOAD);
+ void *handle = NULL;
+ const char *error = NULL;
+ result *result_obj = NULL;
+
+ /* Clear any existing error. */
+ dlerror ();
+
+ handle = dlopen (m_path_so_file, RTLD_NOW | RTLD_LOCAL);
+ if ((error = dlerror()) != NULL) {
+ add_error (NULL, "%s", error);
+ }
+ if (handle)
+ result_obj = new result (handle);
+ else
+ result_obj = NULL;
+
+ return result_obj;
+}
+
/* Top-level hook for playing back a recording context.
This plays back m_recording_ctxt, and, if no errors
diff --git a/gcc/jit/jit-playback.h b/gcc/jit/jit-playback.h
index b2b983a..f2968a8 100644
--- a/gcc/jit/jit-playback.h
+++ b/gcc/jit/jit-playback.h
@@ -250,6 +250,9 @@ private:
void
convert_to_dso (const char *ctxt_progname);
+ result *
+ dlopen_built_dso ();
+
private:
::gcc::jit::recording::context *m_recording_ctxt;