PR jit/64721: toplev: don't install signal-handlers when running within libgccjit
authorDavid Malcolm <dmalcolm@redhat.com>
Fri, 23 Jan 2015 16:28:14 +0000 (16:28 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Fri, 23 Jan 2015 16:28:14 +0000 (16:28 +0000)
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

gcc/ChangeLog
gcc/jit/ChangeLog
gcc/jit/jit-playback.c
gcc/main.c
gcc/toplev.c
gcc/toplev.h

index 2a47ca2cecf451892c7cf48c43cb41d5cfbc7860..4931136ed64b256b9fceecfed78a390a56b5c131 100644 (file)
@@ -1,3 +1,15 @@
+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
index e5750749aac80305481be91d85050c7d2bbecba0..137245f116fef72ed4e91032f5b31b84e2e0ea26 100644 (file)
@@ -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...
index b4f20738ae59ae7b04c2d05f123de40702917cf8..d2549a0d38a4118335e5fcf62bcd623fb66bab26 100644 (file)
@@ -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++)
index 7a02983672aab9e3dd3bb5b60a7a444f6819af44..79baf0d46314f4e75e53879cd400704868521639 100644 (file)
@@ -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);
 }
index 15b85e1d2e917f4118cded035cea1e307e1798e2..50846280053191028d3d39787133cfa8d9eca75b 100644 (file)
@@ -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.  */
index 550379573391fa3ac1956dea648ff8b321476efa..6b423be3c51b9fb7d862c95b4c0331450af60574 100644 (file)
@@ -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);