Monday, 26 November 2018

Red Zone

Perl6のMoarVMと格闘しているわけですが、微妙に動かなくて。

_cbc_next:
LFB0:
pushq %rbp
LCFI0:
movq %rsp, %rbp
LCFI1:
movq %rdi, -24(%rbp)
movq -24(%rbp), %rax
movq 8(%rax), %rax

stack の上をアクセスしてるのでこれかと思ったんですが、調べていくと...

frame->stack_pointer_offset -= frame->red_zone_size;

がだめだったらしいんですが、red zone ってなんだよ。

The 128-byte area beyond the location pointed to by %rsp is
considered to be reserved and shall not be modified by signal
or interrupt handlers. Therefore, functions may use this area
for temporary data that is not needed across function calls.

え〜 というわけで、どうも、stack の上の領域は 128 byte までアクセスして良いらしい。

-mno-red-zone

を gcc に付ければ禁止されるらしい。 つまり、バグはここではないらしいです。

どうも、ほとんど動いていて、学生は GC 関連なんじゃないかとか言ってるんですが、まぁ、そういう可能性も。



-

No comments: