X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Fx86-64%2Fcall.lisp;h=4c4fdab84d4715e56d81f4d2ae3cd304dc16d911;hb=69e6aef5e6fb3bd682c7a2cbf774034d2ea58ee8;hp=c1fa08ed994a27281609bb49e7991a3e638044b7;hpb=20102d9bd3c62691cc2c27725ff7ffdcab54ab2b;p=sbcl.git diff --git a/src/compiler/x86-64/call.lisp b/src/compiler/x86-64/call.lisp index c1fa08e..4c4fdab 100644 --- a/src/compiler/x86-64/call.lisp +++ b/src/compiler/x86-64/call.lisp @@ -1132,7 +1132,10 @@ ;; Allocate the space on the stack. ;; stack = rbp + sp->fp-offset - (max 3 frame-size) - (nargs - fixed) - ;; if we'd move SP backward, swap the meaning of rsp and source + ;; if we'd move SP backward, swap the meaning of rsp and source; + ;; otherwise, we'd be accessing values below SP, and that's no good + ;; if a signal interrupts this code sequence. In that case, store + ;; the final value in rsp after the stack-stack memmove loop. (inst lea (if (<= fixed (max 3 (sb-allocated-size 'stack))) rsp-tn source)