2009/10/25 Jan-Simon Möller <dl...@gmx.de>: > Hi ! > > 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. > > Signed-off-by: Jan-Simon Möller <dl...@gmx.de> > > > diff --git a/configure b/configure > index 43d87c5..076f45a 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 > @@ -2576,3 +2580,10 @@ d=libuser > mkdir -p $d > rm -f $d/Makefile > ln -s $source_path/Makefile.user $d/Makefile > + > +# change default stacksize in usermode > +# > +if test "$user_mode_stacksize" != "" ; then > + echo "user_mode_stack $user_mode_stacksize" > + echo "QEMU_CFLAGS+=-DUSER_MODE_STACKSIZE=$user_mode_stacksize" >> > $config_host_mak > +fi
Wouldn't it be better to set this earlier only if target_user_only is set to yes and use cflags? Something like this: if test "$target_user_only" = "yes" -a "$user_mode_stacksize" != ""; then cflags="-DUSER_MODE_STACKSIZE $cflags" fi just after the test for pie (line 2478) for instance. The informative echo should go with the others (line 1853). > diff --git a/linux-user/main.c b/linux-user/main.c > index 81a1ada..30c0a87 100644 > --- a/linux-user/main.c > +++ b/linux-user/main.c > @@ -51,7 +51,11 @@ 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 */ > +#if defined(USER_MODE_STACKSIZE) > +unsigned long x86_stack_size = USER_MODE_STACKSIZE; > +#else > unsigned long x86_stack_size = 512 * 1024; > +#endif I'd prefer: #ifndef USER_MODE_STACKSIZE #define x86_stack_size (512 * 1024) #endif unsigned long x86_stack_size = USER_MODE_STACKSIZE; Laurent > void gemu_log(const char *fmt, ...) > { > >