From a29f317af1014848a6538e200ed32481566c90f5 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Wed, 18 Dec 2013 13:33:39 +0100 Subject: [PATCH] Allow compilation without thumb-interwork as long as no thumb is involved or only thumb2 is used. --- ChangeLog | 5 +++++ INSTALL | 1 + conf/Makefile.common | 2 -- configure.ac | 23 +++++++++++++++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 80c7cafa9..4cb362c70 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-12-18 Vladimir Serbinenko + + Allow compilation without thumb-interwork as long as no thumb is + involved or only thumb2 is used. + 2013-12-18 Vladimir Serbinenko Use -Wl,--no-relax rather than -mno-relax for uniformity. diff --git a/INSTALL b/INSTALL index 6ee21155d..afc957ca9 100644 --- a/INSTALL +++ b/INSTALL @@ -17,6 +17,7 @@ configuring the GRUB. much bigger binaries. earlier versions not tested Note: clang 3.2 or later works for arm + None of tested clang versions generated usable thumb code earlier versions not tested Note: clang 3.3 or later works for arm64 earlier versions have no arm64 support diff --git a/conf/Makefile.common b/conf/Makefile.common index 015cd29ce..6128797ed 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -15,8 +15,6 @@ if COND_sparc64_emu LDFLAGS_PLATFORM = -Wl,--no-relax endif if COND_arm - CFLAGS_PLATFORM += -mthumb-interwork - CCASFLAGS_PLATFORM = -mthumb-interwork if !COND_emu LDFLAGS_PLATFORM = -Wl,--wrap=__clear_cache endif diff --git a/configure.ac b/configure.ac index cc66ea912..5a2eea4ef 100644 --- a/configure.ac +++ b/configure.ac @@ -871,6 +871,29 @@ if test "x$target_cpu" = xarm; then if test "x$grub_cv_cc_mlong_calls" = xyes; then TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls" fi + AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [ + CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_mthumb_interwork=yes], + [grub_cv_cc_mthumb_interwork=no]) + ]) + if test "x$grub_cv_cc_mthumb_interwork" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork" + elif test "x$grub_cv_cc_target_clang" = xno ; then + AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork]) + else + CFLAGS="$TARGET_CFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ +#if defined (__thumb__) && !defined (__thumb2__) +#error thumb without interworking +#endif +]])], + [no_interwork_ok=yes], + [no_interwork_ok=no]) + if test x$no_interwork_ok = xno ; then + AC_MSG_ERROR([attempt to compile to thumb with no thumb interwork]) + fi + fi fi # -- 2.47.2