Index: b/configure.ac =================================================================== --- a/configure.ac +++ b/configure.ac @@ -112,6 +112,22 @@ 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