mirror of https://github.com/xqemu/xqemu.git
Mark host pages as reserved (Magnus Damm).
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3813 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
703243a044
commit
50a9569b59
|
@ -716,6 +716,7 @@ extern unsigned long qemu_host_page_mask;
|
||||||
/* original state of the write flag (used when tracking self-modifying
|
/* original state of the write flag (used when tracking self-modifying
|
||||||
code */
|
code */
|
||||||
#define PAGE_WRITE_ORG 0x0010
|
#define PAGE_WRITE_ORG 0x0010
|
||||||
|
#define PAGE_RESERVED 0x0020
|
||||||
|
|
||||||
void page_dump(FILE *f);
|
void page_dump(FILE *f);
|
||||||
int page_get_flags(target_ulong address);
|
int page_get_flags(target_ulong address);
|
||||||
|
|
21
exec.c
21
exec.c
|
@ -209,6 +209,27 @@ static void page_init(void)
|
||||||
qemu_host_page_mask = ~(qemu_host_page_size - 1);
|
qemu_host_page_mask = ~(qemu_host_page_size - 1);
|
||||||
l1_phys_map = qemu_vmalloc(L1_SIZE * sizeof(void *));
|
l1_phys_map = qemu_vmalloc(L1_SIZE * sizeof(void *));
|
||||||
memset(l1_phys_map, 0, L1_SIZE * sizeof(void *));
|
memset(l1_phys_map, 0, L1_SIZE * sizeof(void *));
|
||||||
|
|
||||||
|
#if !defined(_WIN32) && defined(CONFIG_USER_ONLY)
|
||||||
|
{
|
||||||
|
long long startaddr, endaddr;
|
||||||
|
FILE *f;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
f = fopen("/proc/self/maps", "r");
|
||||||
|
if (f) {
|
||||||
|
do {
|
||||||
|
n = fscanf (f, "%llx-%llx %*[^\n]\n", &startaddr, &endaddr);
|
||||||
|
if (n == 2) {
|
||||||
|
page_set_flags(TARGET_PAGE_ALIGN(startaddr),
|
||||||
|
TARGET_PAGE_ALIGN(endaddr),
|
||||||
|
PAGE_RESERVED);
|
||||||
|
}
|
||||||
|
} while (!feof(f));
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline PageDesc *page_find_alloc(unsigned int index)
|
static inline PageDesc *page_find_alloc(unsigned int index)
|
||||||
|
|
|
@ -162,7 +162,7 @@ static abi_ulong mmap_next_start = 0x40000000;
|
||||||
'start'. If 'start' == 0, then a default start address is used.
|
'start'. If 'start' == 0, then a default start address is used.
|
||||||
Return -1 if error.
|
Return -1 if error.
|
||||||
*/
|
*/
|
||||||
/* XXX: should mark pages used by the host as reserved to be sure not
|
/* page_init() marks pages used by the host as reserved to be sure not
|
||||||
to use them. */
|
to use them. */
|
||||||
static abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size)
|
static abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue