summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
authorJake Zimmerman <zimmerman.jake@gmail.com>2020-07-10 12:05:34 -0700
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-07-22 20:46:36 +0900
commit8b0dc77a621ded75f72486c33f55404ce73f00d7 (patch)
treedd0eaa4393b3128fb65efeaeb897926a525bdfa4 /signal.c
parent7befc0cdfcf972023842eca5836fe4709ec2ad46 (diff)
downloadruby-8b0dc77a621ded75f72486c33f55404ce73f00d7.tar.gz
configure.ac: Bump the size of sigaltstack
The RubyVM uses C macro defines to feature detect whether `backtrace(2)` support is available, and if so it includes C level backtraces when the RubyVM itself crashes. But on my machine, C level backtraces from `vm_dump.c` didn't work when using a version of Ruby buillt on the machine, but worked fine when using a version of Ruby built on another machine and copied to my machine. The default autoconf test for backtraces uses a sigaltstack size that is too small, so the SIGSEGV signal handler itself causes a SIGSEGV). I noticed that signal.c uses a larger sigaltstack size: https://github.com/ruby/ruby/blob/v2_6_5/signal.c#L568 The specific variables it looks at: - `HAVE_BACKTRACE` this is a macro defined by autoconf because there is a line in the configure script like `AC_CHECK_FUNCS(backtrace)` (see the autoconf docs for more). - `BROKEN_BACKTRACE` this comes from a custom program that Ruby's configure script runs to attempt to figure out whether actually using backtrace(2) in a real program works. You can see the autoconf program here. <https://github.com/ruby/ruby/blob/v2_6_5/configure.ac#L2817-L2863> It uses sigaltstack and SA_ONSTACK to create a seperate stack for handling signals. The problem was: SIGSTKSZ (which comes from a system header!) was not suggesting a large enough stack size. When checking on an Ubuntu 16.04 box, we found that SIGSTKSZ was 8192 and MINSIGSTKSZ was 2048.
Diffstat (limited to 'signal.c')
0 files changed, 0 insertions, 0 deletions