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 <s...@weilnetz.de>
> ---
> 
> 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".



> Regards,
> 
> Stefan Weil
> 
> 
>  configure |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/configure b/configure
> index df5c99a..b681f9a 100755
> --- a/configure
> +++ b/configure
> @@ -2937,9 +2937,9 @@ else
>      POD2MAN="pod2man"
>  fi
>  
> -# Use ASLR, no-SEH and DEP if available
> +# Use ASLR, large addresses, no-SEH and DEP if available
>  if test "$mingw32" = "yes" ; then
> -    for flag in --dynamicbase --no-seh --nxcompat; do
> +    for flag in --dynamicbase --large-address-aware --no-seh --nxcompat; do
>          if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; 
> then
>              LDFLAGS="-Wl,$flag $LDFLAGS"
>          fi
> 


-- 
Alexey



Reply via email to