Merge tag 'kbuild-v4.13' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Jul 2017 21:09:24 +0000 (14:09 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Jul 2017 21:09:24 +0000 (14:09 -0700)
Pull Kbuild updates from Masahiro Yamada:

 - Clean up Makefiles and scripts

 - Improve clang support

 - Remove unneeded genhdr-y syntax

 - Remove unneeded cc-option-align macro

 - Introduce __cc-option macro and use it to fix x86 boot code compiler
   flags

* tag 'kbuild-v4.13' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
  kbuild: improve comments on KBUILD_SRC
  x86/build: Specify stack alignment for clang
  x86/build: Use __cc-option for boot code compiler options
  kbuild: Add __cc-option macro
  kbuild: remove cc-option-align
  kbuild: replace genhdr-y with generated-y
  kbuild: clang: Disable 'address-of-packed-member' warning
  kbuild: remove duplicated arch/*/include/generated/uapi include path
  kbuild: speed up checksyscalls.sh
  kbuild: simplify silent build (-s) detection

1  2 
Documentation/kbuild/makefiles.txt
Makefile
arch/arm/include/uapi/asm/Kbuild
arch/x86/Makefile

index 659afd56ecdb3ec1bd13d411ee126b447f693f43,247fb331c4b24c55711aa9489447735b1db234e1..7003141a6d4f2657eea22f41f26ca3e961c33856
@@@ -45,10 -45,9 +45,9 @@@ This document describes the Linux kerne
  
        === 7 Kbuild syntax for exported headers
                --- 7.1 no-export-headers
-               --- 7.2 genhdr-y
-               --- 7.3 generic-y
-               --- 7.4 generated-y
-               --- 7.5 mandatory-y
+               --- 7.2 generic-y
+               --- 7.3 generated-y
+               --- 7.4 mandatory-y
  
        === 8 Kbuild Variables
        === 9 Makefile language
@@@ -487,22 -486,6 +486,6 @@@ more details, with real examples
        respectively.
        Note: cc-option-yn uses KBUILD_CFLAGS for $(CC) options
  
-     cc-option-align
-       gcc versions >= 3.0 changed the type of options used to specify
-       alignment of functions, loops etc. $(cc-option-align), when used
-       as prefix to the align options, will select the right prefix:
-       gcc < 3.00
-               cc-option-align = -malign
-       gcc >= 3.00
-               cc-option-align = -falign
-       Example:
-               KBUILD_CFLAGS += $(cc-option-align)-functions=4
-       In the above example, the option -falign-functions=4 is used for
-       gcc >= 3.00. For gcc < 3.00, -malign-functions=4 is used.
-       Note: cc-option-align uses KBUILD_CFLAGS for $(CC) options
      cc-disable-warning
        cc-disable-warning checks if gcc supports a given warning and returns
        the commandline switch to disable it. This special function is needed,
@@@ -1277,18 -1260,7 +1260,7 @@@ See subsequent chapter for the syntax o
        avoid exporting specific headers (e.g. kvm.h) on architectures that do
        not support it. It should be avoided as much as possible.
  
-       --- 7.2 genhdr-y
-       genhdr-y specifies asm files to be generated.
-               Example:
-                       #arch/x86/include/uapi/asm/Kbuild
-                       genhdr-y += unistd_32.h
-                       genhdr-y += unistd_64.h
-                       genhdr-y += unistd_x32.h
-       --- 7.3 generic-y
+       --- 7.2 generic-y
  
        If an architecture uses a verbatim copy of a header from
        include/asm-generic then this is listed in the file
                Example: termios.h
                        #include <asm-generic/termios.h>
  
-       --- 7.4 generated-y
+       --- 7.3 generated-y
  
        If an architecture generates other header files alongside generic-y
-       wrappers, and not included in genhdr-y, then generated-y specifies
-       them.
+       wrappers, generated-y specifies them.
  
        This prevents them being treated as stale asm-generic wrappers and
        removed.
        --- 7.5 mandatory-y
  
        mandatory-y is essentially used by include/uapi/asm-generic/Kbuild.asm
 -      to define the minimun set of headers that must be exported in
 +      to define the minimum set of headers that must be exported in
        include/asm.
  
        The convention is to list one subdir per line and
diff --combined Makefile
index d7cb0372bed921927c3080a730a4a9b4af129b83,41ed3062337b64608a2a6f4022350364e4fe78d1..faea0e37c2f2683ef6d337c074c4c1c91b79d113
+++ b/Makefile
@@@ -1,7 -1,7 +1,7 @@@
  VERSION = 4
  PATCHLEVEL = 12
  SUBLEVEL = 0
 -EXTRAVERSION = -rc2
 +EXTRAVERSION =
  NAME = Fearless Coyote
  
  # *DOCUMENTATION*
@@@ -84,17 -84,10 +84,10 @@@ endi
  # If the user is running make -s (silent mode), suppress echoing of
  # commands
  
- ifneq ($(filter 4.%,$(MAKE_VERSION)),)        # make-4
- ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
+ ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
    quiet=silent_
    tools_silent=s
  endif
- else                                  # make-3.8x
- ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
-   quiet=silent_
-   tools_silent=-s
- endif
- endif
  
  export quiet Q KBUILD_VERBOSE
  
  # The O= assignment takes precedence over the KBUILD_OUTPUT environment
  # variable.
  
- # KBUILD_SRC is set on invocation of make in OBJ directory
- # KBUILD_SRC is not intended to be used by the regular user (for now)
+ # KBUILD_SRC is not intended to be used by the regular user (for now),
+ # it is set on invocation of make with KBUILD_OUTPUT or O= specified.
  ifeq ($(KBUILD_SRC),)
  
  # OK, Make called in directory where kernel src resides
@@@ -135,7 -128,6 +128,6 @@@ ifneq ($(words $(subst :, ,$(CURDIR)))
  endif
  
  ifneq ($(KBUILD_OUTPUT),)
- # Invoke a second make in the output directory, passing relevant variables
  # check that the output directory actually exists
  saved-output := $(KBUILD_OUTPUT)
  KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \
@@@ -148,6 -140,7 +140,7 @@@ PHONY += $(MAKECMDGOALS) sub-mak
  $(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
        @:
  
+ # Invoke a second make in the output directory, passing relevant variables
  sub-make:
        $(Q)$(MAKE) -C $(KBUILD_OUTPUT) KBUILD_SRC=$(CURDIR) \
        -f $(CURDIR)/Makefile $(filter-out _all sub-make,$(MAKECMDGOALS))
@@@ -303,7 -296,7 +296,7 @@@ CONFIG_SHELL := $(shell if [ -x "$$BASH
  
  HOSTCC       = gcc
  HOSTCXX      = g++
- HOSTCFLAGS   = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89
+ HOSTCFLAGS   := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89
  HOSTCXXFLAGS = -O2
  
  ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
@@@ -388,12 -381,10 +381,10 @@@ USERINCLUDE    := 
  # Needed to be compatible with the O= option
  LINUXINCLUDE    := \
                -I$(srctree)/arch/$(hdr-arch)/include \
-               -I$(objtree)/arch/$(hdr-arch)/include/generated/uapi \
                -I$(objtree)/arch/$(hdr-arch)/include/generated \
                $(if $(KBUILD_SRC), -I$(srctree)/include) \
-               -I$(objtree)/include
- LINUXINCLUDE  += $(filter-out $(LINUXINCLUDE),$(USERINCLUDE))
+               -I$(objtree)/include \
+               $(USERINCLUDE)
  
  KBUILD_CPPFLAGS := -D__KERNEL__
  
@@@ -707,6 -698,7 +698,7 @@@ KBUILD_CPPFLAGS += $(call cc-option,-Qu
  KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable)
  KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
  KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
+ KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
  # Quiet clang warning: comparison of unsigned expression < 0 is always false
  KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
  # CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the
@@@ -1312,7 -1304,7 +1304,7 @@@ clean: archclean vmlinuxclea
  #
  mrproper: rm-dirs  := $(wildcard $(MRPROPER_DIRS))
  mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
 -mrproper-dirs      := $(addprefix _mrproper_,Documentation/DocBook scripts)
 +mrproper-dirs      := $(addprefix _mrproper_,scripts)
  
  PHONY += $(mrproper-dirs) mrproper archmrproper
  $(mrproper-dirs):
@@@ -1416,7 -1408,9 +1408,7 @@@ help
        @$(MAKE) $(build)=$(package-dir) help
        @echo  ''
        @echo  'Documentation targets:'
 -      @$(MAKE) -f $(srctree)/Documentation/Makefile.sphinx dochelp
 -      @echo  ''
 -      @$(MAKE) -f $(srctree)/Documentation/DocBook/Makefile dochelp
 +      @$(MAKE) -f $(srctree)/Documentation/Makefile dochelp
        @echo  ''
        @echo  'Architecture specific targets ($(SRCARCH)):'
        @$(if $(archhelp),$(archhelp),\
        @echo  '  make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
        @echo  '  make V=2   [targets] 2 => give reason for rebuild of target'
        @echo  '  make O=dir [targets] Locate all output files in "dir", including .config'
 -      @echo  '  make C=1   [targets] Check all c source with $$CHECK (sparse by default)'
 +      @echo  '  make C=1   [targets] Check re-compiled c source with $$CHECK (sparse by default)'
        @echo  '  make C=2   [targets] Force check of all c source with $$CHECK'
        @echo  '  make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
        @echo  '  make W=n   [targets] Enable extra gcc checks, n=1,2,3 where'
@@@ -1467,7 -1461,9 +1459,7 @@@ $(help-board-dirs): help-%
  DOC_TARGETS := xmldocs sgmldocs psdocs latexdocs pdfdocs htmldocs mandocs installmandocs epubdocs cleandocs linkcheckdocs
  PHONY += $(DOC_TARGETS)
  $(DOC_TARGETS): scripts_basic FORCE
 -      $(Q)$(MAKE) $(build)=scripts build_docproc build_check-lc_ctype
 -      $(Q)$(MAKE) $(build)=Documentation -f $(srctree)/Documentation/Makefile.sphinx $@
 -      $(Q)$(MAKE) $(build)=Documentation/DocBook $@
 +      $(Q)$(MAKE) $(build)=Documentation $@
  
  else # KBUILD_EXTMOD
  
index e9b098d6b7668341cf14b169defe2a899854aabc,424935e4515dd6fb8a9287c86538644f8919c710..5fb3368e70cbc86545354eb6f98ff93965940bee
@@@ -1,8 -1,6 +1,8 @@@
  # UAPI Header export list
  include include/uapi/asm-generic/Kbuild.asm
  
- genhdr-y += unistd-common.h
- genhdr-y += unistd-oabi.h
- genhdr-y += unistd-eabi.h
+ generated-y += unistd-common.h
+ generated-y += unistd-oabi.h
+ generated-y += unistd-eabi.h
 +
 +generic-y += siginfo.h
diff --combined arch/x86/Makefile
index ad2db82e995373aab1fbd6215d7fb51e770e4e53,d56318ba7ca5e68beaf95238596cd9160daabe57..1e902f926be3fd2d788ce4d26154af677c83c330
@@@ -11,6 -11,14 +11,14 @@@ els
          KBUILD_DEFCONFIG := $(ARCH)_defconfig
  endif
  
+ # For gcc stack alignment is specified with -mpreferred-stack-boundary,
+ # clang has the option -mstack-alignment for that purpose.
+ ifneq ($(call cc-option, -mpreferred-stack-boundary=4),)
+         cc_stack_align_opt := -mpreferred-stack-boundary
+ else ifneq ($(call cc-option, -mstack-alignment=4),)
+         cc_stack_align_opt := -mstack-alignment
+ endif
  # How to compile the 16-bit code.  Note we always compile for -march=i386;
  # that way we can complain to the user if the CPU is insufficient.
  #
@@@ -24,10 -32,11 +32,11 @@@ REALMODE_CFLAGS    := $(M16_CFLAGS) -g -O
                   -DDISABLE_BRANCH_PROFILING \
                   -Wall -Wstrict-prototypes -march=i386 -mregparm=3 \
                   -fno-strict-aliasing -fomit-frame-pointer -fno-pic \
-                  -mno-mmx -mno-sse \
-                  $(call cc-option, -ffreestanding) \
-                  $(call cc-option, -fno-stack-protector) \
-                  $(call cc-option, -mpreferred-stack-boundary=2)
+                  -mno-mmx -mno-sse
+ REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -ffreestanding)
+ REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -fno-stack-protector)
+ REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), $(cc_stack_align_opt)=2)
  export REALMODE_CFLAGS
  
  # BITS is used as extension for files which are available in a 32 bit
@@@ -64,8 -73,10 +73,10 @@@ ifeq ($(CONFIG_X86_32),y
          # with nonstandard options
          KBUILD_CFLAGS += -fno-pic
  
-         # prevent gcc from keeping the stack 16 byte aligned
-         KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=2)
+         # Align the stack to the register width instead of using the default
+         # alignment of 16 bytes. This reduces stack usage and the number of
+         # alignment instructions.
+         KBUILD_CFLAGS += $(call cc-option,$(cc_stack_align_opt)=2)
  
          # Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
          # a lot more stack due to the lack of sharing of stacklots:
@@@ -97,8 -108,14 +108,14 @@@ els
          KBUILD_CFLAGS += $(call cc-option,-mno-80387)
          KBUILD_CFLAGS += $(call cc-option,-mno-fp-ret-in-387)
  
-       # Use -mpreferred-stack-boundary=3 if supported.
-       KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=3)
+         # By default gcc and clang use a stack alignment of 16 bytes for x86.
+         # However the standard kernel entry on x86-64 leaves the stack on an
+         # 8-byte boundary. If the compiler isn't informed about the actual
+         # alignment it will generate extra alignment instructions for the
+         # default alignment which keep the stack *mis*aligned.
+         # Furthermore an alignment to the register width reduces stack usage
+         # and the number of alignment instructions.
+         KBUILD_CFLAGS += $(call cc-option,$(cc_stack_align_opt)=3)
  
        # Use -mskip-rax-setup if supported.
        KBUILD_CFLAGS += $(call cc-option,-mskip-rax-setup)
@@@ -159,7 -176,7 +176,7 @@@ ifdef CONFIG_FUNCTION_GRAPH_TRACE
        # If '-Os' is enabled, disable it and print a warning.
          ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
            undefine CONFIG_CC_OPTIMIZE_FOR_SIZE
 -        $(warning Disabling CONFIG_CC_OPTIMIZE_FOR_SIZE.  Your compiler does not have -mfentry so you cannot optimize for size with CONFIG_FUNCTION_GRAPH_TRACER.)
 +          $(warning Disabling CONFIG_CC_OPTIMIZE_FOR_SIZE.  Your compiler does not have -mfentry so you cannot optimize for size with CONFIG_FUNCTION_GRAPH_TRACER.)
          endif
  
      endif
@@@ -257,6 -274,8 +274,6 @@@ drivers-$(CONFIG_PM) += arch/x86/power
  
  drivers-$(CONFIG_FB) += arch/x86/video/
  
 -drivers-$(CONFIG_RAS) += arch/x86/ras/
 -
  ####
  # boot loader support. Several targets are kept for legacy purposes