diff options
author | David Malcolm <dmalcolm@redhat.com> | 2015-07-23 21:19:07 +0000 |
---|---|---|
committer | David Malcolm <dmalcolm@gcc.gnu.org> | 2015-07-23 21:19:07 +0000 |
commit | eb3982c17ef6db63b43eda4b346f34d4a2bd2465 (patch) | |
tree | d51fc6b3cfd7debaae8e1e52fb0624a8de2c0bdf /gcc/jit/jit-playback.c | |
parent | d37f946ace661906c628b482a0f9d5bfb40d3064 (diff) | |
download | gcc-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.c | 38 |
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. */ |