OK, I made it work by compiling a VM with #checkForLeaks answering 1. I see plenty of leaks but they are all of the pattern "cache tag leak in CM". See a piece of the gdb output:
----------- cache tag leak in CM 0x1f4a8b58 @ 0x1f4a8bfa cache tag leak in CM 0x1f4a9800 @ 0x1f4a98a9 cache tag leak in CM 0x1f4ad8a0 @ 0x1f4ad974 cache tag leak in CM 0x1f4ae380 @ 0x1f4ae3ea cache tag leak in CM 0x1f4ae510 @ 0x1f4ae577 cache tag leak in CM 0x1f4af708 @ 0x1f4af94e
checkCodeIntegrity(0) 11637
fwdBlockValid(fwdBlock2) 40450
Program received signal SIGSEGV, Segmentation fault. 0x000ab672 in updatePointersInRangeFromto (memStart=525336576, memEnd=555384320) at /Users/mariano/Pharo/git/pharo-vm/src/vm/gcc3x-cointerp.c:40451 40451 targetObj = longAt(fwdBlock2); -------------
There is none other type of leak displayed.
Any idea what does this mean?
On Mon, Nov 23, 2015 at 11:28 PM, Mariano Martinez Peck < marianopeck@gmail.com> wrote:
On Mon, Nov 23, 2015 at 11:15 PM, Mariano Martinez Peck < marianopeck@gmail.com> wrote:
On Mon, Nov 23, 2015 at 11:13 PM, Mariano Martinez Peck < marianopeck@gmail.com> wrote:
On Mon, Nov 23, 2015 at 9:57 PM, Andrei Chis <chisvasileandrei@gmail.com
wrote:
Hi Eliot,
Is an assert vm the same as a vm compiled with debugging support? Also can you point me to any documentation about the leak checker.
I was about to ask the same. I have the VM compiled with debug support and gdb working. I can reproduce the crash. After checking a bit in the VM about what Eliot says, I found out methods like #clearLeakMapAndMapAccessibleObjects and #checkCodeIntegrity:.
However, I tried, for example (clearLeakMapAndMapAccessibleObjects to later call checkCodeIntegrity(0) ) from gdb:
*fwdBlockValid(fwdBlock2) 40450*
*Program received signal SIGSEGV, Segmentation fault.* *0x000ab6d2 in ?? ()*
*(gdb) call clearLeakMapAndMapAccessibleObjects()*
And I get CPU at 100% never ending.
I forgot to said..I also compiled the VM with a hardcoded #checkForLeaks that answers 1 (to force the checker) but that did not work either.
Cheers,
Andrei
On Nov 24, 2015 1:45 AM, "Eliot Miranda" eliot.miranda@gmail.com wrote:
Hi Andrei,
On Mon, Nov 23, 2015 at 7:59 AM, Andrei Chis <
chisvasileandrei@gmail.com> wrote:
Hi,
With both the latest and stable vm I have an use case in which the
vm crashed in SmalltalkImage>>garbageCollect.
To set up an image that exhibits the failure , execute this with the
latest pharo version:
/pharo Pharo.image eval --save "{ { 'ConfigurationOfRubric'.
'Pharo'. 'Rubric' }. { 'ConfigurationOfGlamourCore'. 'Moose'. 'Glamour' }. { 'ConfigurationOfGTInspectorCore'. 'Moose'. 'GToolkit' }. { 'ConfigurationOfGTPlaygroundCore'. 'Moose'. 'GToolkit' }. { 'ConfigurationOfGTEventRecorder'. 'Moose'. 'GToolkit' }. { 'ConfigurationOfGTSpotter'. 'Moose'. 'GToolkit' }. } do: [ :spec | Gofer new smalltalkhubUser: spec second project: spec third; package: spec first; load ]."
./pharo Pharo.image config
http://www.smalltalkhub.com/mc/Pharo/Pharo50Inbox/main ConfigurationOfGToolkitCore --install=3.2
Then attempting to run the following code triggers the failure:
./pharo Pharo.image eval --save "TestRunner open model
packageSearchUpdate: 'gt-tests-inspector'; classSearchUpdate: 'GTInspectorExamplesTest'; runAll"
Based on the trace below the failure happens when the
test GTInspectorExamplesTest calls 'Smalltalk>>garbageCollect' in the setUp method.
That call can be removed, however, in other runs the failure happens
in other methods calling Smalltalk>>garbageCollect.
Is it possible that this is a bug with the image (some broken
object) or is it a vm bug?
The way to test this is to build an assert VM and then use the leak
checker. The leak checker will allow you to narrow down the cause. If the leak checker shows no corruption then its definitely a GC bug. If there leak checker does show corruption before GC then one still has to find out what caused the heap corruption, but you can use the leak checker to narrow the search.
HTH Eliot
Cheers,
Andrei
andrei$ ./pharo Pharo.image eval --save "{ {
'ConfigurationOfRubric'. 'Pharo'. 'Rubric' }. { 'ConfigurationOfGlamourCore'. 'Moose'. 'Glamour' }. { 'ConfigurationOfGTInspectorCore'. 'Moose'. 'GToolkit' }. { 'ConfigurationOfGTPlaygroundCore'. 'Moose'. 'GToolkit' }. { 'ConfigurationOfGTEventRecorder'. 'Moose'. 'GToolkit' }. { 'ConfigurationOfGTSpotter'. 'Moose'. 'GToolkit' }. } do: [ :spec | Gofer new smalltalkhubUser: spec second project: spec third; package: spec first; load ]."
andrei$ ./pharo Pharo.image config
http://www.smalltalkhub.com/mc/Pharo/Pharo50Inbox/main ConfigurationOfGToolkitCore --install=3.2
andrei$ ./pharo Pharo.image eval --save "TestRunner open model
packageSearchUpdate: 'gt-tests-inspector'; classSearchUpdate: 'GTInspectorExamplesTest'; runAll"
Segmentation fault Mon Nov 23 16:48:36 2015
28d077d8df494ce050ca42c97c892471e8b8740c Date: 2015-10-16 12:02:43 +0200 By: Esteban Lorenzano estebanlm@gmail.com Jenkins build #15016
C stack backtrace:
0 Pharo 0x0004cacf reportStackState
- 159
Smalltalk stack dump:
0xbffbf1a0 M SmalltalkImage>garbageCollect 0x1fd49e30: a(n)
SmalltalkImage
0xbffbf1c0 I GTInspectorExamplesTest>setUp 0x2126bc80: a(n)
GTInspectorExamplesTest
0x2126cb90 is not a context
Most recent primitives
@
basicNew
@
@
@
@
@
@
@
@
@
basicNew
basicNew
basicNew
@
@
@
@
shallowCopy
new
new:
new:
basicNew
basicNew
new:
basicNew
new:
replaceFrom:to:with:startingAt:
new:
basicNew
new:
replaceFrom:to:with:startingAt:
new:
basicNew
@
new:
at:put:
at:put:
perform:with:
perform:with:
perform:
@
@
basicNew
@
@
@
@
@
@
basicNew
@
new:
at:put:
at:put:
perform:with:
perform:with:
perform:
@
@
basicNew
@
@
@
@
@
@
new
@
@
@
@
@
basicNew
@
@
new:
at:put:
@
@
basicNew
@
@
@
@
new:
at:put:
at:put:
at:put:
at:put:
new:
@
at:put:
@
at:put:
@
at:put:
@
at:put:
@
@
@
@
@
@
basicNew
@
@
basicNew
@
@
basicNew
@
@
@
@
@
shallowCopy
shallowCopy
@
@
new:
at:put:
at:put:
at:put:
at:put:
new:
@
at:put:
@
at:put:
@
at:put:
@
at:put:
@
@
@
@
@
@
basicNew
@
@
basicNew
@
@
basicNew
@
@
@
@
@
basicNew
@
@
@
@
basicNew
@
@
basicNew
@
@
basicNew
@
@
@
@
@
basicNew
@
@
@
@
basicNew
@
@
perform:
basicNew
new:
basicNew
new:
basicNew
new:
shallowCopy
shallowCopy
primUTCMicrosecondsClock
//
basicNew
basicNew
new:
at:put:
at:put:
at:put:
at:put:
value
valueNoContextSwitch
basicNew
new:
basicNew
new:
new:
basicNew
new:
replaceFrom:to:with:startingAt:
primitiveGarbageCollect
**IncrementalGC**
**FullGC**
garbageCollectMost
**IncrementalGC**
basicNew
new:
someInstance
basicNew
new:
someInstance
basicNew
new:
someInstance
new:
basicNew
new:
replaceFrom:to:with:startingAt:
primitiveGarbageCollect
**IncrementalGC**
**FullGC**
garbageCollectMost
**IncrementalGC**
wait
shallowCopy
shallowCopy
signal
wait
shallowCopy
shallowCopy
at:put:
at:put:
at:put:
at:put:
at:put:
at:put:
signal
wait
shallowCopy
shallowCopy
at:put:
at:put:
signal
new:
basicNew
new:
replaceFrom:to:with:startingAt:
primitiveGarbageCollect
**IncrementalGC**
**FullGC**
(Segmentation fault)
./pharo: line 11: 5224 Abort trap: 6
"$DIR"/"pharo-vm/Pharo.app/Contents/MacOS/Pharo" --headless "$@"
-- _,,,^..^,,,_ best, Eliot
-- Mariano http://marianopeck.wordpress.com
-- Mariano http://marianopeck.wordpress.com
-- Mariano http://marianopeck.wordpress.com
On Tue, Nov 24, 2015 at 10:29 AM, Mariano Martinez Peck marianopeck@gmail.com wrote:
OK, I made it work by compiling a VM with #checkForLeaks answering 1. I see plenty of leaks but they are all of the pattern "cache tag leak in CM". See a piece of the gdb output:
cache tag leak in CM 0x1f4a8b58 @ 0x1f4a8bfa cache tag leak in CM 0x1f4a9800 @ 0x1f4a98a9 cache tag leak in CM 0x1f4ad8a0 @ 0x1f4ad974 cache tag leak in CM 0x1f4ae380 @ 0x1f4ae3ea cache tag leak in CM 0x1f4ae510 @ 0x1f4ae577 cache tag leak in CM 0x1f4af708 @ 0x1f4af94e
checkCodeIntegrity(0) 11637
fwdBlockValid(fwdBlock2) 40450
Program received signal SIGSEGV, Segmentation fault. 0x000ab672 in updatePointersInRangeFromto (memStart=525336576, memEnd=555384320) at /Users/mariano/Pharo/git/pharo-vm/src/vm/gcc3x-cointerp.c:40451 40451 targetObj = longAt(fwdBlock2);
There is none other type of leak displayed.
Any idea what does this mean?
On Mon, Nov 23, 2015 at 11:28 PM, Mariano Martinez Peck marianopeck@gmail.com wrote:
On Mon, Nov 23, 2015 at 11:15 PM, Mariano Martinez Peck marianopeck@gmail.com wrote:
On Mon, Nov 23, 2015 at 11:13 PM, Mariano Martinez Peck marianopeck@gmail.com wrote:
On Mon, Nov 23, 2015 at 9:57 PM, Andrei Chis chisvasileandrei@gmail.com wrote:
Hi Eliot,
Is an assert vm the same as a vm compiled with debugging support? Also can you point me to any documentation about the leak checker.
I was about to ask the same. I have the VM compiled with debug support and gdb working. I can reproduce the crash. After checking a bit in the VM about what Eliot says, I found out methods like #clearLeakMapAndMapAccessibleObjects and #checkCodeIntegrity:.
However, I tried, for example (clearLeakMapAndMapAccessibleObjects to later call checkCodeIntegrity(0) ) from gdb:
fwdBlockValid(fwdBlock2) 40450
Program received signal SIGSEGV, Segmentation fault. 0x000ab6d2 in ?? () (gdb) call clearLeakMapAndMapAccessibleObjects()
And I get CPU at 100% never ending.
I forgot to said..I also compiled the VM with a hardcoded #checkForLeaks that answers 1 (to force the checker) but that did not work either.
Cheers, Andrei
On Nov 24, 2015 1:45 AM, "Eliot Miranda" eliot.miranda@gmail.com wrote:
Hi Andrei,
On Mon, Nov 23, 2015 at 7:59 AM, Andrei Chis chisvasileandrei@gmail.com wrote: > > Hi, > > With both the latest and stable vm I have an use case in which the vm crashed in SmalltalkImage>>garbageCollect. > > To set up an image that exhibits the failure , execute this with the latest pharo version: > > /pharo Pharo.image eval --save "{ { 'ConfigurationOfRubric'. 'Pharo'. 'Rubric' }. { 'ConfigurationOfGlamourCore'. 'Moose'. 'Glamour' }. { 'ConfigurationOfGTInspectorCore'. 'Moose'. 'GToolkit' }. { 'ConfigurationOfGTPlaygroundCore'. 'Moose'. 'GToolkit' }. { 'ConfigurationOfGTEventRecorder'. 'Moose'. 'GToolkit' }. { 'ConfigurationOfGTSpotter'. 'Moose'. 'GToolkit' }. } do: [ :spec | Gofer new smalltalkhubUser: spec second project: spec third; package: spec first; load ]." > > ./pharo Pharo.image config http://www.smalltalkhub.com/mc/Pharo/Pharo50Inbox/main ConfigurationOfGToolkitCore --install=3.2 > > Then attempting to run the following code triggers the failure: > > ./pharo Pharo.image eval --save "TestRunner open model packageSearchUpdate: 'gt-tests-inspector'; classSearchUpdate: 'GTInspectorExamplesTest'; runAll" > > Based on the trace below the failure happens when the test GTInspectorExamplesTest calls 'Smalltalk>>garbageCollect' in the setUp method. > > That call can be removed, however, in other runs the failure happens in other methods calling Smalltalk>>garbageCollect. > > Is it possible that this is a bug with the image (some broken object) or is it a vm bug?
The way to test this is to build an assert VM and then use the leak checker. The leak checker will allow you to narrow down the cause. If the leak checker shows no corruption then its definitely a GC bug. If there leak checker does show corruption before GC then one still has to find out what caused the heap corruption, but you can use the leak checker to narrow the search.
HTH Eliot
> Cheers, > > Andrei > > > > andrei$ ./pharo Pharo.image eval --save "{ { 'ConfigurationOfRubric'. 'Pharo'. 'Rubric' }. { 'ConfigurationOfGlamourCore'. 'Moose'. 'Glamour' }. { 'ConfigurationOfGTInspectorCore'. 'Moose'. 'GToolkit' }. { 'ConfigurationOfGTPlaygroundCore'. 'Moose'. 'GToolkit' }. { 'ConfigurationOfGTEventRecorder'. 'Moose'. 'GToolkit' }. { 'ConfigurationOfGTSpotter'. 'Moose'. 'GToolkit' }. } do: [ :spec | Gofer new smalltalkhubUser: spec second project: spec third; package: spec first; load ]." > > andrei$ ./pharo Pharo.image config http://www.smalltalkhub.com/mc/Pharo/Pharo50Inbox/main ConfigurationOfGToolkitCore --install=3.2 > > andrei$ ./pharo Pharo.image eval --save "TestRunner open model packageSearchUpdate: 'gt-tests-inspector'; classSearchUpdate: 'GTInspectorExamplesTest'; runAll" > > > Segmentation fault Mon Nov 23 16:48:36 2015 > > > > https://github.com/pharo-project/pharo-vm.git Commit: 28d077d8df494ce050ca42c97c892471e8b8740c Date: 2015-10-16 12:02:43 +0200 By: Esteban Lorenzano estebanlm@gmail.com Jenkins build #15016 > > > C stack backtrace: > > 0 Pharo 0x0004cacf reportStackState + 159 > > > > Smalltalk stack dump: > > 0xbffbf1a0 M SmalltalkImage>garbageCollect 0x1fd49e30: a(n) SmalltalkImage > > 0xbffbf1c0 I GTInspectorExamplesTest>setUp 0x2126bc80: a(n) GTInspectorExamplesTest > > 0x2126cb90 is not a context >
<snipped long backtrace>
vm-dev@lists.squeakfoundation.org