From 374a2c3ae41efcdcd99c5c0fb2220d03ea14f372 Mon Sep 17 00:00:00 2001 From: Fabian Vogt Date: Thu, 29 Jun 2023 09:59:35 +0200 Subject: [PATCH 2/4] Revert "loader: Always build the main loader as PIE if we have a preloader." This reverts commit c55578f3a54c63084657e7d79c043b22b10df989. --- configure | 93 +++++++++++++++++++++++++++++++++------------------- configure.ac | 31 +++++++++--------- 2 files changed, 76 insertions(+), 48 deletions(-) diff --git a/configure b/configure index 635e3b7f25f..4d00a023d18 100755 --- a/configure +++ b/configure @@ -10245,77 +10245,104 @@ if test "x$ac_cv_cflags__Wl___export_dynamic" = xyes then : WINELOADER_LDFLAGS="-Wl,--export-dynamic" fi + WINEPRELOADER_LDFLAGS="-static -nostartfiles -nodefaultlibs -Wl,-Ttext=0x7d400000" - case $host_os in - linux*) - as_fn_append WINELOADER_LDFLAGS " -pie" - WINEPRELOADER_LDFLAGS="-static -nostartfiles -nodefaultlibs -Wl,-Ttext=0x7d400000" - ;; - *) - case $HOST_ARCH in - i386|arm) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -Wl,-Ttext-segment=0x60000000" >&5 -printf %s "checking whether the compiler supports -Wl,-Ttext-segment=0x60000000... " >&6; } -if test ${ac_cv_cflags__Wl__Ttext_segment_0x60000000+y} + case $host_cpu in + *i[3456789]86* | arm*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -Wl,-Ttext-segment=0x7bc00000" >&5 +printf %s "checking whether the compiler supports -Wl,-Ttext-segment=0x7bc00000... " >&6; } +if test ${ac_cv_cflags__Wl__Ttext_segment_0x7bc00000+y} then : printf %s "(cached) " >&6 else $as_nop ac_wine_try_cflags_saved=$CFLAGS -CFLAGS="$CFLAGS -Wl,-Ttext-segment=0x60000000" +CFLAGS="$CFLAGS -Wl,-Ttext-segment=0x7bc00000" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(int argc, char **argv) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : - ac_cv_cflags__Wl__Ttext_segment_0x60000000=yes + ac_cv_cflags__Wl__Ttext_segment_0x7bc00000=yes else $as_nop - ac_cv_cflags__Wl__Ttext_segment_0x60000000=no + ac_cv_cflags__Wl__Ttext_segment_0x7bc00000=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$ac_wine_try_cflags_saved fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags__Wl__Ttext_segment_0x60000000" >&5 -printf "%s\n" "$ac_cv_cflags__Wl__Ttext_segment_0x60000000" >&6; } -if test "x$ac_cv_cflags__Wl__Ttext_segment_0x60000000" = xyes +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags__Wl__Ttext_segment_0x7bc00000" >&5 +printf "%s\n" "$ac_cv_cflags__Wl__Ttext_segment_0x7bc00000" >&6; } +if test "x$ac_cv_cflags__Wl__Ttext_segment_0x7bc00000" = xyes then : - as_fn_append WINELOADER_LDFLAGS " -Wl,-Ttext-segment=0x60000000" + case $host_os in + freebsd* | kfreebsd*-gnu) WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -Wl,-Ttext-segment=0x60000000" ;; + *) WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -Wl,-Ttext-segment=0x7d000000" ;; + esac else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -Wl,--section-start,.interp=0x60000400" >&5 -printf %s "checking whether the compiler supports -Wl,--section-start,.interp=0x60000400... " >&6; } -if test ${ac_cv_cflags__Wl___section_start__interp_0x60000400+y} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -Wl,--section-start,.interp=0x7d000400" >&5 +printf %s "checking whether the compiler supports -Wl,--section-start,.interp=0x7d000400... " >&6; } +if test ${ac_cv_cflags__Wl___section_start__interp_0x7d000400+y} then : printf %s "(cached) " >&6 else $as_nop ac_wine_try_cflags_saved=$CFLAGS -CFLAGS="$CFLAGS -Wl,--section-start,.interp=0x60000400" +CFLAGS="$CFLAGS -Wl,--section-start,.interp=0x7d000400" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(int argc, char **argv) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : - ac_cv_cflags__Wl___section_start__interp_0x60000400=yes + ac_cv_cflags__Wl___section_start__interp_0x7d000400=yes else $as_nop - ac_cv_cflags__Wl___section_start__interp_0x60000400=no + ac_cv_cflags__Wl___section_start__interp_0x7d000400=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$ac_wine_try_cflags_saved fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags__Wl___section_start__interp_0x60000400" >&5 -printf "%s\n" "$ac_cv_cflags__Wl___section_start__interp_0x60000400" >&6; } -if test "x$ac_cv_cflags__Wl___section_start__interp_0x60000400" = xyes +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags__Wl___section_start__interp_0x7d000400" >&5 +printf "%s\n" "$ac_cv_cflags__Wl___section_start__interp_0x7d000400" >&6; } +if test "x$ac_cv_cflags__Wl___section_start__interp_0x7d000400" = xyes then : - as_fn_append WINELOADER_LDFLAGS " -Wl,--section-start,.interp=0x60000400" + case $host_os in + freebsd* | kfreebsd*-gnu) WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -Wl,--section-start,.interp=0x60000400" ;; + *) WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -Wl,--section-start,.interp=0x7d000400" ;; + esac fi fi - ;; - *) - as_fn_append WINELOADER_LDFLAGS " -pie" - ;; - esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -Wl,-z,max-page-size=0x1000" >&5 +printf %s "checking whether the compiler supports -Wl,-z,max-page-size=0x1000... " >&6; } +if test ${ac_cv_cflags__Wl__z_max_page_size_0x1000+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_wine_try_cflags_saved=$CFLAGS +CFLAGS="$CFLAGS -Wl,-z,max-page-size=0x1000" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int main(int argc, char **argv) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_cflags__Wl__z_max_page_size_0x1000=yes +else $as_nop + ac_cv_cflags__Wl__z_max_page_size_0x1000=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +CFLAGS=$ac_wine_try_cflags_saved +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags__Wl__z_max_page_size_0x1000" >&5 +printf "%s\n" "$ac_cv_cflags__Wl__z_max_page_size_0x1000" >&6; } +if test "x$ac_cv_cflags__Wl__z_max_page_size_0x1000" = xyes +then : + WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -Wl,-z,max-page-size=0x1000" +fi + ;; + *) + WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -pie" ;; esac ;; diff --git a/configure.ac b/configure.ac index c8880886b1c..2255db13046 100644 --- a/configure.ac +++ b/configure.ac @@ -769,24 +769,25 @@ case $host_os in WINE_TRY_CFLAGS([-Wl,-z,defs],[UNIXLDFLAGS="$UNIXLDFLAGS -Wl,-z,defs"]) WINE_TRY_CFLAGS([-Wl,--export-dynamic],[WINELOADER_LDFLAGS="-Wl,--export-dynamic"]) + WINEPRELOADER_LDFLAGS="-static -nostartfiles -nodefaultlibs -Wl,-Ttext=0x7d400000" - case $host_os in - linux*) - AS_VAR_APPEND([WINELOADER_LDFLAGS],[" -pie"]) - WINEPRELOADER_LDFLAGS="-static -nostartfiles -nodefaultlibs -Wl,-Ttext=0x7d400000" + case $host_cpu in + *i[[3456789]]86* | arm*) + WINE_TRY_CFLAGS([-Wl,-Ttext-segment=0x7bc00000], + [case $host_os in + freebsd* | kfreebsd*-gnu) WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -Wl,-Ttext-segment=0x60000000" ;; + *) WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -Wl,-Ttext-segment=0x7d000000" ;; + esac], + [WINE_TRY_CFLAGS([-Wl,--section-start,.interp=0x7d000400], + [case $host_os in + freebsd* | kfreebsd*-gnu) WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -Wl,--section-start,.interp=0x60000400" ;; + *) WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -Wl,--section-start,.interp=0x7d000400" ;; + esac])]) + WINE_TRY_CFLAGS([-Wl,-z,max-page-size=0x1000], + [WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -Wl,-z,max-page-size=0x1000"]) ;; *) - case $HOST_ARCH in - i386|arm) - WINE_TRY_CFLAGS([-Wl,-Ttext-segment=0x60000000], - [AS_VAR_APPEND([WINELOADER_LDFLAGS],[" -Wl,-Ttext-segment=0x60000000"])], - [WINE_TRY_CFLAGS([-Wl,--section-start,.interp=0x60000400], - [AS_VAR_APPEND([WINELOADER_LDFLAGS],[" -Wl,--section-start,.interp=0x60000400"])])]) - ;; - *) - AS_VAR_APPEND([WINELOADER_LDFLAGS],[" -pie"]) - ;; - esac + WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -pie" ;; esac ;; -- 2.41.0