[Vm-dev] Fwd: issues with Alien sendInvokeCallback:Stack:Registers:Jmpbuf:

John M McIntosh johnmci at smalltalkconsulting.com
Tue Feb 24 17:34:17 UTC 2009


Ok, well I'm integrating Craig's spoon stuff with Alien and vmmaker- 
dtl 108
I think you suggestion goes back to Craig for review.
I've not published anything, at the moment Spoon is a fork, but I'm  
interested in building a iPhone VM with it.

On 24-Feb-09, at 9:21 AM, Eliot Miranda wrote:

> Hi John,
>
>    the solution is to prevent interpret being inlined in the first  
> place.  Clearly interpret should not be inlined in itself or  
> anywhere else.  To do this just mark it as unlineable, e.g. if using  
> pragmas
>
> interpret
> 	"This is the main interpreter loop. It normally loops forever,  
> fetching and executing
> 	 bytecodes.  When running in the context of a browser plugin VM,  
> however, it must
> 	 return control to the browser periodically.  This should done only  
> when the state of
> 	 the currently running Squeak thread is safely stored in the object  
> heap.  Since this
> 	 is the case at the moment that a check for interrupts is  
> performed, that is when we
> 	 return to the browser if it is time to do so.  Interrupt checks  
> happen quite frequently."
>
> 	<inline: false> "should *not* be inlined into  
> sendInvokeCallback:Stack:Registers:Jmpbuf:"
> ...
>
> and you should be good to go.
>
> That markAllActiveMethods hack is not the right fix.  Instead  
> justActivateNewMehtod needs to make the new active context a root if  
> it is old. Add the two marked lines at the end:
>
> justActivateNewMethod
> 	"Activate the new method but *do not* copy receiver or argumernts  
> from activeContext."
> 	| methodHeader initialIP newContext tempCount needsLarge where |
> 	self inline: true.
>
> 	....
>
> 	activeContext := newContext.
> >	(self oop: newContext isLessThan: youngStart) ifTrue:
> >		[self beRootIfOld: newContext]
>
>
> This mirrors the code in internalNewActiveContext:.  Note that if a  
> context is a block then its home gets marked as a root if required  
> in (internal)fetchContextRegisters.  Do you want me to integrate  
> these?  If so, what's your head package version?
>
> On Mon, Feb 23, 2009 at 10:06 PM, John M McIntosh <johnmci at smalltalkconsulting.com 
> > wrote:
>
>
>
> Begin forwarded message:
>
> From: John M McIntosh <johnmci at smalltalkconsulting.com>
> Date: February 23, 2009 9:45:11 PM PST (CA)
> To: squeak vm <vm-dev at discuss.squeakfoundation.org>
> Cc: Craig Latta <craig at netjam.org>
> Subject: issues with Alien sendInvokeCallback:Stack:Registers:Jmpbuf:
> Reply-To: johnmci at smalltalkconsulting.com
>
> Ok, many many hours ago I decided to integrate Craig's Spoon work  
> with VMMaker dtl-108  and Alien support. Need to start somewhere,  
> should be easy.
> Well no, after integrating the changed and doing a extrude and a  
> compile I get missing sendInvokeCallback:Stack:Registers:Jmpbuf
>
> ?
>
> After much puzzlement and creating a subclass of Dictionary so I  
> could figure out why sendInvokeCallback:Stack:Registers:Jmpbuf gets  
> removed from the methods
> dictionary before we decide to remove methods not used, I discovered  
> it's actually removed in removeMethodsReferingToGlobals:except:
> where we look at the parse tree and decide that the method contains   
> interpreter() loop local variables so the method *should* be fully  
> contained by the interpreter()
> loop thus can be discarded before we reach the point where we  
> discard non-used memorys if not in the don't discard set.
>
> ?
>
> The last part of  sendInvokeCallback:Stack:Registers:Jmpbuf  which  
> is marked self export: true.
> reads
>
>        self fetchContextRegisters: activeContext.
>        self interpret.
>
> and Craig's code added
>
> interpret
>
>        self browserPluginInitialiseIfNeeded.
> ===>    self markAllActiveMethods.
>        self internalizeIPandSP.
>
>
> ?
>
> Lots of ? tonight
>
> so in looking at the Tmetihod parse tree wonders of wonder, the  
> innocent  adding of the markAllActiveMethods alters the inlining  
> decision for
> sendInvokeCallback:Stack:Registers:Jmpbuf  and it inlines the  
> browserPluginInitialiseIfNeeded, markAllActiveMethods and  
> internalizeIPandSP
> which of course as a side effect makes us drop the method because  
> the logic *assumes* then it's part of the interpret() loop since the  
> internalizeIPandSP
> drags in the interpret() local variables.
>
>
> To fix well we do
>
> interpretNoInline
>        self inline: false.
>        self interpret
>
> and make sendInvokeCallback:Stack:Registers:Jmpbuf call that.
>
> Oddly before Craig's changes why  
> sendInvokeCallback:Stack:Registers:Jmpbuf reads...
>
>        interpret();
>        return 1;
>
> No idea at this late hour WHY that didn't get inlined  back last Nov  
> when I touched it last
>
> --
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> John M. McIntosh <johnmci at smalltalkconsulting.com>
> Corporate Smalltalk Consulting Ltd.  http:// 
> www.smalltalkconsulting.com
> = 
> = 
> = 
> = 
> = 
> ======================================================================
>
>
>
>
> --
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> John M. McIntosh <johnmci at smalltalkconsulting.com>
> Corporate Smalltalk Consulting Ltd.  http:// 
> www.smalltalkconsulting.com
> = 
> = 
> = 
> = 
> = 
> ======================================================================
>
>
>
>

--
= 
= 
= 
========================================================================
John M. McIntosh <johnmci at smalltalkconsulting.com>
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
= 
= 
= 
========================================================================





More information about the Vm-dev mailing list