mir icon indicating copy to clipboard operation
mir copied to clipboard

Anyway to use the interpreter in systems that dont allow exec memory.

Open warvstar opened this issue 4 years ago • 1 comments

The interpreter appears to use exec mmap memory, is there an easy way around that so this can work on systems that don't allow that (iOS).

warvstar avatar Jan 05 '20 02:01 warvstar

Thank you for your proposal. I see the value of this.

The interpreter appears to use exec mmap memory, is there an easy way around that so this can work on systems that don't allow that (iOS).

Yes, it is possible but it will need a few weeks of work because the code was not designed for this. MIR-generator was not designed to be optional. All MIR functions are called indirectly to be executed in the interpreter or by generated code and the execution can be switched many times (between interpreter and different versions of function generated code). The code dispatching call is generated during MIR work. That is one reason for mmap.

Also calls of generated code, external C functions, and calls of the function to be executed by MIR-interpreter have the same interface (system call ABI). To provide such interface for the interpreter we also needs generation of some machine code. That is another reason for mmap.

To remove mmap we should:

  • make MIR-generator optional
  • Implement general indirect call code on assembler or by GCC asm extensions (which is undesirable for me because MIR-code will be not C standard and it will be hard to implement c2m bootstrap)
  • Implement system call ABI for calling external C functions and MIR-interpreter by
    • analogous way described above
    • or by LIBFFI (it is also undesirable for me because of introducing a new dependency for the project)

I'll put this task on my todo list, but this work will have low priority for me.

vnmakarov avatar Jan 06 '20 18:01 vnmakarov