summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.c16
-rw-r--r--signal.c10
2 files changed, 24 insertions, 2 deletions
diff --git a/main.c b/main.c
index 80a155fb0c..82144b7c5a 100644
--- a/main.c
+++ b/main.c
@@ -29,9 +29,21 @@ objcdummyfunction(void)
int
main(int argc, char **argv, char **envp)
{
-#ifdef RUBY_GC_STRESS
+#ifdef RUBY_DEBUG_ENV
RUBY_EXTERN int gc_stress;
- gc_stress = getenv("RUBY_GC_STRESS") != NULL;
+ RUBY_EXTERN int enable_coredump;
+ char *str;
+ str = getenv("RUBY_DEBUG");
+ if (str) {
+ for (str = strtok(str, ","); str; str = strtok(NULL, ",")) {
+ if (strcmp(str, "gc_stress") == 0)
+ gc_stress = 1;
+ else if (strcmp(str, "core") == 0)
+ enable_coredump = 1;
+ else
+ fprintf(stderr, "unexpected debug option: %s\n", str);
+ }
+ }
#endif
#ifdef _WIN32
NtInitialize(&argc, &argv);
diff --git a/signal.c b/signal.c
index e495f6211f..1db4dbb32a 100644
--- a/signal.c
+++ b/signal.c
@@ -993,6 +993,10 @@ init_sigchld(int sig)
#endif
}
+#ifdef RUBY_DEBUG_ENV
+int enable_coredump = 0;
+#endif
+
/*
* Many operating systems allow signals to be sent to running
* processes. Some signals have a defined effect on the process, while
@@ -1065,12 +1069,18 @@ Init_signal(void)
install_sighandler(SIGUSR2, sighandler);
#endif
+#ifdef RUBY_DEBUG_ENV
+ if (!enable_coredump) {
+#endif
#ifdef SIGBUS
install_sighandler(SIGBUS, sigbus);
#endif
#ifdef SIGSEGV
install_sighandler(SIGSEGV, sigsegv);
#endif
+#ifdef RUBY_DEBUG_ENV
+ }
+#endif
#ifdef SIGPIPE
install_sighandler(SIGPIPE, sigpipe);
#endif