TARGET_CCASFLAGS="$TARGET_CCASFLAGS -Wa,-mla-global-with-abs"
fi
+if test "x$target_cpu" = xriscv64 || test "x$target_cpu" = xriscv32; then
+ AC_CACHE_CHECK([for no-relax options], grub_cv_target_cc_mno_relax, [
+ grub_cv_target_cc_mno_relax=no
+ for cand in "-mno-relax" "-Wa,-mno-relax"; do
+ if test x"$grub_cv_target_cc_mno_relax" != xno ; then
+ break
+ fi
+ CFLAGS="$TARGET_CFLAGS $cand -Werror"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ asm (".globl start; start:");
+ void __main (void);
+ void __main (void) {}
+ int main (void);
+ ]], [[]])], [grub_cv_target_cc_mno_relax="$cand"], [])
+ done
+ ])
+
+ CFLAGS="$TARGET_CFLAGS"
+
+ if test x"$grub_cv_target_cc_mno_relax" != xno ; then
+ TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mno_relax"
+ TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_mno_relax"
+ fi
+fi
+
# GRUB doesn't use float or doubles at all. Yet some toolchains may decide
# that floats are a good fit to run instead of what's written in the code.
# Given that floating point unit is disabled (if present to begin with)