grub-devel.gnu.org archive mirror
 help / color / mirror / Atom feed
From: Andrey Borzenkov <arvidjaar@gmail.com>
To: grub-devel@gnu.org
Subject: Re: [PATCH v2] Explicitly check for linking format to use for efiemu64 module
Date: Mon, 25 Nov 2013 22:34:38 +0400	[thread overview]
Message-ID: <20131125223439.0b069f1a@opensuse.site> (raw)
In-Reply-To: <52939494.3040307@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 5827 bytes --]

В Mon, 25 Nov 2013 19:19:00 +0100
Vladimir 'φ-coder/phcoder' Serbinenko <phcoder@gmail.com> пишет:

> 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 <zaphod@berentweb.com>
> > ---
> >  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 $@.bin; \
> >  	  $(TARGET_CC) -m64 -Wl,-r -nostdlib -o $@.bin $^ || exit 1; \
> >  	  $(TARGET_OBJCONV) -felf64 -nu -nd $@.bin $@ || exit 1; \
> >  	  rm -f $@.bin; \
> >  	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
> > 
> 
> 


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

  reply	other threads:[~2013-11-25 18:34 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-24  9:14 grub2 boot root-on-zfs errors Beeblebrox
2013-11-24 15:08 ` Andrey Borzenkov
2013-11-25 11:08   ` Beeblebrox
2013-11-25 11:14     ` Vladimir 'φ-coder/phcoder' Serbinenko
2013-11-25 17:29     ` Andrey Borzenkov
2013-11-25 22:12     ` Vladimir 'phcoder' Serbinenko
2013-11-24 17:21 ` [PATCH] Explicitly check for linking format to use for efiemu64 module Andrey Borzenkov
2013-11-25  3:59   ` Vladimir 'φ-coder/phcoder' Serbinenko
2013-11-25  4:22   ` Vladimir 'φ-coder/phcoder' Serbinenko
2013-11-25 17:42     ` Andrey Borzenkov
2013-11-25 17:51       ` Vladimir 'φ-coder/phcoder' Serbinenko
2013-11-25 18:13         ` [PATCH v2] " Andrey Borzenkov
2013-11-25 18:19           ` Vladimir 'φ-coder/phcoder' Serbinenko
2013-11-25 18:34             ` Andrey Borzenkov [this message]
  -- strict thread matches above, loose matches on Subject: below --
2013-11-26  7:19 Beeblebrox
2013-11-26  7:25 ` Andrey Borzenkov
2013-11-26  7:31 Beeblebrox
2013-11-26  7:35 ` Andrey Borzenkov
2013-11-26  7:53 Beeblebrox
2013-11-26  8:41 ` Andrey Borzenkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131125223439.0b069f1a@opensuse.site \
    --to=arvidjaar@gmail.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).