Michael --

> I'm of the opinion that you shouldn't just be able to jump into
> another code-segment.

I agree. Since in the future, different chunks of code could be
compiled with different oplibs, the opfunc and opinfo lookups
will have to move to be close to the bytecode stream, not part
of the interpreter proper (although the interpreter may cache
them to save indirections).

That implies that when we call out to a noncontiguous block of
code, we have to point interpreter->code at it, and probably
re-cache the opfunc and opinfo tables. So, *all* non-special
jumps have to be relative to the current code chunk, which
means that jumpabs_ic 1 should mean to set PC to

  interpreter->code->byte_code + 1

I would imagine it only makes sense to jump into another code
chunk at the location of an exported symbol, so once we can
have linkage information in the packfile format, we can allow
the loader to do the fixups, and we end up with something like

  call_ic     FOO            # Implicit local code block
  call_ic_ic  MATH, WHATEVER # Explicit code block

and the call stack saves both the 'code' identifier (index, or
whatever) and the return address within that code.
 
> Given that modulaA will have interp->code range from say 28M to 28.4M, moduleB
> will have interp->code range from 41.4M to 42.2M, etc - Where-ever mmap
> assigns the address.  It would therefore be almost impossible to map PC to
> a linear physical address.

Yeah. You'd have to contrive to concat them into one big chunk, which
defeats mmapping on systems that have it. Although, there might be some
mmap defeating going on anyway for vivifying constants. We might be able
to handle some constants with special versions of their implementations
that know not to do reallocations (CONST_STRING, anyone?) and expect to
use placement initialization (although we probably still can't get
away with that with a platform neutral format. shucks).

So, mmapping is nice, but we are still going to have to use it more like
a source of init arguments for some things than as a backing store
(that's not to say that it can't be backing store for immutable chunks
of bytecode).


Regards,
 
-- Gregor
 _____________________________________________________________________ 
/     perl -e 'srand(-2091643526); print chr rand 90 for (0..4)'      \

   Gregor N. Purdy                          [EMAIL PROTECTED]
   Focus Research, Inc.                http://www.focusresearch.com/
   8080 Beckett Center Drive #203                   513-860-3570 vox
   West Chester, OH 45069                           513-860-3579 fax
\_____________________________________________________________________/

Reply via email to