[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Disable movw/movt with clang
From: |
Vladimir 'phcoder' Serbinenko |
Subject: |
Re: Disable movw/movt with clang |
Date: |
Sat, 28 Jan 2017 11:50:02 +0000 |
> diff --git a/configure.ac b/configure.ac
> index 4e980c5..ab7fa92 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1152,6 +1152,16 @@ if test "$target_cpu"-"$platform" = x86_64-efi; then
> fi
>
> if test "x$target_cpu" = xarm; then
> + AC_CACHE_CHECK([whether option -mllvm -arm-use-movt=0 works], grub_cv_cc_mllvm_arm_use_movt, [
> + CPPFLAGS="$TARGET_CPPFLAGS -mllvm -arm-use-movt=0 -Werror"
> + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
> + [grub_cv_cc_mllvm_arm_use_movt=yes],
> + [grub_cv_cc_mllvm_arm_use_movt=no])
> + ])
> + if test "x$grub_cv_cc_mllvm_arm_use_movt" = xyes; then
> + # A trick so that clang doesn't see it on link stage
> + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -mllvm -arm-use-movt=0"
> + fi
> AC_CACHE_CHECK([whether option -mlong-calls works], grub_cv_cc_mlong_calls, [
> CFLAGS="$TARGET_CFLAGS -mlong-calls -Werror"
> AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
Is this option supported by all clang versions? What should we do if
this is *not* supported? As far as I understand commit message this
leads to broken code?
The only other workaround there is, is to use -march=armv6. The window for the problem is narrow as apparently there wasn't a lot of time between use of movt/movw and the option to disable it.
The problem when exists is successfully detected by module-verifier.
Is "-mllvm -arm-use-movt=0" different from "-mno-movt" which appears to
be "official" way to disable it?
I peeked this option at uboot which has the same problem.
Mno-movt needs clang 3.8 whereas the llvm variant only 3.7. I'm unsure when movt/movw was introduced.