[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2] Explicitly check for linking format to use for efiemu64 m
From: |
Andrey Borzenkov |
Subject: |
Re: [PATCH v2] Explicitly check for linking format to use for efiemu64 module |
Date: |
Mon, 25 Nov 2013 22:34:38 +0400 |
В Mon, 25 Nov 2013 19:19:00 +0100
Vladimir 'φ-coder/phcoder' Serbinenko <address@hidden> пишет:
> On 25.11.2013 19:13, Andrey Borzenkov wrote:
> > Similar to check for target linking format, also check for efiemu64
> > instead of hardcoding -melf_x86_64. This fixes compilation on *BSD
> > variants. We cannot easily reuse main target check because platforms
> > are different (main target is 32 bit and efiemu64 - 64 bit).
> >
> > This commit adds EFIEMU64_LINK_FORMAT that contains detected
> > link option and is used in efiemu64.o linking instead of hardcoded
> > value.
> Go ahead
Committed with additional comment in grub-core/Makefile.am that
-arch,x86_64 == Apple linker
> >
> > Reported-By: Beeblebrox <address@hidden>
> > ---
> > configure.ac | 29 +++++++++++++++++++++++++++--
> > grub-core/Makefile.am | 9 ++++-----
> > 2 files changed, 31 insertions(+), 7 deletions(-)
> >
> > diff --git a/configure.ac b/configure.ac
> > index d1292c9..1989f87 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -654,6 +654,30 @@ if test x"$efiemu_excuse" = x ; then
> > efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone
> > -nostdlib"
> > fi
> > fi
> > +if test x"$efiemu_excuse" = x ; then
> > + AC_CACHE_CHECK([for efiemu64 linking format],
> > [grub_cv_target_cc_efiemu64_link_format], [
> > + grub_cv_target_cc_efiemu64_link_format=unknown
> > + for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd
> > -melf_x86_64_haiku -arch,x86_64; do
> > + CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
> > + LDFLAGS="-m64 -Wl,$format -nostdlib -static"
> > + AC_LINK_IFELSE([AC_LANG_PROGRAM([[
> > + asm (".globl start; start:");
> > + asm (".globl _start; _start:");
> > + asm (".globl __start; __start:");
> > + void __main (void);
> > + void __main (void) {}
> > + ]], [[]])], [flag=1], [flag=0])
> > + if test x"$flag" = x1; then
> > + grub_cv_target_cc_efiemu64_link_format="$format"
> > + break;
> > + fi
> > + done])
> > + if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
> > + efiemu_excuse="no suitable link format for efiemu64 found"
> > + else
> > + EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format"
> > + fi
> > +fi
> > if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
> > AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be
> > compiled])
> > fi
> > @@ -663,11 +687,12 @@ else
> > enable_efiemu=no
> > fi
> > AC_SUBST([enable_efiemu])
> > +AC_SUBST([EFIEMU64_LINK_FORMAT])
> >
> > CFLAGS="$TARGET_CFLAGS"
> >
> > if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
> > - AC_CACHE_CHECK([for linking format], [grub_cv_target_cc_link_format], [
> > + AC_CACHE_CHECK([for target linking format],
> > [grub_cv_target_cc_link_format], [
> > grub_cv_target_cc_link_format=unknown
> > for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd
> > -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -m${target_cpu}pe
> > -arch,${target_cpu}; do
> > if test x${target_cpu} != xi386 && test x$format = x${target_cpu}pe;
> > then
> > @@ -681,7 +706,7 @@ if test x"$target_cpu" = xi386 || test x"$target_cpu" =
> > xx86_64; then
> > asm (".globl __start; __start:");
> > void __main (void);
> > void __main (void) {}
> > - ]], [[]])], [flag=1], [])
> > + ]], [[]])], [flag=1], [flag=0])
> > if test x"$flag" = x1; then
> > grub_cv_target_cc_link_format="$format"
> > break;
> > diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am
> > index e2da083..3ca52ea 100644
> > --- a/grub-core/Makefile.am
> > +++ b/grub-core/Makefile.am
> > @@ -399,7 +399,7 @@ efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF)
> > fi
> >
> > efiemu64_c.o: efiemu/runtime/efiemu.c
> > - if test "x$(TARGET_APPLE_LINKER)" = x1; then \
> > + if test "x$(EFIEMU64_LINK_FORMAT)" = x-arch,x86_64; then \
> > $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU)
> > $(CPPFLAGS_DEFAULT) -m64 -nostdlib -Wall -Werror -mno-red-zone -c -o $@ $<
> > || exit 1; \
> > else \
> > $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU)
> > $(CPPFLAGS_DEFAULT) -m64 -nostdlib -Wall -Werror -O2 -mcmodel=large
> > -mno-red-zone -c -o $@ $< || exit 1; \
> > @@ -407,7 +407,7 @@ efiemu64_c.o: efiemu/runtime/efiemu.c
> >
> > efiemu64_s.o: efiemu/runtime/efiemu.S
> > -rm -f $@
> > - if test "x$(TARGET_APPLE_LINKER)" = x1; then \
> > + if test "x$(EFIEMU64_LINK_FORMAT)" = x-arch,x86_64; then \
> > $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU)
> > $(CPPFLAGS_DEFAULT) -m64 -Wall -Werror -nostdlib -O2 -mno-red-zone -c -o $@
> > $< || exit 1; \
> > else \
> > $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU)
> > $(CPPFLAGS_DEFAULT) -m64 -Wall -Werror -nostdlib -O2 -mcmodel=large
> > -mno-red-zone -c -o $@ $< || exit 1; \
> > @@ -415,14 +415,13 @@ efiemu64_s.o: efiemu/runtime/efiemu.S
> >
> > efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELEF)
> > -rm -f $@; \
> > - if test "x$(TARGET_APPLE_LINKER)" = x1; then \
> > + if test "x$(EFIEMU64_LINK_FORMAT)" = x-arch,x86_64; then \
> > rm -f address@hidden; \
> > $(TARGET_CC) -m64 -Wl,-r -nostdlib -o address@hidden $^ || exit 1; \
> > $(TARGET_OBJCONV) -felf64 -nu -nd address@hidden $@ || exit 1; \
> > rm -f address@hidden; \
> > else \
> > - $(TARGET_CC) -m64 -Wl,-melf_x86_64 -nostdlib -Wl,-r -o $@ $^ || exit
> > 1; \
> > - if test ! -z "$(TARGET_OBJ2ELF)"; then $(TARGET_OBJ2ELF) $@ || (rm -f
> > $@; exit 1); fi; \
> > + $(TARGET_CC) -m64 $(EFIEMU64_LINK_FORMAT) -nostdlib -Wl,-r -o $@ $^
> > || exit 1; \
> > fi
> >
> > platform_DATA += efiemu32.o efiemu64.o
> >
>
>
signature.asc
Description: PGP signature
- Re: grub2 boot root-on-zfs errors, (continued)
- [PATCH] Explicitly check for linking format to use for efiemu64 module, Andrey Borzenkov, 2013/11/24
- Re: [PATCH] Explicitly check for linking format to use for efiemu64 module, Vladimir 'φ-coder/phcoder' Serbinenko, 2013/11/24
- Re: [PATCH] Explicitly check for linking format to use for efiemu64 module, Vladimir 'φ-coder/phcoder' Serbinenko, 2013/11/24
- Re: [PATCH] Explicitly check for linking format to use for efiemu64 module, Andrey Borzenkov, 2013/11/25
- Re: [PATCH] Explicitly check for linking format to use for efiemu64 module, Vladimir 'φ-coder/phcoder' Serbinenko, 2013/11/25
- [PATCH v2] Explicitly check for linking format to use for efiemu64 module, Andrey Borzenkov, 2013/11/25
- Re: [PATCH v2] Explicitly check for linking format to use for efiemu64 module, Vladimir 'φ-coder/phcoder' Serbinenko, 2013/11/25
- Re: [PATCH v2] Explicitly check for linking format to use for efiemu64 module,
Andrey Borzenkov <=