On 2023/6/13 17:06, Xiaotian Wu wrote:
Because the binutils of the loongarch architecture adds relaxation support [1],
the next version of binutils will not be able to build grub.

We can simplify the sentence a bit, like "A working grub cannot be built with upcoming binutils and gcc, because linker relaxation was added [1] causing new unsupported relocations to appear in modules".


So we use the -mno-relax cflags to disable gcc to generate relaxation
relocations to enhance the compatibility of grub.

Better mention the justification for not enabling relaxation, i.e. because bootloaders are not exactly performance-sensitive code.

Also we can make the sentence more natural, like "So we pass -mno-relax to gcc if it is supported, to disable relaxation and make grub forward-compatible with new toolchains".


[1]: 
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=56576f4a722b7398d35802ecf7d4185c27d6d69b

Signed-off-by: Xiaotian Wu <wuxiaot...@loongson.cn>
---
  configure.ac | 12 ++++++++++++
  1 file changed, 12 insertions(+)

diff --git a/configure.ac b/configure.ac
index d9f088d12..cd3cc6ba8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -874,6 +874,18 @@ if test "x$target_cpu" = xloongarch64; then
      TARGET_CFLAGS="$TARGET_CFLAGS -mno-explicit-relocs -fno-plt"
      TARGET_CCASFLAGS="$TARGET_CCASFLAGS -mno-explicit-relocs -fno-plt"
    fi
+
+  AC_CACHE_CHECK([whether _mno_relax works], [grub_cv_cc_mno_relax], [

I don't have a strong opinion as to whether a justification should be put here above the check though.

+    CFLAGS="$TARGET_CFLAGS -mno-relax -Werror"
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
+       [grub_cv_cc_mno_relax=yes],
+       [grub_cv_cc_mno_relax=no])
+  ])
+  if test "x$grub_cv_cc_mno_relax" = xyes; then
+    TARGET_CFLAGS="$TARGET_CFLAGS -mno-relax"
+    TARGET_CCASFLAGS="$TARGET_CCASFLAGS -mno-relax"
+  fi
+
    TARGET_CFLAGS="$TARGET_CFLAGS -Wa,-mla-global-with-abs"
    TARGET_CCASFLAGS="$TARGET_CCASFLAGS -Wa,-mla-global-with-abs"
  fi

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to