From 6f38489f917f9f1385f3c4244d28d7ee23148eba Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 19 Apr 2006 19:28:33 +0200 Subject: [PATCH] loader: Attempt to detect broken vmsplit setups. --- loader/glibc.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/loader/glibc.c b/loader/glibc.c index 4d15d5c76b6..9aae1c11f40 100644 --- a/loader/glibc.c +++ b/loader/glibc.c @@ -21,8 +21,12 @@ #include "config.h" #include "wine/port.h" +#include #include #include +#ifdef HAVE_SYS_MMAN_H +# include +#endif #ifdef HAVE_UNISTD_H # include #endif @@ -81,6 +85,18 @@ static const char *build_new_path( const char *path, const char *name ) return ret; } +static void check_vmsplit( void *stack ) +{ + if (stack < (void *)0x80000000) + { + /* if the stack is below 0x80000000, assume we can safely try a munmap there */ + if (munmap( (void *)0x80000000, 1 ) == -1 && errno == EINVAL) + fprintf( stderr, + "Warning: memory above 0x80000000 doesn't seem to be accessible.\n" + "Wine requires a 3G/1G user/kernel memory split to work properly.\n" ); + } +} + /********************************************************************** * main */ @@ -103,6 +119,7 @@ int main( int argc, char *argv[] ) loader = new_name; } + check_vmsplit( &argc ); wine_exec_wine_binary( NULL, argv, loader ); fprintf( stderr, "wine: could not exec %s\n", threads ); exit(1);