Re: JIT emulator needs
From: Alan Cox
Date: Fri Jun 08 2007 - 07:05:56 EST
> There is an SE Linux execmem restriction that enforces W^X.
This depends on whatever SELinux rulesets you are running. Its just a
good rule to have present that most programs shouldn't be self patching,
and then label those that do differently.
> Sometimes it is very helpful to have the read/write mapping
> be a fixed offset from the read/exec mapping. A power of 2
> can be especially desirable.
mmap MAP_FIXED can do this but you need to know a lot about the memory
layout of the system so it gets a bit platform specific.
> Emulators often need a cheap way to change page permissions.
mprotect(, range) rather than a page at a time. The kernel will do
merging.
> a. sysctl to set IPC_RMID by default
> b. shmget() flag to set IPC_RMID by default
Use POSIX shared memory
> c. open() flag to unlink a file before returning the fd
Is it really that costly to create a blank file, why do you need to do it
a lot in a JIT ?
> e. mremap() flag to get a read/write mapping of a read/exec one
> f. mremap() flag to get a read/exec mapping of a read/write one
> g. mremap() flag to make the 5th arg (new addr) be the upper limit
This is all mprotect and munmap.
> h. 6-bit wide mremap() "flag" to set the upper limit above given base
> i. support the prot argument to remap_file_pages
> j. a documented way (madvise?) to punch same-VMA zero-page holes
mmap (although you get more VMAs from that) so memset() is probably
genuinely cheaper if the permissions are not changing.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/