[self-interest] Re: Self on Linux

Douglas Atique datique at pcs.usp.br
Mon Feb 8 12:08:54 UTC 1999


Gordon,
1) Just out of curiosity: Did you write a new assembler or did you adapt
gas to be called by the
NIC? 
2) Cooperation: tell me what you know about the stack and what the problem
with it is. Maybe this can help me understand it better and help you.
Regards,
Douglas

On Thu, 4 Feb 1999, Gordon Cichon wrote:

> Douglas Atique wrote:
> > 1) the polymorphic situation I described and
> > 2) when a method has been called
> 
> Douglas,
> 
> The problem with this kind of lookup cache is not really one because
> at this point. If a method is called where the map does not fit, control
> is transferred to `lookup´ - there is not yet an executing stack frame
> that has to be converted into a new one.
> 
> > I've been looking in the VM code and thought of the following idea: to
> > turn off the SIC, I would make the VM think that even when some code is
> 
> Turning off SIC seems to be quite easy: Somewhere there is a table of
> active compilers that is initialized to use both SIC and NIC. Either
> this initialization can be changed, or there is a primitive method
> that can be used for configuring this array. I did not yet spend time
> for trying it because I did not have problems with it so far.
> 
> > One thing I didn't understand in your port is that there is a lot of SPARC
> > assembly code bundled in the VM code. Did you change all that or it
> > compiles on i386 unchanged?
> 
> I changed it everywhere besides SIC. I plugged in gas (the GNU
> assembler) to emit the code, and I rewrote the places where code
> is actually generated. I already went through 
> - fixing the build system
> - fixing the Unix library
> - rewriting most assembly primitives and runtime code
> - plugging in a new assembler
> - switching all what´s necessary to run NIC
> 
> SIC, as well as recompile/convert is currently disabled with
> `#ifdefs' and guarded by `abort()'. Blocks are not yet tested
> because cloning (executing) then does not work yet.
> 
> Yesterday, I got an evaluation license for Sniff. Let´s see
> if I can `domesticate' the stack frame with it. :-)
> 
> To imagine how difficult it is to evaluate `1´ with NIC, I
> attached the assembler code that it is generating.
> 
> -gordon
> 
> -- 
> ----------------------------------------------------
> Gordon Cichon          email: Gordon at Cichon.de
> 
> --------- 8< ------ 8< ------ 8< ----------
> 
>   movl 4(%esp), %ecx
>   movl 3(%ecx), %ecx
>   cmpl $0x20b1211, %ecx
>   je L0
>   jmp 0x80c88f4 <Lookup> (p)
> L0: 
>   // verified entry point:
>   // DI entry point:
>   // test for recompilation
>   movl 0x1fe00000 <??>, %ecx
>   incl %ecx
>   movl %ecx, 0x1fe00000 <??>
>   cmpl $10240, %ecx
>   jne L2
>   call 0x80f1fc0 <Recompile> (p)
> L2: 
>   pushl %ebp
>   movl %esp, %ebp
>   nop 6
>   movl %ebx, -12(%ebp)
>   // flush incoming args to stack
>   // End Prologue
> L3: 
>   // stack overflow/interrupt check
>   cmpl %esp, 124(%esi)
>   jl L4
>   .align 4, 3
>   call 0x80eb0f0 <InterruptCheck> (p)
>   jmp L5
>   nop 3
>   .align 4
>   .data 0
>   movl -12(%ebp), %ebx
>   movl %ebp, %esp
>   popl %ebp
>   popl %ecx
>   jmpl *12(%ecx)
> L5: 
> L4: 
> L6: 
>   movl $0x4 (1), %ebx
>   movl %ebx, %eax
>   movl -12(%ebp), %ebx
>   movl %ebp, %esp
>   popl %ebp
>   ret 
>   // patching stack frame creation code
>   subl $16, %esp
>   nop 3
>   // NLR code
>   cmpl %esp, 156(%esi)
>   je L7
>   movl -12(%ebp), %ebx
>   movl %ebp, %esp
>   popl %ebp
>   popl %ecx
>   jmpl *12(%ecx)
> L7: 
>   movl 152(%esi), %eax
>   movl -12(%ebp), %ebx
>   movl %ebp, %esp
>   popl %ebp
>   ret
> 


------------------------------------------------------------------------
eGroup home: http://www.eGroups.com/list/self-interest
Free Web-based e-mail groups by eGroups.com




More information about the Self-interest mailing list