Luis,
Got this report from a fello Lispnyk (thx, dimitri). Looks to my
uninformed eyes as if the x86 and >0.9.3 requirements for callbacks are
met. Thoughts?
kenny
-------- Original Message --------
Subject: Re: [Lisp] testing CFFI
Date: Sat, 17 Sep 2005 12:19:59 -0400
From: Dimitry Gashinsky <[EMAIL PROTECTED]>
Reply-To: [EMAIL PROTECTED]
To: Kenny Tilton <[EMAIL PROTECTED]>
CC: LISP NYC <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]>
Hi Kenny,
I just tried running CFFI on Linux X86_64. I found couple of problems.
CL-USER(3): :c cffi-tests
; loading system definition from
; /home/dig/src/cffi-luis-050916-0148/cffi-tests.asd into #<PACKAGE "ASDF4061">
; registering #<SYSTEM CFFI-TESTS {1000F01F11}> as CFFI-TESTS
; loading system definition from /usr/share/common-lisp/systems/rt.asd into
; #<PACKAGE "ASDF4088">
; registering #<SYSTEM :RT {10009C6D51}> as RT
; $ cd /home/dig/src/cffi-luis-050916-0148/tests/; make
gcc -o libtest.so -shared -lm -Wall -ansi -pedantic libtest.c
/usr/lib/gcc/x86_64-pc-linux-gnu/3.4.4/../../../../x86_64-pc-linux-gnu/bin/ld:
/tmp/ccsyYRJ7.o: relocation R_X86_64_32 against `a local symbol' can
not be used when making a shared object; recompile with -fPIC
/tmp/ccsyYRJ7.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [libtest.so] Error 1
debugger invoked on a ASDF:OPERATION-ERROR in thread #<THREAD "initial
thread" {1000003981}>:
erred while invoking #<COMPILE-OP NIL {100105BA71}> on
#<C-TEST-LIB "libtest" {10011559F1}>
Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [RETRY ] Retry performing #<ASDF:COMPILE-OP NIL {100105BA71}> on
#<CFFI-TESTS-SYSTEM::C-TEST-LIB "libtest" {10011559F1}>.
1: [ACCEPT] Continue, treating #<ASDF:COMPILE-OP NIL {100105BA71}> on
#<CFFI-TESTS-SYSTEM::C-TEST-LIB "libtest" {10011559F1}> as having
been successful.
2: [ABORT ] Exit debugger, returning to top level.
((SB-PCL::FAST-METHOD ASDF:PERFORM
(ASDF:COMPILE-OP CFFI-TESTS-SYSTEM::C-TEST-LIB))
#<unused argument>
#<unused argument>
#<ASDF:COMPILE-OP NIL {100105BA71}>
#<CFFI-TESTS-SYSTEM::C-TEST-LIB "libtest" {10011559F1}>)
source: (ERROR 'ASDF:OPERATION-ERROR
:COMPONENT
CFFI-TESTS-SYSTEM::C
:OPERATION
CFFI-TESTS-SYSTEM::O)
0]
The first problem coud be easily resolved by adding -fPIC to LDFLAGS.
; file: /home/dig/src/cffi-luis-050916-0148/tests/callbacks.lisp
; in: DEFCALLBACK SUM-CHAR
; (CFFI:DEFCALLBACK CFFI-TESTS::SUM-CHAR
; :CHAR
; ((CFFI-TESTS::A :CHAR) (CFFI-TESTS::B :CHAR))
; "Test if the named block is present and the
docstring too."
; (RETURN-FROM CFFI-TESTS::SUM-CHAR
; (+ CFFI-TESTS::A CFFI-TESTS::B)))
; --> PROGN CFFI-SYS:%DEFCALLBACK SETF LET* LET* MULTIPLE-VALUE-BIND LET
; --> ALIEN-SAP LOCALLY PROGN ALIEN-SAP SB-ALIEN::ALIEN-LAMBDA
; ==>
; (SB-ALIEN-INTERNALS:ALIEN-CALLBACK (FUNCTION CHAR CHAR CHAR)
; (LAMBDA (CFFI-TESTS::A CFFI-TESTS::B)
; (CFFI::INVERSE-TRANSLATE-OBJECTS
; (CFFI-TESTS::A CFFI-TESTS::B)
; (:CHAR :CHAR)
; :CHAR
; (BLOCK CFFI-TESTS::SUM-CHAR
; (RETURN-FROM CFFI-TESTS::SUM-CHAR
; #)))))
;
; caught ERROR:
; (in macroexpansion of (SB-ALIEN-INTERNALS:ALIEN-CALLBACK # #))
; (hint: For more precise location, try *BREAK-ON-SIGNALS*.)
; The function SB-ALIEN-INTERNALS:ALIEN-CALLBACK-ACCESSOR-FORM is undefined.
This seems that my SBCL does not support ALIEN-CALLBACK-ACCESSOR-FORM.
Here is my features.
This is SBCL 0.9.4, an implementation of ANSI Common Lisp.
...
(:ASDF :SB-THREAD
:ANSI-CL
:COMMON-LISP
:SBCL
:UNIX
:SB-DOC
:SB-PACKAGE-LOCKS
:SB-UNICODE
:IEEE-FLOATING-POINT
:X86-64
:ELF
:LINUX
:GENCGC
:STACK-GROWS-DOWNWARD-NOT-UPWARD
:C-STACK-IS-CONTROL-STACK
:LINKAGE-TABLE
:STACK-ALLOCATABLE-CLOSURES
:OS-PROVIDES-DLOPEN
:OS-PROVIDES-DLADDR)
If I accept callback failure and continue with testing all the tests
pass! I guess there is no tests for CALLBACK yet.
Hope this helps,
Dig
On 9/16/05, Kenny Tilton <[EMAIL PROTECTED]> wrote:
Thought I would make it a little easier:
1. Download latest CFFI-LUIS from here (last is latest):
http://common-lisp.net/project/cffi/tarballs/
2. Download RT from here:
http://files.b9.com/rt/
3: Adjust the following to match where you put stuff:
#-asdf
(load "/0devtools/asdf.lisp")
(progn
#+lispworks
(setf hcl::*handle-existing-defpackage* (list :add))
(push (make-pathname :directory '(:absolute "0devtools" "cffi"))
asdf:*central-registry*)
(push (make-pathname :directory '(:absolute "0devtools" "rt"))
asdf:*central-registry*)
(asdf:operate 'asdf:load-op 'cffi-tests))
Ok, now you can run the tests:
(cffi-tests::do-tests) ;; runs all tests trapping errors, reporting
only number of failures
To see what the first failure (if any) is:
(let ((cffi-tests::*catch-errors* nil))
(cffi-tests::do-tests))
Thx.
--
Kenny
Why Lisp? http://wiki.alu.org/RtL_Highlight_Film
"I've wrestled with reality for 35 years, Doctor, and I'm happy to state I finally
won out over it."
Elwood P. Dowd, "Harvey", 1950
_______________________________________________
Lisp mailing list
[EMAIL PROTECTED]
http://www.lispnyc.org/mailman/listinfo.cgi/lisp
--
((LAMBDA (LAMBDA) `(,LAMBDA ',LAMBDA)) '(LAMBDA (LAMBDA) `(,LAMBDA ',LAMBDA)))
--
Kenny
Why Lisp? http://wiki.alu.org/RtL_Highlight_Film
"I've wrestled with reality for 35 years, Doctor, and I'm happy to state I finally
won out over it."
Elwood P. Dowd, "Harvey", 1950
_______________________________________________
cffi-devel mailing list
cffi-devel@common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel