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
ef64ab917e and
3ddbba84b5.
This commit is contained in:
Yusuke Endoh 2020-02-09 12:53:18 +09:00
Родитель 92c86e39de
Коммит a28c166f78
1 изменённых файлов: 7 добавлений и 0 удалений

7
gc.c
Просмотреть файл

@ -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)