diff --git a/1008-loongarch-Disable-relaxation-relocations.patch b/1008-loongarch-Disable-relaxation-relocations.patch new file mode 100644 index 0000000..0ee70f9 --- /dev/null +++ b/1008-loongarch-Disable-relaxation-relocations.patch @@ -0,0 +1,64 @@ +From 115c628cc44f89207858d0c79e970e43da75c772 Mon Sep 17 00:00:00 2001 +From: Yingkun Meng +Date: Tue, 5 Dec 2023 19:22:14 +0800 +Subject: [PATCH] loongarch: Disable relaxation relocations + +commit 87247635c0d583cfbc1947107d23b40877d107b8 upstream. + +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 +Signed-off-by: Yingkun Meng +Change-Id: I09ef306dc8a0f8a59e9b7dbc53ae3fd3cc09ec55 +--- + configure.ac | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 0db9d7d111b8..e010bc0db465 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -908,6 +908,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.33.0 + diff --git a/grub.patches b/grub.patches index 72f00c7..dc63a93 100644 --- a/grub.patches +++ b/grub.patches @@ -342,3 +342,4 @@ Patch0342: backport-fs-ntfs-Fix-an-OOB-read-when-parsing-a-volume-label.patch Patch0343: backport-fs-ntfs-Make-code-more-readable.patch Patch0344: add-TPCM-support-with-ipmi-channel.patch Patch0345: skip-verification-when-not-loading-grub.cfg.patch +Patch0346: 1008-loongarch-Disable-relaxation-relocations.patch diff --git a/grub2.spec b/grub2.spec index 9e24e7b..34cbdd0 100644 --- a/grub2.spec +++ b/grub2.spec @@ -14,7 +14,7 @@ Name: grub2 Epoch: 1 Version: 2.06 -Release: 42 +Release: 43 Summary: Bootloader with support for Linux, Multiboot and more License: GPLv3+ URL: http://www.gnu.org/software/grub/ @@ -448,6 +448,12 @@ fi %{_datadir}/man/man* %changelog +* Mon Dec 25 2023 mengyingkun - 1:2.06-43 +- Type:requirement +- CVE:NA +- SUG:NA +- DESC:loongarch: Disable relaxation relocations + * Wed Dec 20 2023 zhangqiumiao - 1:2.06-42 - Type:requirement - CVE:NA