X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fforeign-stack-alignment.impure.lisp;h=4bc683c907d6fef69c9cc00c52759fc0c32816c8;hb=d25e3478acccec70402ff32554669a982be8e281;hp=2ed55a3f432d37802844056fbbcc44aad285f63e;hpb=af6edc5adaeac6535c88cfaa81fcfb5b20734ab8;p=sbcl.git diff --git a/tests/foreign-stack-alignment.impure.lisp b/tests/foreign-stack-alignment.impure.lisp index 2ed55a3..4bc683c 100644 --- a/tests/foreign-stack-alignment.impure.lisp +++ b/tests/foreign-stack-alignment.impure.lisp @@ -32,16 +32,21 @@ (defvar *required-alignment* #+(and ppc darwin) 16 - #+(and ppc linux) 16 - #+(or mips x86-64) 8 - #+x86 4 + #+(and ppc linux) 8 + #+x86-64 16 + #+mips 8 + #+(and x86 (not darwin)) 4 + #+(and x86 darwin) 16 #-(or x86 x86-64 mips (and ppc (or darwin linux))) (error "Unknown platform")) ;;;; Build the offset-tool as regular excutable, and run it with ;;;; fork/exec, so that no lisp is on the stack. This is our known-good ;;;; number. -(run "cc" "stack-alignment-offset.c" "-o" "stack-alignment-offset") +(run "cc" + #+(and (or linux freebsd) (or x86-64 ppc mips)) "-fPIC" + #+(and x86-64 darwin) "-arch" #+(and x86-64 darwin) "x86_64" + "stack-alignment-offset.c" "-o" "stack-alignment-offset") (defparameter *good-offset* (parse-integer (run "./stack-alignment-offset" @@ -50,10 +55,12 @@ ;;;; Build the tool again, this time as a shared object, and load it (run "cc" "stack-alignment-offset.c" + #+(and (not darwin) (or x86-64 ppc mips)) "-fPIC" + #+(and x86-64 darwin) "-arch" #+(and x86-64 darwin) "x86_64" #+darwin "-bundle" #-darwin "-shared" "-o" "stack-alignment-offset.so") -(load-shared-object "stack-alignment-offset.so") +(load-shared-object (truename "stack-alignment-offset.so")) (define-alien-routine stack-alignment-offset int (alignment int)) (define-alien-routine trampoline int (callback (function int))) @@ -61,9 +68,14 @@ ;;;; Now get the offset by calling from lisp, first with a regular foreign function ;;;; call, then with an intervening callback. -(assert (= *good-offset* (stack-alignment-offset *required-alignment*))) +(with-test (:name :regular) + (assert (= *good-offset* (stack-alignment-offset *required-alignment*)))) -(assert (= *good-offset* (trampoline (alien-lambda int () - (stack-alignment-offset *required-alignment*))))) +(with-test (:name :callback) + (assert (= *good-offset* (trampoline (alien-lambda int () + (stack-alignment-offset *required-alignment*)))))) + +(delete-file "stack-alignment-offset") +(delete-file "stack-alignment-offset.so") ;;;; success!