[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [4637] Mark host brk() area as reserved.
From: |
Paul Brook |
Subject: |
[Qemu-devel] [4637] Mark host brk() area as reserved. |
Date: |
Sat, 31 May 2008 16:33:54 +0000 |
Revision: 4637
http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4637
Author: pbrook
Date: 2008-05-31 16:33:53 +0000 (Sat, 31 May 2008)
Log Message:
-----------
Mark host brk() area as reserved.
Modified Paths:
--------------
trunk/exec.c
trunk/linux-user/mmap.c
trunk/linux-user/qemu.h
Modified: trunk/exec.c
===================================================================
--- trunk/exec.c 2008-05-31 16:21:33 UTC (rev 4636)
+++ trunk/exec.c 2008-05-31 16:33:53 UTC (rev 4637)
@@ -234,6 +234,7 @@
FILE *f;
int n;
+ last_brk = (unsigned long)sbrk(0);
f = fopen("/proc/self/maps", "r");
if (f) {
do {
Modified: trunk/linux-user/mmap.c
===================================================================
--- trunk/linux-user/mmap.c 2008-05-31 16:21:33 UTC (rev 4636)
+++ trunk/linux-user/mmap.c 2008-05-31 16:33:53 UTC (rev 4637)
@@ -157,6 +157,8 @@
static abi_ulong mmap_next_start = 0x40000000;
#endif
+unsigned long last_brk;
+
/* find a free memory area of size 'size'. The search starts at
'start'. If 'start' == 0, then a default start address is used.
Return -1 if error.
@@ -167,7 +169,21 @@
{
abi_ulong addr, addr1, addr_start;
int prot;
+ unsigned long new_brk;
+ new_brk = (unsigned long)sbrk(0);
+ if (last_brk && last_brk < new_brk && last_brk == (target_ulong)last_brk) {
+ /* This is a hack to catch the host allocating memory with brk().
+ If it uses mmap then we loose.
+ FIXME: We really want to avoid the host allocating memory in
+ the first place, and maybe leave some slack to avoid switching
+ to mmap. */
+ page_set_flags(last_brk & TARGET_PAGE_MASK,
+ TARGET_PAGE_ALIGN(new_brk),
+ PAGE_RESERVED);
+ }
+ last_brk = new_brk;
+
size = HOST_PAGE_ALIGN(size);
start = start & qemu_host_page_mask;
addr = start;
Modified: trunk/linux-user/qemu.h
===================================================================
--- trunk/linux-user/qemu.h 2008-05-31 16:21:33 UTC (rev 4636)
+++ trunk/linux-user/qemu.h 2008-05-31 16:33:53 UTC (rev 4637)
@@ -232,6 +232,7 @@
abi_ulong new_size, unsigned long flags,
abi_ulong new_addr);
int target_msync(abi_ulong start, abi_ulong len, int flags);
+extern unsigned long last_brk;
/* user access */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [4637] Mark host brk() area as reserved.,
Paul Brook <=