From: Colin Watson Date: Mon, 26 Sep 2011 09:15:32 +0000 (+0100) Subject: * configure.ac: Build stage2 with -fno-reorder-functions to prevent X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3af093a503f2fd305facd313b7005fa8878fcf55;p=thirdparty%2Fgrub.git * configure.ac: Build stage2 with -fno-reorder-functions to prevent unlikely-to-be-executed functions being reordered before _start with GCC 4.6. Fixes Ubuntu bug #837815. --- diff --git a/ChangeLog b/ChangeLog index 565a4325b..3f51b8b37 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2011-09-26 Colin Watson + + * configure.ac: Build stage2 with -fno-reorder-functions to prevent + unlikely-to-be-executed functions being reordered before _start with + GCC 4.6. + Fixes Ubuntu bug #837815. + 2010-01-25 Robert Millan * stage2/imgact_aout.h: Rewrite using aout.h from GRUB 1.97.2 as diff --git a/configure.ac b/configure.ac index f462677a6..c862eb2e6 100644 --- a/configure.ac +++ b/configure.ac @@ -114,6 +114,22 @@ if test "x$ac_cv_prog_gcc" = xyes; then if test "x$grub_cv_cc_no_stack_protector" = xyes; then STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-stack-protector" fi + # GCC >= 3.3 supports -fno-reorder-functions; this defends us against + # unlikely-to-be-executed functions being linked before _start with GCC + # >= 4.6. + AC_CACHE_CHECK([whether gcc has -fno-reorder-functions], + no_reorder_functions_flag, [ + saved_CFLAGS=$CFLAGS + CFLAGS="-fno-reorder-functions" + AC_TRY_COMPILE(, + , + no_reorder_functions_flag=yes, + no_reorder_functions_flag=no) + CFLAGS=$saved_CFLAGS + ]) + if test "x$no_reorder_functions_flag" = xyes; then + STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-reorder-functions" + fi fi fi