diff --git a/configure b/configure index 43d87c5..dad9175 100755 --- a/configure +++ b/configure @@ -220,6 +220,7 @@ uname_release="" io_thread="no" mixemu="no" kerneldir="" +user_mode_stacksize="" aix="no" blobs="yes" pkgversion="" @@ -557,6 +558,8 @@ for opt do ;; --kerneldir=*) kerneldir="$optarg" ;; + --user-mode-stacksize=*) user_mode_stacksize="$optarg" + ;; --with-pkgversion=*) pkgversion=" ($optarg)" ;; --disable-docs) docs="no" @@ -713,6 +716,7 @@ echo " --enable-linux-aio enable Linux AIO support" echo " --enable-io-thread enable IO thread" echo " --disable-blobs disable installing provided firmware blobs" echo " --kerneldir=PATH look for kernel includes in PATH" +echo " --user-mode-stacksize= set default stack size in bytes (as -s, only in usermode)" echo "" echo "NOTE: The object files are built at the place where configure is launched" exit 1 @@ -2481,6 +2485,16 @@ if test "$target_user_only" = "yes" -a "$static" = "no" -a \ ldflags="-pie $ldflags" fi +# change default stacksize in usermode +# +if test "$target_user_only" = "yes" -a "$user_mode_stacksize" != "" ; then + cflags="-DUSER_MODE_STACKSIZE=$user_mode_stacksize $cflags" + echo "user_mode_stack $user_mode_stacksize" +else + echo "user_mode_stack default" +fi + + if test "$target_softmmu" = "yes" -a \( \ "$TARGET_ARCH" = "microblaze" -o \ "$TARGET_ARCH" = "cris" \) ; then diff --git a/linux-user/main.c b/linux-user/main.c index 81a1ada..9ac2421 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -51,7 +51,10 @@ const char *qemu_uname_release = CONFIG_UNAME_RELEASE; /* XXX: on x86 MAP_GROWSDOWN only works if ESP <= address + 32, so we allocate a bigger stack. Need a better solution, for example by remapping the process stack directly at the right place */ -unsigned long x86_stack_size = 512 * 1024; +#ifndef USER_MODE_STACKSIZE +#define USER_MODE_STACKSIZE (512 * 1024) +#endif +unsigned long x86_stack_size = USER_MODE_STACKSIZE; void gemu_log(const char *fmt, ...) {