Explain why we need extra check in probestack.

This commit is contained in:
Masaki Hara 2018-05-28 13:29:35 +09:00
parent 56293ad7c7
commit 1d15be6a86
1 changed files with 5 additions and 0 deletions

View File

@ -64,6 +64,11 @@ pub unsafe extern fn __rust_probestack() {
// bytes pushed on the stack orginally with our return address. Using // bytes pushed on the stack orginally with our return address. Using
// `8(%rsp)` simulates us testing the stack pointer in the caller's // `8(%rsp)` simulates us testing the stack pointer in the caller's
// context. // context.
// It's usually called when %rax >= 0x1000, but that's not always true.
// Dynamic stack allocation, which is needed to implement unsized
// rvalues, triggers stackprobe even if %rax < 0x1000.
// Thus we have to check %r11 first to avoid segfault.
cmp $$0x1000,%r11 cmp $$0x1000,%r11
jna 3f jna 3f
2: 2: