Revision 18e9ea8a linux-user/mmap.c
b/linux-user/mmap.c | ||
---|---|---|
225 | 225 |
int prot; |
226 | 226 |
int looped = 0; |
227 | 227 |
|
228 |
if (size > reserved_va) {
|
|
228 |
if (size > RESERVED_VA) {
|
|
229 | 229 |
return (abi_ulong)-1; |
230 | 230 |
} |
231 | 231 |
|
232 | 232 |
last_addr = start; |
233 | 233 |
for (addr = start; last_addr + size != addr; addr += qemu_host_page_size) { |
234 |
if (last_addr + size >= reserved_va
|
|
234 |
if (last_addr + size >= RESERVED_VA
|
|
235 | 235 |
|| (abi_ulong)(last_addr + size) < last_addr) { |
236 | 236 |
if (looped) { |
237 | 237 |
return (abi_ulong)-1; |
... | ... | |
271 | 271 |
|
272 | 272 |
size = HOST_PAGE_ALIGN(size); |
273 | 273 |
|
274 |
if (reserved_va) {
|
|
274 |
if (RESERVED_VA) {
|
|
275 | 275 |
return mmap_find_vma_reserved(start, size); |
276 | 276 |
} |
277 | 277 |
|
... | ... | |
651 | 651 |
ret = 0; |
652 | 652 |
/* unmap what we can */ |
653 | 653 |
if (real_start < real_end) { |
654 |
if (reserved_va) {
|
|
654 |
if (RESERVED_VA) {
|
|
655 | 655 |
mmap_reserve(real_start, real_end - real_start); |
656 | 656 |
} else { |
657 | 657 |
ret = munmap(g2h(real_start), real_end - real_start); |
... | ... | |
679 | 679 |
flags, |
680 | 680 |
g2h(new_addr)); |
681 | 681 |
|
682 |
if (reserved_va && host_addr != MAP_FAILED) {
|
|
682 |
if (RESERVED_VA && host_addr != MAP_FAILED) {
|
|
683 | 683 |
/* If new and old addresses overlap then the above mremap will |
684 | 684 |
already have failed with EINVAL. */ |
685 | 685 |
mmap_reserve(old_addr, old_size); |
... | ... | |
701 | 701 |
} |
702 | 702 |
} else { |
703 | 703 |
int prot = 0; |
704 |
if (reserved_va && old_size < new_size) {
|
|
704 |
if (RESERVED_VA && old_size < new_size) {
|
|
705 | 705 |
abi_ulong addr; |
706 | 706 |
for (addr = old_addr + old_size; |
707 | 707 |
addr < old_addr + new_size; |
... | ... | |
711 | 711 |
} |
712 | 712 |
if (prot == 0) { |
713 | 713 |
host_addr = mremap(g2h(old_addr), old_size, new_size, flags); |
714 |
if (host_addr != MAP_FAILED && reserved_va && old_size > new_size) {
|
|
714 |
if (host_addr != MAP_FAILED && RESERVED_VA && old_size > new_size) {
|
|
715 | 715 |
mmap_reserve(old_addr + old_size, new_size - old_size); |
716 | 716 |
} |
717 | 717 |
} else { |
Also available in: Unified diff