implemented:
- Pages can be shared between maps.
- A change made to a map is written to the file, at munmap().
not yet implemented:
- VM operation during page IO execution.
Because page IO is executed with VM's lock.
- Page IO, which does not change a file size with any case.
When munmap() races with truncate(), the file size may be changed
illegally.
It was able to change a read-only memory using a system call that
forwarded to host.
To fix this, when read-only mmap(), it places read-only vm_area in the
mcexec's space.
When mcexec reduces a stack, mcexec stores the original RLIMIT_STACK
in environment variable MCKERNEL_RLIMIT_STACK.
A fix to prohibit overwrite of this time.
Therefore, the value of RLIMIT_STACK of the McKernel's process is
decided in the following order.
(1) If environment variable MCKERNEL_RLIMIT_STACK exists; the value.
(2) A value of RLIMIT_STACK in the mcexec starting.
- When the stack size is greater than 1 GiB, reduced to 10 MiB.
- To achieve a reduction of the stack, restart itself using the exec().
- By using the environment variable MCKERNEL_RLIMIT_STACK,
tell to McKernel the stack size of the original.
MCKERNEL_RLIMIT_STACK is a environment variable which
specify RLIMIT_STACK value on McKernel.
syntax: MCKERNEL_RLIMIT_STACK=<cur>,<max>
example: MCKERNEL_RLIMIT_STACK=0x800000,-1
cur=8MiB, max=unlimited
- When the interpreter is not found,
add a prefix to the path and retry search.
- the prefix is specified by a environment variable MCEXEC_ALT_ROOT.
- If the MCEXEC_ALT_ROOT does not exist,
/usr/linux-k1om-4.7/linux-k1om is used as a prefix.
When start a program which have a PT_INTERP segment
(dynamic linkaged program have a PT_INTERP segment),
start the interpreter indicated by the PT_INTERP segment.
allow the substitute of maps from mcexec thread to the syscall channel
the temporary correction of the problem that gethostbyname() after
accept() interruption finishes an error.