Re: [Pharo-dev] Running coverage breaks the VM

2013-05-31 Thread Guillermo Polito
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

2013-05-31 Thread Guillermo Polito
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

2013-05-31 Thread Guillermo Polito
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

2013-05-31 Thread Frank Shearar
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

2013-05-30 Thread Eliot Miranda
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

2013-05-30 Thread Frank Shearar
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)