[Vm-dev] Assert fails on non-local return

Eliot Miranda eliot.miranda at gmail.com
Wed Jan 4 19:24:05 UTC 2017


Hi Clément, Hi All,

    in debugging the SpurPlanningCompactor for the CoInterpreter I'm seeing
a fair few stack depth check fails for non-local returns in Squeak trunk
methods such as [] in SystemProgressMorph>nextSlotFor:, [] in HTTPSocket
class>httpGet:args:user:passed: and [] in
PackageInfo>changeRecordsForMethod:do:.

Since these assert-fails happen in methods that are fully linked I know
that the problem is /not/ the non-local return.  For example, here's the
code for a non-local return that fails the assert check at the end of the
[] in SystemProgressMorph>nextSlotFor:

000db633: movl %edx, %esi : 89 D6
000db635: popl %edx : 5A
000db636: movl $0x00000c38, %ecx : B9 38 0C 00 00
000db63b: call .+0xfff31fe4 (0x0000d624=addMorphBack:@2C) : E8 E4 1F F3 FF
IsSendCall addMorphBack: bc 205/206:
000db640: movl -32(%ebp), %edx : 8B 55 E0
000db643: call .+0xfff25b90 (0x000011d8=ceNonLocalReturnTrampoline) : E8 90
5B F2 FF
IsRelativeCall:
HasBytecodePC bc 208/209:


Since the stack depth is checked when a send is linked we know that the
stack depth was correct at 000db63b.  And hence it's likely that the stack
depth was correct when the non-local return trampoline was called soon
afterwards.  [I need to confirm this].

So this would imply that the stack depth is incorrect due to something
else, and I suspect event checks on backward branches.  This non-local
return is in a loop.  So its conceivable that the stack gets set
incorrectly on some path through event checking.  [The stack in this
context is incorrect in having an extra copy of the loop index on the stack
between the temp vars and the arguments to the thisContext aboutToReturn:
result through: unwind.

For now, this is just an observation, but it could be a serious bug and it
would be nice to fix it  I guess we should add some assert checks on stack
depth for reentering loops, e.g. in a CoInterpreter override
for externalSetStackPageAndPointersForSuspendedContextOfProcess:

_,,,^..^,,,_
best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20170104/a51ba797/attachment.html>


More information about the Vm-dev mailing list