@@ -1,3 +1,5 @@
+JIT: libgccjit (GCC) version 5.0.0 20150123 (experimental) (x86_64-unknown-linux-gnu)
+JIT: compiled by GNU C version 4.8.3 20140911 (Red Hat 4.8.3-7), GMP version 5.1.2, MPFR version 3.1.2, MPC version 1.0.1
JIT: entering: gcc_jit_context_set_str_option
JIT: exiting: gcc_jit_context_set_str_option
JIT: entering: gcc_jit_context_set_int_option
@@ -178,6 +178,8 @@ public:
recording::location *
make_location () const;
+ FILE *get_file () const { return m_file; }
+
private:
recording::context &m_ctxt;
const char *m_filename;
@@ -21,6 +21,7 @@ along with GCC; see the file COPYING3. If not see
#include "config.h"
#include "system.h"
#include "coretypes.h"
+#include "toplev.h" /* for print_version */
#include "jit-logging.h"
@@ -41,6 +42,8 @@ logger::logger (FILE *f_out,
m_indent_level (0),
m_log_refcount_changes (false)
{
+ /* Begin the log by writing the GCC version. */
+ print_version (f_out, "JIT:", false);
}
/* The destructor for gcc::jit::logger, invoked via
@@ -24,6 +24,7 @@ along with GCC; see the file COPYING3. If not see
#include "tm.h"
#include "pretty-print.h"
#include "hash-map.h"
+#include "toplev.h"
#include <pthread.h>
@@ -1414,7 +1415,9 @@ recording::context::dump_reproducer_to_file (const char *path)
== contexts[0]);
r.write ("/* This code was autogenerated by"
- " gcc_jit_context_dump_reproducer_to_file. */\n\n");
+ " gcc_jit_context_dump_reproducer_to_file.\n\n");
+ print_version (r.get_file (), " ", false);
+ r.write ("*/\n");
r.write ("#include <libgccjit.h>\n\n");
r.write ("static void\nset_options (");
r.write_params (contexts);
@@ -728,10 +728,19 @@ compile_file (void)
/* Print version information to FILE.
Each line begins with INDENT (for the case where FILE is the
- assembler output file). */
+ assembler output file).
+
+ If SHOW_GLOBAL_STATE is true (for cc1 etc), we are within the compiler
+ proper and can print pertinent state (e.g. params and plugins).
+
+ If SHOW_GLOBAL_STATE is false (for use by libgccjit), we are outside the
+ compiler, and we don't hold the mutex on the compiler's global state:
+ we can't print params and plugins, since they might not be initialized,
+ or might be being manipulated by a compile running in another
+ thread. */
void
-print_version (FILE *file, const char *indent)
+print_version (FILE *file, const char *indent, bool show_global_state)
{
static const char fmt1[] =
#ifdef __GNUC__
@@ -791,12 +800,16 @@ print_version (FILE *file, const char *indent)
file == stderr ? _(fmt3) : fmt3,
indent, *indent != 0 ? " " : "",
"MPC", MPC_VERSION_STRING, mpc_get_version ());
- fprintf (file,
- file == stderr ? _(fmt4) : fmt4,
- indent, *indent != 0 ? " " : "",
- PARAM_VALUE (GGC_MIN_EXPAND), PARAM_VALUE (GGC_MIN_HEAPSIZE));
- print_plugins_versions (file, indent);
+ if (show_global_state)
+ {
+ fprintf (file,
+ file == stderr ? _(fmt4) : fmt4,
+ indent, *indent != 0 ? " " : "",
+ PARAM_VALUE (GGC_MIN_EXPAND), PARAM_VALUE (GGC_MIN_HEAPSIZE));
+
+ print_plugins_versions (file, indent);
+ }
}
static int
@@ -1008,7 +1021,7 @@ init_asm_output (const char *name)
{
/* Print the list of switches in effect
into the assembler file as comments. */
- print_version (asm_out_file, ASM_COMMENT_START);
+ print_version (asm_out_file, ASM_COMMENT_START, true);
print_switch_values (print_to_asm_out_file);
putc ('\n', asm_out_file);
}
@@ -1423,7 +1436,7 @@ process_options (void)
option flags in use. */
if (version_flag)
{
- print_version (stderr, "");
+ print_version (stderr, "", true);
if (! quiet_flag)
print_switch_values (print_to_stderr);
}
@@ -2131,7 +2144,7 @@ toplev::main (int argc, char **argv)
initialize_plugins ();
if (version_flag)
- print_version (stderr, "");
+ print_version (stderr, "", true);
if (help_flag)
print_plugins_help (stderr, "");
@@ -78,7 +78,7 @@ extern bool user_defined_section_attribute;
/* See toplev.c. */
extern int flag_rerun_cse_after_global_opts;
-extern void print_version (FILE *, const char *);
+extern void print_version (FILE *, const char *, bool);
/* The hashtable, so that the C front ends can pass it to cpplib. */
extern struct ht *ident_hash;