Skip to content
Snippets Groups Projects
  1. Apr 24, 2021
    • Masahiro Yamada's avatar
      kbuild: replace sed with $(subst ) or $(patsubst ) · 6e0839fd
      Masahiro Yamada authored
      
      For simple text replacement, it is better to use a built-in function
      instead of sed if possible. You can save one process forking.
      
      I do not mean to replace all sed invocations because GNU Make itself
      does not support regular expression (unless you use guile).
      
      I just replaced simple ones.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      6e0839fd
    • Nathan Chancellor's avatar
      Makefile: Only specify '--prefix=' when building with clang + GNU as · eec08090
      Nathan Chancellor authored
      When building with LLVM_IAS=1, there is no point to specifying
      '--prefix=' because that flag is only used to find GNU cross tools,
      which will not be used indirectly when using the integrated assembler.
      All of the tools are invoked directly from PATH or a full path specified
      via the command line, which does not depend on the value of '--prefix='.
      
      Sharing commands to reproduce issues becomes a little bit easier without
      a '--prefix=' value because that '--prefix=' value is specific to a
      user's machine due to it being an absolute path.
      
      Some further notes from Fangrui Song:
      
        clang can spawn GNU as (if -f?no-integrated-as is specified) and GNU
        objcopy (-f?no-integrated-as and -gsplit-dwarf and -g[123]).
        objcopy is only used for GNU as assembled object files.
        With integrated assembler, the object file streamer creates .o and
        .dwo simultaneously.
        With GNU as, two objcopy commands are needed to extract .debug*.dwo to
        .dwo files && another command to remove .debug*.dwo sections.
      
      A small consequence of this change (to keep things simple) is that
      '--prefix=' will always be specified now, even with a native build, when
      it was not before. This should not be an issue due to the way that the
      Makefile searches for the prefix (based on elfedit's location). This
      ends up improving the experience for host builds because PATH is better
      respected and matches GCC's behavior more closely. See the below thread
      for more details:
      
      https://lore.kernel.org/r/20210205213651.GA16907@Ryzen-5-4500U.localdomain/
      
      
      
      Signed-off-by: default avatarNathan Chancellor <nathan@kernel.org>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      eec08090
    • Nathan Chancellor's avatar
      Makefile: Remove '--gcc-toolchain' flag · c91d4e47
      Nathan Chancellor authored
      This flag was originally added to allow clang to find the GNU cross
      tools in commit 785f11aa ("kbuild: Add better clang cross build
      support"). This flag was not enough to find the tools at times so
      '--prefix' was added to the list in commit ef8c4ed9 ("kbuild: allow
      to use GCC toolchain not in Clang search path") and improved upon in
      commit ca9b31f6 ("Makefile: Fix GCC_TOOLCHAIN_DIR prefix for Clang
      cross compilation"). Now that '--prefix' specifies a full path and
      prefix, '--gcc-toolchain' serves no purpose because the kernel builds
      with '-nostdinc' and '-nostdlib'.
      
      This has been verified with self compiled LLVM 10.0.1 and LLVM 13.0.0 as
      well as a distribution version of LLVM 11.1.0 without binutils in the
      LLVM toolchain locations.
      
      Link: https://reviews.llvm.org/D97902
      
      
      Signed-off-by: default avatarNathan Chancellor <nathan@kernel.org>
      Reviewed-by: default avatarFangrui Song <maskray@google.com>
      Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Tested-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Tested-by: default avatarSedat Dilek <sedat.dilek@gmail.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      c91d4e47
    • Rasmus Villemoes's avatar
      kbuild: apply fixdep logic to link-vmlinux.sh · 0b956e20
      Rasmus Villemoes authored
      
      The patch adding CONFIG_VMLINUX_MAP revealed a small defect in the
      build system: link-vmlinux.sh takes decisions based on CONFIG_*
      options, but changing one of those does not always lead to vmlinux
      being linked again.
      
      For most of the CONFIG_* knobs referenced previously, this has
      probably been hidden by those knobs also affecting some object file,
      hence indirectly also vmlinux.
      
      But CONFIG_VMLINUX_MAP is only handled inside link-vmlinux.sh, and
      changing CONFIG_VMLINUX_MAP=n to CONFIG_VMLINUX_MAP=y does not cause
      the build system to re-link (and hence have vmlinux.map
      emitted). Since that map file is mostly a debugging aid, this is
      merely a nuisance which is easily worked around by just deleting
      vmlinux and building again.
      
      But one could imagine other (possibly future) CONFIG options that
      actually do affect the vmlinux binary but which are not captured
      through some object file dependency.
      
      To fix this, make link-vmlinux.sh emit a .vmlinux.d file in the same
      format as the dependency files generated by gcc, and apply the fixdep
      logic to that. I've tested that this correctly works with both in-tree
      and out-of-tree builds.
      
      Signed-off-by: default avatarRasmus Villemoes <linux@rasmusvillemoes.dk>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      0b956e20
    • Masahiro Yamada's avatar
      kbuild: show warning if 'make headers_check' is used · 609bbb4d
      Masahiro Yamada authored
      
      Since commit 7ecaf069 ("kbuild: move headers_check rule to
      usr/include/Makefile"), 'make headers_check' is no-op.
      
      This stub target is remaining here in case some scripts still invoke it.
      In order to prompt people to remove stale code, show a noisy warning
      message if used. The stub will be really removed after the Linux 5.15
      release.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      609bbb4d
    • Masahiro Yamada's avatar
      kbuild: include Makefile.compiler only when compiler is needed · 805b2e1d
      Masahiro Yamada authored
      
      Since commit f2f02ebd ("kbuild: improve cc-option to clean up all
      temporary files"), running 'make kernelversion' in a read-only source
      tree emits a bunch of warnings:
      
        mkdir: cannot create directory '.tmp_12345': Permission denied
      
      No-build targets such as kernelversion, clean, help, etc. do not
      need to evaluate $(call cc-option,) or friends. Skip Makefile.compiler
      so $(call cc-option,) becomes no-op.
      
      This not only fixes the warnings, but also runs non-build targets much
      faster.
      
      Basically, all installation targets should also be non-build targets.
      Unfortunately, vdso_install requires the compiler because it builds
      vdso before installation. This is a problem that must be fixed by a
      separate patch.
      
      Reported-by: default avatarIsrael Tsadok <itsadok@gmail.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      805b2e1d
    • Masahiro Yamada's avatar
      kbuild: split cc-option and friends to scripts/Makefile.compiler · 57fd251c
      Masahiro Yamada authored
      
      scripts/Kbuild.include is included everywhere, but macros such as
      cc-option are needed by build targets only.
      
      For example, when 'make clean' traverses the tree, it does not need
      to evaluate $(call cc-option,).
      
      Split cc-option, ld-option, etc. to scripts/Makefile.compiler, which
      is only included from the top Makefile and scripts/Makefile.build.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      57fd251c
  2. Mar 15, 2021
    • Masahiro Yamada's avatar
      kbuild: prefix $(srctree)/ to some included Makefiles · 3204a7fb
      Masahiro Yamada authored
      
      VPATH is used in Kbuild to make pattern rules search for prerequisites
      in both $(objtree) and $(srctree). Some of *.c, *.S files are not real
      sources, but generated by tools such as flex, bison, perl.
      
      In contrast, I doubt the benefit of --include-dir=$(abs_srctree) because
      it is always clear which Makefiles are real sources, and which are not.
      
      So, my hope is to add $(srctree)/ prefix to all check-in Makefiles,
      then remove --include-dir=$(abs_srctree) flag in the future.
      
      I am touching only some Kbuild core parts for now. Treewide fixes will
      be needed to achieve this goal.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      3204a7fb
  3. Mar 14, 2021
  4. Mar 11, 2021
  5. Mar 09, 2021
  6. Mar 06, 2021
  7. Mar 01, 2021
  8. Feb 28, 2021
  9. Feb 25, 2021
  10. Feb 24, 2021
  11. Feb 23, 2021
    • Sami Tolvanen's avatar
      kbuild: lto: force rebuilds when switching CONFIG_LTO · 5e95325f
      Sami Tolvanen authored
      
      When doing non-clean builds and switching between CONFIG_LTO=n and
      CONFIG_LTO=y, the build system (correctly) didn't notice that assembly
      and LTO-excluded C object files were rewritten in place by objtool (to
      add the .orc_unwind* sections), since their build command lines were the
      same between CONFIG_LTO=y and CONFIG_LTO=n. The objtool step would fail:
      
      vmlinux.o: warning: objtool: file already has .orc_unwind section, skipping
      make: *** [Makefile:1194: vmlinux] Error 255
      
      Avoid this by making sure the build will see a difference between an LTO
      and non-LTO build (by including "-fno-lto" in KBUILD_*FLAGS). This will
      get ignored when CC_FLAGS_LTO is present, and will not be included at
      all when CONFIG_LTO=n.
      
      Signed-off-by: default avatarSami Tolvanen <samitolvanen@google.com>
      Signed-off-by: default avatarKees Cook <keescook@chromium.org>
      5e95325f
    • Sami Tolvanen's avatar
      tracing: add support for objtool mcount · 22c8542d
      Sami Tolvanen authored
      
      This change adds build support for using objtool to generate
      __mcount_loc sections.
      
      Signed-off-by: default avatarSami Tolvanen <samitolvanen@google.com>
      22c8542d
  12. Feb 17, 2021
  13. Feb 16, 2021
    • Sasha Levin's avatar
      kbuild: simplify access to the kernel's version · 88a68672
      Sasha Levin authored
      
      Instead of storing the version in a single integer and having various
      kernel (and userspace) code how it's constructed, export individual
      (major, patchlevel, sublevel) components and simplify kernel code that
      uses it.
      
      This should also make it easier on userspace.
      
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      88a68672
    • Sasha Levin's avatar
      kbuild: clamp SUBLEVEL to 255 · 9b82f13e
      Sasha Levin authored
      
      Right now if SUBLEVEL becomes larger than 255 it will overflow into the
      territory of PATCHLEVEL, causing havoc in userspace that tests for
      specific kernel version.
      
      While userspace code tests for MAJOR and PATCHLEVEL, it doesn't test
      SUBLEVEL at any point as ABI changes don't happen in the context of
      stable tree.
      
      Thus, to avoid overflows, simply clamp SUBLEVEL to it's maximum value in
      the context of LINUX_VERSION_CODE. This does not affect "make
      kernelversion" and such.
      
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      9b82f13e
    • Nick Desaulniers's avatar
      Kconfig: allow explicit opt in to DWARF v5 · 98cd6f52
      Nick Desaulniers authored
      DWARF v5 is the latest standard of the DWARF debug info format. GCC 11
      will change the implicit default DWARF version, if left unspecified, to
      DWARF v5.
      
      Allow users of Clang and older versions of GCC that have not changed the
      implicit default DWARF version to DWARF v5 to opt in. This can help
      testing consumers of DWARF debug info in preparation of v5 becoming more
      widespread, as well as result in significant binary size savings of the
      pre-stripped vmlinux image.
      
      DWARF5 wins significantly in terms of size when mixed with compression
      (CONFIG_DEBUG_INFO_COMPRESSED).
      
      363M    vmlinux.clang12.dwarf5.compressed
      434M    vmlinux.clang12.dwarf4.compressed
      439M    vmlinux.clang12.dwarf2.compressed
      457M    vmlinux.clang12.dwarf5
      536M    vmlinux.clang12.dwarf4
      548M    vmlinux.clang12.dwarf2
      
      515M    vmlinux.gcc10.2.dwarf5.compressed
      599M    vmlinux.gcc10.2.dwarf4.compressed
      624M    vmlinux.gcc10.2.dwarf2.compressed
      630M    vmlinux.gcc10.2.dwarf5
      765M    vmlinux.gcc10.2.dwarf4
      809M    vmlinux.gcc10.2.dwarf2
      
      Though the quality of debug info is harder to quantify; size is not a
      proxy for quality.
      
      Jakub notes:
        One thing is GCC DWARF-5 support, that is whether the compiler will
        support -gdwarf-5 flag, and that support should be there from GCC 7
        onwards.
      
        All [GCC] 5.1 - 6.x did was start accepting -gdwarf-5 as experimental
        option that enabled some small DWARF subset (initially only a few
        DW_LANG_* codes newly added to DWARF5 drafts).  Only GCC 7 (released
        after DWARF 5 has been finalized) started emitting DWARF5 section
        headers and got most of the DWARF5 changes in...
      
        Another separate thing is whether the assembler does support
        the -gdwarf-5 option (i.e. if you can compile assembler files
        with -Wa,-gdwarf-5) ... That option is about whether the assembler
        will emit DWARF5 or DWARF2 .debug_line.  It is fine to compile C sources
        with -gdwarf-5 and use DWARF2 .debug_line for assembler files if as
        doesn't support it.
      
      Version check GCC so that we don't need to worry about the difference in
      command line args between GNU readelf and llvm-readelf/llvm-dwarfdump to
      validate the DWARF Version in the assembler feature detection script.
      
      Most issues with clang produced assembler were fixed in binutils 2.35.1,
      but 2.35.2 fixed issues related to requiring the flag -Wa,-gdwarf-5
      explicitly. The added shell script test checks for the latter, and is
      only required when using clang without its integrated assembler, though
      we use for clang regardless as we do not yet have a way to query the
      assembler from Kconfig.
      
      Disabled for now if CONFIG_DEBUG_INFO_BTF is set; pahole doesn't yet
      recognize the new additions to the DWARF debug info.
      
      This only modifies the DWARF version emitted by the compiler, not the
      assembler.
      
      The DWARF version of a binary can be validated with:
      $ llvm-dwarfdump <object file> | head -n 4 | grep version
      or
      $ readelf --debug-dump=info <object file> 2>/dev/null | grep Version
      
      Parts of the tree don't reuse DEBUG_CFLAGS as they should; such cleanup
      is left as a follow up.
      
      Link: http://www.dwarfstd.org/doc/DWARF5.pdf
      Link: https://bugzilla.redhat.com/show_bug.cgi?id=1922707
      
      
      Reported-by: default avatarSedat Dilek <sedat.dilek@gmail.com>
      Suggested-by: default avatarArvind Sankar <nivedita@alum.mit.edu>
      Suggested-by: default avatarCaroline Tice <cmtice@google.com>
      Suggested-by: default avatarFangrui Song <maskray@google.com>
      Suggested-by: default avatarJakub Jelinek <jakub@redhat.com>
      Suggested-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Suggested-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM/Clang v12.0.0-rc1 x86-64
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      98cd6f52
    • Nick Desaulniers's avatar
      Kbuild: make DWARF version a choice · a66049e2
      Nick Desaulniers authored
      
      Adds a default CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT which allows
      the implicit default version of DWARF emitted by the toolchain to
      progress over time.
      
      Modifies CONFIG_DEBUG_INFO_DWARF4 to be a member of a choice, making it
      mutually exclusive with CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT. Users
      may want to select this if they are using a newer toolchain, but have
      consumers of the DWARF debug info that aren't yet ready for newer DWARF
      versions' debug info.
      
      Does so in a way that's forward compatible with existing
      configs, and makes adding future versions more straightforward. This
      patch does not change the current behavior or selection of DWARF
      version for users upgrading to kernels with this patch.
      
      GCC since ~4.8 has defaulted to DWARF v4 implicitly, and GCC 11 has
      bumped this to v5.
      
      Remove the Kconfig help text  about DWARF v4 being larger.  It's
      empirically false for the latest toolchains for x86_64 defconfig, has no
      point of reference (I suspect it was DWARF v2 but that's stil
      empirically false), and debug info size is not a qualatative measure.
      
      Suggested-by: default avatarArvind Sankar <nivedita@alum.mit.edu>
      Suggested-by: default avatarFangrui Song <maskray@google.com>
      Suggested-by: default avatarJakub Jelinek <jakub@redhat.com>
      Suggested-by: default avatarMark Wielaard <mark@klomp.org>
      Suggested-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Suggested-by: default avatarNathan Chancellor <nathan@kernel.org>
      Tested-by: default avatarSedat Dilek <sedat.dilek@gmail.com>
      Signed-off-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      a66049e2
    • Masahiro Yamada's avatar
      kbuild: stop removing stale <linux/version.h> file · 0dd77e95
      Masahiro Yamada authored
      
      Revert commit 223c24a7 ("kbuild: Automatically remove stale
      <linux/version.h> file").
      
      It was more than 6 years ago. I do not expect anybody to start
      git-bisect for such a big window.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      0dd77e95
  14. Feb 14, 2021
  15. Feb 11, 2021
  16. Feb 09, 2021
  17. Feb 07, 2021
  18. Feb 05, 2021
  19. Feb 04, 2021
  20. Feb 01, 2021
  21. Jan 31, 2021
  22. Jan 29, 2021
  23. Jan 28, 2021
  24. Jan 25, 2021
Loading