Merge tag 'kbuild-v4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 6 Jun 2018 18:00:15 +0000 (11:00 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 6 Jun 2018 18:00:15 +0000 (11:00 -0700)
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
  ...

1  2 
Makefile
arch/Kconfig
arch/powerpc/Kconfig
arch/powerpc/kernel/vmlinux.lds.S
init/Kconfig
scripts/checkpatch.pl

diff --combined Makefile
index 554dcaddbce4509f34abcc91a818fc3ed712020f,2626de329e5f338295c356a4eb438cccc2a99c3c..0d5cdaa72d5f078dc3ba87a4cac8e0c0391a86f9
+++ b/Makefile
@@@ -2,7 -2,7 +2,7 @@@
  VERSION = 4
  PATCHLEVEL = 17
  SUBLEVEL = 0
 -EXTRAVERSION = -rc4
 +EXTRAVERSION =
  NAME = Merciless Moray
  
  # *DOCUMENTATION*
@@@ -500,9 -500,6 +500,9 @@@ RETPOLINE_CFLAGS_CLANG := -mretpoline-e
  RETPOLINE_CFLAGS := $(call cc-option,$(RETPOLINE_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_CFLAGS_CLANG)))
  export RETPOLINE_CFLAGS
  
 +KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
 +KBUILD_AFLAGS += $(call cc-option,-fno-PIE)
 +
  # check for 'asm goto'
  ifeq ($(call shell-cached,$(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
    CC_HAVE_ASM_GOTO := 1
@@@ -624,9 -621,9 +624,9 @@@ endif # $(dot-config
  # Defaults to vmlinux, but the arch makefile usually adds further targets
  all: vmlinux
  
 -KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
 -KBUILD_AFLAGS += $(call cc-option,-fno-PIE)
 -CFLAGS_GCOV   := -fprofile-arcs -ftest-coverage -fno-tree-loop-im $(call cc-disable-warning,maybe-uninitialized,)
 +CFLAGS_GCOV   := -fprofile-arcs -ftest-coverage \
 +      $(call cc-option,-fno-tree-loop-im) \
 +      $(call cc-disable-warning,maybe-uninitialized,)
  export CFLAGS_GCOV CFLAGS_KCOV
  
  # The arch Makefile can set ARCH_{CPP,A,C}FLAGS to override the default
@@@ -802,13 -799,12 +802,12 @@@ KBUILD_CFLAGS += $(call cc-option, -fno
  endif
  
  ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
- KBUILD_CFLAGS += $(call cc-option,-ffunction-sections,)
- KBUILD_CFLAGS += $(call cc-option,-fdata-sections,)
+ KBUILD_CFLAGS_KERNEL  += $(call cc-option,-ffunction-sections,)
+ KBUILD_CFLAGS_KERNEL  += $(call cc-option,-fdata-sections,)
  endif
  
  # arch Makefile may override CC so keep this after arch Makefile is included
  NOSTDINC_FLAGS += -nostdinc -isystem $(call shell-cached,$(CC) -print-file-name=include)
- CHECKFLAGS     += $(NOSTDINC_FLAGS)
  
  # warn about C99 declaration after statement
  KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
@@@ -878,6 -874,12 +877,12 @@@ ifeq ($(CONFIG_STRIP_ASM_SYMS),y
  LDFLAGS_vmlinux       += $(call ld-option, -X,)
  endif
  
+ # insure the checker run with the right endianness
+ CHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)
+ # the checker needs the correct machine size
+ CHECKFLAGS += $(if $(CONFIG_64BIT),-m64,-m32)
  # Default kernel image to build when no specific target is given.
  # KBUILD_IMAGE may be overruled on the command line or
  # set in the environment
@@@ -1763,7 -1765,7 +1768,7 @@@ quiet_cmd_rmfiles = $(if $(wildcard $(r
  # Run depmod only if we have System.map and depmod is executable
  quiet_cmd_depmod = DEPMOD  $(KERNELRELEASE)
        cmd_depmod = $(CONFIG_SHELL) $(srctree)/scripts/depmod.sh $(DEPMOD) \
-                    $(KERNELRELEASE) "$(patsubst y,_,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX))"
+                    $(KERNELRELEASE)
  
  # Create temporary dir for module support files
  # clean it up only when building all modules
diff --combined arch/Kconfig
index b695a3e3e92216fae9b7165093240622cee10819,c88fa0eb49df4300269396fb03c1a48db012c817..8a7f7e1f2ca745dee2cac1d188a5389a46de406d
@@@ -278,6 -278,9 +278,6 @@@ config HAVE_CL
          The <linux/clk.h> calls support software clock gating and
          thus are a key power management tool on many systems.
  
 -config HAVE_DMA_API_DEBUG
 -      bool
 -
  config HAVE_HW_BREAKPOINT
        bool
        depends on PERF_EVENTS
@@@ -461,10 -464,6 +461,10 @@@ config GCC_PLUGIN_LATENT_ENTROP
  config GCC_PLUGIN_STRUCTLEAK
        bool "Force initialization of variables containing userspace addresses"
        depends on GCC_PLUGINS
 +      # Currently STRUCTLEAK inserts initialization out of live scope of
 +      # variables from KASAN point of view. This leads to KASAN false
 +      # positive reports. Prohibit this combination for now.
 +      depends on !KASAN_EXTRA
        help
          This plugin zero-initializes any structures containing a
          __user attribute. This can prevent some classes of information
@@@ -597,21 -596,6 +597,6 @@@ config CC_STACKPROTECTOR_AUT
  
  endchoice
  
- config LD_DEAD_CODE_DATA_ELIMINATION
-       bool
-       help
-         Select this if the architecture wants to do dead code and
-         data elimination with the linker by compiling with
-         -ffunction-sections -fdata-sections and linking with
-         --gc-sections.
-         This requires that the arch annotates or otherwise protects
-         its external entry points from being discarded. Linker scripts
-         must also merge .text.*, .data.*, and .bss.* correctly into
-         output sections. Care must be taken not to pull in unrelated
-         sections (e.g., '.text.init'). Typically '.' in section names
-         is used to distinguish them from label names / C identifiers.
  config HAVE_ARCH_WITHIN_STACK_FRAMES
        bool
        help
@@@ -687,12 -671,6 +672,6 @@@ config MODULES_USE_ELF_RE
          Modules only use ELF REL relocations.  Modules with ELF RELA
          relocations will give an error.
  
- config HAVE_UNDERSCORE_SYMBOL_PREFIX
-       bool
-       help
-         Some architectures generate an _ in front of C symbols; things like
-         module loading and assembly files need to know about this.
  config HAVE_IRQ_EXIT_ON_IRQ_STACK
        bool
        help
@@@ -871,21 -849,6 +850,21 @@@ config OLD_SIGACTIO
  config COMPAT_OLD_SIGACTION
        bool
  
 +config 64BIT_TIME
 +      def_bool ARCH_HAS_64BIT_TIME
 +      help
 +        This should be selected by all architectures that need to support
 +        new system calls with a 64-bit time_t. This is relevant on all 32-bit
 +        architectures, and 64-bit architectures as part of compat syscall
 +        handling.
 +
 +config COMPAT_32BIT_TIME
 +      def_bool (!64BIT && 64BIT_TIME) || COMPAT
 +      help
 +        This enables 32 bit time_t support in addition to 64 bit time_t support.
 +        This is relevant on all 32-bit architectures, and 64-bit architectures
 +        as part of compat syscall handling.
 +
  config ARCH_NO_COHERENT_DMA_MMAP
        bool
  
diff --combined arch/powerpc/Kconfig
index f674006dea2f8f1f373688670e18a9a878e7c664,ee6dbe2efc8bc314e2b75f3c08c45c46f6618566..9c0ee185932372eb626c600410ef35ecd1d6e706
@@@ -13,6 -13,12 +13,6 @@@ config 64BI
        bool
        default y if PPC64
  
 -config ARCH_PHYS_ADDR_T_64BIT
 -       def_bool PPC64 || PHYS_64BIT
 -
 -config ARCH_DMA_ADDR_T_64BIT
 -      def_bool ARCH_PHYS_ADDR_T_64BIT
 -
  config MMU
        bool
        default y
@@@ -181,6 -187,7 +181,6 @@@ config PP
        select HAVE_CONTEXT_TRACKING            if PPC64
        select HAVE_DEBUG_KMEMLEAK
        select HAVE_DEBUG_STACKOVERFLOW
 -      select HAVE_DMA_API_DEBUG
        select HAVE_DYNAMIC_FTRACE
        select HAVE_DYNAMIC_FTRACE_WITH_REGS    if MPROFILE_KERNEL
        select HAVE_EBPF_JIT                    if PPC64
        select HAVE_KPROBES
        select HAVE_KPROBES_ON_FTRACE
        select HAVE_KRETPROBES
+       select HAVE_LD_DEAD_CODE_DATA_ELIMINATION
        select HAVE_LIVEPATCH                   if HAVE_DYNAMIC_FTRACE_WITH_REGS
        select HAVE_MEMBLOCK
        select HAVE_MEMBLOCK_NODE_MAP
        select HAVE_SYSCALL_TRACEPOINTS
        select HAVE_VIRT_CPU_ACCOUNTING
        select HAVE_IRQ_TIME_ACCOUNTING
 +      select IOMMU_HELPER                     if PPC64
        select IRQ_DOMAIN
        select IRQ_FORCED_THREADING
        select MODULES_USE_ELF_RELA
 +      select NEED_SG_DMA_LENGTH
        select NO_BOOTMEM
        select OF
        select OF_EARLY_FLATTREE
@@@ -473,6 -479,19 +474,6 @@@ config MPROFILE_KERNE
        depends on PPC64 && CPU_LITTLE_ENDIAN
        def_bool !DISABLE_MPROFILE_KERNEL
  
 -config IOMMU_HELPER
 -      def_bool PPC64
 -
 -config SWIOTLB
 -      bool "SWIOTLB support"
 -      default n
 -      select IOMMU_HELPER
 -      ---help---
 -        Support for IO bounce buffering for systems without an IOMMU.
 -        This allows us to DMA to the full physical address space on
 -        platforms where the size of a physical address is larger
 -        than the bus address.  Not all platforms support this.
 -
  config HOTPLUG_CPU
        bool "Support for enabling/disabling CPUs"
        depends on SMP && (PPC_PSERIES || \
@@@ -865,7 -884,7 +866,7 @@@ config PPC_MEM_KEY
          page-based protections, but without requiring modification of the
          page tables when an application changes protection domains.
  
 -        For details, see Documentation/vm/protection-keys.txt
 +        For details, see Documentation/vm/protection-keys.rst
  
          If unsure, say y.
  
@@@ -895,6 -914,9 +896,6 @@@ config ZONE_DM
  config NEED_DMA_MAP_STATE
        def_bool (PPC64 || NOT_COHERENT_CACHE)
  
 -config NEED_SG_DMA_LENGTH
 -      def_bool y
 -
  config GENERIC_ISA_DMA
        bool
        depends on ISA_DMA_API
index b8d82678f8b41b04027df27642f15a01be7321e2,52a93cdd04bc9a6a5bae35a12b00476befcbfbd6..dd10e6f1d1b7a6bfd9836607e1b7cfcee3092aa7
@@@ -89,7 -89,7 +89,7 @@@ SECTION
         */
        .text BLOCK(0) : AT(ADDR(.text) - LOAD_OFFSET) {
  #ifdef CONFIG_LD_HEAD_STUB_CATCH
-               *(.linker_stub_catch);
+               KEEP(*(.linker_stub_catch));
                . = . ;
  #endif
  
@@@ -98,7 -98,7 +98,7 @@@
                ALIGN_FUNCTION();
  #endif
                /* careful! __ftr_alt_* sections need to be close to .text */
-               *(.text.hot .text .text.fixup .text.unlikely .fixup __ftr_alt_* .ref.text);
+               *(.text.hot TEXT_MAIN .text.fixup .text.unlikely .fixup __ftr_alt_* .ref.text);
                SCHED_TEXT
                CPUIDLE_TEXT
                LOCK_TEXT
        RO_DATA(PAGE_SIZE)
  
  #ifdef CONFIG_PPC64
 +      . = ALIGN(8);
 +      __stf_entry_barrier_fixup : AT(ADDR(__stf_entry_barrier_fixup) - LOAD_OFFSET) {
 +              __start___stf_entry_barrier_fixup = .;
 +              *(__stf_entry_barrier_fixup)
 +              __stop___stf_entry_barrier_fixup = .;
 +      }
 +
 +      . = ALIGN(8);
 +      __stf_exit_barrier_fixup : AT(ADDR(__stf_exit_barrier_fixup) - LOAD_OFFSET) {
 +              __start___stf_exit_barrier_fixup = .;
 +              *(__stf_exit_barrier_fixup)
 +              __stop___stf_exit_barrier_fixup = .;
 +      }
 +
        . = ALIGN(8);
        __rfi_flush_fixup : AT(ADDR(__rfi_flush_fixup) - LOAD_OFFSET) {
                __start___rfi_flush_fixup = .;
        .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
                INIT_DATA
                __vtop_table_begin = .;
-               *(.vtop_fixup);
+               KEEP(*(.vtop_fixup));
                __vtop_table_end = .;
                __ptov_table_begin = .;
-               *(.ptov_fixup);
+               KEEP(*(.ptov_fixup));
                __ptov_table_end = .;
        }
  
        . = ALIGN(8);
        __ftr_fixup : AT(ADDR(__ftr_fixup) - LOAD_OFFSET) {
                __start___ftr_fixup = .;
-               *(__ftr_fixup)
+               KEEP(*(__ftr_fixup))
                __stop___ftr_fixup = .;
        }
        . = ALIGN(8);
        __mmu_ftr_fixup : AT(ADDR(__mmu_ftr_fixup) - LOAD_OFFSET) {
                __start___mmu_ftr_fixup = .;
-               *(__mmu_ftr_fixup)
+               KEEP(*(__mmu_ftr_fixup))
                __stop___mmu_ftr_fixup = .;
        }
        . = ALIGN(8);
        __lwsync_fixup : AT(ADDR(__lwsync_fixup) - LOAD_OFFSET) {
                __start___lwsync_fixup = .;
-               *(__lwsync_fixup)
+               KEEP(*(__lwsync_fixup))
                __stop___lwsync_fixup = .;
        }
  #ifdef CONFIG_PPC64
        . = ALIGN(8);
        __fw_ftr_fixup : AT(ADDR(__fw_ftr_fixup) - LOAD_OFFSET) {
                __start___fw_ftr_fixup = .;
-               *(__fw_ftr_fixup)
+               KEEP(*(__fw_ftr_fixup))
                __stop___fw_ftr_fixup = .;
        }
  #endif
        . = ALIGN(8);
        .machine.desc : AT(ADDR(.machine.desc) - LOAD_OFFSET) {
                __machine_desc_start = . ;
-               *(.machine.desc)
+               KEEP(*(.machine.desc))
                __machine_desc_end = . ;
        }
  #ifdef CONFIG_RELOCATABLE
        .data : AT(ADDR(.data) - LOAD_OFFSET) {
                DATA_DATA
                *(.data.rel*)
-               *(.sdata)
+               *(SDATA_MAIN)
                *(.sdata2)
                *(.got.plt) *(.got)
                *(.plt)
  
        .opd : AT(ADDR(.opd) - LOAD_OFFSET) {
                __start_opd = .;
-               *(.opd)
+               KEEP(*(.opd))
                __end_opd = .;
        }
  
diff --combined init/Kconfig
index 18b151f0ddc1fba93777e1ca9f40b9f0fd072711,1706d963766b763e554db5a0deeb5a2b905b314e..829a4c1117f29690b6b351bbd82d76f1ab3b194d
@@@ -738,7 -738,7 +738,7 @@@ config CFS_BANDWIDT
          tasks running within the fair group scheduler.  Groups with no limit
          set are considered to be unconstrained and will run with no
          restriction.
 -        See tip/Documentation/scheduler/sched-bwc.txt for more information.
 +        See Documentation/scheduler/sched-bwc.txt for more information.
  
  config RT_GROUP_SCHED
        bool "Group scheduling for SCHED_RR/FIFO"
@@@ -1038,6 -1038,33 +1038,33 @@@ config CC_OPTIMIZE_FOR_SIZ
  
  endchoice
  
+ config HAVE_LD_DEAD_CODE_DATA_ELIMINATION
+       bool
+       help
+         This requires that the arch annotates or otherwise protects
+         its external entry points from being discarded. Linker scripts
+         must also merge .text.*, .data.*, and .bss.* correctly into
+         output sections. Care must be taken not to pull in unrelated
+         sections (e.g., '.text.init'). Typically '.' in section names
+         is used to distinguish them from label names / C identifiers.
+ config LD_DEAD_CODE_DATA_ELIMINATION
+       bool "Dead code and data elimination (EXPERIMENTAL)"
+       depends on HAVE_LD_DEAD_CODE_DATA_ELIMINATION
+       depends on EXPERT
+       help
+         Select this if the architecture wants to do dead code and
+         data elimination with the linker by compiling with
+         -ffunction-sections -fdata-sections, and linking with
+         --gc-sections.
+         This can reduce on disk and in-memory size of the kernel
+         code and static data, particularly for small configs and
+         on small systems. This has the possibility of introducing
+         silently broken kernel if the required annotations are not
+         present. This option is not well tested yet, so use at your
+         own risk.
  config SYSCTL
        bool
  
diff --combined scripts/checkpatch.pl
index 2d42eb9cd1a5639637df3f1fec35b4216d1c5fa5,ce582a820c92a801012f1e1dc30e75ccd38dbbab..e6033d3c48d3ef965c9b21acdcc36d423b3e37bd
@@@ -5041,7 -5041,7 +5041,7 @@@ sub process 
                                $tmp_stmt =~ s/\b(typeof|__typeof__|__builtin\w+|typecheck\s*\(\s*$Type\s*,|\#+)\s*\(*\s*$arg\s*\)*\b//g;
                                $tmp_stmt =~ s/\#+\s*$arg\b//g;
                                $tmp_stmt =~ s/\b$arg\s*\#\#//g;
 -                              my $use_cnt = $tmp_stmt =~ s/\b$arg\b//g;
 +                              my $use_cnt = () = $tmp_stmt =~ /\b$arg\b/g;
                                if ($use_cnt > 1) {
                                        CHK("MACRO_ARG_REUSE",
                                            "Macro argument reuse '$arg' - possible side-effects?\n" . "$herectx");
                        }
                }
  
- # make sure symbols are always wrapped with VMLINUX_SYMBOL() ...
- # all assignments may have only one of the following with an assignment:
- #     .
- #     ALIGN(...)
- #     VMLINUX_SYMBOL(...)
-               if ($realfile eq 'vmlinux.lds.h' && $line =~ /(?:(?:^|\s)$Ident\s*=|=\s*$Ident(?:\s|$))/) {
-                       WARN("MISSING_VMLINUX_SYMBOL",
-                            "vmlinux.lds.h needs VMLINUX_SYMBOL() around C-visible symbols\n" . $herecurr);
-               }
  # check for redundant bracing round if etc
                if ($line =~ /(^.*)\bif\b/ && $1 !~ /else\s*$/) {
                        my ($level, $endln, @chunks) =