17 Jun, 2018

1 commit


14 Jun, 2018

1 commit

  • The changes to automatically test for working stack protector compiler
    support in the Kconfig files removed the special STACKPROTECTOR_AUTO
    option that picked the strongest stack protector that the compiler
    supported.

    That was all a nice cleanup - it makes no sense to have the AUTO case
    now that the Kconfig phase can just determine the compiler support
    directly.

    HOWEVER.

    It also meant that doing "make oldconfig" would now _disable_ the strong
    stackprotector if you had AUTO enabled, because in a legacy config file,
    the sane stack protector configuration would look like

    CONFIG_HAVE_CC_STACKPROTECTOR=y
    # CONFIG_CC_STACKPROTECTOR_NONE is not set
    # CONFIG_CC_STACKPROTECTOR_REGULAR is not set
    # CONFIG_CC_STACKPROTECTOR_STRONG is not set
    CONFIG_CC_STACKPROTECTOR_AUTO=y

    and when you ran this through "make oldconfig" with the Kbuild changes,
    it would ask you about the regular CONFIG_CC_STACKPROTECTOR (that had
    been renamed from CONFIG_CC_STACKPROTECTOR_REGULAR to just
    CONFIG_CC_STACKPROTECTOR), but it would think that the STRONG version
    used to be disabled (because it was really enabled by AUTO), and would
    disable it in the new config, resulting in:

    CONFIG_HAVE_CC_STACKPROTECTOR=y
    CONFIG_CC_HAS_STACKPROTECTOR_NONE=y
    CONFIG_CC_STACKPROTECTOR=y
    # CONFIG_CC_STACKPROTECTOR_STRONG is not set
    CONFIG_CC_HAS_SANE_STACKPROTECTOR=y

    That's dangerously subtle - people could suddenly find themselves with
    the weaker stack protector setup without even realizing.

    The solution here is to just rename not just the old RECULAR stack
    protector option, but also the strong one. This does that by just
    removing the CC_ prefix entirely for the user choices, because it really
    is not about the compiler support (the compiler support now instead
    automatially impacts _visibility_ of the options to users).

    This results in "make oldconfig" actually asking the user for their
    choice, so that we don't have any silent subtle security model changes.
    The end result would generally look like this:

    CONFIG_HAVE_CC_STACKPROTECTOR=y
    CONFIG_CC_HAS_STACKPROTECTOR_NONE=y
    CONFIG_STACKPROTECTOR=y
    CONFIG_STACKPROTECTOR_STRONG=y
    CONFIG_CC_HAS_SANE_STACKPROTECTOR=y

    where the "CC_" versions really are about internal compiler
    infrastructure, not the user selections.

    Acked-by: Masahiro Yamada
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

11 Jun, 2018

1 commit

  • As Documentation/kbuild/kconfig-language.txt notes, 'select' should be
    be used with care - it forces a lower limit of another symbol, ignoring
    the dependency. Currently, KCOV can select GCC_PLUGINS even if arch
    does not select HAVE_GCC_PLUGINS. This could cause the unmet direct
    dependency.

    Now that Kconfig can test compiler capability, let's handle this in a
    more sophisticated way.

    There are two ways to enable KCOV; use the compiler that natively
    supports -fsanitize-coverage=trace-pc, or build the SANCOV plugin if
    the compiler has ability to build GCC plugins. Hence, the correct
    dependency for KCOV is:

    depends on CC_HAS_SANCOV_TRACE_PC || GCC_PLUGINS

    You do not need to build the SANCOV plugin if the compiler already
    supports -fsanitize-coverage=trace-pc. Hence, the select should be:

    select GCC_PLUGIN_SANCOV if !CC_HAS_SANCOV_TRACE_PC

    With this, GCC_PLUGIN_SANCOV is selected only when necessary, so
    scripts/Makefile.gcc-plugins can be cleaner.

    I also cleaned up Kconfig and scripts/Makefile.kcov as well.

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Kees Cook

    Masahiro Yamada
     

08 Jun, 2018

2 commits

  • Move the test for -fstack-protector(-strong) option to Kconfig.

    If the compiler does not support the option, the corresponding menu
    is automatically hidden. If STRONG is not supported, it will fall
    back to REGULAR. If REGULAR is not supported, it will be disabled.
    This means, AUTO is implicitly handled by the dependency solver of
    Kconfig, hence removed.

    I also turned the 'choice' into only two boolean symbols. The use of
    'choice' is not a good idea here, because all of all{yes,mod,no}config
    would choose the first visible value, while we want allnoconfig to
    disable as many features as possible.

    X86 has additional shell scripts in case the compiler supports those
    options, but generates broken code. I added CC_HAS_SANE_STACKPROTECTOR
    to test this. I had to add -m32 to gcc-x86_32-has-stack-protector.sh
    to make it work correctly.

    Signed-off-by: Masahiro Yamada
    Acked-by: Kees Cook

    Masahiro Yamada
     
  • Commit 21c54b774744 ("kconfig: show compiler version text in the top
    comment") was intended to detect the compiler upgrade, but Geert
    reported a breakage on the m68k build.

    The compiler upgrade is detected by the change of the environment
    variable, CC_VERSION_TEXT, which contains the first line of the output
    from $(CC) --version. Currently, this works well when CROSS_COMPILE
    is given via the environment variable or the Make command line.

    However, some architectures such as m68k can specify CROSS_COMPILE
    from arch/$(SRCARCH)/Makefile as well. In this case, "make ARCH=m68k"
    ends up with endless syncconfig loop.

    $ make ARCH=m68k defconfig
    *** Default configuration is based on 'multi_defconfig'
    #
    # configuration written to .config
    #
    $ make ARCH=m68k
    scripts/kconfig/conf --syncconfig Kconfig
    scripts/kconfig/conf --syncconfig Kconfig
    scripts/kconfig/conf --syncconfig Kconfig
    scripts/kconfig/conf --syncconfig Kconfig

    Things are happening like this:

    Because arch/$(SRCARCH)/Makefile is included after CC_VERSION_TEXT
    is set, it contains the host compiler version in the defconfig phase.

    To create or update auto.conf, the following line is triggered:

    include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
    $(Q)$(MAKE) -f $(srctree)/Makefile syncconfig

    This recurses the top Makefile after arch/$(SRCARCH)/Makefile is
    included. CROSS_COMPILE is set to a m68k toolchain prefix and
    exported to the recursed Make. Then, syncconfig is invoked with
    the target compiler version in CC_VERSION_TEXT.

    The Make will restart because auto.conf and auto.conf.cmd have been
    updated. At this point, CROSS_COMPILE is reset, so CC_VERSION_TEXT
    is set to the host compiler version again. Then, syncconfig is
    triggered due to the change of CC_VERSION_TEXT. This loop continues
    eternally.

    To fix this problem, $(CC_VERSION_TEXT) must be evaluated only after
    arch/$(SRCARCH)/Makefile. Setting it earlier is OK as long as it is
    defined by using the '=' operator instead of ':='.

    For the defconfig phase, $(CC_VERSION_TEXT) is evaluated when Kbuild
    descends into scripts/kconfig/, so it contains the target compiler
    version correctly.

    include/config/auto.conf.cmd references $(CC_VERSION_TEXT) as well,
    so it must be included after arch/$(SRCARCH)/Makefile.

    Fixes: 21c54b774744 ("kconfig: show compiler version text in the top comment")
    Reported-by: Geert Uytterhoeven
    Signed-off-by: Masahiro Yamada
    Tested-by: Geert Uytterhoeven

    Masahiro Yamada
     

07 Jun, 2018

3 commits

  • Pull networking updates from David Miller:

    1) Add Maglev hashing scheduler to IPVS, from Inju Song.

    2) Lots of new TC subsystem tests from Roman Mashak.

    3) Add TCP zero copy receive and fix delayed acks and autotuning with
    SO_RCVLOWAT, from Eric Dumazet.

    4) Add XDP_REDIRECT support to mlx5 driver, from Jesper Dangaard
    Brouer.

    5) Add ttl inherit support to vxlan, from Hangbin Liu.

    6) Properly separate ipv6 routes into their logically independant
    components. fib6_info for the routing table, and fib6_nh for sets of
    nexthops, which thus can be shared. From David Ahern.

    7) Add bpf_xdp_adjust_tail helper, which can be used to generate ICMP
    messages from XDP programs. From Nikita V. Shirokov.

    8) Lots of long overdue cleanups to the r8169 driver, from Heiner
    Kallweit.

    9) Add BTF ("BPF Type Format"), from Martin KaFai Lau.

    10) Add traffic condition monitoring to iwlwifi, from Luca Coelho.

    11) Plumb extack down into fib_rules, from Roopa Prabhu.

    12) Add Flower classifier offload support to igb, from Vinicius Costa
    Gomes.

    13) Add UDP GSO support, from Willem de Bruijn.

    14) Add documentation for eBPF helpers, from Quentin Monnet.

    15) Add TLS tx offload to mlx5, from Ilya Lesokhin.

    16) Allow applications to be given the number of bytes available to read
    on a socket via a control message returned from recvmsg(), from
    Soheil Hassas Yeganeh.

    17) Add x86_32 eBPF JIT compiler, from Wang YanQing.

    18) Add AF_XDP sockets, with zerocopy support infrastructure as well.
    From Björn Töpel.

    19) Remove indirect load support from all of the BPF JITs and handle
    these operations in the verifier by translating them into native BPF
    instead. From Daniel Borkmann.

    20) Add GRO support to ipv6 gre tunnels, from Eran Ben Elisha.

    21) Allow XDP programs to do lookups in the main kernel routing tables
    for forwarding. From David Ahern.

    22) Allow drivers to store hardware state into an ELF section of kernel
    dump vmcore files, and use it in cxgb4. From Rahul Lakkireddy.

    23) Various RACK and loss detection improvements in TCP, from Yuchung
    Cheng.

    24) Add TCP SACK compression, from Eric Dumazet.

    25) Add User Mode Helper support and basic bpfilter infrastructure, from
    Alexei Starovoitov.

    26) Support ports and protocol values in RTM_GETROUTE, from Roopa
    Prabhu.

    27) Support bulking in ->ndo_xdp_xmit() API, from Jesper Dangaard
    Brouer.

    28) Add lots of forwarding selftests, from Petr Machata.

    29) Add generic network device failover driver, from Sridhar Samudrala.

    * ra.kernel.org:/pub/scm/linux/kernel/git/davem/net-next: (1959 commits)
    strparser: Add __strp_unpause and use it in ktls.
    rxrpc: Fix terminal retransmission connection ID to include the channel
    net: hns3: Optimize PF CMDQ interrupt switching process
    net: hns3: Fix for VF mailbox receiving unknown message
    net: hns3: Fix for VF mailbox cannot receiving PF response
    bnx2x: use the right constant
    Revert "net: sched: cls: Fix offloading when ingress dev is vxlan"
    net: dsa: b53: Fix for brcm tag issue in Cygnus SoC
    enic: fix UDP rss bits
    netdev-FAQ: clarify DaveM's position for stable backports
    rtnetlink: validate attributes in do_setlink()
    mlxsw: Add extack messages for port_{un, }split failures
    netdevsim: Add extack error message for devlink reload
    devlink: Add extack to reload and port_{un, }split operations
    net: metrics: add proper netlink validation
    ipmr: fix error path when ipmr_new_table fails
    ip6mr: only set ip6mr_table from setsockopt when ip6mr_new_table succeeds
    net: hns3: remove unused hclgevf_cfg_func_mta_filter
    netfilter: provide udp*_lib_lookup for nf_tproxy
    qed*: Utilize FW 8.37.2.0
    ...

    Linus Torvalds
     
  • Pull Kconfig updates from Masahiro Yamada:
    "Kconfig now supports new functionality to perform textual
    substitution. It has been a while since Linus suggested to move
    compiler option tests from makefiles to Kconfig. Finally, here it is.

    The implementation has been generalized into a Make-like macro
    language.

    Some built-in functions such as 'shell' are provided. Variables and
    user-defined functions are also supported so that 'cc-option',
    'ld-option', etc. are implemented as macros.

    Summary:

    - refactor package checks for building {m,n,q,g}conf

    - remove unused/unmaintained localization support

    - remove Kbuild cache

    - drop CONFIG_CROSS_COMPILE support

    - replace 'option env=' with direct variable expansion

    - add built-in functions such as 'shell'

    - support variables and user-defined functions

    - add helper macros as as 'cc-option'

    - add unit tests and a document of the new macro language

    - add 'testconfig' to help

    - fix warnings from GCC 8.1"

    * tag 'kconfig-v4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (30 commits)
    kconfig: Avoid format overflow warning from GCC 8.1
    kbuild: Move last word of nconfig help to the previous line
    kconfig: Add testconfig into make help output
    kconfig: add basic helper macros to scripts/Kconfig.include
    kconfig: show compiler version text in the top comment
    kconfig: test: add Kconfig macro language tests
    Documentation: kconfig: document a new Kconfig macro language
    kconfig: error out if a recursive variable references itself
    kconfig: add 'filename' and 'lineno' built-in variables
    kconfig: add 'info', 'warning-if', and 'error-if' built-in functions
    kconfig: expand lefthand side of assignment statement
    kconfig: support append assignment operator
    kconfig: support simply expanded variable
    kconfig: support user-defined function and recursively expanded variable
    kconfig: begin PARAM state only when seeing a command keyword
    kconfig: replace $(UNAME_RELEASE) with function call
    kconfig: add 'shell' built-in function
    kconfig: add built-in function support
    kconfig: make default prompt of mainmenu less specific
    kconfig: remove sym_expand_string_value()
    ...

    Linus Torvalds
     
  • Pull Kbuild updates from Masahiro Yamada:

    - improve fixdep to coalesce consecutive slashes in dep-files

    - fix some issues of the maintainer string generation in deb-pkg script

    - remove unused CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX and clean-up
    several tools and linker scripts

    - clean-up modpost

    - allow to enable the dead code/data elimination for PowerPC in EXPERT
    mode

    - improve two coccinelle scripts for better performance

    - pass endianness and machine size flags to sparse for all architecture

    - misc fixes

    * tag 'kbuild-v4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (25 commits)
    kbuild: add machine size to CHECKFLAGS
    kbuild: add endianness flag to CHEKCFLAGS
    kbuild: $(CHECK) doesnt need NOSTDINC_FLAGS twice
    scripts: Fixed printf format mismatch
    scripts/tags.sh: use `find` for $ALLSOURCE_ARCHS generation
    coccinelle: deref_null: improve performance
    coccinelle: mini_lock: improve performance
    powerpc: Allow LD_DEAD_CODE_DATA_ELIMINATION to be selected
    kbuild: Allow LD_DEAD_CODE_DATA_ELIMINATION to be selectable if enabled
    kbuild: LD_DEAD_CODE_DATA_ELIMINATION no -ffunction-sections/-fdata-sections for module build
    kbuild: Fix asm-generic/vmlinux.lds.h for LD_DEAD_CODE_DATA_ELIMINATION
    modpost: constify *modname function argument where possible
    modpost: remove redundant is_vmlinux() test
    modpost: use strstarts() helper more widely
    modpost: pass struct elf_info pointer to get_modinfo()
    checkpatch: remove VMLINUX_SYMBOL() check
    vmlinux.lds.h: remove no-op macro VMLINUX_SYMBOL()
    kbuild: remove CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
    export.h: remove code for prefixing symbols with underscore
    depmod.sh: remove symbol prefix support
    ...

    Linus Torvalds
     

05 Jun, 2018

1 commit


04 Jun, 2018

1 commit


01 Jun, 2018

1 commit

  • By default, sparse assumes a 64bit machine when compiled on x86-64
    and 32bit when compiled on anything else.

    This can of course create all sort of problems for the other archs, like
    issuing false warnings ('shift too big (32) for type unsigned long'), or
    worse, failing to emit legitimate warnings.

    Fix this by adding the -m32/-m64 flag, depending on CONFIG_64BIT,
    to CHECKFLAGS in the main Makefile (and so for all archs).
    Also, remove the now unneeded -m32/-m64 in arch specific Makefiles.

    Signed-off-by: Luc Van Oostenryck
    Signed-off-by: Masahiro Yamada

    Luc Van Oostenryck
     

29 May, 2018

7 commits

  • The kernel depends on macros like __BYTE_ORDER__,
    __BIG_ENDIAN__ or __LITTLE_ENDIAN__.

    OTOH, sparse doesn't know about the endianness of the kernel and
    by default uses the same as the machine on which sparse was built.

    Ensure that sparse can predefine the macros corresponding to
    how the kernel was configured by adding -m{big,little}-endian
    to CHECKFLAGS in the main Makefile (and so for all archs).
    Also, remove the equivalent done in arch specific Makefiles.

    Signed-off-by: Luc Van Oostenryck
    Signed-off-by: Masahiro Yamada

    Luc Van Oostenryck
     
  • Currently, $(CHECK) receives NOSTDINC_FLAGS twice:
    * first directly in the main Makefile via CHECKFLAGS,
    * then indirectly in scripts/Makefile.build via c_flags.

    Since once is enough, leave the occurence via c_flags and
    remove the one via CHECKFLAGS.

    Signed-off-by: Luc Van Oostenryck
    Signed-off-by: Masahiro Yamada

    Luc Van Oostenryck
     
  • The kernel configuration phase is now tightly coupled with the compiler
    in use. It will be nice to show the compiler information in Kconfig.

    The compiler information will be displayed like this:

    $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- config
    scripts/kconfig/conf --oldaskconfig Kconfig
    *
    * Linux/arm64 4.16.0-rc1 Kernel Configuration
    *
    *
    * Compiler: aarch64-linux-gnu-gcc (Linaro GCC 7.2-2017.11) 7.2.1 20171011
    *
    *
    * General setup
    *
    Compile also drivers which will not load (COMPILE_TEST) [N/y/?]

    If you use GUI methods such as menuconfig, it will be displayed in the
    top menu.

    This is simply implemented by using the 'comment' statement. So, it
    will be saved into the .config file as well.

    This commit has a very important meaning. If the compiler is upgraded,
    Kconfig must be re-run since different compilers have different sets
    of supported options.

    All referenced environments are written to include/config/auto.conf.cmd
    so that any environment change triggers syncconfig, and prompt the user
    to input new values if needed.

    With this commit, something like follows will be added to
    include/config/auto.conf.cmd

    ifneq "$(CC_VERSION_TEXT)" "aarch64-linux-gnu-gcc (Linaro GCC 7.2-2017.11) 7.2.1 20171011"
    include/config/auto.conf: FORCE
    endif

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Kees Cook

    Masahiro Yamada
     
  • Now that 'shell' function is supported, this can be self-contained in
    Kconfig.

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Kees Cook
    Reviewed-by: Ulf Magnusson

    Masahiro Yamada
     
  • To get access to environment variables, Kconfig needs to define a
    symbol using "option env=" syntax. It is tedious to add a symbol entry
    for each environment variable given that we need to define much more
    such as 'CC', 'AS', 'srctree' etc. to evaluate the compiler capability
    in Kconfig.

    Adding '$' for symbol references is grammatically inconsistent.
    Looking at the code, the symbols prefixed with 'S' are expanded by:
    - conf_expand_value()
    This is used to expand 'arch/$ARCH/defconfig' and 'defconfig_list'
    - sym_expand_string_value()
    This is used to expand strings in 'source' and 'mainmenu'

    All of them are fixed values independent of user configuration. So,
    they can be changed into the direct expansion instead of symbols.

    This change makes the code much cleaner. The bounce symbols 'SRCARCH',
    'ARCH', 'SUBARCH', 'KERNELVERSION' are gone.

    sym_init() hard-coding 'UNAME_RELEASE' is also gone. 'UNAME_RELEASE'
    should be replaced with an environment variable.

    ARCH_DEFCONFIG is a normal symbol, so it should be simply referenced
    without '$' prefix.

    The new syntax is addicted by Make. The variable reference needs
    parentheses, like $(FOO), but you can omit them for single-letter
    variables, like $F. Yet, in Makefiles, people tend to use the
    parenthetical form for consistency / clarification.

    At this moment, only the environment variable is supported, but I will
    extend the concept of 'variable' later on.

    The variables are expanded in the lexer so we can simplify the token
    handling on the parser side.

    For example, the following code works.

    [Example code]

    config MY_TOOLCHAIN_LIST
    string
    default "My tools: CC=$(CC), AS=$(AS), CPP=$(CPP)"

    [Result]

    $ make -s alldefconfig && tail -n 1 .config
    CONFIG_MY_TOOLCHAIN_LIST="My tools: CC=gcc, AS=as, CPP=gcc -E"

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Kees Cook

    Masahiro Yamada
     
  • Kbuild provides a couple of ways to specify CROSS_COMPILE:

    [1] Command line
    [2] Environment
    [3] arch/*/Makefile (only some architectures)
    [4] CONFIG_CROSS_COMPILE

    [4] is problematic for the compiler capability tests in Kconfig.
    CONFIG_CROSS_COMPILE allows users to change the compiler prefix from
    'make menuconfig', etc. It means, the compiler options would have
    to be all re-calculated everytime CONFIG_CROSS_COMPILE is changed.

    To avoid complexity and performance issues, I'd like to evaluate
    the shell commands statically, i.e. only parsing Kconfig files.

    I guess the majority is [1] or [2]. Currently, there are only
    5 defconfig files that specify CONFIG_CROSS_COMPILE.
    arch/arm/configs/lpc18xx_defconfig
    arch/hexagon/configs/comet_defconfig
    arch/nds32/configs/defconfig
    arch/openrisc/configs/or1ksim_defconfig
    arch/openrisc/configs/simple_smp_defconfig

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Kees Cook

    Masahiro Yamada
     
  • The kbuild cache was introduced to remember the result of shell
    commands, some of which are expensive to compute, such as
    $(call cc-option,...).

    However, this turned out not so clever as I had first expected.
    Actually, it is problematic. For example, "$(CC) -print-file-name"
    is cached. If the compiler is updated, the stale search path causes
    build error, which is difficult to figure out. Another problem
    scenario is cache files could be touched while install targets are
    running under the root permission. We can patch them if desired,
    but the build infrastructure is getting uglier and uglier.

    Now, we are going to move compiler flag tests to the configuration
    phase. If this is completed, the result of compiler tests will be
    naturally cached in the .config file. We will not have performance
    issues of incremental building since this testing only happens at
    Kconfig time.

    To start this work with a cleaner code base, remove the kbuild
    cache first.

    Revert the following commits:
    Commit 9a234a2e3843 ("kbuild: create directory for make cache only when necessary")
    Commit e17c400ae194 ("kbuild: shrink .cache.mk when it exceeds 1000 lines")
    Commit 4e56207130ed ("kbuild: Cache a few more calls to the compiler")
    Commit 3298b690b21c ("kbuild: Add a cache for generated variables")

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Kees Cook

    Masahiro Yamada
     

28 May, 2018

2 commits


21 May, 2018

1 commit


17 May, 2018

4 commits

  • Modules do not tend to cope with -ffunction-sections, even though they
    do not link with -gc-sections. It may be possible for unused symbols to
    be trimmed from modules, but in general that would take much more work
    in architecture module linker scripts.

    For now, enable these only for kernel build.

    Signed-off-by: Nicholas Piggin
    Signed-off-by: Masahiro Yamada

    Nicholas Piggin
     
  • CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX was selected by BLACKFIN, METAG.
    They were removed by commit 4ba66a976072 ("arch: remove blackfin port"),
    commit bb6fb6dfcc17 ("metag: Remove arch/metag/"), respectively.

    No more architecture enables CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX,
    hence the last argument of scripts/depmod.sh can be removed.

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Sam Ravnborg

    Masahiro Yamada
     
  • Since commit e501ce957a78 ("x86: Force asm-goto"), aarch64 build on
    distributions which enable PIE by default (e.g. openSUSE Tumbleweed) does
    not detect support for asm goto correctly. The problem is that ARM specific
    part of scripts/gcc-goto.sh fails with PIE even with recent gcc versions.
    Moving the asm goto detection up in Makefile put it before the place where
    we disable PIE. As a result, kernel is built without jump label support.

    Move the lines disabling PIE before the asm goto test to make it work.

    Fixes: e501ce957a78 ("x86: Force asm-goto")
    Reported-by: Andreas Faerber
    Signed-off-by: Michal Kubecek
    Acked-by: Peter Zijlstra (Intel)
    Signed-off-by: Masahiro Yamada

    Michal Kubecek
     
  • Clang does not recognize this compiler option.

    Reported-by: Prasad Sodagudi
    Signed-off-by: Nick Desaulniers
    Signed-off-by: Masahiro Yamada

    Nick Desaulniers
     

14 May, 2018

1 commit


07 May, 2018

1 commit


30 Apr, 2018

1 commit


23 Apr, 2018

1 commit


16 Apr, 2018

1 commit


07 Apr, 2018

4 commits

  • The __FILE__ macro is used everywhere in the kernel to locate the file
    printing the log message, such as WARN_ON(), etc. If the kernel is
    built out of tree, this can be a long absolute path, like this:

    WARNING: CPU: 1 PID: 1 at /path/to/build/directory/arch/arm64/kernel/foo.c:...

    This is because Kbuild runs in the objtree instead of the srctree,
    then __FILE__ is expanded to a file path prefixed with $(srctree)/.

    Commit 9da0763bdd82 ("kbuild: Use relative path when building in a
    subdir of the source tree") improved this to some extent; $(srctree)
    becomes ".." if the objtree is a child of the srctree.

    For other cases of out-of-tree build, __FILE__ is still the absolute
    path. It also means the kernel image depends on where it was built.

    A brand-new option from GCC, -fmacro-prefix-map, solves this problem.
    If your compiler supports it, __FILE__ is the relative path from the
    srctree regardless of O= option. This provides more readable log and
    more reproducible builds.

    Please note __FILE__ is always an absolute path for external modules.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • Our convention is to distinguish file types by suffixes with a period
    as a separator.

    *-asn1.[ch] is a different pattern from other generated sources such
    as *.lex.c, *.tab.[ch], *.dtb.S, etc. More confusing, files with
    '-asn1.[ch]' are generated files, but '_asn1.[ch]' are checked-in
    files:
    net/netfilter/nf_conntrack_h323_asn1.c
    include/linux/netfilter/nf_conntrack_h323_asn1.h
    include/linux/sunrpc/gss_asn1.h

    Rename generated files to *.asn1.[ch] for consistency.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • Clean up these patterns from the top Makefile to omit 'clean-files'
    in each Makefile.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • Files suffixed by .lex.c, .tab.[ch] are generated lexers, parsers,
    respectively. Clean them up globally from the top Makefile.

    Some of the final host programs those lexer/parser are linked into
    are necessary for building external modules, but the intermediates
    are unneeded. They can be cleaned away by 'make clean' instead of
    'make mrproper'.

    Signed-off-by: Masahiro Yamada
    Acked-by: Frank Rowand

    Masahiro Yamada
     

04 Apr, 2018

2 commits

  • Pull Kconfig updates from Masahiro Yamada:

    - improve checkpatch for more precise Kconfig code checking

    - clarify effective selects by grouping reverse dependencies in help

    - do not write out '# CONFIG_FOO is not set' from invisible symbols

    - make oldconfig as silent as it should be

    - rename 'silentoldconfig' to 'syncconfig'

    - add unit-test framework and several test cases

    - warn unmet dependency of tristate symbols

    - make unmet dependency warnings readable, removing false positives

    - improve recursive include detection

    - use yylineno to simplify the line number tracking

    - misc cleanups

    * tag 'kconfig-v4.17' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (30 commits)
    kconfig: use yylineno option instead of manual lineno increments
    kconfig: detect recursive inclusion earlier
    kconfig: remove duplicated file name and lineno of recursive inclusion
    kconfig: do not include both curses.h and ncurses.h for nconfig
    kconfig: make unmet dependency warnings readable
    kconfig: warn unmet direct dependency of tristate symbols selected by y
    kconfig: tests: test if recursive inclusion is detected
    kconfig: tests: test if recursive dependencies are detected
    kconfig: tests: test randconfig for choice in choice
    kconfig: tests: test defconfig when two choices interact
    kconfig: tests: check visibility of tristate choice values in y choice
    kconfig: tests: check unneeded "is not set" with unmet dependency
    kconfig: tests: test if new symbols in choice are asked
    kconfig: tests: test automatic submenu creation
    kconfig: tests: add basic choice tests
    kconfig: tests: add framework for Kconfig unit testing
    kbuild: add PYTHON2 and PYTHON3 variables
    kconfig: remove redundant streamline_config.pl prerequisite
    kconfig: rename silentoldconfig to syncconfig
    kconfig: invoke oldconfig instead of silentoldconfig from local*config
    ...

    Linus Torvalds
     
  • Pull Kbuild updates from Masahiro Yamada:

    - add a shell script to get Clang version

    - improve portability of build scripts

    - drop always-enabled CONFIG_THIN_ARCHIVE and remove unused code

    - rename built-in.o which is now thin archive to built-in.a

    - process clean/build targets one by one to get along with -j option

    - simplify ld-option

    - improve building with CONFIG_TRIM_UNUSED_KSYMS

    - define KBUILD_MODNAME even for objects shared among multiple modules

    - avoid linking multiple instances of same objects from composite
    objects

    - move to c_flags to include it only for C
    files

    - clean-up various Makefiles

    * tag 'kbuild-v4.17' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (29 commits)
    kbuild: get out of
    kbuild: clean up link rule of composite modules
    kbuild: clean up archive rule of built-in.a
    kbuild: remove partial section mismatch detection for built-in.a
    net: liquidio: clean up Makefile for simpler composite object handling
    lib: zstd: clean up Makefile for simpler composite object handling
    kbuild: link $(real-obj-y) instead of $(obj-y) into built-in.a
    kbuild: rename real-objs-y/m to real-obj-y/m
    kbuild: move modname and modname-multi close to modname_flags
    kbuild: simplify modname calculation
    kbuild: fix modname for composite modules
    kbuild: define KBUILD_MODNAME even if multiple modules share objects
    kbuild: remove unnecessary $(subst $(obj)/, , ...) in modname-multi
    kbuild: Use ls(1) instead of stat(1) to obtain file size
    kbuild: link vmlinux only once for CONFIG_TRIM_UNUSED_KSYMS
    kbuild: move include/config/ksym/* to include/ksym/*
    kbuild: move CONFIG_TRIM_UNUSED_KSYMS code unneeded for external module
    kbuild: restore autoksyms.h touch to the top Makefile
    kbuild: move 'scripts' target below
    kbuild: remove wrong 'touch' in adjust_autoksyms.sh
    ...

    Linus Torvalds
     

03 Apr, 2018

2 commits

  • Pul removal of obsolete architecture ports from Arnd Bergmann:
    "This removes the entire architecture code for blackfin, cris, frv,
    m32r, metag, mn10300, score, and tile, including the associated device
    drivers.

    I have been working with the (former) maintainers for each one to
    ensure that my interpretation was right and the code is definitely
    unused in mainline kernels. Many had fond memories of working on the
    respective ports to start with and getting them included in upstream,
    but also saw no point in keeping the port alive without any users.

    In the end, it seems that while the eight architectures are extremely
    different, they all suffered the same fate: There was one company in
    charge of an SoC line, a CPU microarchitecture and a software
    ecosystem, which was more costly than licensing newer off-the-shelf
    CPU cores from a third party (typically ARM, MIPS, or RISC-V). It
    seems that all the SoC product lines are still around, but have not
    used the custom CPU architectures for several years at this point. In
    contrast, CPU instruction sets that remain popular and have actively
    maintained kernel ports tend to all be used across multiple licensees.

    [ See the new nds32 port merged in the previous commit for the next
    generation of "one company in charge of an SoC line, a CPU
    microarchitecture and a software ecosystem" - Linus ]

    The removal came out of a discussion that is now documented at
    https://lwn.net/Articles/748074/. Unlike the original plans, I'm not
    marking any ports as deprecated but remove them all at once after I
    made sure that they are all unused. Some architectures (notably tile,
    mn10300, and blackfin) are still being shipped in products with old
    kernels, but those products will never be updated to newer kernel
    releases.

    After this series, we still have a few architectures without mainline
    gcc support:

    - unicore32 and hexagon both have very outdated gcc releases, but the
    maintainers promised to work on providing something newer. At least
    in case of hexagon, this will only be llvm, not gcc.

    - openrisc, risc-v and nds32 are still in the process of finishing
    their support or getting it added to mainline gcc in the first
    place. They all have patched gcc-7.3 ports that work to some
    degree, but complete upstream support won't happen before gcc-8.1.
    Csky posted their first kernel patch set last week, their situation
    will be similar

    [ Palmer Dabbelt points out that RISC-V support is in mainline gcc
    since gcc-7, although gcc-7.3.0 is the recommended minimum - Linus ]"

    This really says it all:

    2498 files changed, 95 insertions(+), 467668 deletions(-)

    * tag 'arch-removal' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic: (74 commits)
    MAINTAINERS: UNICORE32: Change email account
    staging: iio: remove iio-trig-bfin-timer driver
    tty: hvc: remove tile driver
    tty: remove bfin_jtag_comm and hvc_bfin_jtag drivers
    serial: remove tile uart driver
    serial: remove m32r_sio driver
    serial: remove blackfin drivers
    serial: remove cris/etrax uart drivers
    usb: Remove Blackfin references in USB support
    usb: isp1362: remove blackfin arch glue
    usb: musb: remove blackfin port
    usb: host: remove tilegx platform glue
    pwm: remove pwm-bfin driver
    i2c: remove bfin-twi driver
    spi: remove blackfin related host drivers
    watchdog: remove bfin_wdt driver
    can: remove bfin_can driver
    mmc: remove bfin_sdh driver
    input: misc: remove blackfin rotary driver
    input: keyboard: remove bf54x driver
    ...

    Linus Torvalds
     
  • Pull x86 build updates from Ingo Molnar:
    "The biggest change is the forcing of asm-goto support on x86, which
    effectively increases the GCC minimum supported version to gcc-4.5 (on
    x86)"

    * 'x86-build-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/build: Don't pass in -D__KERNEL__ multiple times
    x86: Remove FAST_FEATURE_TESTS
    x86: Force asm-goto
    x86/build: Drop superfluous ALIGN from the linker script

    Linus Torvalds
     

02 Apr, 2018

1 commit


31 Mar, 2018

1 commit

  • …t/masahiroy/linux-kbuild

    Pull Kbuild fixes from Masahiro Yamada:

    - fix missed rebuild of TRIM_UNUSED_KSYMS

    - fix rpm-pkg for GNU tar >= 1.29

    - include scripts/dtc/include-prefixes/* to kernel header deb-pkg

    - add -no-integrated-as option ealier to fix building with Clang

    - fix netfilter Makefile for parallel building

    * tag 'kbuild-fixes-v4.16-3' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
    netfilter: nf_nat_snmp_basic: add correct dependency to Makefile
    kbuild: rpm-pkg: Support GNU tar >= 1.29
    builddeb: Fix header package regarding dtc source links
    kbuild: set no-integrated-as before incl. arch Makefile
    kbuild: make scripts/adjust_autoksyms.sh robust against timestamp races

    Linus Torvalds