diff options
author | David Malcolm <dmalcolm@redhat.com> | 2015-01-23 16:28:14 +0000 |
---|---|---|
committer | David Malcolm <dmalcolm@gcc.gnu.org> | 2015-01-23 16:28:14 +0000 |
commit | 6fc2d0f36223308d21f2347c9b48bc61fed2405c (patch) | |
tree | 21c3c537b4d132c613ac2e0d01dacf9b6b81424a | |
parent | ca72dad54a775cbcf4be545feb1f5575e064387a (diff) | |
download | gcc-6fc2d0f36223308d21f2347c9b48bc61fed2405c.zip gcc-6fc2d0f36223308d21f2347c9b48bc61fed2405c.tar.gz gcc-6fc2d0f36223308d21f2347c9b48bc61fed2405c.tar.bz2 |
PR jit/64721: toplev: don't install signal-handlers when running within libgccjit
gcc/ChangeLog:
PR jit/64721
* main.c (main): Construct toplev instances with init_signals=true.
* toplev.c (general_init): Add param "init_signals", and use it to
conditionalize the calls to signal and host_hooks.extra_signals.
(toplev::toplev): Add param "init_signals".
(toplev::main): When invoking general_init, pass m_init_signals
to control whether signal-handlers are installed.
* toplev.h (toplev::toplev): Add param "init_signals".
(toplev::m_init_signals): New field.
gcc/jit/ChangeLog:
PR jit/64721
* jit-playback.c (gcc::jit::playback::context::compile): Construct
toplev instances with init_signals=false.
From-SVN: r220045
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/jit/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/jit/jit-playback.c | 3 | ||||
-rw-r--r-- | gcc/main.c | 3 | ||||
-rw-r--r-- | gcc/toplev.c | 32 | ||||
-rw-r--r-- | gcc/toplev.h | 4 |
6 files changed, 43 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2a47ca2..4931136 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,17 @@ 2015-01-23 David Malcolm <dmalcolm@redhat.com> + PR jit/64721 + * main.c (main): Construct toplev instances with init_signals=true. + * toplev.c (general_init): Add param "init_signals", and use it to + conditionalize the calls to signal and host_hooks.extra_signals. + (toplev::toplev): Add param "init_signals". + (toplev::main): When invoking general_init, pass m_init_signals + to control whether signal-handlers are installed. + * toplev.h (toplev::toplev): Add param "init_signals". + (toplev::m_init_signals): New field. + +2015-01-23 David Malcolm <dmalcolm@redhat.com> + PR jit/64722 * emit-rtl.c (init_emit_regs): Set pic_offset_table_rtx to NULL_RTX before testing PIC_OFFSET_TABLE_REGNUM, since the diff --git a/gcc/jit/ChangeLog b/gcc/jit/ChangeLog index e575074..137245f 100644 --- a/gcc/jit/ChangeLog +++ b/gcc/jit/ChangeLog @@ -1,3 +1,9 @@ +2015-01-23 David Malcolm <dmalcolm@redhat.com> + + PR jit/64721 + * jit-playback.c (gcc::jit::playback::context::compile): Construct + toplev instances with init_signals=false. + 2015-01-19 David Malcolm <dmalcolm@redhat.com> * docs/cp/topics/results.rst: Rename to... diff --git a/gcc/jit/jit-playback.c b/gcc/jit/jit-playback.c index b4f2073..d2549a0 100644 --- a/gcc/jit/jit-playback.c +++ b/gcc/jit/jit-playback.c @@ -1723,7 +1723,8 @@ compile () acquire_mutex (); /* This runs the compiler. */ - toplev toplev (false); + toplev toplev (false, /* use_TV_TOTAL */ + false); /* init_signals */ enter_scope ("toplev::main"); if (get_logger ()) for (unsigned i = 0; i < fake_args.length (); i++) @@ -33,7 +33,8 @@ int main (int argc, char **argv); int main (int argc, char **argv) { - toplev toplev (true); + toplev toplev (true, /* use_TV_TOTAL */ + true /* init_signals */); return toplev.main (argc, argv); } diff --git a/gcc/toplev.c b/gcc/toplev.c index 15b85e1..5084628 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -137,7 +137,7 @@ along with GCC; see the file COPYING3. If not see #include <new> -static void general_init (const char *); +static void general_init (const char *, bool); static void do_compile (); static void process_options (void); static void backend_init (void); @@ -1151,7 +1151,7 @@ open_auxiliary_file (const char *ext) options are parsed. Signal handlers, internationalization etc. ARGV0 is main's argv[0]. */ static void -general_init (const char *argv0) +general_init (const char *argv0, bool init_signals) { const char *p; @@ -1190,28 +1190,31 @@ general_init (const char *argv0) global_dc->option_state = &global_options; global_dc->option_name = option_name; - /* Trap fatal signals, e.g. SIGSEGV, and convert them to ICE messages. */ + if (init_signals) + { + /* Trap fatal signals, e.g. SIGSEGV, and convert them to ICE messages. */ #ifdef SIGSEGV - signal (SIGSEGV, crash_signal); + signal (SIGSEGV, crash_signal); #endif #ifdef SIGILL - signal (SIGILL, crash_signal); + signal (SIGILL, crash_signal); #endif #ifdef SIGBUS - signal (SIGBUS, crash_signal); + signal (SIGBUS, crash_signal); #endif #ifdef SIGABRT - signal (SIGABRT, crash_signal); + signal (SIGABRT, crash_signal); #endif #if defined SIGIOT && (!defined SIGABRT || SIGABRT != SIGIOT) - signal (SIGIOT, crash_signal); + signal (SIGIOT, crash_signal); #endif #ifdef SIGFPE - signal (SIGFPE, crash_signal); + signal (SIGFPE, crash_signal); #endif - /* Other host-specific signal setup. */ - (*host_hooks.extra_signals)(); + /* Other host-specific signal setup. */ + (*host_hooks.extra_signals)(); + } /* Initialize the garbage-collector, string pools and tree type hash table. */ @@ -2059,8 +2062,9 @@ do_compile () } } -toplev::toplev (bool use_TV_TOTAL) - : m_use_TV_TOTAL (use_TV_TOTAL) +toplev::toplev (bool use_TV_TOTAL, bool init_signals) + : m_use_TV_TOTAL (use_TV_TOTAL), + m_init_signals (init_signals) { if (!m_use_TV_TOTAL) start_timevars (); @@ -2097,7 +2101,7 @@ toplev::main (int argc, char **argv) expandargv (&argc, &argv); /* Initialization of GCC's environment, and diagnostics. */ - general_init (argv[0]); + general_init (argv[0], m_init_signals); /* One-off initialization of options that does not need to be repeated when options are added for particular functions. */ diff --git a/gcc/toplev.h b/gcc/toplev.h index 5503795..6b423be 100644 --- a/gcc/toplev.h +++ b/gcc/toplev.h @@ -28,7 +28,8 @@ extern unsigned int save_decoded_options_count; class toplev { public: - toplev (bool use_TV_TOTAL); + toplev (bool use_TV_TOTAL, + bool init_signals); ~toplev (); int main (int argc, char **argv); @@ -40,6 +41,7 @@ private: void start_timevars (); bool m_use_TV_TOTAL; + bool m_init_signals; }; extern void rest_of_decl_compilation (tree, int, int); |