On Thu, Jan 12, 2017 at 12:56 PM, David T. Lewis lewis@mail.msen.com wrote:
On Wed, Jan 11, 2017 at 09:03:53PM -0500, David T. Lewis wrote:
On Wed, Jan 11, 2017 at 05:10:24PM +0100, Bert Freudenberg wrote:
Some early images fill the context stack before advancing its stack pointer. I have a flag to allow that, it's pretty certainly used in primitive 61.
Brilliant, thanks Bert.
I see several places where we check "fmt = 3 and: [self isContextHeader:
hdr]",
including in #stObject:at:put: which is probably the immediate cause of
the
failure that I was seeing. And #stSizeOf: does this:
(fmt = 3 and: [self isContextHeader: hdr]) ifTrue: [stSize := self fetchStackPointerOf: array] ifFalse: [stSize := totalLength - fixedFields].
I'll try playing with it this weekend and see if I can get it working
for the
older images.
But I have to ask ... how in the world did you figure this out?
Well, debugging the startup code is actually quite comfortable using my VM debugger (https://lively-web.org/users/bert/squeak.html). It shows the call stack, current frame, and byte code, and lets you set a break point, and single-step through the code. Someone should make a similar UI for the Squeak VM Simulator :)
So what I did is pause the VM when the startup didn't finish, look up the call stack to see where things went wrong, set a break point for that method, run again, and then single-step to where it goes wrong.
At least I think that's what I did, because right now I can't get it to malfunction even when I disable the flag ... where exactly did it break for you?
:-)
Indeed, disabling the stack pointer check in #stObject:at:put: results in a VM that now works with the old Squeak1.13u.image
Yay! :)
- Bert -