[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [Patch] Make usermode stacksize (-s) configurable at co
From: |
Riku Voipio |
Subject: |
Re: [Qemu-devel] [Patch] Make usermode stacksize (-s) configurable at compile-time |
Date: |
Mon, 26 Oct 2009 14:25:16 +0200 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
On Sun, Oct 25, 2009 at 06:49:44PM +0100, Jan-Simon Möller wrote:
> We encontered problems with the low default value for the stacksize in
> usermode (ok, whats "low").
> For environments like scratchbox, its hard to use "-s" as qemu is called by
> binfmt mechanism.
> The attached patch makes this configurable at compile-time.
fwiw in scratchbox we have a wrapper in between binfmt and qemu (called
misc_runner) that sets any
necessary command line parameters for qemu. You might want to consider a
similar approach so we
don't need to add a configure option (and thus hardcode the setting) to qemu
for every command
line option that might need changing.
> Signed-off-by: Jan-Simon Möller <address@hidden>
>
> 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, ...)
> {
>
> 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, ...)
> {