All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Valdis Klētnieks" <valdis.kletnieks@vt.edu>
To: Masahiro Yamada <masahiroy@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	X86 ML <x86@kernel.org>
Subject: Re: x86 - weird cross-compile build problem with try-run next-20210602
Date: Sat, 05 Jun 2021 06:50:43 -0400	[thread overview]
Message-ID: <602426.1622890243@turing-police> (raw)
In-Reply-To: <CAK7LNATbWnduSfqehJ7yMjxCbkrM87aojDCdQ79J+kXiTaZ-fQ@mail.gmail.com>

On Sat, 05 Jun 2021 17:19:30 +0900, Masahiro Yamada said:

> > Anybody have a clue why $(x32_ld_ok)  is null rather than 'y' or 'n'?
>
>
> What command did you run?
>
> I see this warning message for 'make install' for example.
>
> $ make install
> arch/x86/Makefile:148: CONFIG_X86_X32 enabled but no binutils support

> Please add one more debug line:
>   $(warning need-compiler is +$(need-compiler)+)
> and what will you get?
>
Bingo.

arch/x86/Makefile:143: need-compiler is ++ x32_ld_ok is ++ with CC=(.... same as before)

And it was hitting on a 'make kernelrelease'

805b2e1d427aa (Masahiro Yamada          2021-02-28 15:10:28 +0900  275) # is an exception where build artifacts may be updated. This must be fixed.
805b2e1d427aa (Masahiro Yamada          2021-02-28 15:10:28 +0900  276) no-compiler-targets := $(no-dot-config-targets) install dtbs_install \
805b2e1d427aa (Masahiro Yamada          2021-02-28 15:10:28 +0900  277)                         headers_install modules_install kernelrelease image_name
993bdde945478 (Masahiro Yamada          2021-02-28 15:10:25 +0900  278) no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \

I suspect it's this:

 # Include this also for config targets because some architectures need
 # cc-cross-prefix to determine CROSS_COMPILE.
+ifdef need-compiler
 include $(srctree)/scripts/Makefile.compiler
+endif

and as a result, try-run isn't defined when we get into the ifdef CONFIG_X86_32
chunk in arch/x86/Makefile, which silently fails and returns a null.   I added
more debugging to double-check...

ifdef CONFIG_X86_X32
        x32_ld_ok := $(call try-run,\
                        /bin/echo -e '1: .quad 1b' | \ 
                        $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" - && \
                        $(OBJCOPY) -O elf32-x86-64 "$$TMP" "$$TMP.o" && \
                        $(LD) -m elf32_x86_64 "$$TMP.o" -o "$$TMP",y,n)
 $(warning need-compiler is +$(need-compiler)+ x32_ld_ok is +$(x32_ld_ok)+ with CC=$(CC) $(KBUILD_AFLAGS) OBJ=$(OBJCOPY) LD=$(LD) )
 foo := $(call wombats-r-us )
 $(warning foo is +$(foo)+ )
        ifeq ($(x32_ld_ok),y)

and that gets:

/usr/src/linux-next/arch/x86/Makefile:143: need-compiler is ++ x32_ld_ok is ++ with CC=x86_64-unknown-linux-gnu-gcc -D__ASSEMBLY__ -fno-PIE -m64 OBJ=x86_64-unknown-linux-gnu-objcopy LD=x86_64-unknown-linux-gnu-ld 
/usr/src/linux-next/arch/x86/Makefile:145: foo is ++ 
/usr/src/linux-next/arch/x86/Makefile:151: CONFIG_X86_X32 enabled but no binutils support

So the call to the undefined 'wombats-r-us' fails silently and returns a null..
and try-run is also failing silently the same way because it's not defined either.

There's only a few uses of try-run outside Makefile.compiler, and it looks like
x32_ld_ok is the only place where Makefile logic changes based on what try-run
returns (the rest just change compiler flags).

Havings said that, I'm not sure what the proper fix is. Move try-run out of Makefile.compiler?

      reply	other threads:[~2021-06-05 10:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-04 20:33 x86 - weird cross-compile build problem with try-run next-20210602 Valdis Klētnieks
2021-06-05  8:19 ` Masahiro Yamada
2021-06-05 10:50   ` Valdis Klētnieks [this message]

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=602426.1622890243@turing-police \
    --to=valdis.kletnieks@vt.edu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.