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