Skip to content
Snippets Groups Projects
  1. Feb 24, 2021
  2. 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
  3. Feb 11, 2021
  4. Feb 07, 2021
  5. Feb 05, 2021
  6. Feb 01, 2021
  7. Jan 31, 2021
  8. Jan 29, 2021
  9. Jan 25, 2021
  10. Jan 18, 2021
  11. Jan 10, 2021
  12. Jan 03, 2021
  13. Dec 27, 2020
  14. Dec 21, 2020
  15. Dec 13, 2020
  16. Dec 06, 2020
  17. Dec 01, 2020
    • Nathan Chancellor's avatar
      kbuild: Hoist '--orphan-handling' into Kconfig · 59612b24
      Nathan Chancellor authored
      Currently, '--orphan-handling=warn' is spread out across four different
      architectures in their respective Makefiles, which makes it a little
      unruly to deal with in case it needs to be disabled for a specific
      linker version (in this case, ld.lld 10.0.1).
      
      To make it easier to control this, hoist this warning into Kconfig and
      the main Makefile so that disabling it is simpler, as the warning will
      only be enabled in a couple places (main Makefile and a couple of
      compressed boot folders that blow away LDFLAGS_vmlinx) and making it
      conditional is easier due to Kconfig syntax. One small additional
      benefit of this is saving a call to ld-option on incremental builds
      because we will have already evaluated it for CONFIG_LD_ORPHAN_WARN.
      
      To keep the list of supported architectures the same, introduce
      CONFIG_ARCH_WANT_LD_ORPHAN_WARN, which an architecture can select to
      gain this automatically after all of the sections are specified and size
      asserted. A special thanks to Kees Cook for the help text on this
      config.
      
      Link: https://github.com/ClangBuiltLinux/linux/issues/1187
      
      
      Acked-by: default avatarKees Cook <keescook@chromium.org>
      Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc)
      Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Tested-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Signed-off-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      59612b24
  18. Nov 29, 2020
  19. Nov 24, 2020
  20. Nov 22, 2020
  21. Nov 16, 2020
  22. Nov 09, 2020
  23. Nov 02, 2020
  24. Nov 01, 2020
  25. Oct 25, 2020
  26. Oct 20, 2020
  27. Oct 14, 2020
  28. Oct 12, 2020
  29. Oct 11, 2020
    • Linus Torvalds's avatar
      Linux 5.9 · bbf5c979
      Linus Torvalds authored
      v5.9
      bbf5c979
    • Jacob Keller's avatar
      scripts: remove namespace.pl · 7dfbea4c
      Jacob Keller authored
      namespace.pl is intended to help locate symbols which are defined but
      are not used externally. The goal is to avoid bloat of the namespace in
      the resulting kernel image.
      
      The script relies on object data, and only finds unused symbols for the
      configuration used to generate that object data. This results in a lot
      of false positive warnings such as symbols only used by a single
      architecture, or symbols which are used externally only under certain
      configurations.
      
      Running namespace.pl using allyesconfig, allmodconfig, and
      x86_64_defconfig yields the following results:
      
      * allmodconfig
        * 11122 unique symbol names with no external reference
        * 1194 symbols listed as multiply defined
        * 214 symbols it can't resolve
      * allyesconfig
        * 10997 unique symbol names with no external reference
        * 1194 symbols listed as multiply defined
        * 214 symbols it can't resolve
      * x86_64_defconfig
        * 5757 unique symbol names with no external reference
        * 528 symbols listed as multiply defined
        * 154 symbols it can't resolve
      
      The script also has no way to easily limit the scope of the checks to
      a given subset of the kernel, such as only checking for symbols defined
      within a module or subsystem.
      
      Discussion on public mailing lists seems to indicate that many view the
      tool output as suspect or not very useful (see discussions at [1] and
      [2] for further context).
      
      As described by Masahiro Yamada at [2], namespace.pl provides 3 types of
      checks: listing multiply defined symbols, resolving external symbols,
      and warnings about symbols with no reference.
      
      The first category of issues is easily caught by the linker as any set
      of multiply defined symbols should fail to link. The second category of
      issues is also caught by linking, as undefined symbols would cause
      issues. Even with modules, these types of issues where a module relies
      on an external symbol are caught by modpost.
      
      The remaining category of issues reported is the list of symbols with no
      external reference, and is the primary motivation of this script.
      However, it ought to be clear from the above examples that the output is
      difficult to sort through. Even allyesconfig has ~10000 entries.
      
      The current submit-checklist indicates that patches ought to go through
      namespacecheck and fix any new issues arising. But that itself presents
      problems. As described at [1], many cases of reports are due to
      configuration where a function is used externally by some configuration
      settings. Prominent maintainers appear to dislike changes modify code
      such that symbols become static based on CONFIG_* flags ([3], and [4])
      
      One possible solution is to adjust the advice and indicate that we only
      care about the output of namespacecheck on allyesconfig or allmodconfig
      builds...
      
      However, given the discussion at [2], I suspect that few people are
      actively using this tool. It doesn't have a maintainer in the
      MAINTAINERS flie, and it produces so many warnings for unused symbols
      that it is difficult to use effectively. Thus, I propose we simply
      remove it.
      
      [1] https://lore.kernel.org/netdev/20200708164812.384ae8ea@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com/
      [2] https://lore.kernel.org/lkml/20190129204319.15238-1-jacob.e.keller@intel.com/
      [3] https://lore.kernel.org/netdev/20190828.154744.2058157956381129672.davem@davemloft.net/
      [4] https://lore.kernel.org/netdev/20190827210928.576c5fef@cakuba.netronome.com/
      
      
      
      Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
      Acked-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Acked-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      7dfbea4c
  30. Oct 09, 2020
  31. Oct 04, 2020
  32. Sep 27, 2020
  33. Sep 24, 2020
Loading