summarylogtreecommitdiffstats
path: root/no-reorder-functions.patch
diff options
context:
space:
mode:
Diffstat (limited to 'no-reorder-functions.patch')
-rw-r--r--no-reorder-functions.patch27
1 files changed, 27 insertions, 0 deletions
diff --git a/no-reorder-functions.patch b/no-reorder-functions.patch
new file mode 100644
index 000000000000..4ec4b3558552
--- /dev/null
+++ b/no-reorder-functions.patch
@@ -0,0 +1,27 @@
+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
+