=== modified file 'ChangeLog' --- ChangeLog 2010-01-25 19:13:33 +0000 +++ ChangeLog 2011-09-26 09:15:32 +0000 @@ -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 === modified file 'configure.ac' --- configure.ac 2010-01-21 17:17:59 +0000 +++ configure.ac 2011-09-26 09:15:32 +0000 @@ -114,6 +114,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