From: stassats <sta...@us...> - 2014-05-13 20:06:06
|
The branch "master" has been updated in SBCL: via 7eee005059222fae4c40984b3c44962381c2b0ab (commit) from d5e780dee9bcc5127c747df90660a675fb1fcf69 (commit) - Log ----------------------------------------------------------------- commit 7eee005059222fae4c40984b3c44962381c2b0ab Author: Stas Boukarev <sta...@gm...> Date: Wed May 14 00:01:50 2014 +0400 Fix allocating nil-vectors on ARM. The recent change caused overwriting of the length header for nil-vectors. --- src/assembly/arm/array.lisp | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/assembly/arm/array.lisp b/src/assembly/arm/array.lisp index a2ddb21..2facb9e 100644 --- a/src/assembly/arm/array.lisp +++ b/src/assembly/arm/array.lisp @@ -33,11 +33,13 @@ (allocation vector ndescr other-pointer-lowtag :flag-tn pa-flag) (inst mov ndescr (lsr type word-shift)) (storew ndescr vector 0 other-pointer-lowtag) - (storew length vector vector-length-slot other-pointer-lowtag) ;; Touch the last element, to ensure that null-terminated strings ;; passed to C do not cause a WP violation in foreign code. + ;; Do that before storing length, since nil-arrays don't have any + ;; space, but may have non-zero length. #!-gencgc (inst mov ndescr 0) #!-gencgc - (storew ndescr pa-flag -1)) + (storew ndescr pa-flag -1) + (storew length vector vector-length-slot other-pointer-lowtag)) (move result vector)) ----------------------------------------------------------------------- hooks/post-receive -- SBCL |