30 Aug, 2018

1 commit

  • Commit cafa0010cd51 ("Raise the minimum required gcc version to 4.6")
    bumped the minimum GCC version to 4.6 for all architectures.

    Remove the workaround code.

    It was the only user of cc-if-fullversion. Remove the macro as well.

    Signed-off-by: Masahiro Yamada
    Signed-off-by: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Cc: Michal Marek
    Cc: linux-kbuild@vger.kernel.org
    Link: https://lkml.kernel.org/r/1535348714-25457-1-git-send-email-yamada.masahiro@socionext.com

    Masahiro Yamada
     

24 Aug, 2018

1 commit

  • Commit a0f97e06a43c ("kbuild: enable 'make CFLAGS=...' to add
    additional options to CC") renamed CFLAGS to KBUILD_CFLAGS.

    Commit 222d394d30e7 ("kbuild: enable 'make AFLAGS=...' to add
    additional options to AS") renamed AFLAGS to KBUILD_AFLAGS.

    Commit 06c5040cdb13 ("kbuild: enable 'make CPPFLAGS=...' to add
    additional options to CPP") renamed CPPFLAGS to KBUILD_CPPFLAGS.

    For some reason, LDFLAGS was not renamed.

    Using a well-known variable like LDFLAGS may result in accidental
    override of the variable.

    Kbuild generally uses KBUILD_ prefixed variables for the internally
    appended options, so here is one more conversion to sanitize the
    naming convention.

    I did not touch Makefiles under tools/ since the tools build system
    is a different world.

    Signed-off-by: Masahiro Yamada
    Acked-by: Kirill A. Shutemov
    Reviewed-by: Palmer Dabbelt

    Masahiro Yamada
     

16 Aug, 2018

2 commits

  • Pull Kconfig updates from Masahiro Yamada:

    - show clearer error messages where pkg-config is needed, but not
    installed

    - rename SYMBOL_AUTO to SYMBOL_NO_WRITE to reflect its semantics

    - create all necessary directories by Kconfig tool itself instead of
    Makefile

    - update the .config unconditionally when syncconfig is invoked

    - use 'include' directive instead of '-include' where
    include/config/{auto,tristate}.conf is mandatory

    - do not try to update the .config when running install targets

    - add .DELETE_ON_ERROR to delete partially updated files

    - misc cleanups and fixes

    * tag 'kconfig-v4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
    kconfig: remove P_ENV property type
    kconfig: remove unused sym_get_env_prop() function
    kconfig: fix the rule of mainmenu_stmt symbol
    init/Kconfig: Use short unix-style option instead of --longname
    Kbuild: Makefile.modbuiltin: include auto.conf and tristate.conf mandatory
    kbuild: remove auto.conf from prerequisite of phony targets
    kbuild: do not update config for 'make kernelrelease'
    kbuild: do not update config when running install targets
    kbuild: add .DELETE_ON_ERROR special target
    kbuild: use 'include' directive to load auto.conf from top Makefile
    kconfig: allow all config targets to write auto.conf if missing
    kconfig: make syncconfig update .config regardless of sym_change_count
    kconfig: create directories needed for syncconfig by itself
    kconfig: remove unneeded directory generation from local*config
    kconfig: split out useful helpers in confdata.c
    kconfig: rename file_write_dep and move it to confdata.c
    kconfig: fix typos in description of "choice" in kconfig-language.txt
    kconfig: handle format string before calling conf_message_callback()
    kconfig: rename SYMBOL_AUTO to SYMBOL_NO_WRITE
    kconfig: check for pkg-config on make {menu,n,g,x}config

    Linus Torvalds
     
  • Pull Kbuild updates from Masahiro Yamada:

    - verify depmod is installed before modules_install

    - support build salt in case build ids must be unique between builds

    - allow users to specify additional host compiler flags via HOST*FLAGS,
    and rename internal variables to KBUILD_HOST*FLAGS

    - update buildtar script to drop vax support, add arm64 support

    - update builddeb script for better debarch support

    - document the pit-fall of if_changed usage

    - fix parallel build of UML with O= option

    - make 'samples' target depend on headers_install to fix build errors

    - remove deprecated host-progs variable

    - add a new coccinelle script for refcount_t vs atomic_t check

    - improve double-test coccinelle script

    - misc cleanups and fixes

    * tag 'kbuild-v4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (41 commits)
    coccicheck: return proper error code on fail
    Coccinelle: doubletest: reduce side effect false positives
    kbuild: remove deprecated host-progs variable
    kbuild: make samples really depend on headers_install
    um: clean up archheaders recipe
    kbuild: add %asm-generic to no-dot-config-targets
    um: fix parallel building with O= option
    scripts: Add Python 3 support to tracing/draw_functrace.py
    builddeb: Add automatic support for sh{3,4}{,eb} architectures
    builddeb: Add automatic support for riscv* architectures
    builddeb: Add automatic support for m68k architecture
    builddeb: Add automatic support for or1k architecture
    builddeb: Add automatic support for sparc64 architecture
    builddeb: Add automatic support for mips{,64}r6{,el} architectures
    builddeb: Add automatic support for mips64el architecture
    builddeb: Add automatic support for ppc64 and powerpcspe architectures
    builddeb: Introduce functions to simplify kconfig tests in set_debarch
    builddeb: Drop check for 32-bit s390
    builddeb: Change architecture detection fallback to use dpkg-architecture
    builddeb: Skip architecture detection when KBUILD_DEBARCH is set
    ...

    Linus Torvalds
     

15 Aug, 2018

1 commit

  • Pull arm64 updates from Will Deacon:
    "A bunch of good stuff in here. Worth noting is that we've pulled in
    the x86/mm branch from -tip so that we can make use of the core
    ioremap changes which allow us to put down huge mappings in the
    vmalloc area without screwing up the TLB. Much of the positive
    diffstat is because of the rseq selftest for arm64.

    Summary:

    - Wire up support for qspinlock, replacing our trusty ticket lock
    code

    - Add an IPI to flush_icache_range() to ensure that stale
    instructions fetched into the pipeline are discarded along with the
    I-cache lines

    - Support for the GCC "stackleak" plugin

    - Support for restartable sequences, plus an arm64 port for the
    selftest

    - Kexec/kdump support on systems booting with ACPI

    - Rewrite of our syscall entry code in C, which allows us to zero the
    GPRs on entry from userspace

    - Support for chained PMU counters, allowing 64-bit event counters to
    be constructed on current CPUs

    - Ensure scheduler topology information is kept up-to-date with CPU
    hotplug events

    - Re-enable support for huge vmalloc/IO mappings now that the core
    code has the correct hooks to use break-before-make sequences

    - Miscellaneous, non-critical fixes and cleanups"

    * tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: (90 commits)
    arm64: alternative: Use true and false for boolean values
    arm64: kexec: Add comment to explain use of __flush_icache_range()
    arm64: sdei: Mark sdei stack helper functions as static
    arm64, kaslr: export offset in VMCOREINFO ELF notes
    arm64: perf: Add cap_user_time aarch64
    efi/libstub: Only disable stackleak plugin for arm64
    arm64: drop unused kernel_neon_begin_partial() macro
    arm64: kexec: machine_kexec should call __flush_icache_range
    arm64: svc: Ensure hardirq tracing is updated before return
    arm64: mm: Export __sync_icache_dcache() for xen-privcmd
    drivers/perf: arm-ccn: Use devm_ioremap_resource() to map memory
    arm64: Add support for STACKLEAK gcc plugin
    arm64: Add stack information to on_accessible_stack
    drivers/perf: hisi: update the sccl_id/ccl_id when MT is supported
    arm64: fix ACPI dependencies
    rseq/selftests: Add support for arm64
    arm64: acpi: fix alignment fault in accessing ACPI
    efi/arm: map UEFI memory map even w/o runtime services enabled
    efi/arm: preserve early mapping of UEFI memory map longer for BGRT
    drivers: acpi: add dependency of EFI for arm64
    ...

    Linus Torvalds
     

28 Jul, 2018

1 commit


25 Jul, 2018

1 commit

  • If Make gets a fatal signal while a shell is executing, it may delete
    the target file that the recipe was supposed to update. This is needed
    to make sure that it is remade from scratch when Make is next run; if
    Make is interrupted after the recipe has begun to write the target file,
    it results in an incomplete file whose time stamp is newer than that
    of the prerequisites files. Make automatically deletes the incomplete
    file on interrupt unless the target is marked .PRECIOUS.

    The situation is just the same as when the shell fails for some reasons.
    Usually when a recipe line fails, if it has changed the target file at
    all, the file is corrupted, or at least it is not completely updated.
    Yet the file’s time stamp says that it is now up to date, so the next
    time Make runs, it will not try to update that file.

    However, Make does not cater to delete the incomplete target file in
    this case. We need to add .DELETE_ON_ERROR somewhere in the Makefile
    to request it.

    scripts/Kbuild.include seems a suitable place to add it because it is
    included from almost all sub-makes.

    Please note .DELETE_ON_ERROR is not effective for phony targets.

    The external module building should never ever touch the kernel tree.
    The following recipe fails if include/generated/autoconf.h is missing.
    However, include/config/auto.conf is not deleted since it is a phony
    target.

    PHONY += include/config/auto.conf

    include/config/auto.conf:
    $(Q)test -e include/generated/autoconf.h -a -e $@ || ( \
    echo >&2; \
    echo >&2 " ERROR: Kernel configuration is invalid."; \
    echo >&2 " include/generated/autoconf.h or $@ are missing.";\
    echo >&2 " Run 'make oldconfig && make prepare' on kernel src to fix it."; \
    echo >&2 ; \
    /bin/false)

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

23 Jul, 2018

1 commit


18 Jul, 2018

1 commit


06 Jul, 2018

1 commit

  • The comment line for addtree says "skip if -I has no parameter".

    What it actually does is "drop if -I has no parameter". For example,
    if you have the compiler flag '-I foo' (a space between), it will be
    converted to 'foo'. This completely changes the meaning.

    What we want is, "do nothing" for -I without parameter so that
    '-I foo' is kept as-is.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

29 May, 2018

1 commit

  • 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

1 commit


10 Apr, 2018

1 commit

  • I tried building using a freshly built Make (4.2.1-69-g8a731d1), but
    already the objtool build broke with

    orc_dump.c: In function ‘orc_dump’:
    orc_dump.c:106:2: error: ‘elf_getshnum’ is deprecated [-Werror=deprecated-declarations]
    if (elf_getshdrnum(elf, &nr_sections)) {

    Turns out that with that new Make, the backslash was not removed, so cpp
    didn't see a #include directive, grep found nothing, and
    -DLIBELF_USE_DEPRECATED was wrongly put in CFLAGS.

    Now, that new Make behaviour is documented in their NEWS file:

    * WARNING: Backward-incompatibility!
    Number signs (#) appearing inside a macro reference or function invocation
    no longer introduce comments and should not be escaped with backslashes:
    thus a call such as:
    foo := $(shell echo '#')
    is legal. Previously the number sign needed to be escaped, for example:
    foo := $(shell echo '\#')
    Now this latter will resolve to "\#". If you want to write makefiles
    portable to both versions, assign the number sign to a variable:
    C := \#
    foo := $(shell echo '$C')
    This was claimed to be fixed in 3.81, but wasn't, for some reason.
    To detect this change search for 'nocomment' in the .FEATURES variable.

    This also fixes up the two make-cmd instances to replace # with $(pound)
    rather than with \#. There might very well be other places that need
    similar fixup in preparation for whatever future Make release contains
    the above change, but at least this builds an x86_64 defconfig with the
    new make.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=197847
    Cc: Randy Dunlap
    Signed-off-by: Rasmus Villemoes
    Signed-off-by: Masahiro Yamada

    Rasmus Villemoes
     

26 Mar, 2018

3 commits

  • The idea of using fixdep was inspired by Kconfig, but autoksyms
    belongs to a different group. So, I want to move those touched
    files under include/config/ksym/ to include/ksym/.

    The directory include/ksym/ can be removed by 'make clean' because
    it is meaningless for the external module building.

    Signed-off-by: Masahiro Yamada
    Acked-by: Nicolas Pitre

    Masahiro Yamada
     
  • Currently, linker options are tested by the coordination of $(CC) and
    $(LD) because $(LD) needs some object to link.

    As commit 86a9df597cdd ("kbuild: fix linker feature test macros when
    cross compiling with Clang") addressed, we need to make sure $(CC)
    and $(LD) agree the underlying architecture of the passed object.

    This could be a bit complex when we combine tools from different groups.
    For example, we can use clang for $(CC), but we still need to rely on
    GCC toolchain for $(LD).

    So, I was searching for a way of standalone testing of linker options.
    A trick I found is to use '-v'; this not only prints the version string,
    but also tests if the given option is recognized.

    If a given option is supported,

    $ aarch64-linux-gnu-ld -v --fix-cortex-a53-843419
    GNU ld (Linaro_Binutils-2017.11) 2.28.2.20170706
    $ echo $?
    0

    If unsupported,

    $ aarch64-linux-gnu-ld -v --fix-cortex-a53-843419
    GNU ld (crosstool-NG linaro-1.13.1-4.7-2013.04-20130415 - Linaro GCC 2013.04) 2.23.1
    aarch64-linux-gnu-ld: unrecognized option '--fix-cortex-a53-843419'
    aarch64-linux-gnu-ld: use the --help option for usage information
    $ echo $?
    1

    Gold works likewise.

    $ aarch64-linux-gnu-ld.gold -v --fix-cortex-a53-843419
    GNU gold (Linaro_Binutils-2017.11 2.28.2.20170706) 1.14
    masahiro@pug:~/ref/linux$ echo $?
    0
    $ aarch64-linux-gnu-ld.gold -v --fix-cortex-a53-999999
    GNU gold (Linaro_Binutils-2017.11 2.28.2.20170706) 1.14
    aarch64-linux-gnu-ld.gold: --fix-cortex-a53-999999: unknown option
    aarch64-linux-gnu-ld.gold: use the --help option for usage information
    $ echo $?
    1

    LLD too.

    $ ld.lld -v --gc-sections
    LLD 7.0.0 (http://llvm.org/git/lld.git 4a0e4190e74cea19f8a8dc625ccaebdf8b5d1585) (compatible with GNU linkers)
    $ echo $?
    0
    $ ld.lld -v --fix-cortex-a53-843419
    LLD 7.0.0 (http://llvm.org/git/lld.git 4a0e4190e74cea19f8a8dc625ccaebdf8b5d1585) (compatible with GNU linkers)
    $ echo $?
    0
    $ ld.lld -v --fix-cortex-a53-999999
    ld.lld: error: unknown argument: --fix-cortex-a53-999999
    LLD 7.0.0 (http://llvm.org/git/lld.git 4a0e4190e74cea19f8a8dc625ccaebdf8b5d1585) (compatible with GNU linkers)
    $ echo $?
    1

    Signed-off-by: Masahiro Yamada
    Tested-by: Nick Desaulniers

    Masahiro Yamada
     
  • * Use BREs where EREs aren't necessary.
    * Pass -E instead of -r to use EREs. This will be standardized in the
    next POSIX revision[0]. GNU sed supports this since 4.2 (May 2009),
    and busybox since 1.22.0 (Jan 2014).
    * Use the [:space:] character class instead of ` \t` in bracket
    expressions. In bracket expressions, POSIX says that loses
    its special meaning, so a conforming implementation cannot expand \t
    to [1].
    * In BREs, use interval expressions (\{n,m\}) instead of non-standard
    features like \+ and \?.
    * Use a loop instead of -s flag.

    There are still plenty of other cases of non-standard sed invocations
    (use of ERE features in BREs, in-place editing), but this fixes some
    core ones.

    [0] http://austingroupbugs.net/view.php?id=528
    [1] http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_05

    Signed-off-by: Michael Forney
    Signed-off-by: Masahiro Yamada

    Michael Forney
     

16 Nov, 2017

1 commit

  • Currently, the existence of $(dir $(make-cache)) is always checked,
    and created if it is missing.

    We can avoid unnecessary system calls by some tricks.

    [1] If KBUILD_SRC is unset, we are building in the source tree.
    The output directory checks can be entirely skipped.
    [2] If at least one cache data is found, it means the cache file
    was included. Obviously its directory exists. Skip "mkdir -p".
    [3] If Makefile does not contain any call of __run-and-store, it will
    not create a cache file. No need to create its directory.
    [4] The "mkdir -p" should be only invoked by the first call of
    __run-and-store

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Douglas Anderson

    Masahiro Yamada
     

13 Nov, 2017

3 commits

  • I was not seeing my linker flags getting added when using ld-option when
    cross compiling with Clang. Upon investigation, this seems to be due to
    a difference in how GCC vs Clang handle cross compilation.

    GCC is configured at build time to support one backend, that is implicit
    when compiling. Clang is explicit via the use of `-target ` and
    ships with all supported backends by default.

    GNU Make feature test macros that compile then link will always fail
    when cross compiling with Clang unless Clang's triple is passed along to
    the compiler. For example:

    $ clang -x c /dev/null -c -o temp.o
    $ aarch64-linux-android/bin/ld -E temp.o
    aarch64-linux-android/bin/ld:
    unknown architecture of input file `temp.o' is incompatible with
    aarch64 output
    aarch64-linux-android/bin/ld:
    warning: cannot find entry symbol _start; defaulting to
    0000000000400078
    $ echo $?
    1

    $ clang -target aarch64-linux-android- -x c /dev/null -c -o temp.o
    $ aarch64-linux-android/bin/ld -E temp.o
    aarch64-linux-android/bin/ld:
    warning: cannot find entry symbol _start; defaulting to 00000000004002e4
    $ echo $?
    0

    This causes conditional checks that invoke $(CC) without the target
    triple, then $(LD) on the result, to always fail.

    Suggested-by: Masahiro Yamada
    Signed-off-by: Nick Desaulniers
    Reviewed-by: Matthias Kaehlcke
    Signed-off-by: Masahiro Yamada

    Nick Desaulniers
     
  • The cache files are only cleaned away by "make clean". If you continue
    incremental builds, the cache files will grow up little by little.
    It is not a big deal in general use cases because compiler flags do not
    change quite often.

    However, if you do build-test for various architectures, compilers, and
    kernel configurations, you will end up with huge cache files soon.

    When the cache file exceeds 1000 lines, shrink it down to 500 by "tail".
    The Least Recently Added lines are cut. (not Least Recently Used)
    I hope it will work well enough.

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Douglas Anderson

    Masahiro Yamada
     
  • While timing a "no-op" build of the kernel (incrementally building the
    kernel even though nothing changed) in the Chrome OS build system I
    found that it was much slower than I expected.

    Digging into things a bit, I found that quite a bit of the time was
    spent invoking the C compiler even though we weren't actually building
    anything. Currently in the Chrome OS build system the C compiler is
    called through a number of wrappers (one of which is written in
    python!) and can take upwards of 100 ms to invoke even if we're not
    doing anything difficult, so these invocations of the compiler were
    taking a lot of time. Worse the invocations couldn't seem to take
    advantage of the multiple cores on my system.

    Certainly it seems like we could make the compiler invocations in the
    Chrome OS build system faster, but only to a point. Inherently
    invoking a program as big as a C compiler is a fairly heavy
    operation. Thus even if we can speed the compiler calls it made sense
    to track down what was happening.

    It turned out that all the compiler invocations were coming from
    usages like this in the kernel's Makefile:

    KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,)

    Due to the way cc-option and similar statements work the above
    contains an implicit call to the C compiler. ...and due to the fact
    that we're storing the result in KBUILD_CFLAGS, a simply expanded
    variable, the call will happen every time the Makefile is parsed, even
    if there are no users of KBUILD_CFLAGS.

    Rather than redoing this computation every time, it makes a lot of
    sense to cache the result of all of the Makefile's compiler calls just
    like we do when we compile a ".c" file to a ".o" file. Conceptually
    this is quite a simple idea. ...and since the calls to invoke the
    compiler and similar tools are centrally located in the Kbuild.include
    file this doesn't even need to be super invasive.

    Implementing the cache in a simple-to-use and efficient way is not
    quite as simple as it first sounds, though. To get maximum speed we
    really want the cache in a format that make can natively understand
    and make doesn't really have an ability to load/parse files. ...but
    make _can_ import other Makefiles, so the solution is to store the
    cache in Makefile format. This requires coming up with a valid/unique
    Makefile variable name for each value to be cached, but that's
    solvable with some cleverness.

    After this change, we'll automatically create a ".cache.mk" file that
    will contain our cached variables. We'll load this on each invocation
    of make and will avoid recomputing anything that's already in our
    cache. The cache is stored in a format that it shouldn't need any
    invalidation since anything that might change should affect the "key"
    and any old cached value won't be used.

    Signed-off-by: Douglas Anderson
    Tested-by: Ingo Molnar
    Tested-by: Guenter Roeck
    Signed-off-by: Masahiro Yamada

    Douglas Anderson
     

09 Aug, 2017

1 commit


25 Jun, 2017

2 commits

  • cc-option uses KBUILD_CFLAGS and KBUILD_CPPFLAGS when it determines
    whether an option is supported or not. This is fine for options used to
    build the kernel itself, however some components like the x86 boot code
    use a different set of flags.

    Add the new macro __cc-option which is a more generic version of
    cc-option with additional parameters. One parameter is the compiler
    with which the check should be performed, the other the compiler options
    to be used instead KBUILD_C*FLAGS.

    Refactor cc-option and hostcc-option to use __cc-option and move
    hostcc-option to scripts/Kbuild.include.

    Suggested-by: Arnd Bergmann
    Suggested-by: Masahiro Yamada
    Signed-off-by: Matthias Kaehlcke
    Acked-by: Arnd Bergmann
    Acked-by: Michal Marek
    Signed-off-by: Masahiro Yamada

    Matthias Kaehlcke
     
  • Documentation/kbuild/makefiles.txt says the change for align options
    occurred at GCC 3.0, and Documentation/process/changes.rst says the
    minimal supported GCC version is 3.2, so it should be safe to hard-code
    -falign* options.

    Fix the only user arch/x86/Makefile_32.cpu and remove cc-option-align.

    Signed-off-by: Masahiro Yamada
    Acked-by: Ingo Molnar

    Masahiro Yamada
     

11 May, 2017

1 commit

  • Pull Kbuild updates from Masahiro Yamada:

    - improve Clang support

    - clean up various Makefiles

    - improve build log visibility (objtool, alpha, ia64)

    - improve compiler flag evaluation for better build performance

    - fix GCC version-dependent warning

    - fix genksyms

    * tag 'kbuild-v4.12' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (23 commits)
    kbuild: dtbinst: remove unnecessary __dtbs_install_prep target
    ia64: beatify build log for gate.so and gate-syms.o
    alpha: make short build log available for division routines
    alpha: merge build rules of division routines
    alpha: add $(src)/ rather than $(obj)/ to make source file path
    Makefile: evaluate LDFLAGS_BUILD_ID only once
    objtool: make it visible in make V=1 output
    kbuild: clang: add -no-integrated-as to KBUILD_[AC]FLAGS
    kbuild: Add support to generate LLVM assembly files
    kbuild: Add better clang cross build support
    kbuild: drop -Wno-unknown-warning-option from clang options
    kbuild: fix asm-offset generation to work with clang
    kbuild: consolidate redundant sed script ASM offset generation
    frv: Use OFFSET macro in DEF_*REG()
    kbuild: avoid conflict between -ffunction-sections and -pg on gcc-4.7
    kbuild: Consolidate header generation from ASM offset information
    kbuild: use -Oz instead of -Os when using clang
    kbuild, LLVMLinux: Add -Werror to cc-option to support clang
    Kbuild: make designated_init attribute fatal
    kbuild: drop unneeded patterns '.*.orig' and '.*.rej' from distclean
    ...

    Linus Torvalds
     

12 Apr, 2017

1 commit

  • Clang will warn about unknown warnings but will not return false
    unless -Werror is set. GCC will return false if an unknown
    warning is passed.

    Adding -Werror make both compiler behave the same.

    [arnd: it turns out we need the same patch for testing whether -ffunction-sections
    works right with gcc. I've build tested extensively with this patch
    applied, so let's just merge this one now.]

    Signed-off-by: Mark Charlebois
    Signed-off-by: Behan Webster
    Reviewed-by: Jan-Simon Möller
    Signed-off-by: Arnd Bergmann
    Acked-by: Kees Cook
    Signed-off-by: Masahiro Yamada

    Mark Charlebois
     

30 Mar, 2017

1 commit

  • The GCC '-maccumulate-outgoing-args' flag is enabled for most configs,
    mostly because of issues which are no longer relevant. For most
    configs, and with most recent versions of GCC, it's no longer needed.

    Clarify which cases need it, and only enable it for those cases. Also
    produce a compile-time error for the ftrace graph + mcount + '-Os' case,
    which will otherwise cause runtime failures.

    The main benefit of '-maccumulate-outgoing-args' is that it prevents an
    ugly prologue for functions which have aligned stacks. But removing the
    option also has some benefits: more readable argument saves, smaller
    text size, and (presumably) slightly improved performance.

    Here are the object size savings for 32-bit and 64-bit defconfig
    kernels:

    text data bss dec hex filename
    10006710 3543328 1773568 15323606 e9d1d6 vmlinux.x86-32.before
    9706358 3547424 1773568 15027350 e54c96 vmlinux.x86-32.after

    text data bss dec hex filename
    10652105 4537576 843776 16033457 f4a6b1 vmlinux.x86-64.before
    10639629 4537576 843776 16020981 f475f5 vmlinux.x86-64.after

    That comes out to a 3% text size improvement on x86-32 and a 0.1% text
    size improvement on x86-64.

    Signed-off-by: Josh Poimboeuf
    Cc: Andrew Lutomirski
    Cc: Andy Lutomirski
    Cc: Borislav Petkov
    Cc: Brian Gerst
    Cc: Denys Vlasenko
    Cc: Linus Torvalds
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Steven Rostedt
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/20170316193133.zrj6gug53766m6nn@treble
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     

14 Feb, 2017

1 commit

  • Add a new command cpp_its_S introduced in commit cf2a5e0bb4c6 ("MIPS:
    Support generating Flattened Image Trees (.itb)") to ksym_dep_filter
    handler - otherwise a warning is produced during the build of MIPS
    platforms (when vmlinux.*.itb target is chosen).

    Signed-off-by: Marcin Nowakowski
    Cc: Michal Marek
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/15278/
    Signed-off-by: James Hogan

    Marcin Nowakowski
     

09 Aug, 2016

1 commit

  • The gcc-plugins arguments should not be included when performing
    cc-option tests.

    Steps to reproduce:
    1) make mrproper
    2) make defconfig
    3) enable GCC_PLUGINS, GCC_PLUGIN_CYC_COMPLEXITY
    4) enable FUNCTION_TRACER (it will select other options as well)
    5) make && make modules

    Build errors:
    MODPOST 18 modules
    ERROR: "__fentry__" [net/netfilter/xt_nat.ko] undefined!
    ERROR: "__fentry__" [net/netfilter/xt_mark.ko] undefined!
    ERROR: "__fentry__" [net/netfilter/xt_addrtype.ko] undefined!
    ERROR: "__fentry__" [net/netfilter/xt_LOG.ko] undefined!
    ERROR: "__fentry__" [net/netfilter/nf_nat_sip.ko] undefined!
    ERROR: "__fentry__" [net/netfilter/nf_nat_irc.ko] undefined!
    ERROR: "__fentry__" [net/netfilter/nf_nat_ftp.ko] undefined!
    ERROR: "__fentry__" [net/netfilter/nf_nat.ko] undefined!

    Reported-by: Laura Abbott
    Signed-off-by: Emese Revfy
    [kees: renamed variable, clarified commit message]
    Signed-off-by: Kees Cook

    Emese Revfy
     

19 Jul, 2016

2 commits

  • When building with separate object directories and driver specific
    Makefiles that add additional header include paths, Kbuild adjusts
    the gcc flags so that we include both the directory in the source
    tree and in the object tree.

    However, due to another bug I fixed earlier, this did not actually
    include the correct directory in the object tree, so we know that
    we only really need the source tree here. Also, including the
    object tree sometimes causes warnings about nonexisting directories
    when the include path only exists in the source.

    This changes the logic to only emit the -I argument for the srctree,
    not for objects. We still need both $(srctree)/$(src) and $(obj)
    though, so I'm adding them manually.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Michal Marek

    Arnd Bergmann
     
  • When we build with O=objdir and objdir is directly below the source tree,
    $(srctree) becomes '..'.

    When a Makefile adds a CFLAGS option like -Ipath/to/headers and
    we are building with a separate object directory, Kbuild tries to
    add two -I options, one for the source tree and one for the object
    tree. An absolute path is treated as a special case, and don't add
    this one twice. This also normally catches -I$(srctree)/$(src)
    as $(srctree) usually is an absolute directory like /home/arnd/linux/.

    The combination of the two behaviors however results in an invalid
    path name to be included: we get both ../$(src) and ../../$(src),
    the latter one pointing outside of the source tree, usually to a
    nonexisting directory. Building with 'make W=1' makes this obvious:

    cc1: error: ../../arch/arm/mach-s3c24xx/include: No such file or directory [-Werror=missing-include-dirs]

    This adds another special case, treating path names starting with ../
    like those starting with / so we don't try to prefix that with
    $(srctree).

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Michal Marek

    Arnd Bergmann
     

11 May, 2016

1 commit

  • Currently, arg-check is implemented as follows:

    arg-check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \
    $(filter-out $(cmd_$@), $(cmd_$(1))) )

    This does not care about the order of arguments that appear in
    $(cmd_$(1)) and $(cmd_$@). So, if_changed and friends never rebuild
    the target if only the argument order is changed. This is a problem
    when the link order is changed.

    Apparently,

    obj-y += foo.o
    obj-y += bar.o

    and

    obj-y += bar.o
    obj-y += foo.o

    should be distinguished because the link order determines the probe
    order of drivers. So, built-in.o should be rebuilt when the order
    of objects is changed.

    This commit fixes arg-check to compare the old/current commands
    including the argument order.

    Of course, this change has a side effect; Kbuild will react to the
    change of compile option order. For example, "-DFOO -DBAR" and
    "-DBAR -DFOO" should give no difference to the build result, but
    false positive should be better than false negative.

    I am moving space_escape to the top of Kbuild.include just for a
    matter of preference. In practical terms, space_escape can be
    defined after arg-check because arg-check uses "=" flavor, not ":=".
    Having said that, collecting convenient variables in one place makes
    sense from the point of readability.

    Chaining "%%%SPACE%%%" to "_-_SPACE_-_" is also a matter of taste
    at this point. Actually, it can be arbitrary as long as it is an
    unlikely used string. The only problem I see in "%%%SPACE%%%" is
    that "%" is a special character in "$(patsubst ...)" context. This
    commit just uses "$(subst ...)" for arg-check, but I am fixing it now
    in case we might want to use it in $(patsubst ...) context in the
    future.

    Signed-off-by: Masahiro Yamada
    Signed-off-by: Michal Marek

    Masahiro Yamada
     

10 May, 2016

1 commit

  • In kernel/cgroup.c there is:

    #define SUBSYS(_x) \
    DEFINE_STATIC_KEY_TRUE(_x ## _cgrp_subsys_enabled_key); \
    DEFINE_STATIC_KEY_TRUE(_x ## _cgrp_subsys_on_dfl_key); \
    EXPORT_SYMBOL_GPL(_x ## _cgrp_subsys_enabled_key); \
    EXPORT_SYMBOL_GPL(_x ## _cgrp_subsys_on_dfl_key);

    The expansion of this macro causes multiple EXPORT_SYMBOL_GPL() instances
    to appear on the same preprocessor line output, confusing the sed script
    expecting only one of them per line. Unfortunately this can't be fixed
    nicely in the sed script as sed's regexp can't do non greedy matching.

    Fix this by turning any semicolon into a line break before filtering.

    Reported-by: Arnd Bergmann
    Signed-off-by: Nicolas Pitre
    Signed-off-by: Michal Marek

    Nicolas Pitre
     

27 Apr, 2016

1 commit


30 Mar, 2016

2 commits

  • Like with kconfig options, we now have the ability to compile in and
    out individual EXPORT_SYMBOL() declarations based on the content of
    include/generated/autoksyms.h. However we don't want the entire
    world to be rebuilt whenever that file is touched.

    Let's apply the same build dependency trick used for CONFIG_* symbols
    where the time stamp of empty files whose paths matching those symbols
    is used to trigger fine grained rebuilds. In our case the key is the
    symbol name passed to EXPORT_SYMBOL().

    However, unlike config options, we cannot just use fixdep to parse
    the source code for EXPORT_SYMBOL(ksym) because several variants exist
    and parsing them all in a separate tool, and keeping it in synch, is
    not trivially maintainable. Furthermore, there are variants such as

    EXPORT_SYMBOL_GPL(pci_user_read_config_##size);

    that are instanciated via a macro for which we can't easily determine
    the actual exported symbol name(s) short of actually running the
    preprocessor on them.

    Storing the symbol name string in a special ELF section doesn't work
    for targets that output assembly or preprocessed source.

    So the best way is really to leverage the preprocessor by having it
    output actual symbol names anchored by a special sequence that can be
    easily filtered out. Then the list of symbols is simply fed to fixdep
    to be merged with the other dependencies.

    That implies the preprocessor is executed twice for each source file.
    A previous attempt relied on a warning pragma for each EXPORT_SYMBOL()
    instance that was filtered apart from stderr by the build system with
    a sed script during the actual compilation pass. Unfortunately the
    preprocessor/compiler diagnostic output isn't stable between versions
    and this solution, although more efficient, was deemed too fragile.

    Because of the lowercasing performed by fixdep, there might be name
    collisions triggering spurious rebuilds for similar symbols. But this
    shouldn't be a big issue in practice. (This is the case for CONFIG_*
    symbols and I didn't want to be different here, whatever the original
    reason for doing so.)

    To avoid needless build overhead, the exported symbol name gathering is
    performed only when CONFIG_TRIM_UNUSED_KSYMS is selected.

    Signed-off-by: Nicolas Pitre
    Acked-by: Rusty Russell

    Nicolas Pitre
     
  • The generation and postprocessing of automatic dependency rules is
    duplicated in rule_cc_o_c, rule_as_o_S and if_changed_dep. Since
    this is not a trivial one-liner action, it is now abstracted under
    cmd_and_fixdep to simplify things and make future changes in this area
    easier.

    In the rule_cc_o_c and rule_as_o_S cases that means the order of some
    commands has been altered, namely fixdep and related file manipulations
    are executed earlier, but they didn't depend on those commands that now
    execute later.

    Signed-off-by: Nicolas Pitre

    Nicolas Pitre
     

05 Mar, 2016

1 commit

  • Under certain conditions, Kbuild shows "... is up to date" where
    if_changed or friends are used.

    For example, the incremental build of ARM64 Linux shows this message
    when the kernel image has not been updated.

    $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
    CHK include/config/kernel.release
    CHK include/generated/uapi/linux/version.h
    CHK include/generated/utsrelease.h
    CHK include/generated/bounds.h
    CHK include/generated/timeconst.h
    CHK include/generated/asm-offsets.h
    CALL scripts/checksyscalls.sh
    CHK include/generated/compile.h
    CHK kernel/config_data.h
    make[1]: `arch/arm64/boot/Image.gz' is up to date.
    Building modules, stage 2.
    MODPOST 0 modules

    The following is the build rule in arch/arm64/boot/Makefile:

    $(obj)/Image.gz: $(obj)/Image FORCE
    $(call if_changed,gzip)

    If the Image.gz is newer than the Image and the command line has not
    changed (i.e., $(any-prereq) and $(arg-check) are both empty), the
    build rule $(call if_changed,gzip) is evaluated to be empty, then
    GNU Make reports the target is up to date. In order to make GNU Make
    quiet, we need to give it something to do, for example, "@:". This
    should be fixed in the Kbuild core part rather than in each Makefile.

    Signed-off-by: Masahiro Yamada
    Signed-off-by: Michal Marek

    Masahiro Yamada
     

09 Sep, 2015

1 commit

  • Pull core kbuild updates from Michal Marek:
    - modpost portability fix
    - linker script fix
    - genksyms segfault fix
    - fixdep cleanup
    - fix for clang detection

    * 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
    kbuild: Fix clang detection
    kbuild: fixdep: drop meaningless hash table initialization
    kbuild: fixdep: optimize code slightly
    genksyms: Regenerate parser
    genksyms: Duplicate function pointer type definitions segfault
    kbuild: Fix .text.unlikely placement
    Avoid conflict with host definitions when cross-compiling

    Linus Torvalds
     

04 Sep, 2015

1 commit

  • We cannot detect clang before including the arch Makefile, because that
    can set the default cross compiler. We also cannot detect clang after
    including the arch Makefile, because powerpc wants to know about clang.
    Solve this by using an deferred variable. This costs us a few shell
    invocations, but this is only a constant number.

    Reported-by: Behan Webster
    Reported-by: Anton Blanchard
    Signed-off-by: Michal Marek

    Michal Marek
     

14 Aug, 2015

1 commit

  • Since commit 1329e8cc69 ("modsign: Extract signing cert from
    CONFIG_MODULE_SIG_KEY if needed"), the build system has carefully coped
    with the signing key being specified as a relative path in either the
    source or or the build trees.

    However, the actual signing of modules has not worked if the filename
    is relative to the source tree.

    Fix that by moving the config_filename helper into scripts/Kbuild.include
    so that it can be used from elsewhere, and then using it in the top-level
    Makefile to find the signing key file.

    Kill the intermediate $(MODPUBKEY) and $(MODSECKEY) variables too, while
    we're at it. There's no need for them.

    Signed-off-by: David Woodhouse
    Signed-off-by: David Howells

    David Woodhouse
     

10 Jan, 2015

1 commit