Lines 37-42
Link Here
|
37 |
#include <stdint.h> |
37 |
#include <stdint.h> |
38 |
#include <sys/mman.h> |
38 |
#include <sys/mman.h> |
39 |
#include <sys/param.h> |
39 |
#include <sys/param.h> |
|
|
40 |
#include <sys/shm.h> |
40 |
#include <sys/stat.h> |
41 |
#include <sys/stat.h> |
41 |
|
42 |
|
42 |
#include "../../crypt/md5.h" |
43 |
#include "../../crypt/md5.h" |
Lines 85-95
prepare_address_space (int fd, size_t total, size_t *reserved, int *xflags)
Link Here
|
85 |
{ |
86 |
{ |
86 |
void *p = mmap64 (NULL, RESERVE_MMAP_SIZE, PROT_NONE, MAP_SHARED, fd, 0); |
87 |
void *p = mmap64 (NULL, RESERVE_MMAP_SIZE, PROT_NONE, MAP_SHARED, fd, 0); |
87 |
if (p != MAP_FAILED) |
88 |
if (p != MAP_FAILED) |
88 |
{ |
89 |
{ |
89 |
*reserved = RESERVE_MMAP_SIZE; |
90 |
/* Some arches require fixed mappings to be aligned higher than |
90 |
*xflags = MAP_FIXED; |
91 |
pagesize, and SHMLBA represents that size. */ |
91 |
return p; |
92 |
size_t align_adjust = (uintptr_t)p & SHMLBA; |
92 |
} |
93 |
*reserved = RESERVE_MMAP_SIZE - align_adjust; |
|
|
94 |
*xflags = MAP_FIXED; |
95 |
return p + align_adjust; |
96 |
} |
93 |
} |
97 |
} |
94 |
|
98 |
|
95 |
*reserved = total; |
99 |
*reserved = total; |
Lines 271-278
file_data_available_p (struct locarhandle *ah, uint32_t offset, uint32_t size)
Link Here
|
271 |
if (st.st_size > ah->reserved) |
275 |
if (st.st_size > ah->reserved) |
272 |
return false; |
276 |
return false; |
273 |
|
277 |
|
274 |
const size_t pagesz = getpagesize (); |
278 |
size_t start = ah->mmaped & ~(SHMLBA - 1); |
275 |
size_t start = ah->mmaped & ~(pagesz - 1); |
|
|
276 |
void *p = mmap64 (ah->addr + start, st.st_size - start, |
279 |
void *p = mmap64 (ah->addr + start, st.st_size - start, |
277 |
PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, |
280 |
PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, |
278 |
ah->fd, start); |
281 |
ah->fd, start); |
279 |
- |
|
|