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

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).
oldstable
Francois Gouget 2010-11-26 16:18:32 +01:00 committed by Alexandre Julliard
parent e609bb0453
commit 5f694ddf4c
2 changed files with 10 additions and 2 deletions

6
configure vendored
View File

@ -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

View File

@ -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