On 24.11.2013 18:21, 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. > > Reported-By: Beeblebrox <zap...@berentweb.com> > --- > > Could you test this patch? > > configure.ac | 29 +++++++++++++++++++++++++++-- > grub-core/Makefile.am | 2 +- > 2 files changed, 28 insertions(+), 3 deletions(-) > > diff --git a/configure.ac b/configure.ac > index 8619a67..be558de 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 -mx86_64pe -arch,x86_64; do As in other mail: remove -mx86_64pe > + CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone" > + LDFLAGS="-m64 -Wl,$format -nostdlib" You need -static as otherwise on Apple systems it will try to pull in the dynamic linker which we don't want (scratch comment about other thread, I though of adding -static everywhere but it's no necessarry after all) > + 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..e6862b7 100644 > --- a/grub-core/Makefile.am > +++ b/grub-core/Makefile.am > @@ -421,7 +421,7 @@ efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELEF) > $(TARGET_OBJCONV) -felf64 -nu -nd $@.bin $@ || exit 1; \ > rm -f $@.bin; \ Here the check for apple linker has to be adjusted as x$(EFIEMU64_LINK_FORMAT) = x-arch,x86_64 > else \ > - $(TARGET_CC) -m64 -Wl,-melf_x86_64 -nostdlib -Wl,-r -o $@ $^ || exit > 1; \ > + $(TARGET_CC) -m64 $(EFIEMU64_LINK_FORMAT) -nostdlib -Wl,-r -o $@ $^ > || exit 1; \ > if test ! -z "$(TARGET_OBJ2ELF)"; then $(TARGET_OBJ2ELF) $@ || (rm -f > $@; exit 1); fi; \ Remove TARGET_OBJ2ELF part as it's for 32-bit and we don't use PE here. > fi > >
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel