aboutsummaryrefslogtreecommitdiff
path: root/gcc/jit/jit-playback.c
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2015-07-23 21:19:07 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2015-07-23 21:19:07 +0000
commiteb3982c17ef6db63b43eda4b346f34d4a2bd2465 (patch)
treed51fc6b3cfd7debaae8e1e52fb0624a8de2c0bdf /gcc/jit/jit-playback.c
parentd37f946ace661906c628b482a0f9d5bfb40d3064 (diff)
downloadgcc-eb3982c17ef6db63b43eda4b346f34d4a2bd2465.zip
gcc-eb3982c17ef6db63b43eda4b346f34d4a2bd2465.tar.gz
gcc-eb3982c17ef6db63b43eda4b346f34d4a2bd2465.tar.bz2
jit: supply MULTILIB_DEFAULTS as arguments when invoking driver
gcc/jit/ChangeLog: * jit-playback.c (invoke_driver): Convert local "argvec" to an auto_argvec, so that it owns copies of the strings, rather than borrows them, updating ADD_ARG to use xstrdup and special-casing the NULL terminator to avoid xstrdup (NULL). Call add_multilib_driver_arguments at the front of the arguments. (MULTILIB_DEFAULTS): Provide a default definition. (multilib_defaults_raw): New constant array. (gcc::jit::playback::context::add_multilib_driver_arguments): New method. * jit-playback.h (gcc::jit::playback::context::add_multilib_driver_arguments): New method. * docs/internals/test-hello-world.exe.log.txt: Update. * docs/_build/texinfo/libgccjit.texi: Regenerate. From-SVN: r226126
Diffstat (limited to 'gcc/jit/jit-playback.c')
-rw-r--r--gcc/jit/jit-playback.c38
1 files changed, 35 insertions, 3 deletions
diff --git a/gcc/jit/jit-playback.c b/gcc/jit/jit-playback.c
index 8d0c210..c469863 100644
--- a/gcc/jit/jit-playback.c
+++ b/gcc/jit/jit-playback.c
@@ -2382,14 +2382,16 @@ invoke_driver (const char *ctxt_progname,
TV_ASSEMBLE. */
auto_timevar assemble_timevar (tv_id);
const char *errmsg;
- auto_vec <const char *> argvec;
-#define ADD_ARG(arg) argvec.safe_push (arg)
+ auto_argvec argvec;
+#define ADD_ARG(arg) argvec.safe_push (xstrdup (arg))
int exit_status = 0;
int err = 0;
const char *gcc_driver_name = GCC_DRIVER_NAME;
ADD_ARG (gcc_driver_name);
+ add_multilib_driver_arguments (&argvec);
+
if (shared)
ADD_ARG ("-shared");
@@ -2410,7 +2412,7 @@ invoke_driver (const char *ctxt_progname,
ADD_ARG ("-fno-use-linker-plugin");
/* pex argv arrays are NULL-terminated. */
- ADD_ARG (NULL);
+ argvec.safe_push (NULL);
/* pex_one's error-handling requires pname to be non-NULL. */
gcc_assert (ctxt_progname);
@@ -2451,6 +2453,36 @@ invoke_driver (const char *ctxt_progname,
#undef ADD_ARG
}
+/* Extract the target-specific MULTILIB_DEFAULTS to
+ multilib_defaults_raw for use by
+ playback::context::add_multilib_driver_arguments (). */
+
+#ifndef MULTILIB_DEFAULTS
+#define MULTILIB_DEFAULTS { "" }
+#endif
+
+static const char *const multilib_defaults_raw[] = MULTILIB_DEFAULTS;
+
+/* Helper function for playback::context::invoke_driver ().
+
+ 32-bit and 64-bit multilib peer builds of libgccjit.so may share
+ a driver binary. We need to pass in options to the shared driver
+ to get the appropriate assembler/linker options for this multilib
+ peer. */
+
+void
+playback::context::
+add_multilib_driver_arguments (vec <char *> *argvec)
+{
+ JIT_LOG_SCOPE (get_logger ());
+
+ /* Add copies of the arguments in multilib_defaults_raw to argvec,
+ prepending each with a "-". */
+ for (size_t i = 0; i < ARRAY_SIZE (multilib_defaults_raw); i++)
+ if (multilib_defaults_raw[i][0])
+ argvec->safe_push (concat ("-", multilib_defaults_raw[i], NULL));
+}
+
/* 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. */