Re: [PATCH v5 1/1] loongarch: disable relaxation relocations

2023-06-21 Thread Daniel Kiper
On Thu, Jun 15, 2023 at 08:10:38PM +0800, Xiaotian Wu wrote:
> 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 pass -mno-relax to gcc if it is supported, to disable relaxation and 
> make
> grub forward-compatible with new toolchains.
>
> While similar code already exists for sparc64 in configure.ac, sparc64 sets
> LDFLAGS while loongarch requires CFLAGS to be set. If we only set LDFLAGS on
> loongarch, gcc will still generate relaxation relocations in the .o files, so
> the sparc64 code cannot be reused.
>
> [1]: 
> https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=56576f4a722b7398d35802ecf7d4185c27d6d69b
>
> Signed-off-by: Xiaotian Wu 

Reviewed-by: Daniel Kiper 

Daniel

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


[PATCH v5 1/1] loongarch: disable relaxation relocations

2023-06-15 Thread Xiaotian Wu
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 pass -mno-relax to gcc if it is supported, to disable relaxation and make
grub forward-compatible with new toolchains.

While similar code already exists for sparc64 in configure.ac, sparc64 sets
LDFLAGS while loongarch requires CFLAGS to be set. If we only set LDFLAGS on
loongarch, gcc will still generate relaxation relocations in the .o files, so
the sparc64 code cannot be reused.

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

Signed-off-by: Xiaotian Wu 
---
 configure.ac | 23 +++
 1 file changed, 23 insertions(+)

diff --git a/configure.ac b/configure.ac
index d9f088d12..a0ea5beae 100644
--- a/configure.ac
+++ b/configure.ac
@@ -874,6 +874,29 @@ 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([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
+
   TARGET_CFLAGS="$TARGET_CFLAGS -Wa,-mla-global-with-abs"
   TARGET_CCASFLAGS="$TARGET_CCASFLAGS -Wa,-mla-global-with-abs"
 fi
-- 
2.40.1


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