From 1d15be6a868594036edde16f84c39b6bb64014e1 Mon Sep 17 00:00:00 2001 From: Masaki Hara Date: Mon, 28 May 2018 13:29:35 +0900 Subject: [PATCH] Explain why we need extra check in probestack. --- src/probestack.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/probestack.rs b/src/probestack.rs index c8883e2..52a0414 100644 --- a/src/probestack.rs +++ b/src/probestack.rs @@ -64,6 +64,11 @@ pub unsafe extern fn __rust_probestack() { // bytes pushed on the stack orginally with our return address. Using // `8(%rsp)` simulates us testing the stack pointer in the caller's // 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 jna 3f 2: