[Vm-dev] Re: [Pharo-project] CogVM crash code

Camillo Bruni camillobruni at gmail.com
Fri Nov 30 22:38:48 UTC 2012


can you close the bug report?

On 2012-11-30, at 19:34, Eliot Miranda <eliot.miranda at gmail.com> wrote:

> OK, this is fixed.  Thanks, Jon.  The bug was that the pop of the folded
> constant did not record the implicit send in the folding, hence pc mapping
> was wrong.  i.e. 1-1 gets folded away to 0, and the code generator marks
> the result 0 as being the result of a send, but then the result gets
> discarded (when it is popped) without being noted in the pc map.  In the
> machine code there needs to be at least a nop generated, and in the map
> there needs to be an entry, to correspond to the send of +, so that when
> machine code pcs are mapped to bytecode pcs there are the correct number of
> entries in the map.  In the above case, the VM converts the interpreted
> frame to a machine code frame (coincidently) on the 20th iteration and
> needs to map the bytecode pc to the correct machine code pc to continue in
> machine code.  But because of the missing entry in the map for 1-1, the pc
> mapping machinery answered 0, and the VM ended up jumping into the void.
> 
> Thanks very much for the bug report!
> 
> 
> On Fri, Nov 30, 2012 at 9:07 AM, Jon Anderson <jonkanderson at gmail.com>wrote:
> 
>> Hi all,
>> 
>> I don't post to lists often, but I thought some of you might be
>> interested in these few lines of code that crash the CogVM on both
>> Linux and Windows.  File-in the Smalltalk code below, then evaluate
>> [nil crashCogVM].  The code uses [1-1] but it could use [1+1] or
>> [56+98].  I put the code on nil, but that is not important either.  I
>> think the important thing is that the primitive (+ or -) is evaluated
>> but the result is not assigned into any variable.  Also important is
>> that the code is put into a loop that I assume has been JIT optimized.
>> The image I used is Pharo 1.4 one-click with latest update #14459.
>> This code does not crash StackVM. Have fun! - Jon.
>> 
>> !UndefinedObject methodsFor: 'crash' stamp: 'JonKAnderson 11/29/2012
>> 17:26'!
>> crashCogVM
>>        " Evaluate [
>>                nil crashCogVM ]"
>> 
>>        | i |
>>        i := 20.
>>        1 to: i do: [:d | 1-1 ]
>> ! !
>> 
>> 
> 
> 
> -- 
> best,
> Eliot



More information about the Vm-dev mailing list