summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2020-07-22 21:26:21 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-07-22 21:28:23 +0900
commit50aac2ffd59c7b0d871a82c23048846ad2f3f38b (patch)
tree08a2cb06e1ec37c4aef8bf5fe8088e0af64f88e9
parent8b0dc77a621ded75f72486c33f55404ce73f00d7 (diff)
downloadruby-50aac2ffd59c7b0d871a82c23048846ad2f3f38b.tar.gz
Share the size for sigaltstack between configure.ac and signal.c
-rw-r--r--configure.ac5
-rw-r--r--signal.c6
2 files changed, 7 insertions, 4 deletions
diff --git a/configure.ac b/configure.ac
index ae908f7516..2fd4c7c7c6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2929,6 +2929,7 @@ AS_IF([test "x$ac_cv_func_backtrace" = xyes], [
#include <signal.h>
#include <execinfo.h>
+]`grep '^@%:@ *define *RUBY_SIGALTSTACK_SIZE' ${srcdir}/signal.c`[
#define TRACE_SIZE 256
void sigsegv(int signum, siginfo_t *info, void *ctx){
@@ -2948,12 +2949,12 @@ main(void)
stack_t ss;
struct sigaction sa;
- ss.ss_sp = malloc(16*1024);
+ ss.ss_sp = malloc(RUBY_SIGALTSTACK_SIZE);
if (ss.ss_sp == NULL) {
fprintf(stderr, "cannot allocate memory for sigaltstack\n");
return EXIT_FAILURE;
}
- ss.ss_size = 16*1024;
+ ss.ss_size = RUBY_SIGALTSTACK_SIZE;
ss.ss_flags = 0;
if (sigaltstack(&ss, NULL) == -1) {
fprintf(stderr, "sigaltstack failed\n");
diff --git a/signal.c b/signal.c
index 7f8687e436..615ceb7c6e 100644
--- a/signal.c
+++ b/signal.c
@@ -524,11 +524,13 @@ typedef RETSIGTYPE ruby_sigaction_t(int);
#endif
#ifdef USE_SIGALTSTACK
+/* XXX: BSD_vfprintf() uses >1500B stack and x86-64 need >5KiB stack. */
+#define RUBY_SIGALTSTACK_SIZE (16*1024)
+
static int
rb_sigaltstack_size(void)
{
- /* XXX: BSD_vfprintf() uses >1500B stack and x86-64 need >5KiB stack. */
- int size = 16*1024;
+ int size = RUBY_SIGALTSTACK_SIZE;
#ifdef MINSIGSTKSZ
{