Re: Linux 6.3-rc3

Nathan Chancellor
2023-03-22T20:44:02Z

On Wed, Mar 22, 2023 at 09:36:37AM -0700, Nathan Chancellor wrote:
> On Wed, Mar 22, 2023 at 02:44:47PM +0200, Kalle Valo wrote:
> > Nathan Chancellor <nathan@kernel.org> writes:
> >
> > > On Mon, Mar 20, 2023 at 11:26:17AM -0700, Linus Torvalds wrote:
> > >> On Mon, Mar 20, 2023 at 11:05 AM Nathan Chancellor <nathan@kernel.org> wrote:
> > >> >
> > >> > On the clang front, I am still seeing the following warning turned error
> > >> > for arm64 allmodconfig at least:
> > >> >
> > >> > drivers/gpu/host1x/dev.c:520:6: error: variable 'syncpt_irq' is uninitialized when used here [-Werror,-Wuninitialized]
> > >> > if (syncpt_irq < 0)
> > >> > ^~~~~~~~~~
> > >>
> > >> Hmm. I do my arm64 allmodconfig builds with gcc, and I'm surprised
> > >> that gcc doesn't warn about this.
> > >
> > > Perhaps these would make doing allmodconfig builds with clang more
> > > frequently less painful for you?
> > >
> > > https://lore.kernel.org/llvm/20230319235619.GA18547@dev-arch.thelio-3990X/
> >
> > Thank you, at least for me this is really helpful.
>
> Really glad to hear! I hope this helps make testing and verifying
> changes with clang and LLVM easier for developers and maintainers.
>
> > I tried now clang for the first time but seeing a strange problem.
> >
> > I prefer to define the compiler in GNUmakefile so it's easy to change
> > compilers and I don't need to remember the exact command line. So I have
> > this in the top level GNUmakefile (all the rest commented out):
> >
> > LLVM=/opt/clang/llvm-16.0.0/bin/
> >
> > If I run 'make oldconfig' it seems to use clang but after I run just
> > 'make' it seems to switch back to the host GCC compiler and ask for GCC
> > specific config questions again. Workaround for this seems to be adding
> > 'export LLVM' to GNUmakefile, after that also 'make' uses clang as
> > expected.
>
> Interesting... I just tested with a basic GNUmakefile and everything
> seems to work fine without an export. At the same time, the export
> should not hurt anything, so as long as it works, that is what matters.

Ah, the export is needed so that mixed-build works properly (see lines
324 to 361 in Makefile), as 'make' will be called to process each target
individually; without the export, LLVM is not set for the subsequent
'make' calls, so gcc is called. I just saw the same behavior as you did
while testing with

$ make -j(nproc) clean defconfig all

without the export (GCC was used instead of LLVM).

> $ gcc --version
> fish: Unknown command: gcc
>
>
> $ fd -t x . $CBL_TC_LLVM_STORE/16.0.0/bin -x basename
> clang-16
> llvm-nm
> llvm-objdump
> llvm-objcopy
> llvm-symbolizer
> llvm-strings
> llvm-readobj
> llvm-dwarfdump
> lld
> llvm-ar
>
>
> $ cat GNUmakefile
> LLVM := $(CBL_TC_LLVM_STORE)/16.0.0/bin/
>
> include Makefile
>
>
> $ make -sj(nproc) defconfig
>
>
> $ head -13 .config
> #
> # Automatically generated file; DO NOT EDIT.
> # Linux/x86 6.3.0-rc3 Kernel Configuration
> #
> CONFIG_CC_VERSION_TEXT="ClangBuiltLinux clang version 16.0.0"
> CONFIG_GCC_VERSION=0
> CONFIG_CC_IS_CLANG=y
> CONFIG_CLANG_VERSION=160000
> CONFIG_AS_IS_LLVM=y
> CONFIG_AS_VERSION=160000
> CONFIG_LD_VERSION=0
> CONFIG_LD_IS_LLD=y
> CONFIG_LLD_VERSION=160000
>
>
> $ make -sj(nproc) init/main.o
>
>
> $ $CBL_TC_LLVM_STORE/16.0.0/bin/llvm-readelf -p .comment init/main.o
> String dump of section '.comment':
> [ 1] ClangBuiltLinux clang version 16.0.0
>
>
> I added an informational print and I always saw the correct value:
>
> diff --git a/Makefile b/Makefile
> index a2c310df2145..070394c4cb8c 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -431,6 +431,7 @@ HOST_LFS_LDFLAGS := $(shell getconf LFS_LDFLAGS 2>/dev/null)
> HOST_LFS_LIBS := $(shell getconf LFS_LIBS 2>/dev/null)
>
> ifneq ($(LLVM),)
> +$(info LLVM: $(LLVM))
> ifneq ($(filter %/,$(LLVM)),)
> LLVM_PREFIX := $(LLVM)
> else ifneq ($(filter -%,$(LLVM)),)
>
> If you have any further issues, please do not hesitate to reach out!
>
> Cheers,
> Nathan
>