[Openmcl-devel] OpenMCL, FFI and Obj-C bridge
Camille Troillard
tuscland at mac.com
Sat Jan 3 07:48:39 PST 2004
Hi,
I am currently trying to have CL-SDL working with OpenMCL.
I had the 2D demo successfully working (I haven't tried the OpenGL
demos yet), but I am wondering about some issues I ran into :
1. CL-SDL uses FFI to access the library. The +null-pointer+ constant
is defined as NIL. If I try the examples with NIL as value, it doesn't
work because NIL is not of the expected type MACPTR. If I redefine
this constant with the value of (ccl:%null-ptr) it works. The problem
is that OpenMCL won't compile anymore CL-SDL because it says it doesn't
know how to dump #<A Null Mac Pointer> :
Can't dump #<A Null Mac Pointer> - unknown type
[Condition of type SIMPLE-ERROR]
[...]
Backtrace:
0: (CCL::FASL-UNKNOWN #<A Null Mac Pointer>)
1: (CCL::FASL-SCAN-GVECTOR)
2: (CCL::FASL-SCAN)
[...]
I am not sure where is the problem: OpenMCL, UFFI or CL-SDL?
Most lisp implementations accept NIL as the representation of the
null-pointer. Allegro uses the number '0' (it seems). I admit that I
prefer a semantically different definition of the null-pointer as it is
done in OpenMCL. Is it possible, though, to dump the "Null Mac
Pointer"?
2. In order to display a SDL window, I need to (require "COCOA")
first. Not doing so would mess everything with the NSAutoReleasePool
not being properly set. I would like to know if there is a way to load
only the ObjC bridge portion and the autorelease-pool stuff so that I
can run any bridged Cocoa/Foundation application in OpenMCL without
having the OpenMCL debugger. I've heard that some work was in progress
in order to have a more modular bridge architecture, is that right?
3. Now a real problem for me as I don't understand what happens: If I
load the SDL code (which make a big use of FFI) and then (require
"COCOA"), OpenMCL goes into the kernel-debugger :
Unhandled exception 11 at 0x05486b34, context->regs at #xf02683d8
Read operation to unmapped address 0x80000008
While executing: #<Function PROCESS-MODULE-CLASSES #x05486d26>
The full backtrace is provided at the end of the mail for those who are
interested.
However, if I load COCOA first, and then SDL, everything is working.
A last suggestion: don't you think it may be a good idea to put all
the Obj-C bridge in "ccl:lib;" instead of "ccl:examples;"?
Help appreciated!
Best,
Camille
[10297] OpenMCL kernel debugger: b
(#xF02688C0) #x05489298 : #<Function PROCESS-MODULE-METHODS #x0548935e>
+ 260
(#xF02688D0) #x00004E9C : (subprimitive _ret1valn)
(#xF02688E0) #x05488EDC : #<Function PROCESS-SECTION-METHODS
#x05488eee> + 144
(#xF02688F0) #x00004E9C : (subprimitive _ret1valn)
(#xF0268900) #x05488BF0 : #<Anonymous Function #x05488bfe> + 92
(#xF0268910) #x05487BA0 : #<Function PROCESS-SECTION-IN-ALL-LIBRARIES
#x05487bee> + 780
(#xF0268920) #x00004E9C : (subprimitive _ret1valn)
(#xF0268930) #x05487794 : #<Function PROCESS-OBJC-MODULES #x0548779e> +
40
(#xF0268940) #x00004E9C : (subprimitive _ret1valn)
(#xF0268950) #x0548FD60 : #<Function NOTE-ALL-LIBRARY-METHODS
#x0548fd6e> + 92
(#xF0268960) #x00004E9C : (subprimitive _ret1valn)
(#xF0268970) #x054FA7E8 : #<Function UPDATE-TYPE-SIGNATURES #x054fa7f6>
+ 28
(#xF0268980) #x00004E9C : (subprimitive _ret1valn)
(#xF0268990) #x05519864 : #<Anonymous Function #x05519876> + 104
(#xF02689A0) #x05519824 : #<Anonymous Function #x05519876> + 40
(#xF02689B0) #x00004E9C : (subprimitive _ret1valn)
(#xF02689C0) #x0110F0B8 : #<Function CHEAP-EVAL-IN-ENVIRONMENT
#x0510d7d6> + 1284
(#xF02689D0) #x010FE7C8 : #<Function LOAD-FROM-STREAM #x050fa33e> + 220
(#xF02689E0) #x010FEE50 : #<Function %LOAD #x050fa76e> + 1316
(#xF02689F0) #x010FEDB4 : #<Function %LOAD #x050fa76e> + 1160
(#xF0268A00) #x00004E9C : (subprimitive _ret1valn)
(#xF0268A10) #x010F3670 : #<Function LOAD #x050eead6> + 636
(#xF0268A20) #x010F36CC : #<Function LOAD #x050eead6> + 728
(#xF0268A30) #x010FE2A8 : #<Function REQUIRE #x050f9e1e> + 644
(#xF0268A40) #x00004E9C : (subprimitive _ret1valn)
(#xF0268A50) #x01115EFC : #<Function CALL-CHECK-REGS #x0511a37e> + 72
(#xF0268A60) #x00004E9C : (subprimitive _ret1valn)
(#xF0268A70) #x0110F0B8 : #<Function CHEAP-EVAL-IN-ENVIRONMENT
#x0510d7d6> + 1284
(#xF0268A80) #x010FE7C8 : #<Function LOAD-FROM-STREAM #x050fa33e> + 220
(#xF0268A90) #x010FEE50 : #<Function %LOAD #x050fa76e> + 1316
(#xF0268AA0) #x010FEDB4 : #<Function %LOAD #x050fa76e> + 1160
(#xF0268AB0) #x00004E9C : (subprimitive _ret1valn)
(#xF0268AC0) #x010F3670 : #<Function LOAD #x050eead6> + 636
(#xF0268AD0) #x010F36CC : #<Function LOAD #x050eead6> + 728
(#xF0268AE0) #x010FE2A8 : #<Function REQUIRE #x050f9e1e> + 644
(#xF0268AF0) #x00004E9C : (subprimitive _ret1valn)
(#xF0268B00) #x01115EFC : #<Function CALL-CHECK-REGS #x0511a37e> + 72
(#xF0268B10) #x010FE7C8 : #<Function LOAD-FROM-STREAM #x050fa33e> + 220
(#xF0268B20) #x010FEE50 : #<Function %LOAD #x050fa76e> + 1316
(#xF0268B30) #x010FEDB4 : #<Function %LOAD #x050fa76e> + 1160
(#xF0268B40) #x00004E9C : (subprimitive _ret1valn)
(#xF0268B50) #x010F3670 : #<Function LOAD #x050eead6> + 636
(#xF0268B60) #x010F36CC : #<Function LOAD #x050eead6> + 728
(#xF0268B70) #x010FE2A8 : #<Function REQUIRE #x050f9e1e> + 644
(#xF0268B80) #x00004E9C : (subprimitive _ret1valn)
(#xF0268B90) #x01115EFC : #<Function CALL-CHECK-REGS #x0511a37e> + 72
(#xF0268BA0) #x00004E9C : (subprimitive _ret1valn)
(#xF0268BB0) #x0538BA58 : #<Function INTERACTIVE-EVAL #x0538ba9e> + 68
(#xF0268BC0) #x00004E9C : (subprimitive _ret1valn)
(#xF0268BD0) #x01115EFC : #<Function CALL-CHECK-REGS #x0511a37e> + 72
(#xF0268BE0) #x0538C010 : #<Function EVAL-STRING #x0538c08e> + 372
(#xF0268BF0) #x0538BF18 : #<Function EVAL-STRING #x0538c08e> + 124
(#xF0268C00) #x00004E9C : (subprimitive _ret1valn)
(#xF0268C10) #x010AEB28 : #<Function FUNCALL #x05081dde> + 52
(#xF0268C20) #x00004E9C : (subprimitive _ret1valn)
(#xF0268C30) #x0537D29C : #<Function CALL-WITH-SLIME-STREAMS
#x0537d2ce> + 272
(#xF0268C40) #x00004E9C : (subprimitive _ret1valn)
(#xF0268C50) #x0537D02C : #<Function READ-FROM-EMACS #x0537d036> + 128
(#xF0268C60) #x053970B4 : #<Function SERVE-ONE-REQUEST #x0539719e> + 328
(#xF0268C70) #x053970D8 : #<Function SERVE-ONE-REQUEST #x0539719e> + 364
(#xF0268C80) #x05397168 : #<Function SERVE-ONE-REQUEST #x0539719e> + 508
(#xF0268C90) #x05397184 : #<Function SERVE-ONE-REQUEST #x0539719e> + 536
(#xF0268CA0) #x0539742C : #<Function REQUEST-LOOP #x0539744e> + 272
(#xF0268CB0) #x053973C8 : #<Function REQUEST-LOOP #x0539744e> + 172
(#xF0268CC0) #x00004E9C : (subprimitive _ret1valn)
(#xF0268CD0) #x05397510 : #<Function ACCEPT-ONE-CLIENT #x0539751e> + 52
(#xF0268CE0) #x05397640 : #<Function ACCEPT-LOOP #x0539765e> + 140
(#xF0268CF0) #x053975D4 : #<Function ACCEPT-LOOP #x0539765e> + 32
(#xF0268D00) #x011003C8 : #<Function RUN-PROCESS-INITIAL-FORM
#x050fc446> + 348
(#xF0268D10) #x01100400 : #<Function RUN-PROCESS-INITIAL-FORM
#x050fc446> + 404
(#xF0268D20) #x01100444 : #<Function RUN-PROCESS-INITIAL-FORM
#x050fc446> + 472
(#xF0268D30) #x00004E9C : (subprimitive _ret1valn)
(#xF0268D40) #x011005BC : #<Anonymous Function #x050fc56e> + 152
(#xF0268D50) #x011005A4 : #<Anonymous Function #x050fc56e> + 128
(#xF0268D60) #x010FC788 : #<Anonymous Function #x050f80b6> + 172
(#xF0268D70) #x0000895C : (subprimitive toplevel_loop)
(#xF0268D80) #x00008968 : (subprimitive toplevel_loop)
(#xf0268d90) #x00008A34 : _start_lisp + 180
(#xf0268e50) #x0001321C : _lisp_thread_entry + 152
(#xf0268eb0) #x900247E8 : __pthread_body + 40
(#xf0268f00) #x00000000 : (null) + 0
cstack area #x00101fb0
(#xF0135B70) #x01038010 : #<Function FD-READ #x05028626> + 100
(#xF0135B80) #x010EE5F4 : #<Function FD-STREAM-ADVANCE #x050e89f6> + 632
(#xF0135B90) #x010E26AC : #<Function %IOBLOCK-TYI #x050d07de> + 384
(#xF0135BA0) #x00004E9C : (subprimitive _ret1valn)
(#xF0135BB0) #x010E98C0 : #<Method-Function () #<CLASS-WRAPPER
@#x050bd83e> (#<CLASS-WRAPPER @#x050bd83e> . #<header ? #x0000076a>)
#x050e23d6> + 204
(#xF0135BC0) #x010E9854 : #<Method-Function () #<CLASS-WRAPPER
@#x050bd83e> (#<CLASS-WRAPPER @#x050bd83e> . #<header ? #x0000076a>)
#x050e23d6> + 96
(#xF0135BD0) #x010E38C4 : #<Method-Function () #<CLASS-WRAPPER
@#x050bd83e> (#<CLASS-WRAPPER @#x050bd83e> . #<header ? #x0000076a>)
#x050d361e> + 96
(#xF0135BE0) #x01109B44 : #<Function %NEXT-CHAR-AND-ATTR #x05108d9e> +
88
(#xF0135BF0) #x00004E9C : (subprimitive _ret1valn)
(#xF0135C00) #x01109A88 : #<Function %NEXT-NON-WHITESPACE-CHAR-AND-ATTR
#x05108cfe> + 52
(#xF0135C10) #x011126B4 : #<Function %READ-FORM #x0511301e> + 192
(#xF0135C20) #x00004E9C : (subprimitive _ret1valn)
(#xF0135C30) #x01112D68 : #<Function READ #x0511353e> + 212
(#xF0135C40) #x01114C5C : #<Function TOPLEVEL-READ #x05118a96> + 224
(#xF0135C50) #x01114D88 : #<Function TOPLEVEL-READ #x05118a96> + 524
(#xF0135C60) #x011150C4 : #<Function READ-LOOP #x05118ee6> + 656
(#xF0135C70) #x01115188 : #<Function READ-LOOP #x05118ee6> + 852
(#xF0135C80) #x011151B4 : #<Function READ-LOOP #x05118ee6> + 896
(#xF0135C90) #x011151E0 : #<Function READ-LOOP #x05118ee6> + 940
(#xF0135CA0) #x01115E48 : #<Function TOPLEVEL-LOOP #x0511a14e> + 44
(#xF0135CB0) #x01115E50 : #<Function TOPLEVEL-LOOP #x0511a14e> + 52
(#xF0135CC0) #x011108FC : #<Anonymous Function #x0510f08e> + 104
(#xF0135CD0) #x00004E9C : (subprimitive _ret1valn)
(#xF0135CE0) #x01123298 : #<Anonymous Function #x05138b56> + 500
(#xF0135CF0) #x01123110 : #<Anonymous Function #x05138b56> + 108
(#xF0135D00) #x011003C8 : #<Function RUN-PROCESS-INITIAL-FORM
#x050fc446> + 348
(#xF0135D10) #x01100400 : #<Function RUN-PROCESS-INITIAL-FORM
#x050fc446> + 404
(#xF0135D20) #x01100444 : #<Function RUN-PROCESS-INITIAL-FORM
#x050fc446> + 472
(#xF0135D30) #x00004E9C : (subprimitive _ret1valn)
(#xF0135D40) #x011005BC : #<Anonymous Function #x050fc56e> + 152
(#xF0135D50) #x011005A4 : #<Anonymous Function #x050fc56e> + 128
(#xF0135D60) #x010FC788 : #<Anonymous Function #x050f80b6> + 172
(#xF0135D70) #x0000895C : (subprimitive toplevel_loop)
(#xF0135D80) #x00008968 : (subprimitive toplevel_loop)
(#xf0135d90) #x00008A34 : _start_lisp + 180
(#xf0135e50) #x0001321C : _lisp_thread_entry + 152
(#xf0135eb0) #x900247E8 : __pthread_body + 40
(#xf0135f00) #x00000000 : (null) + 0
cstack area #x00100590
(#xBFFFFC50) #x010FD570 : #<Function %NANOSLEEP #x050f90ae> + 268
(#xBFFFFC60) #x01110878 : #<Anonymous Function #x0510efde> + 52
(#xBFFFFC70) #x0000895C : (subprimitive toplevel_loop)
(#xBFFFFC80) #x00008968 : (subprimitive toplevel_loop)
(#xbffffc90) #x00008A34 : _start_lisp + 180
More information about the Openmcl-devel
mailing list