diff options
author | Yusuke Endoh <[email protected]> | 2020-02-09 12:53:18 +0900 |
---|---|---|
committer | Yusuke Endoh <[email protected]> | 2020-02-09 12:55:44 +0900 |
commit | a28c166f787710227c6aac54befd72778f041485 (patch) | |
tree | 6c9ecd3a805548444d034442987bb0c84f4b6ad4 /gc.c | |
parent | 92c86e39de30e5cd4ec1298204a5c2de52994165 (diff) |
gc.c: make the stack overflow detection earlier under s390x
On s390x, TestFiber#test_stack_size fails with SEGV.
https://rubyci.org/logs/rubyci.s3.amazonaws.com/rhel_zlinux/ruby-master/log/20200205T223421Z.fail.html.gz
```
TestFiber#test_stack_size [/home/chkbuild/build/20200205T223421Z/ruby/test/ruby/test_fiber.rb:356]:
pid 23844 killed by SIGABRT (signal 6) (core dumped)
| -e:1:in `times': stack level too deep (SystemStackError)
| from -e:1:in `rec'
| from -e:1:in `block (3 levels) in rec'
| from -e:1:in `times'
| from -e:1:in `block (2 levels) in rec'
| from -e:1:in `times'
| from -e:1:in `block in rec'
| from -e:1:in `times'
| from -e:1:in `rec'
| ... 172 levels...
| from -e:1:in `block in rec'
| from -e:1:in `times'
| from -e:1:in `rec'
| from -e:1:in `block in <main>'
| -e: [BUG] Segmentation fault at 0x0000000000000000
```
This change tries a similar fix with
ef64ab917eec02491f6bf7233a4031a8c35385e3 and
3ddbba84b5b1f001cd575a48cec56d7ce8e5fbb2.
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -4690,7 +4690,14 @@ stack_check(rb_execution_context_t *ec, int water_mark) #define stack_check(ec, water_mark) FALSE #endif +#ifdef __s390x__ +/* Experimentally make the stack overflow detection earlier under s390x + * https://rubyci.org/logs/rubyci.s3.amazonaws.com/rhel_zlinux/ruby-master/log/20200205T223421Z.fail.html.gz + */ +#define STACKFRAME_FOR_CALL_CFUNC 8192 +#else #define STACKFRAME_FOR_CALL_CFUNC 2048 +#endif MJIT_FUNC_EXPORTED int rb_ec_stack_check(rb_execution_context_t *ec) |