X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fforeign-stack-alignment.impure.lisp;h=ee14cd9b8341c56572162fff0370a8b41e0afb30;hb=8a19ff566e3a1a43cb3b2d11d2781a1c89981f43;hp=4ca957dabd5267b0219b8d0fa11035bb8a075922;hpb=8694b0dfc9f55890eaff390453896b5f9c64e319;p=sbcl.git diff --git a/tests/foreign-stack-alignment.impure.lisp b/tests/foreign-stack-alignment.impure.lisp index 4ca957d..ee14cd9 100644 --- a/tests/foreign-stack-alignment.impure.lisp +++ b/tests/foreign-stack-alignment.impure.lisp @@ -22,7 +22,7 @@ (output (with-output-to-string (s) (setf proc (run-program program arguments - :search (not (eql #\. (char program 0))) + :environment (test-util::test-env) :output s))))) (unless (zerop (process-exit-code proc)) (error "Bad exit code: ~S~%Output:~% ~S" @@ -43,39 +43,37 @@ ;;;; fork/exec, so that no lisp is on the stack. This is our known-good ;;;; number. -(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") +#-win32 +(progn + (run "/bin/sh" "run-compiler.sh" "-sbcl-pic" + "stack-alignment-offset.c" "-o" "stack-alignment-offset") -(defparameter *good-offset* - (parse-integer (run "./stack-alignment-offset" - (princ-to-string *required-alignment*)))) + (defparameter *good-offset* + (parse-integer (run "./stack-alignment-offset" + (princ-to-string *required-alignment*)))) -;;;; Build the tool again, this time as a shared object, and load it + ;; 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") + (run "/bin/sh" "run-compiler.sh" "-sbcl-pic" "-sbcl-shared" + "stack-alignment-offset.c" "-o" "stack-alignment-offset.so") -(load-shared-object (truename "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))) + (define-alien-routine stack-alignment-offset int (alignment int)) + (define-alien-routine trampoline int (callback (function int)))) ;;;; Now get the offset by calling from lisp, first with a regular foreign function ;;;; call, then with an intervening callback. -(with-test (:name :regular) +(with-test (:name :regular :fails-on :win32) (assert (= *good-offset* (stack-alignment-offset *required-alignment*)))) -(with-test (:name :callback) +(with-test (:name :callback :fails-on :win32) (assert (= *good-offset* (trampoline (alien-lambda int () (stack-alignment-offset *required-alignment*)))))) -(delete-file "stack-alignment-offset") -(delete-file "stack-alignment-offset.so") +(when (probe-file "stack-alignment-offset.so") + (delete-file "stack-alignment-offset") + (delete-file "stack-alignment-offset.so")) ;;;; success!