configure: Load wine lower in memory on FreeBSD to leave more space for mmap() and malloc().

Francois Gouget fgouget at free.fr
Fri Nov 26 09:18:32 CST 2010


If not provided an explicit address, FreeBSD won't mmap any memory below the executable. In particularly this means any memory below that is unavailable to dlopen() and malloc().
This fixes the bug where large WineLib binaries, in particular winetest, failed to load because there was not enough space left for them and the native libraries they linked to.
The drawback is that we can no longer load very large Windows executables (between about 1.5 and 2 GB).
---

 configure    |    6 +++++-
 configure.ac |    6 +++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/configure b/configure
index b9ff5e1..dc2958f 100755
--- a/configure
+++ b/configure
@@ -6897,7 +6897,11 @@ eval ac_res=\$$as_ac_var
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 if test `eval 'as_val=${'$as_ac_var'};$as_echo "$as_val"'` = yes; then :
-  LDEXECFLAGS="$LDEXECFLAGS -Wl,--section-start,.interp=0x7bf00400"
+  case $host_os in
+                           freebsd*)  LDEXECFLAGS="$LDEXECFLAGS -Wl,--section-start,.interp=0x60000400" ;;
+                           *) LDEXECFLAGS="$LDEXECFLAGS -Wl,--section-start,.interp=0x7bf00400" ;;
+                           esac
+
 fi
           # Extract the first word of "prelink", so it can be a program name with args.
 set dummy prelink; ac_word=$2
diff --git a/configure.ac b/configure.ac
index 6ad4532..5a94492 100644
--- a/configure.ac
+++ b/configure.ac
@@ -792,7 +792,11 @@ case $host_os in
       case $host_cpu in
         *i[[3456789]]86* | x86_64)
           WINE_TRY_CFLAGS([-Wl,--section-start,.interp=0x7bf00400],
-                          [LDEXECFLAGS="$LDEXECFLAGS -Wl,--section-start,.interp=0x7bf00400"])
+                          [case $host_os in
+                           freebsd*)  LDEXECFLAGS="$LDEXECFLAGS -Wl,--section-start,.interp=0x60000400" ;;
+                           *) LDEXECFLAGS="$LDEXECFLAGS -Wl,--section-start,.interp=0x7bf00400" ;;
+                           esac
+                          ])
           AC_PATH_PROG(PRELINK, prelink, false, [/sbin /usr/sbin $PATH])
           if test "x$PRELINK" = xfalse
           then
-- 
1.7.2.3




More information about the wine-patches mailing list