On Thu, Jun 15, 2023 at 10:04:23AM +0800, Xiaotian Wu wrote:
> 在 2023-06-13星期二的 20:09 +0800,Xi Ruoyao via Grub-devel写道:
> > On Tue, 2023-06-13 at 13:39 +0200, Daniel Kiper wrote:
> > > On Tue, Jun 13, 2023 at 05:06:35PM +0800, 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.
> > > >
> > > > So we use the -mno-relax cflags to disable gcc to generate
> > > > relaxation
> > > > relocations to enhance the compatibility of grub.
> > > >
> > > > [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], [
> > > > +    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
> > >
> > > Could not you reuse sparc64 code which is ~100 lines below? If not
> > > please make loongarch code as similar as possible to the sparc64
> > > one.
> >
> > More important reason is we need to try -Wa,-mno-relax along with -
> > mno-
> > relax, like SPARC64.  GCC 13 and earlier does not accept -mno-relax,
> > but
> > the assembler itself can still generate R_LARCH_RELAX etc.  So if a
> > distro uses GCC 13 alongside Binutils 2.41, we'll need -Wa,-mno-
> > relax.
> >
> > Note that Binutils 2.41 will be released in Feb 2024 but GCC 14 will
> > be
> > released in mid 2024 (Apr to Jun) so it can be expected that some
> > distros will really use Binutils 2.41 and GCC 13.
>
> Code for sparc64 cannot be reused.
> Because sparc64 sets LDFLAGS, and loongarch needs to set CFLAGS.
> If only LDFLAGS is used on loongarch, gcc still generates .o files with
> RELAX.

The v4 LGTM but please add this explanation or something like that to
the commit message and send v5.

Daniel

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

Reply via email to