Merge tag 'kbuild-v4.12' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 11 May 2017 03:11:05 +0000 (20:11 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 11 May 2017 03:11:05 +0000 (20:11 -0700)
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
  ...

1  2 
Makefile
scripts/Kbuild.include
scripts/Makefile.lib

diff --combined Makefile
+++ b/Makefile
@@@ -1,7 -1,7 +1,7 @@@
  VERSION = 4
  PATCHLEVEL = 11
  SUBLEVEL = 0
 -EXTRAVERSION = -rc1
 +EXTRAVERSION =
  NAME = Fearless Coyote
  
  # *DOCUMENTATION*
@@@ -172,8 -172,8 +172,8 @@@ MAKEFLAGS += --no-print-director
  # Use 'make C=2' to enable checking of *all* source files, regardless
  # of whether they are re-compiled or not.
  #
 -# See the file "Documentation/sparse.txt" for more details, including
 -# where to get the "sparse" utility.
 +# See the file "Documentation/dev-tools/sparse.rst" for more details,
 +# including where to get the "sparse" utility.
  
  ifeq ("$(origin C)", "command line")
    KBUILD_CHECKSRC = $(C)
@@@ -372,7 -372,7 +372,7 @@@ LDFLAGS_MODULE  
  CFLAGS_KERNEL =
  AFLAGS_KERNEL =
  LDFLAGS_vmlinux =
 -CFLAGS_GCOV   = -fprofile-arcs -ftest-coverage -fno-tree-loop-im -Wno-maybe-uninitialized
 +CFLAGS_GCOV   := -fprofile-arcs -ftest-coverage -fno-tree-loop-im $(call cc-disable-warning,maybe-uninitialized,)
  CFLAGS_KCOV   := $(call cc-option,-fsanitize-coverage=trace-pc,)
  
  
@@@ -632,13 -632,9 +632,9 @@@ include arch/$(SRCARCH)/Makefil
  KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,)
  KBUILD_CFLAGS += $(call cc-disable-warning,frame-address,)
  
- ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
- KBUILD_CFLAGS += $(call cc-option,-ffunction-sections,)
- KBUILD_CFLAGS += $(call cc-option,-fdata-sections,)
- endif
  ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
- KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,)
+ KBUILD_CFLAGS += $(call cc-option,-Oz,-Os)
+ KBUILD_CFLAGS += $(call cc-disable-warning,maybe-uninitialized,)
  else
  ifdef CONFIG_PROFILE_ALL_BRANCHES
  KBUILD_CFLAGS += -O2 $(call cc-disable-warning,maybe-uninitialized,)
@@@ -653,12 -649,6 +649,12 @@@ KBUILD_CFLAGS += $(call cc-ifversion, -
  # Tell gcc to never replace conditional load with a non-conditional one
  KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
  
 +# check for 'asm goto'
 +ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
 +      KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
 +      KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO
 +endif
 +
  include scripts/Makefile.gcc-plugins
  
  ifdef CONFIG_READABLE_ASM
@@@ -698,8 -688,16 +694,16 @@@ endi
  KBUILD_CFLAGS += $(stackp-flag)
  
  ifeq ($(cc-name),clang)
+ ifneq ($(CROSS_COMPILE),)
+ CLANG_TARGET  := -target $(notdir $(CROSS_COMPILE:%-=%))
+ GCC_TOOLCHAIN := $(realpath $(dir $(shell which $(LD)))/..)
+ endif
+ ifneq ($(GCC_TOOLCHAIN),)
+ CLANG_GCC_TC  := -gcc-toolchain $(GCC_TOOLCHAIN)
+ endif
+ KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
+ KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
  KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
- KBUILD_CPPFLAGS += $(call cc-option,-Wno-unknown-warning-option,)
  KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
  KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
  KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
@@@ -710,10 -708,12 +714,12 @@@ KBUILD_CFLAGS += $(call cc-disable-warn
  # See modpost pattern 2
  KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
  KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
+ KBUILD_CFLAGS += $(call cc-option, -no-integrated-as)
+ KBUILD_AFLAGS += $(call cc-option, -no-integrated-as)
  else
  
  # These warnings generated too much noise in a regular build.
- # Use make W=1 to enable them (see scripts/Makefile.build)
+ # Use make W=1 to enable them (see scripts/Makefile.extrawarn)
  KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
  KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
  endif
@@@ -773,6 -773,11 +779,11 @@@ ifdef CONFIG_DEBUG_SECTION_MISMATC
  KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once)
  endif
  
+ ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
+ KBUILD_CFLAGS += $(call cc-option,-ffunction-sections,)
+ KBUILD_CFLAGS += $(call cc-option,-fdata-sections,)
+ endif
  # arch Makefile may override CC so keep this after arch Makefile is included
  NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
  CHECKFLAGS     += $(NOSTDINC_FLAGS)
@@@ -801,9 -806,18 +812,12 @@@ KBUILD_CFLAGS   += $(call cc-option,-We
  # enforce correct pointer usage
  KBUILD_CFLAGS   += $(call cc-option,-Werror=incompatible-pointer-types)
  
+ # Require designated initializers for all marked structures
+ KBUILD_CFLAGS   += $(call cc-option,-Werror=designated-init)
  # use the deterministic mode of AR if available
  KBUILD_ARFLAGS := $(call ar-option,D)
  
 -# check for 'asm goto'
 -ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
 -      KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
 -      KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO
 -endif
 -
  include scripts/Makefile.kasan
  include scripts/Makefile.extrawarn
  include scripts/Makefile.ubsan
@@@ -815,7 -829,7 +829,7 @@@ KBUILD_AFLAGS   += $(ARCH_AFLAGS)   $(K
  KBUILD_CFLAGS   += $(ARCH_CFLAGS)   $(KCFLAGS)
  
  # Use --build-id when available.
- LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
+ LDFLAGS_BUILD_ID := $(patsubst -Wl$(comma)%,%,\
                              $(call cc-ldoption, -Wl$(comma)--build-id,))
  KBUILD_LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
  LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID)
@@@ -1315,8 -1329,8 +1329,8 @@@ PHONY += distclea
  distclean: mrproper
        @find $(srctree) $(RCS_FIND_IGNORE) \
                \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
-               -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
-               -o -name '.*.rej' -o -name '*%'  -o -name 'core' \) \
+               -o -name '*.bak' -o -name '#*#' -o -name '*%' \
+               -o -name 'core' \) \
                -type f -print | xargs rm -f
  
  
@@@ -1361,6 -1375,8 +1375,8 @@@ help
        @echo  '                    (default: $$(INSTALL_MOD_PATH)/lib/firmware)'
        @echo  '  dir/            - Build all files in dir and below'
        @echo  '  dir/file.[ois]  - Build specified target only'
+       @echo  '  dir/file.ll     - Build the LLVM assembly file'
+       @echo  '                    (requires compiler support for LLVM assembly generation)'
        @echo  '  dir/file.lst    - Build specified mixed source/assembly target only'
        @echo  '                    (requires a recent binutils and recent build (System.map))'
        @echo  '  dir/file.ko     - Build module including final link'
        @echo  '  headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
         echo  '                    (default: $(INSTALL_HDR_PATH))'; \
         echo  ''
 -      @echo  'Static analysers'
 +      @echo  'Static analysers:'
        @echo  '  checkstack      - Generate a list of stack hogs'
        @echo  '  namespacecheck  - Name space analysis on compiled kernel'
        @echo  '  versioncheck    - Sanity check on version.h usage'
        @echo  '  headerdep       - Detect inclusion cycles in headers'
        @$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
        @echo  ''
 -      @echo  'Kernel selftest'
 +      @echo  'Kernel selftest:'
        @echo  '  kselftest       - Build and run kernel selftest (run as root)'
        @echo  '                    Build, install, and boot kernel before'
        @echo  '                    running kselftest on it'
        @echo  '  kselftest-merge - Merge all the config dependencies of kselftest to existed'
        @echo  '                    .config.'
        @echo  ''
 +      @echo 'Userspace tools targets:'
 +      @echo '  use "make tools/help"'
 +      @echo '  or  "cd tools; make help"'
 +      @echo  ''
        @echo  'Kernel packaging:'
        @$(MAKE) $(build)=$(package-dir) help
        @echo  ''
@@@ -1549,6 -1561,7 +1565,7 @@@ clean: $(clean-dirs
                -o -name '*.symtypes' -o -name 'modules.order' \
                -o -name modules.builtin -o -name '.tmp_*.o.*' \
                -o -name '*.c.[012]*.*' \
+               -o -name '*.ll' \
                -o -name '*.gcno' \) -type f -print | xargs rm -f
  
  # Generate tags for editors
@@@ -1652,6 -1665,8 +1669,8 @@@ endi
        $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
  %.symtypes: %.c prepare scripts FORCE
        $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
+ %.ll: %.c prepare scripts FORCE
+       $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
  
  # Modules
  /: prepare scripts FORCE
diff --combined scripts/Kbuild.include
@@@ -116,12 -116,12 +116,12 @@@ CC_OPTION_CFLAGS = $(filter-out $(GCC_P
  # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
  
  cc-option = $(call try-run,\
-       $(CC) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
+       $(CC) -Werror $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
  
  # cc-option-yn
  # Usage: flag := $(call cc-option-yn,-march=winchip-c6)
  cc-option-yn = $(call try-run,\
-       $(CC) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n)
+       $(CC) -Werror $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n)
  
  # cc-option-align
  # Prefix align with either -falign or -malign
@@@ -131,7 -131,7 +131,7 @@@ cc-option-align = $(subst -functions=0,
  # cc-disable-warning
  # Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable)
  cc-disable-warning = $(call try-run,\
-       $(CC) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
+       $(CC) -Werror $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
  
  # cc-name
  # Expands to either gcc or clang
@@@ -148,10 -148,6 +148,10 @@@ cc-fullversion = $(shell $(CONFIG_SHELL
  # Usage:  EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
  cc-ifversion = $(shell [ $(cc-version) $(1) $(2) ] && echo $(3) || echo $(4))
  
 +# cc-if-fullversion
 +# Usage:  EXTRA_CFLAGS += $(call cc-if-fullversion, -lt, 040502, -O1)
 +cc-if-fullversion = $(shell [ $(cc-fullversion) $(1) $(2) ] && echo $(3) || echo $(4))
 +
  # cc-ldoption
  # Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both)
  cc-ldoption = $(call try-run,\
diff --combined scripts/Makefile.lib
@@@ -155,7 -155,7 +155,7 @@@ els
  # $(call addtree,-I$(obj)) locates .h files in srctree, from generated .c files
  #   and locates generated .h files
  # FIXME: Replace both with specific CFLAGS* statements in the makefiles
 -__c_flags     = $(if $(obj),-I$(srctree)/$(src) -I$(obj)) \
 +__c_flags     = $(if $(obj),$(call addtree,-I$(src)) -I$(obj)) \
                  $(call flags,_c_flags)
  __a_flags     = $(call flags,_a_flags)
  __cpp_flags     = $(call flags,_cpp_flags)
@@@ -280,21 -280,9 +280,21 @@@ DTC ?= $(objtree)/scripts/dtc/dt
  
  # Disable noisy checks by default
  ifeq ($(KBUILD_ENABLE_EXTRA_GCC_CHECKS),)
 -DTC_FLAGS += -Wno-unit_address_vs_reg
 +DTC_FLAGS += -Wno-unit_address_vs_reg \
 +      -Wno-simple_bus_reg \
 +      -Wno-unit_address_format \
 +      -Wno-pci_bridge \
 +      -Wno-pci_device_bus_num \
 +      -Wno-pci_device_reg
  endif
  
 +ifeq ($(KBUILD_ENABLE_EXTRA_GCC_CHECKS),2)
 +DTC_FLAGS += -Wnode_name_chars_strict \
 +      -Wproperty_name_chars_strict
 +endif
 +
 +DTC_FLAGS += $(DTC_FLAGS_$(basetarget))
 +
  # Generate an assembly file to wrap the output of the device tree compiler
  quiet_cmd_dt_S_dtb= DTB     $@
  cmd_dt_S_dtb=                                         \
@@@ -420,3 -408,34 +420,34 @@@ quiet_cmd_xzmisc = XZMISC  $
  cmd_xzmisc = (cat $(filter-out FORCE,$^) | \
        xz --check=crc32 --lzma2=dict=1MiB) > $@ || \
        (rm -f $@ ; false)
+ # ASM offsets
+ # ---------------------------------------------------------------------------
+ # Default sed regexp - multiline due to syntax constraints
+ #
+ # Use [:space:] because LLVM's integrated assembler inserts <tab> around
+ # the .ascii directive whereas GCC keeps the <space> as-is.
+ define sed-offsets
+       's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; \
+       /^->/{s:->#\(.*\):/* \1 */:; \
+       s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \
+       s:->::; p;}'
+ endef
+ # Use filechk to avoid rebuilds when a header changes, but the resulting file
+ # does not
+ define filechk_offsets
+       (set -e; \
+        echo "#ifndef $2"; \
+        echo "#define $2"; \
+        echo "/*"; \
+        echo " * DO NOT MODIFY."; \
+        echo " *"; \
+        echo " * This file was generated by Kbuild"; \
+        echo " */"; \
+        echo ""; \
+        sed -ne $(sed-offsets); \
+        echo ""; \
+        echo "#endif" )
+ endef