Commit 50a9569b591a83071052614f2ff497ff2f2aa2ef
1 parent
703243a0
Mark host pages as reserved (Magnus Damm).
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3813 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
23 additions
and
1 deletions
cpu-all.h
... | ... | @@ -716,6 +716,7 @@ extern unsigned long qemu_host_page_mask; |
716 | 716 | /* original state of the write flag (used when tracking self-modifying |
717 | 717 | code */ |
718 | 718 | #define PAGE_WRITE_ORG 0x0010 |
719 | +#define PAGE_RESERVED 0x0020 | |
719 | 720 | |
720 | 721 | void page_dump(FILE *f); |
721 | 722 | int page_get_flags(target_ulong address); | ... | ... |
exec.c
... | ... | @@ -209,6 +209,27 @@ static void page_init(void) |
209 | 209 | qemu_host_page_mask = ~(qemu_host_page_size - 1); |
210 | 210 | l1_phys_map = qemu_vmalloc(L1_SIZE * sizeof(void *)); |
211 | 211 | memset(l1_phys_map, 0, L1_SIZE * sizeof(void *)); |
212 | + | |
213 | +#if !defined(_WIN32) && defined(CONFIG_USER_ONLY) | |
214 | + { | |
215 | + long long startaddr, endaddr; | |
216 | + FILE *f; | |
217 | + int n; | |
218 | + | |
219 | + f = fopen("/proc/self/maps", "r"); | |
220 | + if (f) { | |
221 | + do { | |
222 | + n = fscanf (f, "%llx-%llx %*[^\n]\n", &startaddr, &endaddr); | |
223 | + if (n == 2) { | |
224 | + page_set_flags(TARGET_PAGE_ALIGN(startaddr), | |
225 | + TARGET_PAGE_ALIGN(endaddr), | |
226 | + PAGE_RESERVED); | |
227 | + } | |
228 | + } while (!feof(f)); | |
229 | + fclose(f); | |
230 | + } | |
231 | + } | |
232 | +#endif | |
212 | 233 | } |
213 | 234 | |
214 | 235 | static inline PageDesc *page_find_alloc(unsigned int index) | ... | ... |
linux-user/mmap.c
... | ... | @@ -162,7 +162,7 @@ static abi_ulong mmap_next_start = 0x40000000; |
162 | 162 | 'start'. If 'start' == 0, then a default start address is used. |
163 | 163 | Return -1 if error. |
164 | 164 | */ |
165 | -/* XXX: should mark pages used by the host as reserved to be sure not | |
165 | +/* page_init() marks pages used by the host as reserved to be sure not | |
166 | 166 | to use them. */ |
167 | 167 | static abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size) |
168 | 168 | { | ... | ... |