Re: [Pharo-dev] Running coverage breaks the VM
Ahh, that's why the code in CoInterpreter I was looking didn't match the C code :D. Was looking at the wrong place, hehe. Igor, why do you say that this method should be reached only with vanilla compiled methods? From the comment I understand For interpreter performance and to ease the objectAsMethod implementation eagerly evaluate the primtiive, i.e. if the method is cogged and has a primitive /do not/ evaluate the machine code primitive, just evaluate primitiveFunctionPointer directly. And in #addNewMethodToCache: there is as a first statement: [...] (objectMemory isOopCompiledMethod: newMethod) ifTrue: [primitiveIndex := self primitiveIndexOf: newMethod. primitiveFunctionPointer := self functionPointerFor: primitiveIndex inClass: class] ifFalse: [*primitiveFunctionPointer := #primitiveInvokeObjectAsMethod*]. [...] So I'd say that both objects as methods and primitives are kind of handled in the same way after? On Fri, May 31, 2013 at 2:27 AM, Igor Stasenko siguc...@gmail.com wrote: On 30 May 2013 20:06, Guillermo Polito guillermopol...@gmail.com wrote: Ok, I was playing with flushing caches and stuff... Its still a bit obsure to me why the example in the workspace works and the code coverage doesnot. However, I managed to hack the VM to make it work :). It looks like the VM is treating the objects as methods, as cog methods. So I added the following validation in the commonSend: methodHeader2 = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex ShiftForWord)); if (isCogMethodReference(methodHeader2) isCompiledMethodHeader(methodHeader2)) { /* begin externalizeIPandSP */ assertusqInt)localIP)) != (ceReturnToInterpreterPC())); GIV(instructionPointer) = oopForPointer(localIP); GIV(stackPointer) = localSP; GIV(framePointer) = localFP; executeCoggedNewMethodmethodHeader(1, methodHeader2); } And it works :). I cc Eliot, so maybe he has an idea... I touched this code. Original: CoInterpreterinternalExecuteNewMethod inline: true For interpreter performance and to ease the objectAsMethod implementation eagerly evaluate the primtiive, i.e. if the method is cogged and has a primitive /do not/ evaluate the machine code primitive, just evaluate primitiveFunctionPointer directly. primitiveFunctionPointer ~= 0 ifTrue: [| succeeded | self isPrimitiveFunctionPointerAnIndex ifTrue: [^self internalQuickPrimitiveResponse]. slowPrimitiveResponse may of course context-switch. If so we must reenter the new process appropriately, returning only if we've found an interpreter frame. self externalizeIPandSP. succeeded := self slowPrimitiveResponse. instructionPointer = cogit ceReturnToInterpreterPC ifTrue: [instructionPointer := self iframeSavedIP: framePointer]. self internalizeIPandSP. succeeded ifTrue: [self return: self popStack toExecutive: true. self browserPluginReturnIfNeeded. ^nil]]. if not primitive, or primitive failed, activate the method (self methodHasCogMethod: newMethod) ifTrue: [self iframeSavedIP: localFP put: localIP asInteger. instructionPointer := cogit ceReturnToInterpreterPC. self externalizeFPandSP. self activateCoggedNewMethod: true. self internalizeIPandSP] ifFalse: [self internalActivateNewMethod] Now in subclass (NBCoInterpreter) i made this: internalExecuteNewMethod inline: true For interpreter performance and to ease the objectAsMethod implementation eagerly evaluate the primtiive, i.e. if the method is cogged and has a primitive /do not/ evaluate the machine code primitive, just evaluate primitiveFunctionPointer directly. | methodHeader | methodHeader := self rawHeaderOf: newMethod. (self isCogMethodReference: methodHeader) ifTrue: [ self externalizeIPandSP. self executeCoggedNewMethod: true methodHeader: methodHeader. we never reach here ]. primitiveFunctionPointer ~= 0 ifTrue: [| succeeded | self isPrimitiveFunctionPointerAnIndex ifTrue: [^self internalQuickPrimitiveResponse]. slowPrimitiveResponse may of course context-switch. If so we must reenter the new process appropriately, returning only if we've found an interpreter frame. self externalizeIPandSP. succeeded :=
Re: [Pharo-dev] Running coverage breaks the VM
I'll make a summary from what I understand... Maybe we should move this discussion to the VM list, but I'm not sure. - Igor made changes to support the primitive 220 - those changes may try to activate a non-method object - I added a check to tell if it is a compiled method or not to the new code, so if it's not it flows through the old method handling (which uses the primitiveFunctionPointer I assume right from the CoInterpreter implementation) This, I see should be taken into account into #internalExecuteNewMethod and #executeNewMethod, which are preeety similar and both have the same change :). Maybe I'm making nonsense again, It's difficult to say to me. I just want to help fixing this. Tx!!! Guille On Fri, May 31, 2013 at 9:28 AM, Guillermo Polito guillermopol...@gmail.com wrote: Actually, from CoInterpreter: addNewMethodToCache: class Override to refuse to cache other than compiled methods. This protects open PICs against having to test for compiled methods. (objectMemory isOopCompiledMethod: newMethod) ifFalse: [primitiveFunctionPointer := #primitiveInvokeObjectAsMethod. ^self]. super addNewMethodToCache: class On Fri, May 31, 2013 at 9:20 AM, Guillermo Polito guillermopol...@gmail.com wrote: Ahh, that's why the code in CoInterpreter I was looking didn't match the C code :D. Was looking at the wrong place, hehe. Igor, why do you say that this method should be reached only with vanilla compiled methods? From the comment I understand For interpreter performance and to ease the objectAsMethod implementation eagerly evaluate the primtiive, i.e. if the method is cogged and has a primitive /do not/ evaluate the machine code primitive, just evaluate primitiveFunctionPointer directly. And in #addNewMethodToCache: there is as a first statement: [...] (objectMemory isOopCompiledMethod: newMethod) ifTrue: [primitiveIndex := self primitiveIndexOf: newMethod. primitiveFunctionPointer := self functionPointerFor: primitiveIndex inClass: class] ifFalse: [*primitiveFunctionPointer := #primitiveInvokeObjectAsMethod*]. [...] So I'd say that both objects as methods and primitives are kind of handled in the same way after? On Fri, May 31, 2013 at 2:27 AM, Igor Stasenko siguc...@gmail.comwrote: On 30 May 2013 20:06, Guillermo Polito guillermopol...@gmail.com wrote: Ok, I was playing with flushing caches and stuff... Its still a bit obsure to me why the example in the workspace works and the code coverage doesnot. However, I managed to hack the VM to make it work :). It looks like the VM is treating the objects as methods, as cog methods. So I added the following validation in the commonSend: methodHeader2 = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex ShiftForWord)); if (isCogMethodReference(methodHeader2) isCompiledMethodHeader(methodHeader2)) { /* begin externalizeIPandSP */ assertusqInt)localIP)) != (ceReturnToInterpreterPC())); GIV(instructionPointer) = oopForPointer(localIP); GIV(stackPointer) = localSP; GIV(framePointer) = localFP; executeCoggedNewMethodmethodHeader(1, methodHeader2); } And it works :). I cc Eliot, so maybe he has an idea... I touched this code. Original: CoInterpreterinternalExecuteNewMethod inline: true For interpreter performance and to ease the objectAsMethod implementation eagerly evaluate the primtiive, i.e. if the method is cogged and has a primitive /do not/ evaluate the machine code primitive, just evaluate primitiveFunctionPointer directly. primitiveFunctionPointer ~= 0 ifTrue: [| succeeded | self isPrimitiveFunctionPointerAnIndex ifTrue: [^self internalQuickPrimitiveResponse]. slowPrimitiveResponse may of course context-switch. If so we must reenter the new process appropriately, returning only if we've found an interpreter frame. self externalizeIPandSP. succeeded := self slowPrimitiveResponse. instructionPointer = cogit ceReturnToInterpreterPC ifTrue: [instructionPointer := self iframeSavedIP: framePointer]. self internalizeIPandSP. succeeded ifTrue: [self return: self popStack toExecutive: true. self browserPluginReturnIfNeeded. ^nil]]. if not primitive, or primitive failed, activate the method (self methodHasCogMethod: newMethod) ifTrue: [self iframeSavedIP: localFP put: localIP asInteger. instructionPointer := cogit ceReturnToInterpreterPC. self externalizeFPandSP. self activateCoggedNewMethod: true.
Re: [Pharo-dev] Running coverage breaks the VM
It is fixed in latest vm (which you can get from the zeroconf script http://get.pharo.org/vmLatest) :). Guille On Fri, May 31, 2013 at 1:25 PM, Igor Stasenko siguc...@gmail.com wrote: On 31 May 2013 09:20, Guillermo Polito guillermopol...@gmail.com wrote: Ahh, that's why the code in CoInterpreter I was looking didn't match the C code :D. Was looking at the wrong place, hehe. Igor, why do you say that this method should be reached only with vanilla compiled methods? From the comment I understand For interpreter performance and to ease the objectAsMethod implementation eagerly evaluate the primtiive, i.e. if the method is cogged and has a primitive /do not/ evaluate the machine code primitive, just evaluate primitiveFunctionPointer directly. Yes, my bad.. It is hard to see that in code: the logic to handle objects-as-method. So, yes, please fix executNewMethod and internalExecuteNewMethod with this additional check. And in #addNewMethodToCache: there is as a first statement: [...] (objectMemory isOopCompiledMethod: newMethod) ifTrue: [primitiveIndex := self primitiveIndexOf: newMethod. primitiveFunctionPointer := self functionPointerFor: primitiveIndex inClass: class] ifFalse: [primitiveFunctionPointer := #primitiveInvokeObjectAsMethod]. [...] So I'd say that both objects as methods and primitives are kind of handled in the same way after? On Fri, May 31, 2013 at 2:27 AM, Igor Stasenko siguc...@gmail.com wrote: On 30 May 2013 20:06, Guillermo Polito guillermopol...@gmail.com wrote: Ok, I was playing with flushing caches and stuff... Its still a bit obsure to me why the example in the workspace works and the code coverage doesnot. However, I managed to hack the VM to make it work :). It looks like the VM is treating the objects as methods, as cog methods. So I added the following validation in the commonSend: methodHeader2 = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex ShiftForWord)); if (isCogMethodReference(methodHeader2) isCompiledMethodHeader(methodHeader2)) { /* begin externalizeIPandSP */ assertusqInt)localIP)) != (ceReturnToInterpreterPC())); GIV(instructionPointer) = oopForPointer(localIP); GIV(stackPointer) = localSP; GIV(framePointer) = localFP; executeCoggedNewMethodmethodHeader(1, methodHeader2); } And it works :). I cc Eliot, so maybe he has an idea... I touched this code. Original: CoInterpreterinternalExecuteNewMethod inline: true For interpreter performance and to ease the objectAsMethod implementation eagerly evaluate the primtiive, i.e. if the method is cogged and has a primitive /do not/ evaluate the machine code primitive, just evaluate primitiveFunctionPointer directly. primitiveFunctionPointer ~= 0 ifTrue: [| succeeded | self isPrimitiveFunctionPointerAnIndex ifTrue: [^self internalQuickPrimitiveResponse]. slowPrimitiveResponse may of course context-switch. If so we must reenter the new process appropriately, returning only if we've found an interpreter frame. self externalizeIPandSP. succeeded := self slowPrimitiveResponse. instructionPointer = cogit ceReturnToInterpreterPC ifTrue: [instructionPointer := self iframeSavedIP: framePointer]. self internalizeIPandSP. succeeded ifTrue: [self return: self popStack toExecutive: true. self browserPluginReturnIfNeeded. ^nil]]. if not primitive, or primitive failed, activate the method (self methodHasCogMethod: newMethod) ifTrue: [self iframeSavedIP: localFP put: localIP asInteger. instructionPointer := cogit ceReturnToInterpreterPC. self externalizeFPandSP. self activateCoggedNewMethod: true. self internalizeIPandSP] ifFalse: [self internalActivateNewMethod] Now in subclass (NBCoInterpreter) i made this: internalExecuteNewMethod inline: true For interpreter performance and to ease the objectAsMethod implementation eagerly evaluate the primtiive, i.e. if the method is cogged and has a primitive /do not/ evaluate the machine code primitive, just evaluate primitiveFunctionPointer directly. | methodHeader | methodHeader := self rawHeaderOf: newMethod. (self isCogMethodReference: methodHeader) ifTrue: [ self externalizeIPandSP.
Re: [Pharo-dev] Running coverage breaks the VM
I'll have to give this a try once I've upgraded my machine. I only have GLIBC_2.11 and this requires GLIBC_2.15. Excellent news though! frank On 31 May 2013 14:17, Guillermo Polito guillermopol...@gmail.com wrote: It is fixed in latest vm (which you can get from the zeroconf script http://get.pharo.org/vmLatest) :). Guille On Fri, May 31, 2013 at 1:25 PM, Igor Stasenko siguc...@gmail.com wrote: On 31 May 2013 09:20, Guillermo Polito guillermopol...@gmail.com wrote: Ahh, that's why the code in CoInterpreter I was looking didn't match the C code :D. Was looking at the wrong place, hehe. Igor, why do you say that this method should be reached only with vanilla compiled methods? From the comment I understand For interpreter performance and to ease the objectAsMethod implementation eagerly evaluate the primtiive, i.e. if the method is cogged and has a primitive /do not/ evaluate the machine code primitive, just evaluate primitiveFunctionPointer directly. Yes, my bad.. It is hard to see that in code: the logic to handle objects-as-method. So, yes, please fix executNewMethod and internalExecuteNewMethod with this additional check. And in #addNewMethodToCache: there is as a first statement: [...] (objectMemory isOopCompiledMethod: newMethod) ifTrue: [primitiveIndex := self primitiveIndexOf: newMethod. primitiveFunctionPointer := self functionPointerFor: primitiveIndex inClass: class] ifFalse: [primitiveFunctionPointer := #primitiveInvokeObjectAsMethod]. [...] So I'd say that both objects as methods and primitives are kind of handled in the same way after? On Fri, May 31, 2013 at 2:27 AM, Igor Stasenko siguc...@gmail.com wrote: On 30 May 2013 20:06, Guillermo Polito guillermopol...@gmail.com wrote: Ok, I was playing with flushing caches and stuff... Its still a bit obsure to me why the example in the workspace works and the code coverage doesnot. However, I managed to hack the VM to make it work :). It looks like the VM is treating the objects as methods, as cog methods. So I added the following validation in the commonSend: methodHeader2 = longAt((GIV(newMethod) + BaseHeaderSize) + (HeaderIndex ShiftForWord)); if (isCogMethodReference(methodHeader2) isCompiledMethodHeader(methodHeader2)) { /* begin externalizeIPandSP */ assertusqInt)localIP)) != (ceReturnToInterpreterPC())); GIV(instructionPointer) = oopForPointer(localIP); GIV(stackPointer) = localSP; GIV(framePointer) = localFP; executeCoggedNewMethodmethodHeader(1, methodHeader2); } And it works :). I cc Eliot, so maybe he has an idea... I touched this code. Original: CoInterpreterinternalExecuteNewMethod inline: true For interpreter performance and to ease the objectAsMethod implementation eagerly evaluate the primtiive, i.e. if the method is cogged and has a primitive /do not/ evaluate the machine code primitive, just evaluate primitiveFunctionPointer directly. primitiveFunctionPointer ~= 0 ifTrue: [| succeeded | self isPrimitiveFunctionPointerAnIndex ifTrue: [^self internalQuickPrimitiveResponse]. slowPrimitiveResponse may of course context-switch. If so we must reenter the new process appropriately, returning only if we've found an interpreter frame. self externalizeIPandSP. succeeded := self slowPrimitiveResponse. instructionPointer = cogit ceReturnToInterpreterPC ifTrue: [instructionPointer := self iframeSavedIP: framePointer]. self internalizeIPandSP. succeeded ifTrue: [self return: self popStack toExecutive: true. self browserPluginReturnIfNeeded. ^nil]]. if not primitive, or primitive failed, activate the method (self methodHasCogMethod: newMethod) ifTrue: [self iframeSavedIP: localFP put: localIP asInteger. instructionPointer := cogit ceReturnToInterpreterPC. self externalizeFPandSP. self activateCoggedNewMethod: true. self internalizeIPandSP] ifFalse: [self internalActivateNewMethod] Now in subclass (NBCoInterpreter) i made this: internalExecuteNewMethod inline: true For interpreter performance and to ease the objectAsMethod implementation eagerly evaluate the primtiive, i.e. if the method is cogged and has a primitive /do not/ evaluate the machine code primitive, just evaluate
Re: [Pharo-dev] Running coverage breaks the VM
Hi Frank, I'm not able to reproduce this. I'm running Pharo.image and selecting FileSystemHandleTest FileHandleTest FileSystemResolverTest FileSystemTest DiskFileSystemTest (Disc please!!) MemoryFileSystemTest FileSystemTreeTest MCFileInTest and running both the 2714 Mac VM from my site and a 2723 VM (my latest, very close to 2714). No crash. What am I doing wrong? On Sun, May 26, 2013 at 9:48 AM, Frank Shearar frank.shea...@gmail.comwrote: Hi, I wanted to see FileSystem's coverage, so I * downloaded 3.0 via curl http://get.pharo.org/30+vm | bash, * fired up the image, * opened the TestRunner, * highlighted the three FileSystem packages, * select alled, * pressed Run Coverage and the VM crashed with a segfault. I tried with a few other packages, and every time I tried to run coverage the VM died with the same message: Segmentation fault Sun May 26 15:46:45 2013 pharo VM version: 3.9-7 #1 Wed Mar 13 18:22:44 CET 2013 gcc 4.4.3 Built from: NBCoInterpreter NativeBoost-CogPlugin-EstebanLorenzano.18 uuid: a53445f9-c0c0-4015-97a3-be7db8d9ed6b Mar 13 2013 With: NBCogit NativeBoost-CogPlugin-EstebanLorenzano.18 uuid: a53445f9-c0c0-4015-97a3-be7db8d9ed6b Mar 13 2013 Revision: git://gitorious.org/cogvm/blessed.git Commit: 412abef33cbed05cf1d75329e451d71c0c6aa5a7 Date: 2013-03-13 17:48:50 +0100 By: Esteban Lorenzano esteba...@gmail.com Jenkins build #14535 Build host: Linux linux-ubuntu-10 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux plugin path: /home/frank/Downloads/pharo-3.0/pharo-vm/ [default: /home/frank/Downloads/pharo-3.0/pharo-vm/] C stack backtrace: pharo-vm/pharo[0x80a0c0c] pharo-vm/pharo[0x80a0f28] [0x408410] [0x77744f1e] [0x777447c8] [0x7819010f] [0x777454f9] [0x777447c8] [0x7818e112] [0x777fc687] [0x777456ea] [0x77744668] Smalltalk stack dump: 0xbfc98e4c I [] in InteractiveResolverTest(TestCase)runCase 0x78f0bfc8: a(n) InteractiveResolverTest 0xbfc98e6c M BlockClosureensure: 0x78fa4c34: a(n) BlockClosure 0xbfc98e90 I InteractiveResolverTest(TestCase)runCase 0x78f0bfc8: a(n) InteractiveResolverTest 0xbfc98eb4 I [] in TestResultrunCase: 0x78f0bdcc: a(n) TestResult 0xbfc98ed0 M BlockClosureon:do: 0x78fa4a30: a(n) BlockClosure 0xbfc98ef8 I TestResultrunCase: 0x78f0bdcc: a(n) TestResult 0xbfc98f1c I InteractiveResolverTest(TestCase)run: 0x78f0bfc8: a(n) InteractiveResolverTest 0xbfc98f3c M [] in TestSuiterun: 0x78f0bfb0: a(n) TestSuite 0xbfc98f5c M OrderedCollectiondo: 0x78f0bfdc: a(n) OrderedCollection 0xbfc9fdf0 I [] in TestSuiterun: 0x78f0bfb0: a(n) TestSuite 0xbfc9fe10 M BlockClosureensure: 0x78fa48e4: a(n) BlockClosure 0xbfc9fe34 I TestSuiterun: 0x78f0bfb0: a(n) TestSuite 0xbfc9fe58 I [] in TestRunnerrunSuite: 0x78e405bc: a(n) TestRunner 0xbfc9fe80 I BlockClosurecull:cull: 0x78f9c050: a(n) BlockClosure 0xbfc9feb0 I [] in TestRunnerexecuteSuite:as: 0x78e405bc: a(n) TestRunner 0xbfc9fed0 M BlockClosureensure: 0x78f9c420: a(n) BlockClosure 0xbfc9fef4 I TestRunnerexecuteSuite:as: 0x78e405bc: a(n) TestRunner 0xbfc9ff1c I TestRunnerrunSuite: 0x78e405bc: a(n) TestRunner 0xbfc9ff3c M [] in TestRunnercollectCoverageFor: 0x78e405bc: a(n) TestRunner 0xbfc9ff5c M BlockClosureensure: 0x78f9bfcc: a(n) BlockClosure 0xbfc97e54 M [] in TestRunnercollectCoverageFor: 0x78e405bc: a(n) TestRunner 0xbfc97e74 M BlockClosureensure: 0x78f0dd7c: a(n) BlockClosure 0xbfc97ea8 I BlockClosurevalueUnpreemptively 0x78f0dd7c: a(n) BlockClosure 0xbfc97ed4 I TestRunnercollectCoverageFor: 0x78e405bc: a(n) TestRunner 0xbfc97ef8 M TestRunnerrunCoverage 0x78e405bc: a(n) TestRunner 0xbfc97f18 I PluggableButtonMorphperformAction: 0x78e6c24c: a(n) PluggableButtonMorph 0xbfc97f38 M [] in PluggableButtonMorphmouseUp: 0x78e6c24c: a(n) PluggableButtonMorph 0xbfc97f5c M Array(SequenceableCollection)do: 0x78ed9f14: a(n) Array 0xbfc93e08 M PluggableButtonMorphmouseUp: 0x78e6c24c: a(n) PluggableButtonMorph 0xbfc93e28 M PluggableButtonMorph(Morph)handleMouseUp: 0x78e6c24c: a(n) PluggableButtonMorph 0xbfc93e44 M MouseButtonEventsentTo: 0x78ed9eec: a(n) MouseButtonEvent 0xbfc93e60 M PluggableButtonMorph(Morph)handleEvent: 0x78e6c24c: a(n) PluggableButtonMorph 0xbfc93e7c M PluggableButtonMorph(Morph)handleFocusEvent: 0x78e6c24c: a(n) PluggableButtonMorph 0xbfc93ea4 M [] in HandMorphsendFocusEvent:to:clear: 0x77b1c270: a(n) HandMorph 0xbfc93ec0 M [] in PasteUpMorphbecomeActiveDuring: 0x7796b824: a(n) PasteUpMorph 0xbfc93edc M BlockClosureon:do: 0x78ed9e5c: a(n) BlockClosure 0xbfc93f08 M PasteUpMorphbecomeActiveDuring: 0x7796b824: a(n) PasteUpMorph 0xbfc93f2c M HandMorphsendFocusEvent:to:clear: 0x77b1c270: a(n) HandMorph 0xbfc93f54 M HandMorphsendEvent:focus:clear: 0x77b1c270: a(n) HandMorph 0xbfc92e44 M HandMorphsendMouseEvent: 0x77b1c270: a(n) HandMorph 0xbfc92e68 M HandMorphhandleEvent: 0x77b1c270: a(n) HandMorph 0xbfc92e94 M
Re: [Pharo-dev] Running coverage breaks the VM
On 30 May 2013 22:59, Eliot Miranda eliot.mira...@gmail.com wrote: Hi Frank, I'm not able to reproduce this. I'm running Pharo.image and selecting FileSystemHandleTest FileHandleTest FileSystemResolverTest FileSystemTest DiskFileSystemTest (Disc please!!) MemoryFileSystemTest FileSystemTreeTest MCFileInTest and running both the 2714 Mac VM from my site and a 2723 VM (my latest, very close to 2714). No crash. What am I doing wrong? Hi Eliot, I'm running a Pharo 3 image off a Pharo 3 VM. I _did_ neglect to mention the OS - it's Ubuntu Lucid Lynx on a 32 bit machine. frank On Sun, May 26, 2013 at 9:48 AM, Frank Shearar frank.shea...@gmail.com wrote: Hi, I wanted to see FileSystem's coverage, so I * downloaded 3.0 via curl http://get.pharo.org/30+vm | bash, * fired up the image, * opened the TestRunner, * highlighted the three FileSystem packages, * select alled, * pressed Run Coverage and the VM crashed with a segfault. I tried with a few other packages, and every time I tried to run coverage the VM died with the same message: Segmentation fault Sun May 26 15:46:45 2013 pharo VM version: 3.9-7 #1 Wed Mar 13 18:22:44 CET 2013 gcc 4.4.3 Built from: NBCoInterpreter NativeBoost-CogPlugin-EstebanLorenzano.18 uuid: a53445f9-c0c0-4015-97a3-be7db8d9ed6b Mar 13 2013 With: NBCogit NativeBoost-CogPlugin-EstebanLorenzano.18 uuid: a53445f9-c0c0-4015-97a3-be7db8d9ed6b Mar 13 2013 Revision: git://gitorious.org/cogvm/blessed.git Commit: 412abef33cbed05cf1d75329e451d71c0c6aa5a7 Date: 2013-03-13 17:48:50 +0100 By: Esteban Lorenzano esteba...@gmail.com Jenkins build #14535 Build host: Linux linux-ubuntu-10 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux plugin path: /home/frank/Downloads/pharo-3.0/pharo-vm/ [default: /home/frank/Downloads/pharo-3.0/pharo-vm/] C stack backtrace: pharo-vm/pharo[0x80a0c0c] pharo-vm/pharo[0x80a0f28] [0x408410] [0x77744f1e] [0x777447c8] [0x7819010f] [0x777454f9] [0x777447c8] [0x7818e112] [0x777fc687] [0x777456ea] [0x77744668] Smalltalk stack dump: 0xbfc98e4c I [] in InteractiveResolverTest(TestCase)runCase 0x78f0bfc8: a(n) InteractiveResolverTest 0xbfc98e6c M BlockClosureensure: 0x78fa4c34: a(n) BlockClosure 0xbfc98e90 I InteractiveResolverTest(TestCase)runCase 0x78f0bfc8: a(n) InteractiveResolverTest 0xbfc98eb4 I [] in TestResultrunCase: 0x78f0bdcc: a(n) TestResult 0xbfc98ed0 M BlockClosureon:do: 0x78fa4a30: a(n) BlockClosure 0xbfc98ef8 I TestResultrunCase: 0x78f0bdcc: a(n) TestResult 0xbfc98f1c I InteractiveResolverTest(TestCase)run: 0x78f0bfc8: a(n) InteractiveResolverTest 0xbfc98f3c M [] in TestSuiterun: 0x78f0bfb0: a(n) TestSuite 0xbfc98f5c M OrderedCollectiondo: 0x78f0bfdc: a(n) OrderedCollection 0xbfc9fdf0 I [] in TestSuiterun: 0x78f0bfb0: a(n) TestSuite 0xbfc9fe10 M BlockClosureensure: 0x78fa48e4: a(n) BlockClosure 0xbfc9fe34 I TestSuiterun: 0x78f0bfb0: a(n) TestSuite 0xbfc9fe58 I [] in TestRunnerrunSuite: 0x78e405bc: a(n) TestRunner 0xbfc9fe80 I BlockClosurecull:cull: 0x78f9c050: a(n) BlockClosure 0xbfc9feb0 I [] in TestRunnerexecuteSuite:as: 0x78e405bc: a(n) TestRunner 0xbfc9fed0 M BlockClosureensure: 0x78f9c420: a(n) BlockClosure 0xbfc9fef4 I TestRunnerexecuteSuite:as: 0x78e405bc: a(n) TestRunner 0xbfc9ff1c I TestRunnerrunSuite: 0x78e405bc: a(n) TestRunner 0xbfc9ff3c M [] in TestRunnercollectCoverageFor: 0x78e405bc: a(n) TestRunner 0xbfc9ff5c M BlockClosureensure: 0x78f9bfcc: a(n) BlockClosure 0xbfc97e54 M [] in TestRunnercollectCoverageFor: 0x78e405bc: a(n) TestRunner 0xbfc97e74 M BlockClosureensure: 0x78f0dd7c: a(n) BlockClosure 0xbfc97ea8 I BlockClosurevalueUnpreemptively 0x78f0dd7c: a(n) BlockClosure 0xbfc97ed4 I TestRunnercollectCoverageFor: 0x78e405bc: a(n) TestRunner 0xbfc97ef8 M TestRunnerrunCoverage 0x78e405bc: a(n) TestRunner 0xbfc97f18 I PluggableButtonMorphperformAction: 0x78e6c24c: a(n) PluggableButtonMorph 0xbfc97f38 M [] in PluggableButtonMorphmouseUp: 0x78e6c24c: a(n) PluggableButtonMorph 0xbfc97f5c M Array(SequenceableCollection)do: 0x78ed9f14: a(n) Array 0xbfc93e08 M PluggableButtonMorphmouseUp: 0x78e6c24c: a(n) PluggableButtonMorph 0xbfc93e28 M PluggableButtonMorph(Morph)handleMouseUp: 0x78e6c24c: a(n) PluggableButtonMorph 0xbfc93e44 M MouseButtonEventsentTo: 0x78ed9eec: a(n) MouseButtonEvent 0xbfc93e60 M PluggableButtonMorph(Morph)handleEvent: 0x78e6c24c: a(n) PluggableButtonMorph 0xbfc93e7c M PluggableButtonMorph(Morph)handleFocusEvent: 0x78e6c24c: a(n) PluggableButtonMorph 0xbfc93ea4 M [] in HandMorphsendFocusEvent:to:clear: 0x77b1c270: a(n) HandMorph 0xbfc93ec0 M [] in PasteUpMorphbecomeActiveDuring: 0x7796b824: a(n) PasteUpMorph 0xbfc93edc M BlockClosureon:do: 0x78ed9e5c: a(n) BlockClosure 0xbfc93f08 M PasteUpMorphbecomeActiveDuring: 0x7796b824: a(n) PasteUpMorph 0xbfc93f2c M HandMorphsendFocusEvent:to:clear: 0x77b1c270: a(n)