Kaynağa Gözat

Explain why we need extra check in probestack.

Masaki Hara 6 yıl önce
ebeveyn
işleme
1d15be6a86
1 değiştirilmiş dosya ile 5 ekleme ve 0 silme
  1. 5 0
      src/probestack.rs

+ 5 - 0
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: