libexec: mmap support, prealloc variants
In libexec, split the memory allocation method into cleared and non-cleared. Cleared gives zeroed memory, non-cleared gives 'junk' memory (that will be overwritten anyway, and so needn't be cleared) that is faster to get. Also introduce the 'memmap' method that can be used, if available, to map code and data from executables into a process using the third-party mmap() mode. Change-Id: I26694fd3c21deb8b97e01ed675dfc14719b0672b
This commit is contained in:
@@ -18,7 +18,7 @@
|
||||
#include <sys/mman.h>
|
||||
#include <machine/elf.h>
|
||||
|
||||
int libexec_alloc_mmap_prealloc(struct exec_info *execi, off_t vaddr, size_t len)
|
||||
int libexec_alloc_mmap_prealloc_junk(struct exec_info *execi, off_t vaddr, size_t len)
|
||||
{
|
||||
if(minix_mmap_for(execi->proc_e, (void *) vaddr, len,
|
||||
PROT_READ|PROT_WRITE|PROT_EXEC,
|
||||
@@ -29,6 +29,17 @@ int libexec_alloc_mmap_prealloc(struct exec_info *execi, off_t vaddr, size_t len
|
||||
return OK;
|
||||
}
|
||||
|
||||
int libexec_alloc_mmap_prealloc_cleared(struct exec_info *execi, off_t vaddr, size_t len)
|
||||
{
|
||||
if(minix_mmap_for(execi->proc_e, (void *) vaddr, len,
|
||||
PROT_READ|PROT_WRITE|PROT_EXEC,
|
||||
MAP_ANON|MAP_PREALLOC|MAP_FIXED, -1, 0) == MAP_FAILED) {
|
||||
return ENOMEM;
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
int libexec_alloc_mmap_ondemand(struct exec_info *execi, off_t vaddr, size_t len)
|
||||
{
|
||||
if(minix_mmap_for(execi->proc_e, (void *) vaddr, len,
|
||||
|
||||
Reference in New Issue
Block a user