From: Ulrich Drepper <drepper@gmail.com>
To: gcc-patches@gcc.gnu.org
Subject: [PATCH] libgccjit cleanups
Date: Sat, 06 Dec 2014 20:29:00 -0000 [thread overview]
Message-ID: <87iohoed3e.fsf@gmail.com> (raw)
This patch broken out of one I sent earlier with some extensions. It
contains only little cleanups to the libgccjit code.
When creating the linker command line the code now uses an auto_vec
instead of the fixed size array.
The second change adds the missing context::set_str_option member
function to the C++ interface.
The third change it to the string option handling. Instead of just
using the pointer passed to the function the code now makes a copy
of the string.
OK?
gcc/ChangeLog:
2014-12-06 Ulrich Drepper <drepper@gmail.com>
* jit/jit-playback.c (convert_to_dso): Use auto_vec instead
of automatic array to build up command line.
* jit/jit-recording.c (recording::context::set_str_option):
Make copy of the string.
(recording::context::~context): Free string options.
* jit/jit-recording.h (recording::context): Adjust type
of m_str_options member.
* jit/libgccjit.h: Adjust comment about
gcc_jit_context_set_str_option parameter begin used after
the call.
* jit/libgccjit++.h (gccjit::context): Add set_str_option
member function.
diff --git a/gcc/jit/jit-playback.c b/gcc/jit/jit-playback.c
index ecdae80..6d1eb8a 100644
--- a/gcc/jit/jit-playback.c
+++ b/gcc/jit/jit-playback.c
@@ -1726,18 +1726,19 @@ convert_to_dso (const char *ctxt_progname)
TV_ASSEMBLE. */
auto_timevar assemble_timevar (TV_ASSEMBLE);
const char *errmsg;
- const char *argv[7];
+ auto_vec <const char *> argvec;
+#define ADD_ARG(arg) argvec.safe_push (arg)
int exit_status = 0;
int err = 0;
const char *gcc_driver_name = GCC_DRIVER_NAME;
- argv[0] = gcc_driver_name;
- argv[1] = "-shared";
+ ADD_ARG (gcc_driver_name);
+ ADD_ARG ("-shared");
/* The input: assembler. */
- argv[2] = m_path_s_file;
+ ADD_ARG (m_path_s_file);
/* The output: shared library. */
- argv[3] = "-o";
- argv[4] = m_path_so_file;
+ ADD_ARG ("-o");
+ ADD_ARG (m_path_so_file);
/* Don't use the linker plugin.
If running with just a "make" and not a "make install", then we'd
@@ -1746,17 +1747,17 @@ convert_to_dso (const char *ctxt_progname)
libto_plugin is a .la at build time, with it becoming installed with
".so" suffix: i.e. it doesn't exist with a .so suffix until install
time. */
- argv[5] = "-fno-use-linker-plugin";
+ ADD_ARG ("-fno-use-linker-plugin");
/* pex argv arrays are NULL-terminated. */
- argv[6] = NULL;
+ ADD_ARG (NULL);
/* pex_one's error-handling requires pname to be non-NULL. */
gcc_assert (ctxt_progname);
errmsg = pex_one (PEX_SEARCH, /* int flags, */
gcc_driver_name,
- const_cast<char * const *> (argv),
+ const_cast <char *const *> (argvec.address ()),
ctxt_progname, /* const char *pname */
NULL, /* const char *outname */
NULL, /* const char *errname */
@@ -1783,6 +1784,7 @@ convert_to_dso (const char *ctxt_progname)
getenv ("PATH"));
return;
}
+#undef ADD_ARG
}
/* Top-level hook for playing back a recording context.
diff --git a/gcc/jit/jit-recording.c b/gcc/jit/jit-recording.c
--- a/gcc/jit/jit-recording.c
+++ b/gcc/jit/jit-recording.c
@@ -215,6 +215,9 @@ recording::context::~context ()
delete m;
}
+ for (i = 0; i < GCC_JIT_NUM_STR_OPTIONS; ++i)
+ free (m_str_options[i]);
+
if (m_builtins_manager)
delete m_builtins_manager;
@@ -827,7 +830,7 @@ recording::context::set_str_option (enum gcc_jit_str_option opt,
"unrecognized (enum gcc_jit_str_option) value: %i", opt);
return;
}
- m_str_options[opt] = value;
+ m_str_options[opt] = xstrdup (value);
}
/* Set the given integer option for this context, or add an error if
diff --git a/gcc/jit/jit-recording.h b/gcc/jit/jit-recording.h
--- a/gcc/jit/jit-recording.h
+++ b/gcc/jit/jit-recording.h
@@ -246,7 +246,7 @@ private:
char *m_first_error_str;
bool m_owns_first_error_str;
- const char *m_str_options[GCC_JIT_NUM_STR_OPTIONS];
+ char *m_str_options[GCC_JIT_NUM_STR_OPTIONS];
int m_int_options[GCC_JIT_NUM_INT_OPTIONS];
bool m_bool_options[GCC_JIT_NUM_BOOL_OPTIONS];
diff --git a/gcc/jit/libgccjit++.h b/gcc/jit/libgccjit++.h
--- a/gcc/jit/libgccjit++.h
+++ b/gcc/jit/libgccjit++.h
@@ -99,6 +99,9 @@ namespace gccjit
void dump_to_file (const std::string &path,
bool update_locations);
+ void set_str_option (enum gcc_jit_str_option opt,
+ const char *value);
+
void set_int_option (enum gcc_jit_int_option opt,
int value);
@@ -535,6 +538,14 @@ context::dump_to_file (const std::string &path,
}
inline void
+context::set_str_option (enum gcc_jit_str_option opt,
+ const char *value)
+{
+ gcc_jit_context_set_str_option (m_inner_ctxt, opt, value);
+
+}
+
+inline void
context::set_int_option (enum gcc_jit_int_option opt,
int value)
{
diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h
--- a/gcc/jit/libgccjit.h
+++ b/gcc/jit/libgccjit.h
@@ -213,8 +213,8 @@ enum gcc_jit_bool_option
/* Set a string option on the given context.
- The context directly stores the (const char *), so the passed string
- must outlive the context. */
+ The (const char *) value is not needed anymore after the call
+ returns. */
extern void
gcc_jit_context_set_str_option (gcc_jit_context *ctxt,
enum gcc_jit_str_option opt,
next reply other threads:[~2014-12-06 20:29 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-06 20:29 Ulrich Drepper [this message]
2014-12-08 16:41 ` David Malcolm
2014-12-11 4:32 ` Ulrich Drepper
2014-12-11 17:58 ` David Malcolm
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=87iohoed3e.fsf@gmail.com \
--to=drepper@gmail.com \
--cc=gcc-patches@gcc.gnu.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).