]> git.proxmox.com Git - grub2.git/commitdiff
Ensure that -mno-unaligned-access or some equivalent option is used.
authorVladimir Serbinenko <phcoder@gmail.com>
Sat, 30 Nov 2013 10:31:14 +0000 (11:31 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Sat, 30 Nov 2013 10:31:14 +0000 (11:31 +0100)
ChangeLog
acinclude.m4
configure.ac

index bf0124c11e84f3a8af0ef7b6c5c477b8d2a1509a..ead7b2620245cb58cffdc4632b6aa9e0a2319089 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-11-30  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Ensure that -mno-unaligned-access or some equivalent option is used.
+
 2013-11-30  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/lib/libgcrypt/mpi/longlong.h: Fix compilation error with
index 78212133d2687db35a92b075eac5712dad13b4f8..0e867e35ce7687abe8f20d7b7f4d84e977ff99ec 100644 (file)
@@ -474,23 +474,3 @@ dnl program.
 AC_DEFUN([grub_TRANSFORM],[dnl
 AC_SUBST(AS_TR_SH([$1]), [`AS_ECHO([$1]) | sed "$program_transform_name"`])dnl
 ])
-
-dnl Check if the C compiler supports `-mno-unaligned-access'.
-AC_DEFUN([grub_CHECK_NO_UNALIGNED_ACCESS],[
-[# foobar
-nua_possible=yes]
-AC_MSG_CHECKING([whether `$CC' supports `-mno-unaligned-access'])
-AC_LANG_CONFTEST([AC_LANG_SOURCE([[
-int main() {
-       return 0;
-}
-]])])
-
-[if eval "$ac_compile -S -mno-unaligned-access -o conftest.s" 2> /dev/null; then]
-  AC_MSG_RESULT([yes])
-  [rm -f conftest.s
-else
-  nua_possible=no]
-  AC_MSG_RESULT([no])
-[fi]
-])
index 1989f87b7b4446aef8337ac797514743a96ac786..fe6028cfbc32c47ae5c168d79bdf2ab24bd56572 100644 (file)
@@ -839,11 +839,26 @@ fi
 
 CFLAGS="$TARGET_CFLAGS"
 
-# -mno-unaligned-access
+# -mno-unaligned-access -mstrict-align
 if test "$target_cpu" = arm; then
-  grub_CHECK_NO_UNALIGNED_ACCESS
-  if test x"$nua_possible" = xyes; then
-    TARGET_CFLAGS="$TARGET_CFLAGS -mno-unaligned-access"
+  AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
+    grub_cv_target_cc_strict_align=unknown
+    for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
+      CFLAGS="$TARGET_CFLAGS $arg -Werror"
+      LDFLAGS="$TARGET_LDFLAGS"
+      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
+      if test x"$flag" = x1; then
+        grub_cv_target_cc_strict_align="$arg"
+       break;
+      fi
+    done])
+
+  if test x"$grub_cv_target_cc_strict_align" = xunknown; then
+    AC_MSG_ERROR([couldnt instruct compiler not to use unaligned access])
+  fi
+  TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_strict_align"
+  if test x"$grub_cv_target_cc_strict_align" = x"-Xclang -mstrict-align"; then
+    TARGET_LDFLAGS="$TARGET_LDFLAGS -Qunused-arguments"
   fi
 fi