aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2015-01-23 16:28:14 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2015-01-23 16:28:14 +0000
commit6fc2d0f36223308d21f2347c9b48bc61fed2405c (patch)
tree21c3c537b4d132c613ac2e0d01dacf9b6b81424a
parentca72dad54a775cbcf4be545feb1f5575e064387a (diff)
downloadgcc-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/ChangeLog12
-rw-r--r--gcc/jit/ChangeLog6
-rw-r--r--gcc/jit/jit-playback.c3
-rw-r--r--gcc/main.c3
-rw-r--r--gcc/toplev.c32
-rw-r--r--gcc/toplev.h4
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++)
diff --git a/gcc/main.c b/gcc/main.c
index 7a02983..79baf0d 100644
--- a/gcc/main.c
+++ b/gcc/main.c
@@ -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);