From: Vladimir Serbinenko Date: Mon, 30 Jan 2017 13:38:50 +0000 (+0100) Subject: Fix -nopie/-nopie check. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e1f9050f1af947eb9f0065dc165b8deca40d9570;p=thirdparty%2Fgrub.git Fix -nopie/-nopie check. We don't use lgcc_s but missing lgcc_s or another library cause test to fail. So use -nostdlib. Clang uses -nopie rather than -no-pie. Check both and use whichever one works. --- diff --git a/acinclude.m4 b/acinclude.m4 index 7884c1bb5..e1116d9ba 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -395,7 +395,7 @@ AC_DEFUN([grub_CHECK_NO_PIE], [AC_MSG_CHECKING([whether linker accepts -no-pie]) AC_CACHE_VAL(grub_cv_cc_ld_no_pie, [save_LDFLAGS="$LDFLAGS" -LDFLAGS="$LDFLAGS -no-pie" +LDFLAGS="$LDFLAGS -no-pie -nostdlib" AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [grub_cv_cc_ld_no_pie=yes], [grub_cv_cc_ld_no_pie=no]) @@ -408,6 +408,23 @@ if test "x$grub_cv_cc_ld_no_pie" = xyes ; then fi ]) +AC_DEFUN([grub_CHECK_NO_PIE_ONEWORD], +[AC_MSG_CHECKING([whether linker accepts -nopie]) +AC_CACHE_VAL(grub_cv_cc_ld_no_pie_oneword, +[save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS -nopie -nostdlib" +AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_ld_no_pie_oneword=yes], + [grub_cv_cc_ld_no_pie_oneword=no]) +LDFLAGS="$save_LDFLAGS" +]) +AC_MSG_RESULT([$grub_cv_cc_ld_no_pie_oneword]) +nopie_oneword_possible=no +if test "x$grub_cv_cc_ld_no_pie_oneword" = xyes ; then + nopie_oneword_possible=yes +fi +]) + dnl Check if the C compiler supports `-fPIC'. AC_DEFUN([grub_CHECK_PIC],[ [# Position independent executable. diff --git a/configure.ac b/configure.ac index 33146b41a..f1a4d39b3 100644 --- a/configure.ac +++ b/configure.ac @@ -1202,6 +1202,7 @@ CFLAGS="$TARGET_CFLAGS" # Position independent executable. grub_CHECK_PIE grub_CHECK_NO_PIE +grub_CHECK_NO_PIE_ONEWORD [# Need that, because some distributions ship compilers that include # `-fPIE' or '-fpie' and '-pie' in the default specs. if [ x"$pie_possible" = xyes ]; then @@ -1209,6 +1210,9 @@ if [ x"$pie_possible" = xyes ]; then fi if [ x"$nopie_possible" = xyes ] && [ x"$pie_possible" = xyes ]; then TARGET_LDFLAGS="$TARGET_LDFLAGS -no-pie" +fi +if [ x"$nopie_oneword_possible" = xyes ] && [ x"$pie_possible" = xyes ]; then + TARGET_LDFLAGS="$TARGET_LDFLAGS -nopie" fi] CFLAGS="$TARGET_CFLAGS"