On 19/07/12 02:37, Stefan Weil wrote:
32-bit applications on Windows normally only get virtual memory in
the lower 2 GiB address space.
Because of memory fragmentation, VirtualAlloc() usually won't get 1 GiB
of contiguous virtual memory in that address space. Therefore running
system emulations with 1 GiB or more RAM will abort with a failure.
The linker flag --large-address-aware allows addresses in the upper 2 GiB.
With this flag, it is possible to run emulated machines with up to
2047 MiB RAM.
Signed-off-by: Stefan Weil <address@hidden>
---
I tested the executables with large address awareness on a 64 bit Windows
(works) and with Wine on Debian 32 bit Linux (no longer aborts, but hangs
when 1024 or more MiB are requested).
Maybe the support for large addresses is broken in my Wine version.
Please report any different test results.
I tried with native WindowsXP, the patch did not help.
QEMU was compiled with the new parameter:
Install prefix c:/Program Files/QEMU
BIOS directory c:/Program Files/QEMU
binary directory c:/Program Files/QEMU
library directory c:/Program Files/QEMU/lib
include directory c:/Program Files/QEMU/include
config directory c:/Program Files/QEMU
Source path /home/aik/testken/qemu
C compiler i686-pc-mingw32-gcc
Host C compiler gcc
CFLAGS -O2 -D_FORTIFY_SOURCE=2 -g
QEMU_CFLAGS -m32 -D__USE_MINGW_ANSI_STDIO=1 -DWIN32_LEAN_AND_MEAN
-DWINVER=0x501 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
-Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings
-Wmissing-prototypes -fno-strict-aliasing -fstack-protector-all
-Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs
-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers
-Wold-style-declaration -Wold-style-definition -Wtype-limits
LDFLAGS -Wl,--nxcompat -Wl,--no-seh -Wl,--large-address-aware
-Wl,--dynamicbase -Wl,--warn-common -m32 -static -g
make make
install install
python python
smbd /usr/sbin/smbd
host CPU i386
host big endian no
target list ppc64-softmmu
[...]
qemu/ppc64-softmmu/qemu-system-ppc64 -M pseries -m 1024 -nographic -L
qemu/pc-bios/ -net none -append console=hvc0 -initrd ./1.cpio -kernel
./guest.vmlinux.n -net nic,model=virtio -net user,hostfwd=tcp::5555-:22
-drive file=test-virtio-blk.img,if=virtio,index=0,media=disk,cache=unsafe
***qemu_memalign 200 (512) size 800 (2048)
Warning: Disabling some instructions which are not emulated by TCG (0x0, 0x6)
***qemu_vmalloc 40000000 (1073741824)
Failed to allocate memory: 8
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
The lines with *** are mine printf("%s %x(%u)", __func__, etc).
It still works with "-m 1023".