may be send this mail in the vm mailing-list

Stef

On Dec 24, 2010, at 3:54 AM, Hernán Morales Durand wrote:

> Laurent, not much progress here :(
> I just reproduced the Unix VM crash. First I've linked the library so
> we do not have to change every module name call
> 
> u...@ubuntu:/usr/lib$ ln -T -s /usr/lib/libyaz.so.3.0.0 yaz
> 
> and I've tried to execute the library tracer in the shell script
> 
> ltrace -f -l /usr/lib/libyaz.so.3.0.0 -o out.txt "$BASE/squeakvm" \
>       -plugins "$BASE" \
>       -encoding latin1 \
>       -vm-display-X11 \
>       "$ROOT/Contents/Resources/pharo.image"
> 
> but it crash the VM too with an unhandled exception even before the
> GUI is displayed.
> What I've observed is that every FFI call which receives an
> ExternalStructure as parameter kills the VM. This is weird because
> this doesn't happen in the Windows VM. I ran this little script I use
> to debug the library
> 
> | conn lib rs rsSize records |
> lib := Z3950FFILibrary default.
> conn := lib
>       createConnectionTo: #Alabama asZ3950Server hostName
>       port: 7090.
> lib createOptions.
> lib
>       setConnection: conn
>       optionName: 'preferredRecordSyntax'
>       optionValue: 'USMARC'.
> rs := lib
>       searchPqf: conn
>       query:  '@attr 1=1003 collins'.
> rsSize := lib resultSetSize: rs.
> rsSize > 0
>       ifFalse:  [ 'no results' ].
> records := Array new: rsSize.
> 0 to: rsSize - 1 do: [: pos |
>       record := lib resultSetRecord: rs position: pos.
>       record isNil not
>               ifTrue:  [      
>                       records
>                               at: pos + 1
>                               put: ( lib
>                                       getRecord: record
>                                       function: 'render; charset=marc8, 
> iso8859-1'
>                                       length: nil ). ] ].
> records
> 
> and the the doIt just hangs the VM, the console output going through
> the Debugger is the following:
> 
> Segmentation fault
> 
> -1370902312 ContextPart>doPrimitive:method:receiver:args:
> -1370902404 ContextPart>tryPrimitiveFor:receiver:args:
> -1370902788 ContextPart>send:to:with:super:
> -1370902896 ContextPart>send:super:numArgs:
> -1370902988 InstructionStream>interpretExtension:in:for:
> -1370903080 InstructionStream>interpretNextInstructionFor:
> -1370903172 ContextPart>step
> -1370903280 Process>step
> -1370903372 Process>step:
> -1370920392 Debugger>send
> -1370937720 PluggableButtonMorph>performAction
> -1370937812 PluggableButtonMorph>mouseUp:
> -1370937996 SequenceableCollection>do:
> -1370957140 PluggableButtonMorph>mouseUp:
> -1370957232 Morph>handleMouseUp:
> -1370957324 MouseButtonEvent>sentTo:
> -1370957416 Morph>handleEvent:
> -1370957584 Morph>handleFocusEvent:
> -1370957676 HandMorph>sendFocusEvent:to:clear:
> -1370957768 PasteUpMorph>becomeActiveDuring:
> -1370957860 BlockClosure>on:do:
> -1370957992 PasteUpMorph>becomeActiveDuring:
> -1370958084 HandMorph>sendFocusEvent:to:clear:
> -1370958260 HandMorph>sendEvent:focus:clear:
> -1370958352 HandMorph>sendMouseEvent:
> -1370958444 HandMorph>handleEvent:
> -1370966728 HandMorph>processEvents
> -1370966836 WorldState>doOneCycleNowFor:
> -1370966952 SequenceableCollection>do:
> -1370967044 WorldState>handsDo:
> -1370967136 WorldState>doOneCycleNowFor:
> -1370969680 WorldState>doOneCycleFor:
> -1370969772 PasteUpMorph>doOneCycle
> -1383611064 >spawnNewProcess
> -1383611192 BlockClosure>newProcess
> Aborted
> 
> it would be nice if someone could tell something about debugging FFI
> calls, or just any idea to try.
> Cheers,
> 
> Hernán
> 
> 2010/12/23 laurent laffont <laurent.laff...@gmail.com>:
>> Hi,
>> I have unmangled all function names. Image also crashes when evaluating the
>> Kant test. (but this time I get ILLEGAL INSTRUCTION on strace). I've tried
>> with Cog and the VM in the Seaside OneClick.
>> I've uploaded the modified packages on squeaksource
>> here: http://www.squeaksource.com/LaurentLSandbox.html   (you can use
>> Z3950Slice to load all at once).
>> Laurent
>> 
>> 
>> 
>> On Thu, Dec 23, 2010 at 1:57 AM, Hernán Morales Durand
>> <hernan.mora...@gmail.com> wrote:
>>> 
>>> Hi Laurent,
>>> 
>>> Thanks for the feedback, I've uploaded the repository with the missing
>>> method but I cannot reproduce the crash in Windows. Have you unmangled
>>> every function name tested? Are you running just the
>>> Z3950FFILibraryTest? Notice the Z3950FFIServerLibraryTest tests are
>>> performed against a Z39.50 server running in local host, otherwise
>>> will fail (however that shouldn't crash the VM), so you may want to
>>> run only the Z3950FFILibraryTest suite. If you or anyone want a local
>>> Zebra server for Win32 - although most configuration files should work
>>> with other platforms - for testing purposes please let me know.
>>> 
>>> Does the Kant test crash the VM too?
>>> 
>>> Z3950Client new
>>>  server: #Acadia;
>>>  query: ( Z3950Query new author: 'Kant' ).
>>> 
>>> (see http://67.222.12.200:8889/WebOpus/52 for sample successful results)
>>> 
>>> I will set up a Linux box tomorrow and try to reproduce there.
>>> Cheers,
>>> 
>>> 2010/12/22 laurent laffont <laurent.laff...@gmail.com>:
>>>> Hi Hernan,
>>>> finally I switch back to Linux to make it work, OSX gives me headaches.
>>>> So on linux the yaz module is found. I get the "Unable to find function
>>>> address" but I found that writing:
>>>> <cdecl: ZOOMOptions 'ZOOM_options_create' (void) module: 'yaz'>
>>>> instead of
>>>> <cdecl: ZOOMOptions '_zoom_options_cre...@0' (void) module: 'yaz3'>
>>>> works. If I understand, function names are not mangled when compiling
>>>> with
>>>> gcc on Linux.
>>>> 
>>>> Trying to run tests I've also had a "could not coerce arguments" in
>>>> Z3950FFILibrary>>createConnectionTo:port because
>>>> Z3950TestCase>>portNumber
>>>> answers a String and
>>>> <cdecl: ZOOMConnection 'ZOOM_connection_new' (char* short) module:
>>>> 'yaz'>
>>>> so it's waiting for a short. I've replaced portNumber to answer a
>>>> SmallInteger.
>>>> And now the image crashes on connectionIsIdle call:
>>>> write(1, "\ncreateConnectionTo:port:", 25) = 25
>>>> write(1, "\nconnectionIsIdle:", 18)     = 18
>>>> rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
>>>> write(1, "\n", 1)                       = 1
>>>> tgkill(25830, 25830, SIGABRT)           = 0
>>>> --- SIGABRT (Aborted) @ 0 (0) ---
>>>> 
>>>> Any idea ?
>>>> 
>>>> Laurent Laffont
>>>> 
>>>> On Tue, Dec 21, 2010 at 7:58 AM, laurent laffont
>>>> <laurent.laff...@gmail.com>
>>>> wrote:
>>>>> 
>>>>> The module is found ! How:
>>>>> - Using VM Squeak 5.8b12 2  (instead of Cog or the VM provided in
>>>>> Seaside
>>>>> One-Click image)
>>>>> - go in Squeak\ 5.8b12\ 2.app/Contents/Resources/, then ln -s
>>>>> /usr/local/lib/libyaz.3.dylib .
>>>>> Now I have the "Unable to find function address" you have talked
>>>>> earlier
>>>>> :) I will look at the mangled function names.
>>>>> 
>>>>> Laurent  --- on the road to the FFI mountain.
>>>>> 
>>>>> On Tue, Dec 21, 2010 at 6:59 AM, Hernán Morales Durand
>>>>> <hernan.mora...@gmail.com> wrote:
>>>>>> 
>>>>>> Laurent,
>>>>>> I forward this e-mail to the squeak mailing list, may be someone there
>>>>>> have a better idea how the OSX VM works. BTW there are more
>>>>>> commentaries here
>>>>>> 
>>>>>> 
>>>>>> http://forum.world.st/squeak-dev-Alien-amp-Squeak-FFI-issues-on-Snow-Leopard-td85608.html
>>>>>> Cheers,
>>>>>> 
>>>>>> Hernán
>>>>>> 
>>>>>> 2010/12/20 laurent laffont <laurent.laff...@gmail.com>:
>>>>>>> Hi Hernan,
>>>>>>> the strace equivalent on OSX seems to be dtruss (yes I'm learning
>>>>>>> OSX
>>>>>>> too :)
>>>>>>> sudo dtruss -p [pid of process]
>>>>>>> in the trace I have this:
>>>>>>> 
>>>>>>> 
>>>>>>> stat("/Users/laurentlaffont/Downloads/Seaside.app/Contents/Resources/yaz3.bundle/Contents/MacOS/yaz3\0",
>>>>>>> 0xBFF59440, 0xBFF5AB28) = -1 Err#2
>>>>>>> 
>>>>>>> 
>>>>>>> stat64("/Users/laurentlaffont/Downloads/Seaside.app/Contents/Resources/yaz3.bundle/Contents/MacOS/yaz3\0",
>>>>>>> 0xBFF5892C, 0xBFF5AB28) = -1 Err#2
>>>>>>> 
>>>>>>> 
>>>>>>> stat("/Users/laurentlaffont/Downloads/Seaside.app/Contents/Resources/yaz3\0",
>>>>>>> 0xBFF59440, 0xBFF5AB28) = 0 0
>>>>>>> 
>>>>>>> 
>>>>>>> stat64("/Users/laurentlaffont/Downloads/Seaside.app/Contents/Resources/yaz3\0",
>>>>>>> 0xBFF5892C, 0xBFF5AB28) = 0 0
>>>>>>> 
>>>>>>> 
>>>>>>> open("/Users/laurentlaffont/Downloads/Seaside.app/Contents/Resources/yaz3\0",
>>>>>>> 0x0, 0x0) = 12 0
>>>>>>> pread(0xC, "\317\372\355\376\a\0", 0x1000, 0x0) = 4096 0
>>>>>>> close(0xC) = 0 0
>>>>>>> 
>>>>>>> 
>>>>>>> stat("/Users/laurentlaffont/Downloads/Plugins/yaz3.bundle/Contents/MacOS/yaz3\0",
>>>>>>> 0xBFF59440, 0x1000) = -1 Err#2
>>>>>>> 
>>>>>>> 
>>>>>>> stat64("/Users/laurentlaffont/Downloads/Plugins/yaz3.bundle/Contents/MacOS/yaz3\0",
>>>>>>> 0xBFF5892C, 0x1000) = -1 Err#2
>>>>>>> stat("/Users/laurentlaffont/Downloads/Plugins/yaz3\0", 0xBFF59440,
>>>>>>> 0x1000) =
>>>>>>> -1 Err#2
>>>>>>> stat64("/Users/laurentlaffont/Downloads/Plugins/yaz3\0", 0xBFF5892C,
>>>>>>> 0x1000)
>>>>>>> = -1 Err#2
>>>>>>> 
>>>>>>> so it looks like the VM is trying to find yaz3 at non standard Unix
>>>>>>> places
>>>>>>> (I don't know if it's SqueakVM or OSX related).
>>>>>>> I've created Contents/Resources/yaz3.bundle/Contents/MacOS/, put yaz
>>>>>>> lib
>>>>>>> there, ln -s libyaz.3.dylib yaz3 but no success.
>>>>>>> 
>>>>>>> I've read good
>>>>>>> post http://forum.world.st/FFI-Documentation-td2225150.html :
>>>>>>> 
>>>>>>> Module Location - where the external library file lives
>>>>>>>       - depends on the platform
>>>>>>>               - Mac
>>>>>>>                       - pre Snow Leopard
>>>>>>>                               - checks VM path and common library
>>>>>>> paths
>>>>>>>                       - Snow Leopard
>>>>>>>                               - only looks in VM bundle's Resources
>>>>>>> file, you must either [5]:
>>>>>>>                                       - store all external libraries
>>>>>>> there
>>>>>>>                                       - ln -s path/to/library
>>>>>>> path/to/VM/Resources/library_name
>>>>>>>                                       - Change the VM's Info.plist
>>>>>>> "SqueakPluginsBuiltInOrLocalOnly" key from
>>>>>>> "true" to "false."
>>>>>>> 
>>>>>>> For this SqueakPluginsBuiltInOrLocalOnly I suppose I need to compile
>>>>>>> a
>>>>>>> VM ?
>>>>>>> Cheers,
>>>>>>> Laurent Laffont
>>>>>>> 
>>>>>>> 
>>>>>>> On Mon, Dec 20, 2010 at 4:12 PM, Hernán Morales Durand
>>>>>>> <hernan.mora...@gmail.com> wrote:
>>>>>>>> 
>>>>>>>> Hi Laurent
>>>>>>>> 
>>>>>>>> I've read there is a couple of system calll monitors in MacOS,
>>>>>>>> ktrace
>>>>>>>> and dtrace (http://en.wikipedia.org/wiki/Ktrace ,
>>>>>>>> http://en.wikipedia.org/wiki/DTrace) so you may attach to the VM
>>>>>>>> and
>>>>>>>> see what's missing?
>>>>>>>> Cheers,
>>>>>>>> 
>>>>>>>> Hernán
>>>>>>>> 
>>>>>>>> 2010/12/20 laurent laffont <laurent.laff...@gmail.com>:
>>>>>>>>> Thanks Hernan.
>>>>>>>>> It still doesn't work. I've also tried to play with LD_LOAD_PATH
>>>>>>>>> /
>>>>>>>>> LD_LIBRARY_PATH no success.... I want to make it work so I need
>>>>>>>>> to
>>>>>>>>> learn
>>>>>>>>> :)
>>>>>>>>> 
>>>>>>>>> For the mangled function names, on Linux and OSX there's nm.
>>>>>>>>> Here's what I get:
>>>>>>>>> $ nm -g libyaz.3.dylib | grep ZOOM_connection_create
>>>>>>>>> 0000000000046a30 T _ZOOM_connection_create
>>>>>>>>> Cheers,
>>>>>>>>> Laurent
>>>>>>>>> 
>>>>>>>>> On Sun, Dec 19, 2010 at 6:23 PM, Hernán Morales Durand
>>>>>>>>> <hernan.mora...@gmail.com> wrote:
>>>>>>>>>> 
>>>>>>>>>> Hi Laurent,
>>>>>>>>>> 
>>>>>>>>>> Thanks for reporting. The correct #moduleName for MacOS was
>>>>>>>>>> missing,
>>>>>>>>>> I've uploaded a new version answering 'libyaz.3.dylib' which I
>>>>>>>>>> guess
>>>>>>>>>> is the corresponding for 'yaz3.dll' (according to
>>>>>>>>>> http://en.wikipedia.org/wiki/Dynamic_library#Naming ).
>>>>>>>>>> 
>>>>>>>>>> I haven't access to a MacOS, but in Windows I've had to find the
>>>>>>>>>> mangled function names (i.e. _zoom_connection_cre...@4) so FFI
>>>>>>>>>> can
>>>>>>>>>> find the function addresses and you don't get the classic
>>>>>>>>>> "Error:
>>>>>>>>>> Unable to find function address". I don't know if it's related
>>>>>>>>>> since
>>>>>>>>>> talks about C++, but you may want to check
>>>>>>>>>> http://wiki.squeak.org/squeak/3735
>>>>>>>>>> 
>>>>>>>>>> The tool I've used to find the mangled function names in Windows
>>>>>>>>>> is
>>>>>>>>>> the Steve Miller's Dependency Walker
>>>>>>>>>> http://www.dependencywalker.com/
>>>>>>>>>> 
>>>>>>>>>> 2010/12/19 laurent laffont <laurent.laff...@gmail.com>:
>>>>>>>>>>> Hi,
>>>>>>>>>>> 
>>>>>>>>>>> I want to use http://www.squeaksource.com/Z3950
>>>>>>>>>>> Following install instructions, I've dowloaded yaz sources
>>>>>>>>>>> (I've
>>>>>>>>>>> tried
>>>>>>>>>>> 4.1.2
>>>>>>>>>>> and 3.0.52) as it seems there's no binary for OSX, ./configure
>>>>>>>>>>> && make
>>>>>>>>>>> &&
>>>>>>>>>>> make install.
>>>>>>>>>>> Then using latest Seaside One Click image I've copied
>>>>>>>>>>> /usr/local/lib/*yaz*
>>>>>>>>>>>  in Seaside.app/Contents/MacOS
>>>>>>>>>>> $ ls ~/Downloads/Seaside.app/Contents/MacOS/
>>>>>>>>>>> Squeak VM Opt         libyaz.a              libyaz.la
>>>>>>>>>>> libyaz_icu.a          libyaz_icu.la         libyaz_server.a
>>>>>>>>>>> libyaz_server.la libyaz.3.dylib        libyaz.dylib
>>>>>>>>>>>  libyaz_icu.3.dylib    libyaz_icu.dylib
>>>>>>>>>>>  libyaz_server.3.dylib
>>>>>>>>>>> libyaz_server.dylib
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> But then I have a External Module Not Found on
>>>>>>>>>>> YAZPQFFFILibrary>>createParser
>>>>>>>>>>> " YAZPQDFFILibrary default createParser "
>>>>>>>>>>> <cdecl: YAZPQFParser 'yaz_pqf_create' (void) module: 'yaz3'>
>>>>>>>>>>> ^ self externalCallFailed
>>>>>>>>>>> 
>>>>>>>>>>> Any hint ?
>>>>>>>>>>> Cheers,
>>>>>>>>>>> Laurent Laffont -- FFI newbie
>>>>>>>>>>> 
>>>>>>>>>>> Pharo Smalltalk Screencasts: http://www.pharocasts.com/
>>>>>>>>>>> Blog: http://magaloma.blogspot.com/
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> --
>>>>>>>>>> Hernán Morales
>>>>>>>>>> Information Technology Manager,
>>>>>>>>>> Institute of Veterinary Genetics.
>>>>>>>>>> National Scientific and Technical Research Council (CONICET).
>>>>>>>>>> La Plata (1900), Buenos Aires, Argentina.
>>>>>>>>>> Telephone: +54 (0221) 421-1799.
>>>>>>>>>> Internal: 422
>>>>>>>>>> Fax: 425-7980 or 421-1799.
>>>>>>>>> 
> 


Reply via email to