Я не могу заставить работать функцию mmap. Он возвращает код ошибки EINVAL.
void* mapped =
mmap((void*)(map_addr + slide),
map_size,
PROT_WRITE | PROT_READ,
MAP_PRIVATE | MAP_ANON,
bprm->file,
map_offset);
Я проверил документацию по этой функции на своей платформе (Darwin) и не обнаружил ничего неправильного. На справочной странице mmap представлены четыре случая, в которых будет возвращено значение EINVAL.
[EINVAL] MAP_FIXED was specified and the addr argument was not page
aligned, or part of the desired address space resides out of the
valid address space for a user process.
MAP_FIXED не указан, так что это не так.
[EINVAL] flags does not include either MAP_PRIVATE or MAP_SHARED.
MAP_PRIVATE присутствует.
[EINVAL] The len argument was negative.
Аргумент len (map_size) во время вызова равен 8192.
[EINVAL] The offset argument was not page-aligned based on the page size as
returned by getpagesize(3).
Аргумент смещения (map_offset) равен 0, поэтому он должен быть выровнен по странице. (может я ошибаюсь?)