License cleanup: add SPDX GPL-2.0 license identifier to files with no license
Many source files in the tree are missing licensing information, which
makes it harder for compliance tools to determine the correct license.
By default all files without license information are under the default
license of the kernel, which is GPL version 2.
Update the files which contain no license information with the 'GPL-2.0'
SPDX license identifier. The SPDX identifier is a legally binding
shorthand, which can be used instead of the full boiler plate text.
This patch is based on work done by Thomas Gleixner and Kate Stewart and
Philippe Ombredanne.
How this work was done:
Patches were generated and checked against linux-4.14-rc6 for a subset of
the use cases:
- file had no licensing information it it.
- file was a */uapi/* one with no licensing information in it,
- file was a */uapi/* one with existing licensing information,
Further patches will be generated in subsequent months to fix up cases
where non-standard license headers were used, and references to license
had to be inferred by heuristics based on keywords.
The analysis to determine which SPDX License Identifier to be applied to
a file was done in a spreadsheet of side by side results from of the
output of two independent scanners (ScanCode & Windriver) producing SPDX
tag:value files created by Philippe Ombredanne. Philippe prepared the
base worksheet, and did an initial spot review of a few 1000 files.
The 4.13 kernel was the starting point of the analysis with 60,537 files
assessed. Kate Stewart did a file by file comparison of the scanner
results in the spreadsheet to determine which SPDX license identifier(s)
to be applied to the file. She confirmed any determination that was not
immediately clear with lawyers working with the Linux Foundation.
Criteria used to select files for SPDX license identifier tagging was:
- Files considered eligible had to be source code files.
- Make and config files were included as candidates if they contained >5
lines of source
- File already had some variant of a license header in it (even if <5
lines).
All documentation files were explicitly excluded.
The following heuristics were used to determine which SPDX license
identifiers to apply.
- when both scanners couldn't find any license traces, file was
considered to have no license information in it, and the top level
COPYING file license applied.
For non */uapi/* files that summary was:
SPDX license identifier # files
---------------------------------------------------|-------
GPL-2.0 11139
and resulted in the first patch in this series.
If that file was a */uapi/* path one, it was "GPL-2.0 WITH
Linux-syscall-note" otherwise it was "GPL-2.0". Results of that was:
SPDX license identifier # files
---------------------------------------------------|-------
GPL-2.0 WITH Linux-syscall-note 930
and resulted in the second patch in this series.
- if a file had some form of licensing information in it, and was one
of the */uapi/* ones, it was denoted with the Linux-syscall-note if
any GPL family license was found in the file or had no licensing in
it (per prior point). Results summary:
SPDX license identifier # files
---------------------------------------------------|------
GPL-2.0 WITH Linux-syscall-note 270
GPL-2.0+ WITH Linux-syscall-note 169
((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) 21
((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) 17
LGPL-2.1+ WITH Linux-syscall-note 15
GPL-1.0+ WITH Linux-syscall-note 14
((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) 5
LGPL-2.0+ WITH Linux-syscall-note 4
LGPL-2.1 WITH Linux-syscall-note 3
((GPL-2.0 WITH Linux-syscall-note) OR MIT) 3
((GPL-2.0 WITH Linux-syscall-note) AND MIT) 1
and that resulted in the third patch in this series.
- when the two scanners agreed on the detected license(s), that became
the concluded license(s).
- when there was disagreement between the two scanners (one detected a
license but the other didn't, or they both detected different
licenses) a manual inspection of the file occurred.
- In most cases a manual inspection of the information in the file
resulted in a clear resolution of the license that should apply (and
which scanner probably needed to revisit its heuristics).
- When it was not immediately clear, the license identifier was
confirmed with lawyers working with the Linux Foundation.
- If there was any question as to the appropriate license identifier,
the file was flagged for further research and to be revisited later
in time.
In total, over 70 hours of logged manual review was done on the
spreadsheet to determine the SPDX license identifiers to apply to the
source files by Kate, Philippe, Thomas and, in some cases, confirmation
by lawyers working with the Linux Foundation.
Kate also obtained a third independent scan of the 4.13 code base from
FOSSology, and compared selected files where the other two scanners
disagreed against that SPDX file, to see if there was new insights. The
Windriver scanner is based on an older version of FOSSology in part, so
they are related.
Thomas did random spot checks in about 500 files from the spreadsheets
for the uapi headers and agreed with SPDX license identifier in the
files he inspected. For the non-uapi files Thomas did random spot checks
in about 15000 files.
In initial set of patches against 4.14-rc6, 3 files were found to have
copy/paste license identifier errors, and have been fixed to reflect the
correct identifier.
Additionally Philippe spent 10 hours this week doing a detailed manual
inspection and review of the 12,461 patched files from the initial patch
version early this week with:
- a full scancode scan run, collecting the matched texts, detected
license ids and scores
- reviewing anything where there was a license detected (about 500+
files) to ensure that the applied SPDX license was correct
- reviewing anything where there was no detection but the patch license
was not GPL-2.0 WITH Linux-syscall-note to ensure that the applied
SPDX license was correct
This produced a worksheet with 20 files needing minor correction. This
worksheet was then exported into 3 different .csv files for the
different types of files to be modified.
These .csv files were then reviewed by Greg. Thomas wrote a script to
parse the csv files and add the proper SPDX tag to the file, in the
format that the file expected. This script was further refined by Greg
based on the output to detect more types of files automatically and to
distinguish between header and source .c files (which need different
comment types.) Finally Greg ran the script using the .csv files to
generate the patches.
Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org>
Reviewed-by: Philippe Ombredanne <pombredanne@nexb.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-11-01 23:07:57 +09:00
|
|
|
# SPDX-License-Identifier: GPL-2.0
|
2019-01-07 10:08:20 +09:00
|
|
|
VERSION = 5
|
2019-10-01 02:35:40 +09:00
|
|
|
PATCHLEVEL = 4
|
2024-01-26 07:34:33 +09:00
|
|
|
SUBLEVEL = 268
|
2019-11-25 09:32:01 +09:00
|
|
|
EXTRAVERSION =
|
2019-10-28 02:19:19 +09:00
|
|
|
NAME = Kleptomaniac Octopus
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2021-01-20 10:48:07 +09:00
|
|
|
# indicate that change "Kbuild: Support nested composite objects" is
|
|
|
|
# present in the kernel so that out-of-tree modules can act upon it
|
|
|
|
export KERNEL_SUPPORTS_NESTED_COMPOSITES := y
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
# *DOCUMENTATION*
|
|
|
|
# To see a list of typical targets execute "make help"
|
|
|
|
# More info can be located in ./README
|
|
|
|
# Comments in this file are targeted only to the developer, do not
|
|
|
|
# expect to learn how to build the kernel reading this file.
|
|
|
|
|
2017-10-04 12:56:05 +09:00
|
|
|
# That's our default target when none is given on the command line
|
|
|
|
PHONY := _all
|
|
|
|
_all:
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
# We are using a recursive build, so we need to do a little thinking
|
|
|
|
# to get the ordering right.
|
|
|
|
#
|
|
|
|
# Most importantly: sub-Makefiles should only ever modify files in
|
|
|
|
# their own directory. If in some directory we have a dependency on
|
|
|
|
# a file in another dir (which doesn't happen often, but it's often
|
2018-02-10 23:25:04 +09:00
|
|
|
# unavoidable when linking the built-in.a targets which finally
|
2005-04-17 07:20:36 +09:00
|
|
|
# turn into vmlinux), we will call a sub make in that other dir, and
|
|
|
|
# after that we are sure that everything which is in that other dir
|
|
|
|
# is now up to date.
|
|
|
|
#
|
|
|
|
# The only cases where we need to modify files which have global
|
|
|
|
# effects are thus separated out and done before the recursive
|
|
|
|
# descending is started. They are now explicitly listed as the
|
|
|
|
# prepare rule.
|
|
|
|
|
2019-03-26 13:02:19 +09:00
|
|
|
ifneq ($(sub_make_done),1)
|
2019-02-22 16:40:07 +09:00
|
|
|
|
|
|
|
# Do not use make's built-in rules and variables
|
|
|
|
# (this increases performance and avoids hard-to-debug behaviour)
|
|
|
|
MAKEFLAGS += -rR
|
|
|
|
|
|
|
|
# Avoid funny character set dependencies
|
|
|
|
unexport LC_ALL
|
|
|
|
LC_COLLATE=C
|
|
|
|
LC_NUMERIC=C
|
|
|
|
export LC_COLLATE LC_NUMERIC
|
|
|
|
|
|
|
|
# Avoid interference with shell env settings
|
|
|
|
unexport GREP_OPTIONS
|
|
|
|
|
2014-07-04 21:29:30 +09:00
|
|
|
# Beautify output
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# Normally, we echo the whole command before executing it. By making
|
|
|
|
# that echo $($(quiet)$(cmd)), we now have the possibility to set
|
|
|
|
# $(quiet) to choose other forms of output instead, e.g.
|
|
|
|
#
|
|
|
|
# quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
|
|
|
|
# cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
|
|
|
|
#
|
|
|
|
# If $(quiet) is empty, the whole command will be printed.
|
|
|
|
# If it is set to "quiet_", only the short version will be printed.
|
|
|
|
# If it is set to "silent_", nothing will be printed at all, since
|
|
|
|
# the variable $(silent_cmd_cc_o_c) doesn't exist.
|
|
|
|
#
|
|
|
|
# A simple variant is to prefix commands with $(Q) - that's useful
|
|
|
|
# for commands that shall be hidden in non-verbose mode.
|
|
|
|
#
|
|
|
|
# $(Q)ln $@ :<
|
|
|
|
#
|
|
|
|
# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
|
|
|
|
# If KBUILD_VERBOSE equals 1 then the above command is displayed.
|
|
|
|
#
|
2005-04-17 07:20:36 +09:00
|
|
|
# To put more focus on warnings, be less verbose as default
|
|
|
|
# Use 'make V=1' to see the full commands
|
|
|
|
|
2009-05-26 17:03:07 +09:00
|
|
|
ifeq ("$(origin V)", "command line")
|
|
|
|
KBUILD_VERBOSE = $(V)
|
2005-04-17 07:20:36 +09:00
|
|
|
endif
|
|
|
|
ifndef KBUILD_VERBOSE
|
|
|
|
KBUILD_VERBOSE = 0
|
|
|
|
endif
|
|
|
|
|
2014-07-04 21:29:30 +09:00
|
|
|
ifeq ($(KBUILD_VERBOSE),1)
|
|
|
|
quiet =
|
|
|
|
Q =
|
|
|
|
else
|
|
|
|
quiet=quiet_
|
|
|
|
Q = @
|
|
|
|
endif
|
|
|
|
|
|
|
|
# If the user is running make -s (silent mode), suppress echoing of
|
|
|
|
# commands
|
2022-12-06 06:48:19 +09:00
|
|
|
# make-4.0 (and later) keep single letter options in the 1st word of MAKEFLAGS.
|
2014-07-04 21:29:30 +09:00
|
|
|
|
2022-12-06 06:48:19 +09:00
|
|
|
ifeq ($(filter 3.%,$(MAKE_VERSION)),)
|
|
|
|
silence:=$(findstring s,$(firstword -$(MAKEFLAGS)))
|
|
|
|
else
|
|
|
|
silence:=$(findstring s,$(filter-out --%,$(MAKEFLAGS)))
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(silence),s)
|
|
|
|
quiet=silent_
|
2014-07-04 21:29:30 +09:00
|
|
|
endif
|
|
|
|
|
|
|
|
export quiet Q KBUILD_VERBOSE
|
|
|
|
|
2019-03-30 21:04:14 +09:00
|
|
|
# Kbuild will save output files in the current working directory.
|
|
|
|
# This does not need to match to the root of the kernel source tree.
|
|
|
|
#
|
|
|
|
# For example, you can do this:
|
|
|
|
#
|
|
|
|
# cd /dir/to/store/output/files; make -f /dir/to/kernel/source/Makefile
|
|
|
|
#
|
|
|
|
# If you want to save output files in a different location, there are
|
|
|
|
# two syntaxes to specify it.
|
|
|
|
#
|
2005-04-17 07:20:36 +09:00
|
|
|
# 1) O=
|
|
|
|
# Use "make O=dir/to/store/output/files/"
|
2006-06-25 07:07:55 +09:00
|
|
|
#
|
2005-04-17 07:20:36 +09:00
|
|
|
# 2) Set KBUILD_OUTPUT
|
2019-03-30 21:04:14 +09:00
|
|
|
# Set the environment variable KBUILD_OUTPUT to point to the output directory.
|
|
|
|
# export KBUILD_OUTPUT=dir/to/store/output/files/; make
|
2005-04-17 07:20:36 +09:00
|
|
|
#
|
|
|
|
# The O= assignment takes precedence over the KBUILD_OUTPUT environment
|
|
|
|
# variable.
|
|
|
|
|
2019-03-30 21:04:14 +09:00
|
|
|
# Do we want to change the working directory?
|
2009-05-26 17:03:07 +09:00
|
|
|
ifeq ("$(origin O)", "command line")
|
|
|
|
KBUILD_OUTPUT := $(O)
|
2005-04-17 07:20:36 +09:00
|
|
|
endif
|
|
|
|
|
2019-03-30 21:04:14 +09:00
|
|
|
ifneq ($(KBUILD_OUTPUT),)
|
|
|
|
# Make's built-in functions such as $(abspath ...), $(realpath ...) cannot
|
|
|
|
# expand a shell special character '~'. We use a somewhat tedious way here.
|
|
|
|
abs_objtree := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd)
|
|
|
|
$(if $(abs_objtree),, \
|
|
|
|
$(error failed to create output directory "$(KBUILD_OUTPUT)"))
|
|
|
|
|
|
|
|
# $(realpath ...) resolves symlinks
|
|
|
|
abs_objtree := $(realpath $(abs_objtree))
|
|
|
|
else
|
|
|
|
abs_objtree := $(CURDIR)
|
|
|
|
endif # ifneq ($(KBUILD_OUTPUT),)
|
|
|
|
|
|
|
|
ifeq ($(abs_objtree),$(CURDIR))
|
|
|
|
# Suppress "Entering directory ..." unless we are changing the work directory.
|
|
|
|
MAKEFLAGS += --no-print-directory
|
|
|
|
else
|
|
|
|
need-sub-make := 1
|
2016-04-03 04:38:53 +09:00
|
|
|
endif
|
|
|
|
|
2019-03-30 21:04:14 +09:00
|
|
|
abs_srctree := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-03-30 21:04:14 +09:00
|
|
|
ifneq ($(words $(subst :, ,$(abs_srctree))), 1)
|
|
|
|
$(error source directory cannot contain spaces or colons)
|
|
|
|
endif
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-03-30 21:04:14 +09:00
|
|
|
ifneq ($(abs_srctree),$(abs_objtree))
|
2018-09-14 15:33:23 +09:00
|
|
|
# Look for make include files relative to root of kernel src
|
|
|
|
#
|
|
|
|
# This does not become effective immediately because MAKEFLAGS is re-parsed
|
2019-03-30 21:04:14 +09:00
|
|
|
# once after the Makefile is read. We need to invoke sub-make.
|
|
|
|
MAKEFLAGS += --include-dir=$(abs_srctree)
|
2019-03-19 13:02:36 +09:00
|
|
|
need-sub-make := 1
|
2019-03-30 21:04:14 +09:00
|
|
|
endif
|
2019-02-22 16:40:07 +09:00
|
|
|
|
2019-03-19 13:02:36 +09:00
|
|
|
ifneq ($(filter 3.%,$(MAKE_VERSION)),)
|
|
|
|
# 'MAKEFLAGS += -rR' does not immediately become effective for GNU Make 3.x
|
|
|
|
# We need to invoke sub-make to avoid implicit rules in the top Makefile.
|
|
|
|
need-sub-make := 1
|
|
|
|
# Cancel implicit rules for this Makefile.
|
|
|
|
$(lastword $(MAKEFILE_LIST)): ;
|
|
|
|
endif
|
|
|
|
|
2019-03-30 21:04:14 +09:00
|
|
|
export abs_srctree abs_objtree
|
2019-03-26 13:02:19 +09:00
|
|
|
export sub_make_done := 1
|
|
|
|
|
2019-03-19 13:02:36 +09:00
|
|
|
ifeq ($(need-sub-make),1)
|
|
|
|
|
2007-09-22 08:09:02 +09:00
|
|
|
PHONY += $(MAKECMDGOALS) sub-make
|
|
|
|
|
2019-03-26 15:32:16 +09:00
|
|
|
$(filter-out _all sub-make $(lastword $(MAKEFILE_LIST)), $(MAKECMDGOALS)) _all: sub-make
|
2012-10-15 21:49:12 +09:00
|
|
|
@:
|
2007-09-22 08:09:02 +09:00
|
|
|
|
2017-06-30 11:45:43 +09:00
|
|
|
# Invoke a second make in the output directory, passing relevant variables
|
2016-03-13 09:13:55 +09:00
|
|
|
sub-make:
|
2019-03-30 21:04:14 +09:00
|
|
|
$(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-03-19 13:02:36 +09:00
|
|
|
endif # need-sub-make
|
2019-03-26 13:02:19 +09:00
|
|
|
endif # sub_make_done
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
# We process the rest of the Makefile if this is the final invocation of make
|
2019-03-19 13:02:36 +09:00
|
|
|
ifeq ($(need-sub-make),)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2014-09-09 20:02:22 +09:00
|
|
|
# Do not print "Entering directory ...",
|
|
|
|
# but we want to display it when entering to the output directory
|
|
|
|
# so that IDEs/editors are able to understand relative filenames.
|
|
|
|
MAKEFLAGS += --no-print-directory
|
|
|
|
|
2014-09-09 20:02:24 +09:00
|
|
|
# Call a source code checker (by default, "sparse") as part of the
|
|
|
|
# C compilation.
|
|
|
|
#
|
|
|
|
# Use 'make C=1' to enable checking of only re-compiled files.
|
|
|
|
# Use 'make C=2' to enable checking of *all* source files, regardless
|
|
|
|
# of whether they are re-compiled or not.
|
|
|
|
#
|
2017-03-24 18:03:17 +09:00
|
|
|
# See the file "Documentation/dev-tools/sparse.rst" for more details,
|
|
|
|
# including where to get the "sparse" utility.
|
2014-09-09 20:02:24 +09:00
|
|
|
|
|
|
|
ifeq ("$(origin C)", "command line")
|
|
|
|
KBUILD_CHECKSRC = $(C)
|
|
|
|
endif
|
|
|
|
ifndef KBUILD_CHECKSRC
|
|
|
|
KBUILD_CHECKSRC = 0
|
|
|
|
endif
|
|
|
|
|
2019-09-21 16:05:41 +09:00
|
|
|
# Use make M=dir or set the environment variable KBUILD_EXTMOD to specify the
|
|
|
|
# directory of external module to build. Setting M= takes precedence.
|
2014-09-09 20:02:24 +09:00
|
|
|
ifeq ("$(origin M)", "command line")
|
|
|
|
KBUILD_EXTMOD := $(M)
|
|
|
|
endif
|
|
|
|
|
2019-07-06 12:07:12 +09:00
|
|
|
export KBUILD_CHECKSRC KBUILD_EXTMOD
|
|
|
|
|
kbuild: make single targets work more correctly
Currently, the single target build directly descends into the directory
of the target. For example,
$ make foo/bar/baz.o
... directly descends into foo/bar/.
On the other hand, the normal build usually descends one directory at
a time, i.e. descends into foo/, and then foo/bar/.
This difference causes some problems.
[1] miss subdir-asflags-y, subdir-ccflags-y in upper Makefiles
The options in subdir-{as,cc}flags-y take effect in the current
and its sub-directories. In other words, they are inherited
downward. In the example above, the single target will miss
subdir-{as,cc}flags-y if they are defined in foo/Makefile.
[2] could be built in a different directory
As Documentation/kbuild/modules.rst section 4.3 says, Kbuild can
handle files that are spread over several sub-directories.
The build rule of foo/bar/baz.o may not necessarily be specified in
foo/bar/Makefile. It might be specifies in foo/Makefile as follows:
[foo/Makefile]
obj-y := bar/baz.o
This often happens when a module is so big that its source files
are divided into sub-directories.
In this case, there is no Makefile in the foo/bar/ directory, yet
the single target descends into foo/bar/, then fails due to the
missing Makefile. You can still do 'make foo/bar/' for partial
building, but cannot do 'make foo/bar/baz.s'. I believe the single
target '%.s' is a useful feature for inspecting the compiler output.
Some modules work around this issue by putting an empty Makefile
in every sub-directory.
This commit fixes those problems by making the single target build
descend in the same way as the normal build does.
Another change is the single target build will observe the CONFIG
options. Previously, it allowed users to build the foo.o even when
the corresponding CONFIG_FOO is disabled:
obj-$(CONFIG_FOO) += foo.o
In the new behavior, the single target build will just fail and show
"No rule to make target ..." (or "Nothing to be done for ..." if the
stale object already exists, but cannot be updated).
The disadvantage of this commit is the build speed. Now that the
single target build visits every directory and parses lots of
Makefiles, it is slower than before. (But, I hope it will not be
too slow.)
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-08-15 00:19:18 +09:00
|
|
|
extmod-prefix = $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)
|
|
|
|
|
2019-03-30 21:04:14 +09:00
|
|
|
ifeq ($(abs_srctree),$(abs_objtree))
|
2014-04-26 06:25:18 +09:00
|
|
|
# building in the source tree
|
|
|
|
srctree := .
|
2019-07-06 12:07:12 +09:00
|
|
|
building_out_of_srctree :=
|
2014-04-26 06:25:18 +09:00
|
|
|
else
|
2019-03-30 21:04:14 +09:00
|
|
|
ifeq ($(abs_srctree)/,$(dir $(abs_objtree)))
|
2014-04-26 06:25:18 +09:00
|
|
|
# building in a subdirectory of the source tree
|
|
|
|
srctree := ..
|
|
|
|
else
|
2019-03-30 21:04:14 +09:00
|
|
|
srctree := $(abs_srctree)
|
2014-04-26 06:25:18 +09:00
|
|
|
endif
|
2019-07-06 12:07:12 +09:00
|
|
|
building_out_of_srctree := 1
|
2014-04-26 06:25:18 +09:00
|
|
|
endif
|
2017-10-04 12:56:06 +09:00
|
|
|
|
2019-07-06 12:07:13 +09:00
|
|
|
ifneq ($(KBUILD_ABS_SRCTREE),)
|
|
|
|
srctree := $(abs_srctree)
|
|
|
|
endif
|
2017-10-04 12:56:06 +09:00
|
|
|
|
2014-04-26 00:29:45 +09:00
|
|
|
objtree := .
|
2019-02-22 16:40:09 +09:00
|
|
|
VPATH := $(srctree)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-07-06 12:07:12 +09:00
|
|
|
export building_out_of_srctree srctree objtree VPATH
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2017-10-04 12:56:06 +09:00
|
|
|
# To make sure we do not include .config for any of the *config targets
|
|
|
|
# catch them early, and hand them over to scripts/kconfig/Makefile
|
|
|
|
# It is allowed to specify more targets when calling make, including
|
|
|
|
# mixing *config targets and build targets.
|
|
|
|
# For example 'make oldconfig all'.
|
|
|
|
# Detect when mixed targets is specified, and make a second invocation
|
|
|
|
# of make so .config is not included in this case either (for *config).
|
|
|
|
|
|
|
|
version_h := include/generated/uapi/linux/version.h
|
|
|
|
old_version_h := include/linux/version.h
|
|
|
|
|
2018-02-11 17:40:29 +09:00
|
|
|
clean-targets := %clean mrproper cleandocs
|
|
|
|
no-dot-config-targets := $(clean-targets) \
|
2017-10-04 12:56:06 +09:00
|
|
|
cscope gtags TAGS tags help% %docs check% coccicheck \
|
kbuild: add 'headers' target to build up uapi headers in usr/include
In Linux build system, build targets and installation targets are
separated.
Examples are:
- 'make vmlinux' -> 'make install'
- 'make modules' -> 'make modules_install'
- 'make dtbs' -> 'make dtbs_install'
- 'make vdso' -> 'make vdso_install'
The intention is to run the build targets under the normal privilege,
then the installation targets under the root privilege since we need
the write permission to the system directories.
We have 'make headers_install' but the corresponding 'make headers'
stage does not exist. The purpose of headers_install is to provide
the kernel interface to C library. So, nobody would try to install
headers to /usr/include directly.
If 'sudo make INSTALL_HDR_PATH=/usr/include headers_install' were run,
some build artifacts in the kernel tree would be owned by root because
some of uapi headers are generated by 'uapi-asm-generic', 'archheaders'
targets.
Anyway, I believe it makes sense to split the header installation into
two stages.
[1] 'make headers'
Process headers in uapi directories by scripts/headers_install.sh
and copy them to usr/include
[2] 'make headers_install'
Copy '*.h' verbatim from usr/include to $(INSTALL_HDR_PATH)/include
For the backward compatibility, 'headers_install' depends on 'headers'.
Some samples expect uapi headers in usr/include. So, the 'headers'
target is useful to build up them in the fixed location usr/include
irrespective of INSTALL_HDR_PATH.
Another benefit is to stop polluting the final destination with the
time-stamp files '.install' and '.check'. Maybe you can see them in
your toolchains.
Lastly, my main motivation is to prepare for compile-testing uapi
headers. To build something, we have to save an object and .*.cmd
somewhere. The usr/include/ will be the work directory for that.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-06-04 19:14:02 +09:00
|
|
|
$(version_h) headers headers_% archheaders archscripts \
|
2018-08-04 13:47:02 +09:00
|
|
|
%asm-generic kernelversion %src-pkg
|
2018-07-20 16:46:35 +09:00
|
|
|
no-sync-config-targets := $(no-dot-config-targets) install %install \
|
|
|
|
kernelrelease
|
kbuild: make single targets work more correctly
Currently, the single target build directly descends into the directory
of the target. For example,
$ make foo/bar/baz.o
... directly descends into foo/bar/.
On the other hand, the normal build usually descends one directory at
a time, i.e. descends into foo/, and then foo/bar/.
This difference causes some problems.
[1] miss subdir-asflags-y, subdir-ccflags-y in upper Makefiles
The options in subdir-{as,cc}flags-y take effect in the current
and its sub-directories. In other words, they are inherited
downward. In the example above, the single target will miss
subdir-{as,cc}flags-y if they are defined in foo/Makefile.
[2] could be built in a different directory
As Documentation/kbuild/modules.rst section 4.3 says, Kbuild can
handle files that are spread over several sub-directories.
The build rule of foo/bar/baz.o may not necessarily be specified in
foo/bar/Makefile. It might be specifies in foo/Makefile as follows:
[foo/Makefile]
obj-y := bar/baz.o
This often happens when a module is so big that its source files
are divided into sub-directories.
In this case, there is no Makefile in the foo/bar/ directory, yet
the single target descends into foo/bar/, then fails due to the
missing Makefile. You can still do 'make foo/bar/' for partial
building, but cannot do 'make foo/bar/baz.s'. I believe the single
target '%.s' is a useful feature for inspecting the compiler output.
Some modules work around this issue by putting an empty Makefile
in every sub-directory.
This commit fixes those problems by making the single target build
descend in the same way as the normal build does.
Another change is the single target build will observe the CONFIG
options. Previously, it allowed users to build the foo.o even when
the corresponding CONFIG_FOO is disabled:
obj-$(CONFIG_FOO) += foo.o
In the new behavior, the single target build will just fail and show
"No rule to make target ..." (or "Nothing to be done for ..." if the
stale object already exists, but cannot be updated).
The disadvantage of this commit is the build speed. Now that the
single target build visits every directory and parses lots of
Makefiles, it is slower than before. (But, I hope it will not be
too slow.)
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-08-15 00:19:18 +09:00
|
|
|
single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/
|
2017-10-04 12:56:06 +09:00
|
|
|
|
2019-08-11 00:53:03 +09:00
|
|
|
config-build :=
|
|
|
|
mixed-build :=
|
|
|
|
need-config := 1
|
|
|
|
may-sync-config := 1
|
kbuild: make single targets work more correctly
Currently, the single target build directly descends into the directory
of the target. For example,
$ make foo/bar/baz.o
... directly descends into foo/bar/.
On the other hand, the normal build usually descends one directory at
a time, i.e. descends into foo/, and then foo/bar/.
This difference causes some problems.
[1] miss subdir-asflags-y, subdir-ccflags-y in upper Makefiles
The options in subdir-{as,cc}flags-y take effect in the current
and its sub-directories. In other words, they are inherited
downward. In the example above, the single target will miss
subdir-{as,cc}flags-y if they are defined in foo/Makefile.
[2] could be built in a different directory
As Documentation/kbuild/modules.rst section 4.3 says, Kbuild can
handle files that are spread over several sub-directories.
The build rule of foo/bar/baz.o may not necessarily be specified in
foo/bar/Makefile. It might be specifies in foo/Makefile as follows:
[foo/Makefile]
obj-y := bar/baz.o
This often happens when a module is so big that its source files
are divided into sub-directories.
In this case, there is no Makefile in the foo/bar/ directory, yet
the single target descends into foo/bar/, then fails due to the
missing Makefile. You can still do 'make foo/bar/' for partial
building, but cannot do 'make foo/bar/baz.s'. I believe the single
target '%.s' is a useful feature for inspecting the compiler output.
Some modules work around this issue by putting an empty Makefile
in every sub-directory.
This commit fixes those problems by making the single target build
descend in the same way as the normal build does.
Another change is the single target build will observe the CONFIG
options. Previously, it allowed users to build the foo.o even when
the corresponding CONFIG_FOO is disabled:
obj-$(CONFIG_FOO) += foo.o
In the new behavior, the single target build will just fail and show
"No rule to make target ..." (or "Nothing to be done for ..." if the
stale object already exists, but cannot be updated).
The disadvantage of this commit is the build speed. Now that the
single target build visits every directory and parses lots of
Makefiles, it is slower than before. (But, I hope it will not be
too slow.)
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-08-15 00:19:18 +09:00
|
|
|
single-build :=
|
2017-10-04 12:56:06 +09:00
|
|
|
|
|
|
|
ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
|
|
|
|
ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
|
2019-08-11 00:53:03 +09:00
|
|
|
need-config :=
|
2017-10-04 12:56:06 +09:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
kbuild: do not update config when running install targets
"make syncconfig" is automatically invoked when any of the following
happens:
- .config is updated
- any of Kconfig files is updated
- any of environment variables referenced in Kconfig is changed
Then, it updates configuration files such as include/config/auto.conf
include/generated/autoconf.h, etc.
Even install targets (install, modules_install, etc.) are no exception.
However, they should never ever modify the source tree. Install
targets are often run with root privileges. Once those configuration
files are owned by root, "make mrproper" would end up with permission
error.
Install targets should just copy things blindly. They should not care
whether the configuration is up-to-date or not. This makes more sense
because we are interested in the configuration that was used in the
previous kernel building.
This issue has existed since before, but rarely happened. I expect
more chance where people are hit by this; with the new Kconfig syntax
extension, the .config now contains the compiler information. If you
cross-compile the kernel with CROSS_COMPILE, but forget to pass it
for "make install", you meet "any of environment variables referenced
in Kconfig is changed" because $(CC) is referenced in Kconfig.
Another scenario is the compiler upgrade before the installation.
Install targets need the configuration. "make modules_install" refer
to CONFIG_MODULES etc. "make dtbs_install" also needs CONFIG_ARCH_*
to decide which dtb files to install. However, the auto-update of
the configuration files should be avoided. We already do this for
external modules.
Now, Make targets are categorized into 3 groups:
[1] Do not need the kernel configuration at all
help, coccicheck, headers_install etc.
[2] Need the latest kernel configuration
If new config options are added, Kconfig will show prompt to
ask user's selection.
Build targets such as vmlinux, in-kernel modules are the cases.
[3] Need the kernel configuration, but do not want to update it
Install targets except headers_install, and external modules
are the cases.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2018-07-20 16:46:34 +09:00
|
|
|
ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),)
|
|
|
|
ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),)
|
2019-08-11 00:53:03 +09:00
|
|
|
may-sync-config :=
|
kbuild: do not update config when running install targets
"make syncconfig" is automatically invoked when any of the following
happens:
- .config is updated
- any of Kconfig files is updated
- any of environment variables referenced in Kconfig is changed
Then, it updates configuration files such as include/config/auto.conf
include/generated/autoconf.h, etc.
Even install targets (install, modules_install, etc.) are no exception.
However, they should never ever modify the source tree. Install
targets are often run with root privileges. Once those configuration
files are owned by root, "make mrproper" would end up with permission
error.
Install targets should just copy things blindly. They should not care
whether the configuration is up-to-date or not. This makes more sense
because we are interested in the configuration that was used in the
previous kernel building.
This issue has existed since before, but rarely happened. I expect
more chance where people are hit by this; with the new Kconfig syntax
extension, the .config now contains the compiler information. If you
cross-compile the kernel with CROSS_COMPILE, but forget to pass it
for "make install", you meet "any of environment variables referenced
in Kconfig is changed" because $(CC) is referenced in Kconfig.
Another scenario is the compiler upgrade before the installation.
Install targets need the configuration. "make modules_install" refer
to CONFIG_MODULES etc. "make dtbs_install" also needs CONFIG_ARCH_*
to decide which dtb files to install. However, the auto-update of
the configuration files should be avoided. We already do this for
external modules.
Now, Make targets are categorized into 3 groups:
[1] Do not need the kernel configuration at all
help, coccicheck, headers_install etc.
[2] Need the latest kernel configuration
If new config options are added, Kconfig will show prompt to
ask user's selection.
Build targets such as vmlinux, in-kernel modules are the cases.
[3] Need the kernel configuration, but do not want to update it
Install targets except headers_install, and external modules
are the cases.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2018-07-20 16:46:34 +09:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifneq ($(KBUILD_EXTMOD),)
|
2019-08-11 00:53:03 +09:00
|
|
|
may-sync-config :=
|
kbuild: do not update config when running install targets
"make syncconfig" is automatically invoked when any of the following
happens:
- .config is updated
- any of Kconfig files is updated
- any of environment variables referenced in Kconfig is changed
Then, it updates configuration files such as include/config/auto.conf
include/generated/autoconf.h, etc.
Even install targets (install, modules_install, etc.) are no exception.
However, they should never ever modify the source tree. Install
targets are often run with root privileges. Once those configuration
files are owned by root, "make mrproper" would end up with permission
error.
Install targets should just copy things blindly. They should not care
whether the configuration is up-to-date or not. This makes more sense
because we are interested in the configuration that was used in the
previous kernel building.
This issue has existed since before, but rarely happened. I expect
more chance where people are hit by this; with the new Kconfig syntax
extension, the .config now contains the compiler information. If you
cross-compile the kernel with CROSS_COMPILE, but forget to pass it
for "make install", you meet "any of environment variables referenced
in Kconfig is changed" because $(CC) is referenced in Kconfig.
Another scenario is the compiler upgrade before the installation.
Install targets need the configuration. "make modules_install" refer
to CONFIG_MODULES etc. "make dtbs_install" also needs CONFIG_ARCH_*
to decide which dtb files to install. However, the auto-update of
the configuration files should be avoided. We already do this for
external modules.
Now, Make targets are categorized into 3 groups:
[1] Do not need the kernel configuration at all
help, coccicheck, headers_install etc.
[2] Need the latest kernel configuration
If new config options are added, Kconfig will show prompt to
ask user's selection.
Build targets such as vmlinux, in-kernel modules are the cases.
[3] Need the kernel configuration, but do not want to update it
Install targets except headers_install, and external modules
are the cases.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2018-07-20 16:46:34 +09:00
|
|
|
endif
|
|
|
|
|
2017-10-04 12:56:06 +09:00
|
|
|
ifeq ($(KBUILD_EXTMOD),)
|
|
|
|
ifneq ($(filter config %config,$(MAKECMDGOALS)),)
|
2019-08-11 00:53:03 +09:00
|
|
|
config-build := 1
|
2017-10-04 12:56:06 +09:00
|
|
|
ifneq ($(words $(MAKECMDGOALS)),1)
|
2019-08-11 00:53:03 +09:00
|
|
|
mixed-build := 1
|
2017-10-04 12:56:06 +09:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
endif
|
2018-02-11 17:40:29 +09:00
|
|
|
|
kbuild: make single targets work more correctly
Currently, the single target build directly descends into the directory
of the target. For example,
$ make foo/bar/baz.o
... directly descends into foo/bar/.
On the other hand, the normal build usually descends one directory at
a time, i.e. descends into foo/, and then foo/bar/.
This difference causes some problems.
[1] miss subdir-asflags-y, subdir-ccflags-y in upper Makefiles
The options in subdir-{as,cc}flags-y take effect in the current
and its sub-directories. In other words, they are inherited
downward. In the example above, the single target will miss
subdir-{as,cc}flags-y if they are defined in foo/Makefile.
[2] could be built in a different directory
As Documentation/kbuild/modules.rst section 4.3 says, Kbuild can
handle files that are spread over several sub-directories.
The build rule of foo/bar/baz.o may not necessarily be specified in
foo/bar/Makefile. It might be specifies in foo/Makefile as follows:
[foo/Makefile]
obj-y := bar/baz.o
This often happens when a module is so big that its source files
are divided into sub-directories.
In this case, there is no Makefile in the foo/bar/ directory, yet
the single target descends into foo/bar/, then fails due to the
missing Makefile. You can still do 'make foo/bar/' for partial
building, but cannot do 'make foo/bar/baz.s'. I believe the single
target '%.s' is a useful feature for inspecting the compiler output.
Some modules work around this issue by putting an empty Makefile
in every sub-directory.
This commit fixes those problems by making the single target build
descend in the same way as the normal build does.
Another change is the single target build will observe the CONFIG
options. Previously, it allowed users to build the foo.o even when
the corresponding CONFIG_FOO is disabled:
obj-$(CONFIG_FOO) += foo.o
In the new behavior, the single target build will just fail and show
"No rule to make target ..." (or "Nothing to be done for ..." if the
stale object already exists, but cannot be updated).
The disadvantage of this commit is the build speed. Now that the
single target build visits every directory and parses lots of
Makefiles, it is slower than before. (But, I hope it will not be
too slow.)
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-08-15 00:19:18 +09:00
|
|
|
# We cannot build single targets and the others at the same time
|
|
|
|
ifneq ($(filter $(single-targets), $(MAKECMDGOALS)),)
|
|
|
|
single-build := 1
|
|
|
|
ifneq ($(filter-out $(single-targets), $(MAKECMDGOALS)),)
|
|
|
|
mixed-build := 1
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2018-02-11 17:40:29 +09:00
|
|
|
# For "make -j clean all", "make -j mrproper defconfig all", etc.
|
|
|
|
ifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),)
|
|
|
|
ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),)
|
2019-08-11 00:53:03 +09:00
|
|
|
mixed-build := 1
|
2018-02-11 17:40:29 +09:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2017-10-04 12:56:06 +09:00
|
|
|
# install and modules_install need also be processed one by one
|
|
|
|
ifneq ($(filter install,$(MAKECMDGOALS)),)
|
|
|
|
ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
|
2019-08-11 00:53:03 +09:00
|
|
|
mixed-build := 1
|
2017-10-04 12:56:06 +09:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2019-08-11 00:53:03 +09:00
|
|
|
ifdef mixed-build
|
2017-10-04 12:56:06 +09:00
|
|
|
# ===========================================================================
|
|
|
|
# We're called with mixed targets (*config and build targets).
|
|
|
|
# Handle them one by one.
|
|
|
|
|
|
|
|
PHONY += $(MAKECMDGOALS) __build_one_by_one
|
|
|
|
|
|
|
|
$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one
|
|
|
|
@:
|
|
|
|
|
|
|
|
__build_one_by_one:
|
|
|
|
$(Q)set -e; \
|
|
|
|
for i in $(MAKECMDGOALS); do \
|
|
|
|
$(MAKE) -f $(srctree)/Makefile $$i; \
|
|
|
|
done
|
|
|
|
|
2019-08-11 00:53:03 +09:00
|
|
|
else # !mixed-build
|
2017-10-04 12:56:06 +09:00
|
|
|
|
|
|
|
include scripts/Kbuild.include
|
|
|
|
|
|
|
|
# Read KERNELRELEASE from include/config/kernel.release (if it exists)
|
|
|
|
KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
|
|
|
|
KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
|
|
|
|
export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
|
|
|
|
|
2018-09-04 19:47:21 +09:00
|
|
|
include scripts/subarch.include
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
# Cross compiling and selecting different set of gcc/bin-utils
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# When performing cross compilation for other architectures ARCH shall be set
|
|
|
|
# to the target architecture. (See arch/* for the possibilities).
|
|
|
|
# ARCH can be set during invocation of make:
|
|
|
|
# make ARCH=ia64
|
|
|
|
# Another way is to have ARCH set in the environment.
|
|
|
|
# The default ARCH is the host where make is executed.
|
|
|
|
|
|
|
|
# CROSS_COMPILE specify the prefix used for all executables used
|
|
|
|
# during compilation. Only gcc and related bin-utils executables
|
|
|
|
# are prefixed with $(CROSS_COMPILE).
|
|
|
|
# CROSS_COMPILE can be set on the command line
|
|
|
|
# make CROSS_COMPILE=ia64-linux-
|
|
|
|
# Alternatively CROSS_COMPILE can be set in the environment.
|
|
|
|
# Default value for CROSS_COMPILE is not to prefix executables
|
|
|
|
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
|
2009-10-12 06:22:58 +09:00
|
|
|
ARCH ?= $(SUBARCH)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
# Architecture as present in compile.h
|
2007-10-11 18:11:36 +09:00
|
|
|
UTS_MACHINE := $(ARCH)
|
|
|
|
SRCARCH := $(ARCH)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2007-11-13 04:14:19 +09:00
|
|
|
# Additional ARCH settings for x86
|
|
|
|
ifeq ($(ARCH),i386)
|
|
|
|
SRCARCH := x86
|
|
|
|
endif
|
|
|
|
ifeq ($(ARCH),x86_64)
|
|
|
|
SRCARCH := x86
|
|
|
|
endif
|
2007-10-26 02:42:04 +09:00
|
|
|
|
2008-12-03 16:17:12 +09:00
|
|
|
# Additional ARCH settings for sparc
|
2010-10-25 14:48:23 +09:00
|
|
|
ifeq ($(ARCH),sparc32)
|
|
|
|
SRCARCH := sparc
|
|
|
|
endif
|
2008-07-28 06:00:59 +09:00
|
|
|
ifeq ($(ARCH),sparc64)
|
2008-12-03 16:17:12 +09:00
|
|
|
SRCARCH := sparc
|
2008-07-28 06:00:59 +09:00
|
|
|
endif
|
2008-06-21 07:24:17 +09:00
|
|
|
|
2009-04-11 08:39:27 +09:00
|
|
|
# Additional ARCH settings for sh
|
|
|
|
ifeq ($(ARCH),sh64)
|
|
|
|
SRCARCH := sh
|
|
|
|
endif
|
|
|
|
|
2006-06-09 14:12:51 +09:00
|
|
|
KCONFIG_CONFIG ?= .config
|
2010-12-15 01:39:44 +09:00
|
|
|
export KCONFIG_CONFIG
|
2006-06-09 14:12:51 +09:00
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
# SHELL used by kbuild
|
2019-08-25 22:28:37 +09:00
|
|
|
CONFIG_SHELL := sh
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2018-07-12 19:38:36 +09:00
|
|
|
HOST_LFS_CFLAGS := $(shell getconf LFS_CFLAGS 2>/dev/null)
|
|
|
|
HOST_LFS_LDFLAGS := $(shell getconf LFS_LDFLAGS 2>/dev/null)
|
|
|
|
HOST_LFS_LIBS := $(shell getconf LFS_LIBS 2>/dev/null)
|
2017-07-10 03:02:36 +09:00
|
|
|
|
2020-04-08 10:36:23 +09:00
|
|
|
ifneq ($(LLVM),)
|
|
|
|
HOSTCC = clang
|
|
|
|
HOSTCXX = clang++
|
|
|
|
else
|
|
|
|
HOSTCC = gcc
|
|
|
|
HOSTCXX = g++
|
|
|
|
endif
|
2018-07-10 09:45:58 +09:00
|
|
|
KBUILD_HOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 \
|
2018-07-10 09:46:02 +09:00
|
|
|
-fomit-frame-pointer -std=gnu89 $(HOST_LFS_CFLAGS) \
|
|
|
|
$(HOSTCFLAGS)
|
|
|
|
KBUILD_HOSTCXXFLAGS := -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
|
|
|
|
KBUILD_HOSTLDFLAGS := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
|
|
|
|
KBUILD_HOSTLDLIBS := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
# Make variables (CC, etc...)
|
|
|
|
CPP = $(CC) -E
|
2020-04-08 10:36:23 +09:00
|
|
|
ifneq ($(LLVM),)
|
2018-07-24 05:32:53 +09:00
|
|
|
CC = clang
|
2020-04-08 10:36:23 +09:00
|
|
|
LD = ld.lld
|
|
|
|
AR = llvm-ar
|
|
|
|
NM = llvm-nm
|
|
|
|
OBJCOPY = llvm-objcopy
|
|
|
|
OBJDUMP = llvm-objdump
|
|
|
|
READELF = llvm-readelf
|
|
|
|
OBJSIZE = llvm-size
|
|
|
|
STRIP = llvm-strip
|
|
|
|
else
|
2018-07-24 05:32:53 +09:00
|
|
|
CC = $(CROSS_COMPILE)gcc
|
2020-04-08 10:36:23 +09:00
|
|
|
LD = $(CROSS_COMPILE)ld
|
2005-04-17 07:20:36 +09:00
|
|
|
AR = $(CROSS_COMPILE)ar
|
|
|
|
NM = $(CROSS_COMPILE)nm
|
|
|
|
OBJCOPY = $(CROSS_COMPILE)objcopy
|
|
|
|
OBJDUMP = $(CROSS_COMPILE)objdump
|
2019-12-05 07:54:41 +09:00
|
|
|
READELF = $(CROSS_COMPILE)readelf
|
2019-01-21 21:54:39 +09:00
|
|
|
OBJSIZE = $(CROSS_COMPILE)size
|
2020-04-08 10:36:23 +09:00
|
|
|
STRIP = $(CROSS_COMPILE)strip
|
|
|
|
endif
|
kbuild: add ability to generate BTF type info for vmlinux
This patch adds new config option to trigger generation of BTF type
information from DWARF debuginfo for vmlinux and kernel modules through
pahole, which in turn relies on libbpf for btf_dedup() algorithm.
The intent is to record compact type information of all types used
inside kernel, including all the structs/unions/typedefs/etc. This
enables BPF's compile-once-run-everywhere ([0]) approach, in which
tracing programs that are inspecting kernel's internal data (e.g.,
struct task_struct) can be compiled on a system running some kernel
version, but would be possible to run on other kernel versions (and
configurations) without recompilation, even if the layout of structs
changed and/or some of the fields were added, removed, or renamed.
This is only possible if BPF loader can get kernel type info to adjust
all the offsets correctly. This patch is a first time in this direction,
making sure that BTF type info is part of Linux kernel image in
non-loadable ELF section.
BTF deduplication ([1]) algorithm typically provides 100x savings
compared to DWARF data, so resulting .BTF section is not big as is
typically about 2MB in size.
[0] http://vger.kernel.org/lpc-bpf2018.html#session-2
[1] https://facebookmicrosites.github.io/bpf/blog/2018/11/14/btf-enhancement.html
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Alexei Starovoitov <ast@fb.com>
Cc: Yonghong Song <yhs@fb.com>
Cc: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Acked-by: David S. Miller <davem@davemloft.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2019-04-03 01:49:50 +09:00
|
|
|
PAHOLE = pahole
|
2017-12-10 01:02:28 +09:00
|
|
|
LEX = flex
|
|
|
|
YACC = bison
|
2005-04-17 07:20:36 +09:00
|
|
|
AWK = awk
|
2009-07-21 04:37:11 +09:00
|
|
|
INSTALLKERNEL := installkernel
|
2020-12-01 22:17:30 +09:00
|
|
|
DEPMOD = depmod
|
2005-04-17 07:20:36 +09:00
|
|
|
PERL = perl
|
2014-07-18 13:40:11 +09:00
|
|
|
PYTHON = python
|
kbuild: add PYTHON2 and PYTHON3 variables
The variable 'PYTHON' allows users to specify a proper executable
name in case the default 'python' does not work. However, this does
not address the case where both Python 2.x and 3.x scripts are used
in one source tree.
PEP 394 (https://www.python.org/dev/peps/pep-0394/) provides a
convention for Python scripts portability. Here is a quotation:
In order to tolerate differences across platforms, all new code
that needs to invoke the Python interpreter should not specify
'python', but rather should specify either 'python2' or 'python3'.
This distinction should be made in shebangs, when invoking from a
shell script, when invoking via the system() call, or when invoking
in any other context.
One exception to this is scripts that are deliberately written to
be source compatible with both Python 2.x and 3.x. Such scripts may
continue to use python on their shebang line without affecting their
portability.
To meet this requirement, this commit adds new variables 'PYTHON2'
and 'PYTHON3'.
arch/ia64/scripts/unwcheck.py is the only script that has ever used
$(PYTHON). Recent commit bd5edbe67794 ("ia64: convert unwcheck.py to
python3") converted it to be compatible with both Python 2.x and 3.x,
so this is the exceptional case where the use of 'python' is allowed.
So, I did not touch arch/ia64/Makefile.
tools/perf/Makefile.config sets PYTHON and PYTHON2 by itself, so it
is not affected by this commit.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2018-03-13 18:12:02 +09:00
|
|
|
PYTHON3 = python3
|
2005-04-17 07:20:36 +09:00
|
|
|
CHECK = sparse
|
2019-08-25 22:28:37 +09:00
|
|
|
BASH = bash
|
kbuild: fix broken builds because of GZIP,BZIP2,LZOP variables
commit e4a42c82e943b97ce124539fcd7a47445b43fa0d upstream.
Redefine GZIP, BZIP2, LZOP variables as KGZIP, KBZIP2, KLZOP resp.
GZIP, BZIP2, LZOP env variables are reserved by the tools. The original
attempt to redefine them internally doesn't work in makefiles/scripts
intercall scenarios, e.g., "make GZIP=gzip bindeb-pkg" and results in
broken builds. There can be other broken build commands because of this,
so the universal solution is to use non-reserved env variables for the
compression tools.
Fixes: 8dfb61dcbace ("kbuild: add variables for compression tools")
Signed-off-by: Denis Efremov <efremov@linux.com>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Cc: Matthias Maennich <maennich@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-06-08 18:59:44 +09:00
|
|
|
KGZIP = gzip
|
|
|
|
KBZIP2 = bzip2
|
|
|
|
KLZOP = lzop
|
kbuild: add variables for compression tools
commit 8dfb61dcbaceb19a5ded5e9c9dcf8d05acc32294 upstream.
Allow user to use alternative implementations of compression tools,
such as pigz, pbzip2, pxz. For example, multi-threaded tools to
speed up the build:
$ make GZIP=pigz BZIP2=pbzip2
Variables _GZIP, _BZIP2, _LZOP are used internally because original env
vars are reserved by the tools. The use of GZIP in gzip tool is obsolete
since 2015. However, alternative implementations (e.g., pigz) still rely
on it. BZIP2, BZIP, LZOP vars are not obsolescent.
The credit goes to @grsecurity.
As a sidenote, for multi-threaded lzma, xz compression one can use:
$ export XZ_OPT="--threads=0"
Signed-off-by: Denis Efremov <efremov@linux.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Matthias Maennich <maennich@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-06-05 16:39:55 +09:00
|
|
|
LZMA = lzma
|
|
|
|
LZ4 = lz4c
|
|
|
|
XZ = xz
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2008-12-28 06:38:44 +09:00
|
|
|
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
|
2018-02-16 06:07:50 +09:00
|
|
|
-Wbitwise -Wno-return-void -Wno-unknown-attribute $(CF)
|
2019-03-15 08:41:59 +09:00
|
|
|
NOSTDINC_FLAGS :=
|
kbuild: allow assignment to {A,C,LD}FLAGS_MODULE on the command line
It is now possible to assign options to AS, CC and LD
on the command line - which is only used when building modules.
{A,C,LD}FLAGS_MODULE was all used both in the top-level Makefile
in the arch makefiles, thus users had no way to specify
additional options to AS, CC, LD when building modules
without overriding the original value.
Introduce a new set of variables KBUILD_{A,C,LD}FLAGS_MODULE
that is used by arch specific files and free up
{A,C,LD}FLAGS_MODULE so they can be assigned on
the command line.
All arch Makefiles that used the old variables has been updated.
Note: Previously we had a MODFLAGS variable for both
AS and CC. But in favour of consistency this was dropped.
So in some cases arch Makefile has one assignmnet replaced by
two assignmnets.
Note2: MODFLAGS was not documented and is dropped
without any notice. I do not expect much/any breakage
from this.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Denys Vlasenko <vda.linux@googlemail.com>
Cc: Haavard Skinnemoen <hskinnemoen@atmel.com>
Cc: Mike Frysinger <vapier@gentoo.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Chen Liqin <liqin.chen@sunplusct.com>
Acked-by: Mike Frysinger <vapier@gentoo.org> [blackfin]
Acked-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com> [avr32]
Signed-off-by: Michal Marek <mmarek@suse.cz>
2010-07-29 00:33:09 +09:00
|
|
|
CFLAGS_MODULE =
|
|
|
|
AFLAGS_MODULE =
|
|
|
|
LDFLAGS_MODULE =
|
2005-04-17 07:20:36 +09:00
|
|
|
CFLAGS_KERNEL =
|
|
|
|
AFLAGS_KERNEL =
|
2016-06-07 18:57:02 +09:00
|
|
|
LDFLAGS_vmlinux =
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2012-10-03 02:01:26 +09:00
|
|
|
# Use USERINCLUDE when you must reference the UAPI directories only.
|
|
|
|
USERINCLUDE := \
|
2017-10-04 12:56:04 +09:00
|
|
|
-I$(srctree)/arch/$(SRCARCH)/include/uapi \
|
|
|
|
-I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \
|
2012-10-03 02:01:26 +09:00
|
|
|
-I$(srctree)/include/uapi \
|
2016-06-16 00:45:45 +09:00
|
|
|
-I$(objtree)/include/generated/uapi \
|
2012-10-03 02:01:26 +09:00
|
|
|
-include $(srctree)/include/linux/kconfig.h
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
# Use LINUXINCLUDE when you must reference the include/ directory.
|
|
|
|
# Needed to be compatible with the O= option
|
2012-10-03 02:01:26 +09:00
|
|
|
LINUXINCLUDE := \
|
2017-10-04 12:56:04 +09:00
|
|
|
-I$(srctree)/arch/$(SRCARCH)/include \
|
|
|
|
-I$(objtree)/arch/$(SRCARCH)/include/generated \
|
2019-07-06 12:07:12 +09:00
|
|
|
$(if $(building_out_of_srctree),-I$(srctree)/include) \
|
2017-06-06 16:15:28 +09:00
|
|
|
-I$(objtree)/include \
|
|
|
|
$(USERINCLUDE)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2018-12-14 17:05:37 +09:00
|
|
|
KBUILD_AFLAGS := -D__ASSEMBLY__ -fno-PIE
|
2018-12-14 17:05:38 +09:00
|
|
|
KBUILD_CFLAGS := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \
|
2018-12-14 17:05:37 +09:00
|
|
|
-fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \
|
2019-03-04 21:55:20 +09:00
|
|
|
-Werror=implicit-function-declaration -Werror=implicit-int \
|
2020-10-12 03:54:31 +09:00
|
|
|
-Werror=return-type -Wno-format-security \
|
kbuild: do not call cc-option before KBUILD_CFLAGS initialization
Some $(call cc-option,...) are invoked very early, even before
KBUILD_CFLAGS, etc. are initialized.
The returned string from $(call cc-option,...) depends on
KBUILD_CPPFLAGS, KBUILD_CFLAGS, and GCC_PLUGINS_CFLAGS.
Since they are exported, they are not empty when the top Makefile
is recursively invoked.
The recursion occurs in several places. For example, the top
Makefile invokes itself for silentoldconfig. "make tinyconfig",
"make rpm-pkg" are the cases, too.
In those cases, the second call of cc-option from the same line
runs a different shell command due to non-pristine KBUILD_CFLAGS.
To get the same result all the time, KBUILD_* and GCC_PLUGINS_CFLAGS
must be initialized before any call of cc-option. This avoids
garbage data in the .cache.mk file.
Move all calls of cc-option below the config targets because target
compiler flags are unnecessary for Kconfig.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
2017-10-12 18:22:25 +09:00
|
|
|
-std=gnu89
|
|
|
|
KBUILD_CPPFLAGS := -D__KERNEL__
|
2010-07-29 02:11:27 +09:00
|
|
|
KBUILD_AFLAGS_KERNEL :=
|
|
|
|
KBUILD_CFLAGS_KERNEL :=
|
kbuild: allow assignment to {A,C,LD}FLAGS_MODULE on the command line
It is now possible to assign options to AS, CC and LD
on the command line - which is only used when building modules.
{A,C,LD}FLAGS_MODULE was all used both in the top-level Makefile
in the arch makefiles, thus users had no way to specify
additional options to AS, CC, LD when building modules
without overriding the original value.
Introduce a new set of variables KBUILD_{A,C,LD}FLAGS_MODULE
that is used by arch specific files and free up
{A,C,LD}FLAGS_MODULE so they can be assigned on
the command line.
All arch Makefiles that used the old variables has been updated.
Note: Previously we had a MODFLAGS variable for both
AS and CC. But in favour of consistency this was dropped.
So in some cases arch Makefile has one assignmnet replaced by
two assignmnets.
Note2: MODFLAGS was not documented and is dropped
without any notice. I do not expect much/any breakage
from this.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Denys Vlasenko <vda.linux@googlemail.com>
Cc: Haavard Skinnemoen <hskinnemoen@atmel.com>
Cc: Mike Frysinger <vapier@gentoo.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Chen Liqin <liqin.chen@sunplusct.com>
Acked-by: Mike Frysinger <vapier@gentoo.org> [blackfin]
Acked-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com> [avr32]
Signed-off-by: Michal Marek <mmarek@suse.cz>
2010-07-29 00:33:09 +09:00
|
|
|
KBUILD_AFLAGS_MODULE := -DMODULE
|
|
|
|
KBUILD_CFLAGS_MODULE := -DMODULE
|
2019-08-15 01:06:22 +09:00
|
|
|
KBUILD_LDFLAGS_MODULE :=
|
|
|
|
export KBUILD_LDS_MODULE := $(srctree)/scripts/module-common.lds
|
2018-08-24 08:20:39 +09:00
|
|
|
KBUILD_LDFLAGS :=
|
kbuild: do not call cc-option before KBUILD_CFLAGS initialization
Some $(call cc-option,...) are invoked very early, even before
KBUILD_CFLAGS, etc. are initialized.
The returned string from $(call cc-option,...) depends on
KBUILD_CPPFLAGS, KBUILD_CFLAGS, and GCC_PLUGINS_CFLAGS.
Since they are exported, they are not empty when the top Makefile
is recursively invoked.
The recursion occurs in several places. For example, the top
Makefile invokes itself for silentoldconfig. "make tinyconfig",
"make rpm-pkg" are the cases, too.
In those cases, the second call of cc-option from the same line
runs a different shell command due to non-pristine KBUILD_CFLAGS.
To get the same result all the time, KBUILD_* and GCC_PLUGINS_CFLAGS
must be initialized before any call of cc-option. This avoids
garbage data in the .cache.mk file.
Move all calls of cc-option below the config targets because target
compiler flags are unnecessary for Kconfig.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
2017-10-12 18:22:25 +09:00
|
|
|
GCC_PLUGINS_CFLAGS :=
|
2019-07-29 18:15:17 +09:00
|
|
|
CLANG_FLAGS :=
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2020-03-26 14:57:18 +09:00
|
|
|
export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC
|
2019-12-05 07:54:41 +09:00
|
|
|
export CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE READELF PAHOLE LEX YACC AWK INSTALLKERNEL
|
2020-01-06 17:36:28 +09:00
|
|
|
export PERL PYTHON PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
|
kbuild: fix broken builds because of GZIP,BZIP2,LZOP variables
commit e4a42c82e943b97ce124539fcd7a47445b43fa0d upstream.
Redefine GZIP, BZIP2, LZOP variables as KGZIP, KBZIP2, KLZOP resp.
GZIP, BZIP2, LZOP env variables are reserved by the tools. The original
attempt to redefine them internally doesn't work in makefiles/scripts
intercall scenarios, e.g., "make GZIP=gzip bindeb-pkg" and results in
broken builds. There can be other broken build commands because of this,
so the universal solution is to use non-reserved env variables for the
compression tools.
Fixes: 8dfb61dcbace ("kbuild: add variables for compression tools")
Signed-off-by: Denis Efremov <efremov@linux.com>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Cc: Matthias Maennich <maennich@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-06-08 18:59:44 +09:00
|
|
|
export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ
|
2019-01-21 21:54:39 +09:00
|
|
|
export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2018-08-24 08:20:39 +09:00
|
|
|
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
|
2018-02-07 08:36:00 +09:00
|
|
|
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
|
|
|
|
export CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE CFLAGS_UBSAN
|
2007-10-16 04:59:31 +09:00
|
|
|
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
|
kbuild: allow assignment to {A,C,LD}FLAGS_MODULE on the command line
It is now possible to assign options to AS, CC and LD
on the command line - which is only used when building modules.
{A,C,LD}FLAGS_MODULE was all used both in the top-level Makefile
in the arch makefiles, thus users had no way to specify
additional options to AS, CC, LD when building modules
without overriding the original value.
Introduce a new set of variables KBUILD_{A,C,LD}FLAGS_MODULE
that is used by arch specific files and free up
{A,C,LD}FLAGS_MODULE so they can be assigned on
the command line.
All arch Makefiles that used the old variables has been updated.
Note: Previously we had a MODFLAGS variable for both
AS and CC. But in favour of consistency this was dropped.
So in some cases arch Makefile has one assignmnet replaced by
two assignmnets.
Note2: MODFLAGS was not documented and is dropped
without any notice. I do not expect much/any breakage
from this.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Denys Vlasenko <vda.linux@googlemail.com>
Cc: Haavard Skinnemoen <hskinnemoen@atmel.com>
Cc: Mike Frysinger <vapier@gentoo.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Chen Liqin <liqin.chen@sunplusct.com>
Acked-by: Mike Frysinger <vapier@gentoo.org> [blackfin]
Acked-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com> [avr32]
Signed-off-by: Michal Marek <mmarek@suse.cz>
2010-07-29 00:33:09 +09:00
|
|
|
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
|
2010-07-29 02:11:27 +09:00
|
|
|
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
# Files to ignore in find ... statements
|
|
|
|
|
2014-02-06 21:51:42 +09:00
|
|
|
export RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o \
|
|
|
|
-name CVS -o -name .pc -o -name .hg -o -name .git \) \
|
|
|
|
-prune -o
|
2012-02-17 06:49:15 +09:00
|
|
|
export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
|
|
|
|
--exclude CVS --exclude .pc --exclude .hg --exclude .git
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
# ===========================================================================
|
|
|
|
# Rules shared between *config targets and build targets
|
|
|
|
|
2017-08-02 11:31:06 +09:00
|
|
|
# Basic helpers built in scripts/basic/
|
2006-03-06 07:14:10 +09:00
|
|
|
PHONY += scripts_basic
|
2005-04-17 07:20:36 +09:00
|
|
|
scripts_basic:
|
|
|
|
$(Q)$(MAKE) $(build)=scripts/basic
|
2009-11-18 00:48:25 +09:00
|
|
|
$(Q)rm -f .tmp_quiet_recordmcount
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2006-03-06 07:14:10 +09:00
|
|
|
PHONY += outputmakefile
|
2019-08-22 13:46:11 +09:00
|
|
|
# Before starting out-of-tree build, make sure the source tree is clean.
|
2006-05-02 19:33:20 +09:00
|
|
|
# outputmakefile generates a Makefile in the output directory, if using a
|
|
|
|
# separate output directory. This allows convenient use of make in the
|
|
|
|
# output directory.
|
2019-02-03 17:48:40 +09:00
|
|
|
# At the same time when output Makefile generated, generate .gitignore to
|
|
|
|
# ignore whole output directory
|
2005-04-17 07:20:36 +09:00
|
|
|
outputmakefile:
|
2019-07-06 12:07:12 +09:00
|
|
|
ifdef building_out_of_srctree
|
2019-08-22 13:46:11 +09:00
|
|
|
$(Q)if [ -f $(srctree)/.config -o \
|
|
|
|
-d $(srctree)/include/config -o \
|
|
|
|
-d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
|
|
|
|
echo >&2 "***"; \
|
|
|
|
echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \
|
|
|
|
echo >&2 "*** in $(abs_srctree)";\
|
|
|
|
echo >&2 "***"; \
|
|
|
|
false; \
|
|
|
|
fi
|
2009-01-10 12:56:13 +09:00
|
|
|
$(Q)ln -fsn $(srctree) source
|
2018-09-18 17:45:53 +09:00
|
|
|
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
|
2019-03-26 13:26:58 +09:00
|
|
|
$(Q)test -e .gitignore || \
|
|
|
|
{ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
|
2006-05-02 19:33:20 +09:00
|
|
|
endif
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2021-02-06 07:01:25 +09:00
|
|
|
# The expansion should be delayed until arch/$(SRCARCH)/Makefile is included.
|
|
|
|
# Some architectures define CROSS_COMPILE in arch/$(SRCARCH)/Makefile.
|
|
|
|
# CC_VERSION_TEXT is referenced from Kconfig (so it needs export),
|
|
|
|
# and from include/config/auto.conf.cmd to detect the compiler upgrade.
|
2021-02-17 06:33:12 +09:00
|
|
|
CC_VERSION_TEXT = $(shell $(CC) --version 2>/dev/null | head -n 1 | sed 's/\#//g')
|
2021-02-06 07:01:25 +09:00
|
|
|
|
|
|
|
ifneq ($(findstring clang,$(CC_VERSION_TEXT)),)
|
2021-08-03 03:39:09 +09:00
|
|
|
# Individual arch/{arch}/Makefiles should use -EL/-EB to set intended
|
|
|
|
# endianness and -m32/-m64 to set word size based on Kconfigs instead of
|
|
|
|
# relying on the target triple.
|
|
|
|
CLANG_TARGET_FLAGS_arm := arm-linux-gnueabi
|
|
|
|
CLANG_TARGET_FLAGS_arm64 := aarch64-linux-gnu
|
|
|
|
CLANG_TARGET_FLAGS_hexagon := hexagon-linux-musl
|
|
|
|
CLANG_TARGET_FLAGS_m68k := m68k-linux-gnu
|
|
|
|
CLANG_TARGET_FLAGS_mips := mipsel-linux-gnu
|
|
|
|
CLANG_TARGET_FLAGS_powerpc := powerpc64le-linux-gnu
|
|
|
|
CLANG_TARGET_FLAGS_riscv := riscv64-linux-gnu
|
|
|
|
CLANG_TARGET_FLAGS_s390 := s390x-linux-gnu
|
|
|
|
CLANG_TARGET_FLAGS_x86 := x86_64-linux-gnu
|
|
|
|
CLANG_TARGET_FLAGS := $(CLANG_TARGET_FLAGS_$(SRCARCH))
|
|
|
|
|
|
|
|
ifeq ($(CROSS_COMPILE),)
|
|
|
|
ifeq ($(CLANG_TARGET_FLAGS),)
|
|
|
|
$(error Specify CROSS_COMPILE or add '--target=' option to Makefile)
|
|
|
|
else
|
|
|
|
CLANG_FLAGS += --target=$(CLANG_TARGET_FLAGS)
|
|
|
|
endif # CLANG_TARGET_FLAGS
|
|
|
|
else
|
2020-11-11 04:37:31 +09:00
|
|
|
CLANG_FLAGS += --target=$(notdir $(CROSS_COMPILE:%-=%))
|
2021-08-03 03:39:09 +09:00
|
|
|
endif # CROSS_COMPILE
|
|
|
|
|
2021-08-07 02:27:01 +09:00
|
|
|
ifeq ($(LLVM_IAS),0)
|
2018-11-06 12:04:55 +09:00
|
|
|
CLANG_FLAGS += -no-integrated-as
|
2021-03-10 05:59:15 +09:00
|
|
|
GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
|
|
|
|
CLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
|
2019-06-28 04:14:48 +09:00
|
|
|
endif
|
kbuild: Add -Werror=unknown-warning-option to CLANG_FLAGS
In commit ebcc5928c5d9 ("arm64: Silence gcc warnings about arch ABI
drift"), the arm64 Makefile added -Wno-psabi to KBUILD_CFLAGS, which is
a GCC only option so clang rightfully complains:
warning: unknown warning option '-Wno-psabi' [-Wunknown-warning-option]
https://clang.llvm.org/docs/DiagnosticsReference.html#wunknown-warning-option
However, by default, this is merely a warning so the build happily goes
on with a slew of these warnings in the process.
Commit c3f0d0bc5b01 ("kbuild, LLVMLinux: Add -Werror to cc-option to
support clang") worked around this behavior in cc-option by adding
-Werror so that unknown flags cause an error. However, this all happens
silently and when an unknown flag is added to the build unconditionally
like -Wno-psabi, cc-option will always fail because there is always an
unknown flag in the list of flags. This manifested as link time failures
in the arm64 libstub because -fno-stack-protector didn't get added to
KBUILD_CFLAGS.
To avoid these weird cryptic failures in the future, make clang behave
like gcc and immediately error when it encounters an unknown flag by
adding -Werror=unknown-warning-option to CLANG_FLAGS. This can be added
unconditionally for clang because it is supported by at least 3.0.0,
according to godbolt [1] and 4.0.0, according to its documentation [2],
which is far earlier than we typically support.
[1]: https://godbolt.org/z/7F7rm3
[2]: https://releases.llvm.org/4.0.0/tools/clang/docs/DiagnosticsReference.html#wunknown-warning-option
Link: https://github.com/ClangBuiltLinux/linux/issues/511
Link: https://github.com/ClangBuiltLinux/linux/issues/517
Suggested-by: Peter Smith <peter.smith@linaro.org>
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
Tested-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-06-12 03:43:31 +09:00
|
|
|
CLANG_FLAGS += -Werror=unknown-warning-option
|
2018-11-06 12:04:55 +09:00
|
|
|
KBUILD_CFLAGS += $(CLANG_FLAGS)
|
|
|
|
KBUILD_AFLAGS += $(CLANG_FLAGS)
|
2018-11-12 13:21:15 +09:00
|
|
|
export CLANG_FLAGS
|
2017-11-08 04:46:13 +09:00
|
|
|
endif
|
|
|
|
|
2019-08-11 00:53:03 +09:00
|
|
|
ifdef config-build
|
2005-04-17 07:20:36 +09:00
|
|
|
# ===========================================================================
|
|
|
|
# *config targets only - make sure prerequisites are updated, and descend
|
|
|
|
# in scripts/kconfig to make the *config target
|
|
|
|
|
|
|
|
# Read arch specific Makefile to set KBUILD_DEFCONFIG as needed.
|
|
|
|
# KBUILD_DEFCONFIG may point out an alternative default configuration
|
|
|
|
# used for 'make defconfig'
|
2015-03-27 20:43:36 +09:00
|
|
|
include arch/$(SRCARCH)/Makefile
|
kbuild: fix endless syncconfig in case arch Makefile sets CROSS_COMPILE
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 <geert@linux-m68k.org>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Tested-by: Geert Uytterhoeven <geert@linux-m68k.org>
2018-06-08 09:21:43 +09:00
|
|
|
export KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-08-22 13:46:13 +09:00
|
|
|
config: outputmakefile scripts_basic FORCE
|
2008-12-14 07:00:45 +09:00
|
|
|
$(Q)$(MAKE) $(build)=scripts/kconfig $@
|
|
|
|
|
2019-08-22 13:46:13 +09:00
|
|
|
%config: outputmakefile scripts_basic FORCE
|
2005-04-17 07:20:36 +09:00
|
|
|
$(Q)$(MAKE) $(build)=scripts/kconfig $@
|
|
|
|
|
2019-08-11 00:53:03 +09:00
|
|
|
else #!config-build
|
2005-04-17 07:20:36 +09:00
|
|
|
# ===========================================================================
|
|
|
|
# Build targets only - this includes vmlinux, arch specific targets, clean
|
|
|
|
# targets and others. In general all targets except *config targets.
|
|
|
|
|
2017-10-04 12:56:06 +09:00
|
|
|
# If building an external module we do not care about the all: rule
|
|
|
|
# but instead _all depend on modules
|
|
|
|
PHONY += all
|
|
|
|
ifeq ($(KBUILD_EXTMOD),)
|
|
|
|
_all: all
|
|
|
|
else
|
|
|
|
_all: modules
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Decide whether to build built-in, modular, or both.
|
|
|
|
# Normally, just do built-in.
|
|
|
|
|
|
|
|
KBUILD_MODULES :=
|
|
|
|
KBUILD_BUILTIN := 1
|
|
|
|
|
|
|
|
# If we have only "make modules", don't compile built-in objects.
|
|
|
|
ifeq ($(MAKECMDGOALS),modules)
|
2020-05-31 17:47:06 +09:00
|
|
|
KBUILD_BUILTIN :=
|
2017-10-04 12:56:06 +09:00
|
|
|
endif
|
|
|
|
|
|
|
|
# If we have "make <whatever> modules", compile modules
|
|
|
|
# in addition to whatever we do anyway.
|
|
|
|
# Just "make" or "make all" shall build modules as well
|
|
|
|
|
2019-10-03 16:58:24 +09:00
|
|
|
ifneq ($(filter all _all modules nsdeps,$(MAKECMDGOALS)),)
|
2017-10-04 12:56:06 +09:00
|
|
|
KBUILD_MODULES := 1
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(MAKECMDGOALS),)
|
|
|
|
KBUILD_MODULES := 1
|
|
|
|
endif
|
|
|
|
|
|
|
|
export KBUILD_MODULES KBUILD_BUILTIN
|
|
|
|
|
2019-08-11 00:53:03 +09:00
|
|
|
ifdef need-config
|
2019-04-27 12:33:36 +09:00
|
|
|
include include/config/auto.conf
|
|
|
|
endif
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
ifeq ($(KBUILD_EXTMOD),)
|
|
|
|
# Objects we will link into vmlinux / subdirs we need to visit
|
|
|
|
init-y := init/
|
2016-08-03 14:36:01 +09:00
|
|
|
drivers-y := drivers/ sound/ techpack/
|
2019-04-27 12:33:36 +09:00
|
|
|
drivers-$(CONFIG_SAMPLES) += samples/
|
2005-04-17 07:20:36 +09:00
|
|
|
net-y := net/
|
|
|
|
libs-y := lib/
|
|
|
|
core-y := usr/
|
2015-09-22 17:47:29 +09:00
|
|
|
virt-y := virt/
|
2005-04-17 07:20:36 +09:00
|
|
|
endif # KBUILD_EXTMOD
|
|
|
|
|
kbuild: fix endless syncconfig in case arch Makefile sets CROSS_COMPILE
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 <geert@linux-m68k.org>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Tested-by: Geert Uytterhoeven <geert@linux-m68k.org>
2018-06-08 09:21:43 +09:00
|
|
|
# The all: target is the default when no target is given on the
|
|
|
|
# command line.
|
|
|
|
# This allow a user to issue only 'make' to build a kernel including modules
|
|
|
|
# Defaults to vmlinux, but the arch makefile usually adds further targets
|
|
|
|
all: vmlinux
|
|
|
|
|
|
|
|
CFLAGS_GCOV := -fprofile-arcs -ftest-coverage \
|
|
|
|
$(call cc-option,-fno-tree-loop-im) \
|
|
|
|
$(call cc-disable-warning,maybe-uninitialized,)
|
2018-05-28 18:22:04 +09:00
|
|
|
export CFLAGS_GCOV
|
kbuild: fix endless syncconfig in case arch Makefile sets CROSS_COMPILE
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 <geert@linux-m68k.org>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Tested-by: Geert Uytterhoeven <geert@linux-m68k.org>
2018-06-08 09:21:43 +09:00
|
|
|
|
tracing/Makefile: Fix handling redefinition of CC_FLAGS_FTRACE
As a Kernel developer, I make heavy use of "make targz-pkg" in order
to locally compile and remotely install my development Kernels. The
nice feature I rely on is that after a normal "make", "make targz-pkg"
only generates the tarball without having to recompile everything.
That was true until commit f28bc3c32c05 ("tracing: Handle
CC_FLAGS_FTRACE more accurately"). After it, running "make targz-pkg"
after "make" will recompile the whole Kernel tree, making my
development workflow much slower.
The Kernel is choosing to recompile everything because it claims the
command line has changed. A diff of the .cmd files show a repeated
-mfentry in one of the files. That is because "make targz-pkg" calls
"make modules_install" and the environment is already populated with
the exported variables, CC_FLAGS_FTRACE being one of them. Then,
-mfentry gets duplicated because it is not protected behind an ifndef
block, like -pg.
To complicate the problem a little bit more, architectures can define
their own version CC_FLAGS_FTRACE, so our code not only has to
consider recursive Makefiles, but also architecture overrides.
So in this patch we move CC_FLAGS_FTRACE up and unconditionally
define it to -pg. Then we let the architecture Makefiles possibly
override it, and finally append the extra options later. This ensures
the variable is always fully redefined at each invocation so recursive
Makefiles don't keep appending, and hopefully it maintains the
intended behavior on how architectures can override the defaults..
Thanks Steven Rostedt and Vasily Gorbik for the help on this
regression.
Cc: Michal Marek <michal.lkml@markovi.net>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: linux-kbuild@vger.kernel.org
Fixes: commit f28bc3c32c05 ("tracing: Handle CC_FLAGS_FTRACE more accurately")
Acked-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
2018-09-11 02:59:56 +09:00
|
|
|
# The arch Makefiles can override CC_FLAGS_FTRACE. We may also append it later.
|
|
|
|
ifdef CONFIG_FUNCTION_TRACER
|
|
|
|
CC_FLAGS_FTRACE := -pg
|
|
|
|
endif
|
|
|
|
|
2019-03-26 15:11:12 +09:00
|
|
|
RETPOLINE_CFLAGS_GCC := -mindirect-branch=thunk-extern -mindirect-branch-register
|
|
|
|
RETPOLINE_VDSO_CFLAGS_GCC := -mindirect-branch=thunk-inline -mindirect-branch-register
|
|
|
|
RETPOLINE_CFLAGS_CLANG := -mretpoline-external-thunk
|
|
|
|
RETPOLINE_VDSO_CFLAGS_CLANG := -mretpoline
|
|
|
|
RETPOLINE_CFLAGS := $(call cc-option,$(RETPOLINE_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_CFLAGS_CLANG)))
|
|
|
|
RETPOLINE_VDSO_CFLAGS := $(call cc-option,$(RETPOLINE_VDSO_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_VDSO_CFLAGS_CLANG)))
|
|
|
|
export RETPOLINE_CFLAGS
|
|
|
|
export RETPOLINE_VDSO_CFLAGS
|
|
|
|
|
2017-11-29 01:48:49 +09:00
|
|
|
# Make toolchain changes before including arch/$(SRCARCH)/Makefile to ensure
|
|
|
|
# ar/cc/ld-* macros return correct values.
|
|
|
|
ifdef CONFIG_LTO_CLANG
|
|
|
|
# LTO produces LLVM IR instead of object files. Use llvm-ar and llvm-nm, so we
|
|
|
|
# can process these.
|
|
|
|
AR := llvm-ar
|
|
|
|
LLVM_NM := llvm-nm
|
|
|
|
export LLVM_NM
|
|
|
|
endif
|
|
|
|
|
kbuild: fix endless syncconfig in case arch Makefile sets CROSS_COMPILE
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 <geert@linux-m68k.org>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Tested-by: Geert Uytterhoeven <geert@linux-m68k.org>
2018-06-08 09:21:43 +09:00
|
|
|
include arch/$(SRCARCH)/Makefile
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-08-11 00:53:03 +09:00
|
|
|
ifdef need-config
|
|
|
|
ifdef may-sync-config
|
kbuild: fix endless syncconfig in case arch Makefile sets CROSS_COMPILE
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 <geert@linux-m68k.org>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Tested-by: Geert Uytterhoeven <geert@linux-m68k.org>
2018-06-08 09:21:43 +09:00
|
|
|
# Read in dependencies to all Kconfig* files, make sure to run syncconfig if
|
|
|
|
# changes are detected. This should be included after arch/$(SRCARCH)/Makefile
|
|
|
|
# because some architectures define CROSS_COMPILE there.
|
kbuild: turn auto.conf.cmd into a mandatory include file
syncconfig is responsible for keeping auto.conf up-to-date, so if it
fails for any reason, the build must be terminated immediately.
However, since commit 9390dff66a52 ("kbuild: invoke syncconfig if
include/config/auto.conf.cmd is missing"), Kbuild continues running
even after syncconfig fails.
You can confirm this by intentionally making syncconfig error out:
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 08ba146..307b9de 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -1023,6 +1023,9 @@ int conf_write_autoconf(int overwrite)
FILE *out, *tristate, *out_h;
int i;
+ if (overwrite)
+ return 1;
+
if (!overwrite && is_present(autoconf_name))
return 0;
Then, syncconfig fails, but Make would not stop:
$ make -s mrproper allyesconfig defconfig
$ make
scripts/kconfig/conf --syncconfig Kconfig
*** Error during sync of the configuration.
make[2]: *** [scripts/kconfig/Makefile;69: syncconfig] Error 1
make[1]: *** [Makefile;557: syncconfig] Error 2
make: *** [include/config/auto.conf.cmd] Deleting file 'include/config/tristate.conf'
make: Failed to remake makefile 'include/config/auto.conf'.
SYSTBL arch/x86/include/generated/asm/syscalls_32.h
SYSHDR arch/x86/include/generated/asm/unistd_32_ia32.h
SYSHDR arch/x86/include/generated/asm/unistd_64_x32.h
SYSTBL arch/x86/include/generated/asm/syscalls_64.h
[ continue running ... ]
The reason is in the behavior of a pattern rule with multi-targets.
%/auto.conf %/auto.conf.cmd %/tristate.conf: $(KCONFIG_CONFIG)
$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
GNU Make knows this rule is responsible for making all the three files
simultaneously. As far as examined, auto.conf.cmd is the target in
question when this rule is invoked. It is probably because auto.conf.cmd
is included below the inclusion of auto.conf.
The inclusion of auto.conf is mandatory, while that of auto.conf.cmd
is optional. GNU Make does not care about the failure in the process
of updating optional include files.
I filed this issue (https://savannah.gnu.org/bugs/?56301) in case this
behavior could be improved somehow in future releases of GNU Make.
Anyway, it is quite easy to fix our Makefile.
Given that auto.conf is already a mandatory include file, there is no
reason to stick auto.conf.cmd optional. Make it mandatory as well.
Cc: linux-stable <stable@vger.kernel.org> # 5.0+
Fixes: 9390dff66a52 ("kbuild: invoke syncconfig if include/config/auto.conf.cmd is missing")
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-05-12 11:13:48 +09:00
|
|
|
include include/config/auto.conf.cmd
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-02-22 16:40:11 +09:00
|
|
|
$(KCONFIG_CONFIG):
|
|
|
|
@echo >&2 '***'
|
|
|
|
@echo >&2 '*** Configuration file "$@" not found!'
|
|
|
|
@echo >&2 '***'
|
|
|
|
@echo >&2 '*** Please run some configurator (e.g. "make oldconfig" or'
|
|
|
|
@echo >&2 '*** "make menuconfig" or "make xconfig").'
|
|
|
|
@echo >&2 '***'
|
|
|
|
@/bin/false
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2018-02-13 16:58:20 +09:00
|
|
|
# The actual configuration files used during the build are stored in
|
|
|
|
# include/generated/ and include/config/. Update them if .config is newer than
|
|
|
|
# include/config/auto.conf (which mirrors .config).
|
2019-02-22 16:40:10 +09:00
|
|
|
#
|
|
|
|
# This exploits the 'multi-target pattern rule' trick.
|
|
|
|
# The syncconfig should be executed only once to make all the targets.
|
|
|
|
%/auto.conf %/auto.conf.cmd %/tristate.conf: $(KCONFIG_CONFIG)
|
2018-03-01 15:34:37 +09:00
|
|
|
$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
|
2019-08-11 00:53:03 +09:00
|
|
|
else # !may-sync-config
|
kbuild: do not update config when running install targets
"make syncconfig" is automatically invoked when any of the following
happens:
- .config is updated
- any of Kconfig files is updated
- any of environment variables referenced in Kconfig is changed
Then, it updates configuration files such as include/config/auto.conf
include/generated/autoconf.h, etc.
Even install targets (install, modules_install, etc.) are no exception.
However, they should never ever modify the source tree. Install
targets are often run with root privileges. Once those configuration
files are owned by root, "make mrproper" would end up with permission
error.
Install targets should just copy things blindly. They should not care
whether the configuration is up-to-date or not. This makes more sense
because we are interested in the configuration that was used in the
previous kernel building.
This issue has existed since before, but rarely happened. I expect
more chance where people are hit by this; with the new Kconfig syntax
extension, the .config now contains the compiler information. If you
cross-compile the kernel with CROSS_COMPILE, but forget to pass it
for "make install", you meet "any of environment variables referenced
in Kconfig is changed" because $(CC) is referenced in Kconfig.
Another scenario is the compiler upgrade before the installation.
Install targets need the configuration. "make modules_install" refer
to CONFIG_MODULES etc. "make dtbs_install" also needs CONFIG_ARCH_*
to decide which dtb files to install. However, the auto-update of
the configuration files should be avoided. We already do this for
external modules.
Now, Make targets are categorized into 3 groups:
[1] Do not need the kernel configuration at all
help, coccicheck, headers_install etc.
[2] Need the latest kernel configuration
If new config options are added, Kconfig will show prompt to
ask user's selection.
Build targets such as vmlinux, in-kernel modules are the cases.
[3] Need the kernel configuration, but do not want to update it
Install targets except headers_install, and external modules
are the cases.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2018-07-20 16:46:34 +09:00
|
|
|
# External modules and some install targets need include/generated/autoconf.h
|
|
|
|
# and include/config/auto.conf but do not care if they are up-to-date.
|
|
|
|
# Use auto.conf to trigger the test
|
2006-08-08 04:01:36 +09:00
|
|
|
PHONY += include/config/auto.conf
|
|
|
|
|
|
|
|
include/config/auto.conf:
|
2009-10-18 07:49:24 +09:00
|
|
|
$(Q)test -e include/generated/autoconf.h -a -e $@ || ( \
|
2012-07-08 06:04:40 +09:00
|
|
|
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 ; \
|
2006-08-08 04:01:36 +09:00
|
|
|
/bin/false)
|
|
|
|
|
kbuild: do not update config when running install targets
"make syncconfig" is automatically invoked when any of the following
happens:
- .config is updated
- any of Kconfig files is updated
- any of environment variables referenced in Kconfig is changed
Then, it updates configuration files such as include/config/auto.conf
include/generated/autoconf.h, etc.
Even install targets (install, modules_install, etc.) are no exception.
However, they should never ever modify the source tree. Install
targets are often run with root privileges. Once those configuration
files are owned by root, "make mrproper" would end up with permission
error.
Install targets should just copy things blindly. They should not care
whether the configuration is up-to-date or not. This makes more sense
because we are interested in the configuration that was used in the
previous kernel building.
This issue has existed since before, but rarely happened. I expect
more chance where people are hit by this; with the new Kconfig syntax
extension, the .config now contains the compiler information. If you
cross-compile the kernel with CROSS_COMPILE, but forget to pass it
for "make install", you meet "any of environment variables referenced
in Kconfig is changed" because $(CC) is referenced in Kconfig.
Another scenario is the compiler upgrade before the installation.
Install targets need the configuration. "make modules_install" refer
to CONFIG_MODULES etc. "make dtbs_install" also needs CONFIG_ARCH_*
to decide which dtb files to install. However, the auto-update of
the configuration files should be avoided. We already do this for
external modules.
Now, Make targets are categorized into 3 groups:
[1] Do not need the kernel configuration at all
help, coccicheck, headers_install etc.
[2] Need the latest kernel configuration
If new config options are added, Kconfig will show prompt to
ask user's selection.
Build targets such as vmlinux, in-kernel modules are the cases.
[3] Need the kernel configuration, but do not want to update it
Install targets except headers_install, and external modules
are the cases.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2018-07-20 16:46:34 +09:00
|
|
|
endif # may-sync-config
|
2019-08-11 00:53:03 +09:00
|
|
|
endif # need-config
|
2005-04-17 07:20:36 +09:00
|
|
|
|
Makefile: Fix unrecognized cross-compiler command line options
On architectures that setup CROSS_COMPILE in their arch/*/Makefile
(arc, blackfin, m68k, mips, parisc, score, sh, tile, unicore32, xtensa),
cc-option and cc-disable-warning may check against the wrong compiler,
causing errors like
cc1: error: unrecognized command line option "-Wno-maybe-uninitialized"
if the host gcc supports a compiler option, while the cross compiler
doesn't support that option.
Move all logic using cc-option or cc-disable-warning below the inclusion
of the arch's Makefile to fix this.
Introduced by
- commit e74fc973b6e531fef1fce8b101ffff05ecfb774c ("Turn off
-Wmaybe-uninitialized when building with -Os"),
- commit 61163efae02040f66a95c8ed17f4407951ba58fa ("kbuild: LLVMLinux:
Add Kbuild support for building kernel with Clang").
As -Wno-maybe-uninitialized requires a quite recent gcc (gcc 4.6.3 on
Ubuntu 12.04 LTS doesn't support it), this only showed up recently (gcc
4.8.2 on Ubuntu 14.04 LTS does support it).
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Michal Marek <mmarek@suse.cz>
2014-05-27 16:54:12 +09:00
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,)
|
2016-10-13 02:23:41 +09:00
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning,frame-address,)
|
2017-07-13 11:25:47 +09:00
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, format-truncation)
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, format-overflow)
|
2019-05-02 03:05:41 +09:00
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
Makefile: Fix unrecognized cross-compiler command line options
On architectures that setup CROSS_COMPILE in their arch/*/Makefile
(arc, blackfin, m68k, mips, parisc, score, sh, tile, unicore32, xtensa),
cc-option and cc-disable-warning may check against the wrong compiler,
causing errors like
cc1: error: unrecognized command line option "-Wno-maybe-uninitialized"
if the host gcc supports a compiler option, while the cross compiler
doesn't support that option.
Move all logic using cc-option or cc-disable-warning below the inclusion
of the arch's Makefile to fix this.
Introduced by
- commit e74fc973b6e531fef1fce8b101ffff05ecfb774c ("Turn off
-Wmaybe-uninitialized when building with -Os"),
- commit 61163efae02040f66a95c8ed17f4407951ba58fa ("kbuild: LLVMLinux:
Add Kbuild support for building kernel with Clang").
As -Wno-maybe-uninitialized requires a quite recent gcc (gcc 4.6.3 on
Ubuntu 12.04 LTS doesn't support it), this only showed up recently (gcc
4.8.2 on Ubuntu 14.04 LTS does support it).
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Michal Marek <mmarek@suse.cz>
2014-05-27 16:54:12 +09:00
|
|
|
|
2019-08-21 02:09:40 +09:00
|
|
|
ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
|
|
|
|
KBUILD_CFLAGS += -O2
|
|
|
|
else ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3
|
|
|
|
KBUILD_CFLAGS += -O3
|
|
|
|
else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
|
|
|
KBUILD_CFLAGS += -Os
|
2016-04-26 00:35:28 +09:00
|
|
|
endif
|
2005-04-17 07:20:36 +09:00
|
|
|
|
./Makefile: tell gcc optimizer to never introduce new data races
We have been chasing a memory corruption bug, which turned out to be
caused by very old gcc (4.3.4), which happily turned conditional load
into a non-conditional one, and that broke correctness (the condition
was met only if lock was held) and corrupted memory.
This particular problem with that particular code did not happen when
never gccs were used. I've brought this up with our gcc folks, as I
wanted to make sure that this can't really happen again, and it turns
out it actually can.
Quoting Martin Jambor <mjambor@suse.cz>:
"More current GCCs are more careful when it comes to replacing a
conditional load with a non-conditional one, most notably they check
that a store happens in each iteration of _a_ loop but they assume
loops are executed. They also perform a simple check whether the
store cannot trap which currently passes only for non-const
variables. A simple testcase demonstrating it on an x86_64 is for
example the following:
$ cat cond_store.c
int g_1 = 1;
int g_2[1024] __attribute__((section ("safe_section"), aligned (4096)));
int c = 4;
int __attribute__ ((noinline))
foo (void)
{
int l;
for (l = 0; (l != 4); l++) {
if (g_1)
return l;
for (g_2[0] = 0; (g_2[0] >= 26); ++g_2[0])
;
}
return 2;
}
int main (int argc, char* argv[])
{
if (mprotect (g_2, sizeof(g_2), PROT_READ) == -1)
{
int e = errno;
error (e, e, "mprotect error %i", e);
}
foo ();
__builtin_printf("OK\n");
return 0;
}
/* EOF */
$ ~/gcc/trunk/inst/bin/gcc cond_store.c -O2 --param allow-store-data-races=0
$ ./a.out
OK
$ ~/gcc/trunk/inst/bin/gcc cond_store.c -O2 --param allow-store-data-races=1
$ ./a.out
Segmentation fault
The testcase fails the same at least with 4.9, 4.8 and 4.7. Therefore
I would suggest building kernels with this parameter set to zero. I
also agree with Jikos that the default should be changed for -O2. I
have run most of the SPEC 2k6 CPU benchmarks (gamess and dealII
failed, at -O2, not sure why) compiled with and without this option
and did not see any real difference between respective run-times"
Hopefully the default will be changed in newer gccs, but let's force it
for kernel builds so that we are on a safe side even when older gcc are
used.
The code in question was out-of-tree printk-in-NMI (yeah, surprise
suprise, once again) patch written by Petr Mladek, let me quote his
comment from our internal bugzilla:
"I have spent few days investigating inconsistent state of kernel ring buffer.
It went out that it was caused by speculative store generated by
gcc-4.3.4.
The problem is in assembly generated for make_free_space(). The functions is
called the following way:
+ vprintk_emit();
+ log = MAIN_LOG; // with logbuf_lock
or
log = NMI_LOG; // with nmi_logbuf_lock
cont_add(log, ...);
+ cont_flush(log, ...);
+ log_store(log, ...);
+ log_make_free_space(log, ...);
If called with log = NMI_LOG then only nmi_log_* global variables are safe to
modify but the generated code does store also into (main_)log_* global
variables:
<log_make_free_space>:
55 push %rbp
89 f6 mov %esi,%esi
48 8b 05 03 99 51 01 mov 0x1519903(%rip),%rax # ffffffff82620868 <nmi_log_next_id>
44 8b 1d ec 98 51 01 mov 0x15198ec(%rip),%r11d # ffffffff82620858 <log_next_idx>
8b 35 36 60 14 01 mov 0x1146036(%rip),%esi # ffffffff8224cfa8 <log_buf_len>
44 8b 35 33 60 14 01 mov 0x1146033(%rip),%r14d # ffffffff8224cfac <nmi_log_buf_len>
4c 8b 2d d0 98 51 01 mov 0x15198d0(%rip),%r13 # ffffffff82620850 <log_next_seq>
4c 8b 25 11 61 14 01 mov 0x1146111(%rip),%r12 # ffffffff8224d098 <log_buf>
49 89 c2 mov %rax,%r10
48 21 c2 and %rax,%rdx
48 8b 1d 0c 99 55 01 mov 0x155990c(%rip),%rbx # ffffffff826608a0 <nmi_log_buf>
49 c1 ea 20 shr $0x20,%r10
48 89 55 d0 mov %rdx,-0x30(%rbp)
44 29 de sub %r11d,%esi
45 29 d6 sub %r10d,%r14d
4c 8b 0d 97 98 51 01 mov 0x1519897(%rip),%r9 # ffffffff82620840 <log_first_seq>
eb 7e jmp ffffffff81107029 <log_make_free_space+0xe9>
[...]
85 ff test %edi,%edi # edi = 1 for NMI_LOG
4c 89 e8 mov %r13,%rax
4c 89 ca mov %r9,%rdx
74 0a je ffffffff8110703d <log_make_free_space+0xfd>
8b 15 27 98 51 01 mov 0x1519827(%rip),%edx # ffffffff82620860 <nmi_log_first_id>
48 8b 45 d0 mov -0x30(%rbp),%rax
48 39 c2 cmp %rax,%rdx # end of loop
0f 84 da 00 00 00 je ffffffff81107120 <log_make_free_space+0x1e0>
[...]
85 ff test %edi,%edi # edi = 1 for NMI_LOG
4c 89 0d 17 97 51 01 mov %r9,0x1519717(%rip) # ffffffff82620840 <log_first_seq>
^^^^^^^^^^^^^^^^^^^^^^^^^^
KABOOOM
74 35 je ffffffff81107160 <log_make_free_space+0x220>
It stores log_first_seq when edi == NMI_LOG. This instructions are used also
when edi == MAIN_LOG but the store is done speculatively before the condition
is decided. It is unsafe because we do not have "logbuf_lock" in NMI context
and some other process migh modify "log_first_seq" in parallel"
I believe that the best course of action is both
- building kernel (and anything multi-threaded, I guess) with that
optimization turned off
- persuade gcc folks to change the default for future releases
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Cc: Martin Jambor <mjambor@suse.cz>
Cc: Petr Mladek <pmladek@suse.cz>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Marek Polacek <polacek@redhat.com>
Cc: Jakub Jelinek <jakub@redhat.com>
Cc: Steven Noonan <steven@uplinklabs.net>
Cc: Richard Biener <richard.guenther@gmail.com>
Cc: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2014-08-07 08:08:43 +09:00
|
|
|
# Tell gcc to never replace conditional load with a non-conditional one
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
|
2020-03-17 09:07:18 +09:00
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-allow-store-data-races)
|
./Makefile: tell gcc optimizer to never introduce new data races
We have been chasing a memory corruption bug, which turned out to be
caused by very old gcc (4.3.4), which happily turned conditional load
into a non-conditional one, and that broke correctness (the condition
was met only if lock was held) and corrupted memory.
This particular problem with that particular code did not happen when
never gccs were used. I've brought this up with our gcc folks, as I
wanted to make sure that this can't really happen again, and it turns
out it actually can.
Quoting Martin Jambor <mjambor@suse.cz>:
"More current GCCs are more careful when it comes to replacing a
conditional load with a non-conditional one, most notably they check
that a store happens in each iteration of _a_ loop but they assume
loops are executed. They also perform a simple check whether the
store cannot trap which currently passes only for non-const
variables. A simple testcase demonstrating it on an x86_64 is for
example the following:
$ cat cond_store.c
int g_1 = 1;
int g_2[1024] __attribute__((section ("safe_section"), aligned (4096)));
int c = 4;
int __attribute__ ((noinline))
foo (void)
{
int l;
for (l = 0; (l != 4); l++) {
if (g_1)
return l;
for (g_2[0] = 0; (g_2[0] >= 26); ++g_2[0])
;
}
return 2;
}
int main (int argc, char* argv[])
{
if (mprotect (g_2, sizeof(g_2), PROT_READ) == -1)
{
int e = errno;
error (e, e, "mprotect error %i", e);
}
foo ();
__builtin_printf("OK\n");
return 0;
}
/* EOF */
$ ~/gcc/trunk/inst/bin/gcc cond_store.c -O2 --param allow-store-data-races=0
$ ./a.out
OK
$ ~/gcc/trunk/inst/bin/gcc cond_store.c -O2 --param allow-store-data-races=1
$ ./a.out
Segmentation fault
The testcase fails the same at least with 4.9, 4.8 and 4.7. Therefore
I would suggest building kernels with this parameter set to zero. I
also agree with Jikos that the default should be changed for -O2. I
have run most of the SPEC 2k6 CPU benchmarks (gamess and dealII
failed, at -O2, not sure why) compiled with and without this option
and did not see any real difference between respective run-times"
Hopefully the default will be changed in newer gccs, but let's force it
for kernel builds so that we are on a safe side even when older gcc are
used.
The code in question was out-of-tree printk-in-NMI (yeah, surprise
suprise, once again) patch written by Petr Mladek, let me quote his
comment from our internal bugzilla:
"I have spent few days investigating inconsistent state of kernel ring buffer.
It went out that it was caused by speculative store generated by
gcc-4.3.4.
The problem is in assembly generated for make_free_space(). The functions is
called the following way:
+ vprintk_emit();
+ log = MAIN_LOG; // with logbuf_lock
or
log = NMI_LOG; // with nmi_logbuf_lock
cont_add(log, ...);
+ cont_flush(log, ...);
+ log_store(log, ...);
+ log_make_free_space(log, ...);
If called with log = NMI_LOG then only nmi_log_* global variables are safe to
modify but the generated code does store also into (main_)log_* global
variables:
<log_make_free_space>:
55 push %rbp
89 f6 mov %esi,%esi
48 8b 05 03 99 51 01 mov 0x1519903(%rip),%rax # ffffffff82620868 <nmi_log_next_id>
44 8b 1d ec 98 51 01 mov 0x15198ec(%rip),%r11d # ffffffff82620858 <log_next_idx>
8b 35 36 60 14 01 mov 0x1146036(%rip),%esi # ffffffff8224cfa8 <log_buf_len>
44 8b 35 33 60 14 01 mov 0x1146033(%rip),%r14d # ffffffff8224cfac <nmi_log_buf_len>
4c 8b 2d d0 98 51 01 mov 0x15198d0(%rip),%r13 # ffffffff82620850 <log_next_seq>
4c 8b 25 11 61 14 01 mov 0x1146111(%rip),%r12 # ffffffff8224d098 <log_buf>
49 89 c2 mov %rax,%r10
48 21 c2 and %rax,%rdx
48 8b 1d 0c 99 55 01 mov 0x155990c(%rip),%rbx # ffffffff826608a0 <nmi_log_buf>
49 c1 ea 20 shr $0x20,%r10
48 89 55 d0 mov %rdx,-0x30(%rbp)
44 29 de sub %r11d,%esi
45 29 d6 sub %r10d,%r14d
4c 8b 0d 97 98 51 01 mov 0x1519897(%rip),%r9 # ffffffff82620840 <log_first_seq>
eb 7e jmp ffffffff81107029 <log_make_free_space+0xe9>
[...]
85 ff test %edi,%edi # edi = 1 for NMI_LOG
4c 89 e8 mov %r13,%rax
4c 89 ca mov %r9,%rdx
74 0a je ffffffff8110703d <log_make_free_space+0xfd>
8b 15 27 98 51 01 mov 0x1519827(%rip),%edx # ffffffff82620860 <nmi_log_first_id>
48 8b 45 d0 mov -0x30(%rbp),%rax
48 39 c2 cmp %rax,%rdx # end of loop
0f 84 da 00 00 00 je ffffffff81107120 <log_make_free_space+0x1e0>
[...]
85 ff test %edi,%edi # edi = 1 for NMI_LOG
4c 89 0d 17 97 51 01 mov %r9,0x1519717(%rip) # ffffffff82620840 <log_first_seq>
^^^^^^^^^^^^^^^^^^^^^^^^^^
KABOOOM
74 35 je ffffffff81107160 <log_make_free_space+0x220>
It stores log_first_seq when edi == NMI_LOG. This instructions are used also
when edi == MAIN_LOG but the store is done speculatively before the condition
is decided. It is unsafe because we do not have "logbuf_lock" in NMI context
and some other process migh modify "log_first_seq" in parallel"
I believe that the best course of action is both
- building kernel (and anything multi-threaded, I guess) with that
optimization turned off
- persuade gcc folks to change the default for future releases
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Cc: Martin Jambor <mjambor@suse.cz>
Cc: Petr Mladek <pmladek@suse.cz>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Marek Polacek <polacek@redhat.com>
Cc: Jakub Jelinek <jakub@redhat.com>
Cc: Steven Noonan <steven@uplinklabs.net>
Cc: Richard Biener <richard.guenther@gmail.com>
Cc: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2014-08-07 08:08:43 +09:00
|
|
|
|
2017-11-18 08:30:50 +09:00
|
|
|
include scripts/Makefile.kcov
|
2016-05-24 07:09:38 +09:00
|
|
|
include scripts/Makefile.gcc-plugins
|
|
|
|
|
2012-03-29 03:51:18 +09:00
|
|
|
ifdef CONFIG_READABLE_ASM
|
|
|
|
# Disable optimizations that make assembler listings hard to read.
|
|
|
|
# reorder blocks reorders the control in the function
|
|
|
|
# ipa clone creates specialized cloned functions
|
|
|
|
# partial inlining inlines only parts of functions
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-reorder-blocks,) \
|
|
|
|
$(call cc-option,-fno-ipa-cp-clone,) \
|
|
|
|
$(call cc-option,-fno-partial-inlining)
|
|
|
|
endif
|
|
|
|
|
2009-06-05 08:29:08 +09:00
|
|
|
ifneq ($(CONFIG_FRAME_WARN),0)
|
2008-02-22 23:15:03 +09:00
|
|
|
KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN})
|
|
|
|
endif
|
|
|
|
|
stack-protector: test compiler capability in Kconfig and drop AUTO mode
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 <yamada.masahiro@socionext.com>
Acked-by: Kees Cook <keescook@chromium.org>
2018-05-28 18:22:00 +09:00
|
|
|
stackp-flags-$(CONFIG_CC_HAS_STACKPROTECTOR_NONE) := -fno-stack-protector
|
Kbuild: rename CC_STACKPROTECTOR[_STRONG] config variables
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 <yamada.masahiro@socionext.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2018-06-14 12:21:18 +09:00
|
|
|
stackp-flags-$(CONFIG_STACKPROTECTOR) := -fstack-protector
|
|
|
|
stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG) := -fstack-protector-strong
|
stack-protector: test compiler capability in Kconfig and drop AUTO mode
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 <yamada.masahiro@socionext.com>
Acked-by: Kees Cook <keescook@chromium.org>
2018-05-28 18:22:00 +09:00
|
|
|
|
|
|
|
KBUILD_CFLAGS += $(stackp-flags-y)
|
2008-02-14 06:43:28 +09:00
|
|
|
|
2018-10-30 22:26:33 +09:00
|
|
|
ifdef CONFIG_CC_IS_CLANG
|
2019-05-10 23:10:09 +09:00
|
|
|
KBUILD_CPPFLAGS += -Qunused-arguments
|
|
|
|
KBUILD_CFLAGS += -Wno-format-invalid-specifier
|
|
|
|
KBUILD_CFLAGS += -Wno-gnu
|
2017-11-27 21:15:13 +09:00
|
|
|
# Quiet clang warning: comparison of unsigned expression < 0 is always false
|
2019-05-10 23:10:09 +09:00
|
|
|
KBUILD_CFLAGS += -Wno-tautological-compare
|
2017-11-27 21:15:13 +09:00
|
|
|
# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the
|
|
|
|
# source of a reference will be _MergedGlobals and not on of the whitelisted names.
|
|
|
|
# See modpost pattern 2
|
2019-05-10 23:10:09 +09:00
|
|
|
KBUILD_CFLAGS += -mno-global-merge
|
2019-03-19 01:43:13 +09:00
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, undefined-optimized)
|
|
|
|
KBUILD_CFLAGS += -fno-builtin
|
2017-11-27 21:15:13 +09:00
|
|
|
else
|
|
|
|
|
2019-08-27 09:41:55 +09:00
|
|
|
# Warn about unmarked fall-throughs in switch statement.
|
|
|
|
# Disabled for clang while comment to attribute conversion happens and
|
|
|
|
# https://github.com/ClangBuiltLinux/linux/issues/636 is discussed.
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-Wimplicit-fallthrough,)
|
2017-11-27 21:15:13 +09:00
|
|
|
endif
|
|
|
|
|
2021-04-29 10:23:50 +09:00
|
|
|
# These warnings generated too much noise in a regular build.
|
|
|
|
# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
|
|
|
|
|
2018-02-07 08:46:51 +09:00
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
|
gcc-12: disable '-Wdangling-pointer' warning for now
commit f7d63b50898172b9eb061b9e2daad61b428792d0 upstream.
[ Upstream commit 49beadbd47c270a00754c107a837b4f29df4c822 ]
While the concept of checking for dangling pointers to local variables
at function exit is really interesting, the gcc-12 implementation is not
compatible with reality, and results in false positives.
For example, gcc sees us putting things on a local list head allocated
on the stack, which involves exactly those kinds of pointers to the
local stack entry:
In function ‘__list_add’,
inlined from ‘list_add_tail’ at include/linux/list.h:102:2,
inlined from ‘rebuild_snap_realms’ at fs/ceph/snap.c:434:2:
include/linux/list.h:74:19: warning: storing the address of local variable ‘realm_queue’ in ‘*&realm_27(D)->rebuild_item.prev’ [-Wdangling-pointer=]
74 | new->prev = prev;
| ~~~~~~~~~~^~~~~~
But then gcc - understandably - doesn't really understand the big
picture how the doubly linked list works, so doesn't see how we then end
up emptying said list head in a loop and the pointer we added has been
removed.
Gcc also complains about us (intentionally) using this as a way to store
a kind of fake stack trace, eg
drivers/acpi/acpica/utdebug.c:40:38: warning: storing the address of local variable ‘current_sp’ in ‘acpi_gbl_entry_stack_pointer’ [-Wdangling-pointer=]
40 | acpi_gbl_entry_stack_pointer = ¤t_sp;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
which is entirely reasonable from a compiler standpoint, and we may want
to change those kinds of patterns, but not not.
So this is one of those "it would be lovely if the compiler were to
complain about us leaving dangling pointers to the stack", but not this
way.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-06-10 01:41:42 +09:00
|
|
|
|
|
|
|
# These result in bogus false positives
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, dangling-pointer)
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
ifdef CONFIG_FRAME_POINTER
|
2007-10-15 05:21:35 +09:00
|
|
|
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
2005-04-17 07:20:36 +09:00
|
|
|
else
|
2010-08-11 03:20:53 +09:00
|
|
|
# Some targets (ARM with Thumb2, for example), can't be built with frame
|
|
|
|
# pointers. For those, we don't have FUNCTION_TRACER automatically
|
|
|
|
# select FRAME_POINTER. However, FUNCTION_TRACER adds -pg, and this is
|
|
|
|
# incompatible with -fomit-frame-pointer with current GCC, so we don't use
|
|
|
|
# -fomit-frame-pointer with FUNCTION_TRACER.
|
|
|
|
ifndef CONFIG_FUNCTION_TRACER
|
2007-10-15 05:21:35 +09:00
|
|
|
KBUILD_CFLAGS += -fomit-frame-pointer
|
2005-04-17 07:20:36 +09:00
|
|
|
endif
|
2010-08-11 03:20:53 +09:00
|
|
|
endif
|
2005-04-17 07:20:36 +09:00
|
|
|
|
UPSTREAM: security: allow using Clang's zero initialization for stack variables
Upstream commit f0fe00d4972a8cd4b98cc2c29758615e4d51cdfe.
In addition to -ftrivial-auto-var-init=pattern (used by
CONFIG_INIT_STACK_ALL now) Clang also supports zero initialization for
locals enabled by -ftrivial-auto-var-init=zero. The future of this flag
is still being debated (see https://bugs.llvm.org/show_bug.cgi?id=45497).
Right now it is guarded by another flag,
-enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang,
which means it may not be supported by future Clang releases. Another
possible resolution is that -ftrivial-auto-var-init=zero will persist
(as certain users have already started depending on it), but the name
of the guard flag will change.
In the meantime, zero initialization has proven itself as a good
production mitigation measure against uninitialized locals. Unlike pattern
initialization, which has a higher chance of triggering existing bugs,
zero initialization provides safe defaults for strings, pointers, indexes,
and sizes. On the other hand, pattern initialization remains safer for
return values. Chrome OS and Android are moving to using zero
initialization for production builds.
Performance-wise, the difference between pattern and zero initialization
is usually negligible, although the generated code for zero
initialization is more compact.
This patch renames CONFIG_INIT_STACK_ALL to CONFIG_INIT_STACK_ALL_PATTERN
and introduces another config option, CONFIG_INIT_STACK_ALL_ZERO, that
enables zero initialization for locals if the corresponding flags are
supported by Clang.
Cc: Kees Cook <keescook@chromium.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Alexander Potapenko <glider@google.com>
Link: https://lore.kernel.org/r/20200616083435.223038-1-glider@google.com
Reviewed-by: Maciej Żenczykowski <maze@google.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Change-Id: I3c69570e7e3d3bbb666709de6feb531000bce2bf
2020-06-16 17:34:35 +09:00
|
|
|
# Initialize all stack variables with a 0xAA pattern.
|
|
|
|
ifdef CONFIG_INIT_STACK_ALL_PATTERN
|
2019-04-11 00:48:31 +09:00
|
|
|
KBUILD_CFLAGS += -ftrivial-auto-var-init=pattern
|
|
|
|
endif
|
|
|
|
|
UPSTREAM: security: allow using Clang's zero initialization for stack variables
Upstream commit f0fe00d4972a8cd4b98cc2c29758615e4d51cdfe.
In addition to -ftrivial-auto-var-init=pattern (used by
CONFIG_INIT_STACK_ALL now) Clang also supports zero initialization for
locals enabled by -ftrivial-auto-var-init=zero. The future of this flag
is still being debated (see https://bugs.llvm.org/show_bug.cgi?id=45497).
Right now it is guarded by another flag,
-enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang,
which means it may not be supported by future Clang releases. Another
possible resolution is that -ftrivial-auto-var-init=zero will persist
(as certain users have already started depending on it), but the name
of the guard flag will change.
In the meantime, zero initialization has proven itself as a good
production mitigation measure against uninitialized locals. Unlike pattern
initialization, which has a higher chance of triggering existing bugs,
zero initialization provides safe defaults for strings, pointers, indexes,
and sizes. On the other hand, pattern initialization remains safer for
return values. Chrome OS and Android are moving to using zero
initialization for production builds.
Performance-wise, the difference between pattern and zero initialization
is usually negligible, although the generated code for zero
initialization is more compact.
This patch renames CONFIG_INIT_STACK_ALL to CONFIG_INIT_STACK_ALL_PATTERN
and introduces another config option, CONFIG_INIT_STACK_ALL_ZERO, that
enables zero initialization for locals if the corresponding flags are
supported by Clang.
Cc: Kees Cook <keescook@chromium.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Alexander Potapenko <glider@google.com>
Link: https://lore.kernel.org/r/20200616083435.223038-1-glider@google.com
Reviewed-by: Maciej Żenczykowski <maze@google.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Change-Id: I3c69570e7e3d3bbb666709de6feb531000bce2bf
2020-06-16 17:34:35 +09:00
|
|
|
# Initialize all stack variables with a zero value.
|
|
|
|
ifdef CONFIG_INIT_STACK_ALL_ZERO
|
|
|
|
KBUILD_CFLAGS += -ftrivial-auto-var-init=zero
|
2022-09-30 14:57:43 +09:00
|
|
|
ifdef CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_ENABLER
|
|
|
|
# https://github.com/llvm/llvm-project/issues/44842
|
UPSTREAM: security: allow using Clang's zero initialization for stack variables
Upstream commit f0fe00d4972a8cd4b98cc2c29758615e4d51cdfe.
In addition to -ftrivial-auto-var-init=pattern (used by
CONFIG_INIT_STACK_ALL now) Clang also supports zero initialization for
locals enabled by -ftrivial-auto-var-init=zero. The future of this flag
is still being debated (see https://bugs.llvm.org/show_bug.cgi?id=45497).
Right now it is guarded by another flag,
-enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang,
which means it may not be supported by future Clang releases. Another
possible resolution is that -ftrivial-auto-var-init=zero will persist
(as certain users have already started depending on it), but the name
of the guard flag will change.
In the meantime, zero initialization has proven itself as a good
production mitigation measure against uninitialized locals. Unlike pattern
initialization, which has a higher chance of triggering existing bugs,
zero initialization provides safe defaults for strings, pointers, indexes,
and sizes. On the other hand, pattern initialization remains safer for
return values. Chrome OS and Android are moving to using zero
initialization for production builds.
Performance-wise, the difference between pattern and zero initialization
is usually negligible, although the generated code for zero
initialization is more compact.
This patch renames CONFIG_INIT_STACK_ALL to CONFIG_INIT_STACK_ALL_PATTERN
and introduces another config option, CONFIG_INIT_STACK_ALL_ZERO, that
enables zero initialization for locals if the corresponding flags are
supported by Clang.
Cc: Kees Cook <keescook@chromium.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Alexander Potapenko <glider@google.com>
Link: https://lore.kernel.org/r/20200616083435.223038-1-glider@google.com
Reviewed-by: Maciej Żenczykowski <maze@google.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Change-Id: I3c69570e7e3d3bbb666709de6feb531000bce2bf
2020-06-16 17:34:35 +09:00
|
|
|
KBUILD_CFLAGS += -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
|
|
|
|
endif
|
2021-09-15 04:49:03 +09:00
|
|
|
endif
|
UPSTREAM: security: allow using Clang's zero initialization for stack variables
Upstream commit f0fe00d4972a8cd4b98cc2c29758615e4d51cdfe.
In addition to -ftrivial-auto-var-init=pattern (used by
CONFIG_INIT_STACK_ALL now) Clang also supports zero initialization for
locals enabled by -ftrivial-auto-var-init=zero. The future of this flag
is still being debated (see https://bugs.llvm.org/show_bug.cgi?id=45497).
Right now it is guarded by another flag,
-enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang,
which means it may not be supported by future Clang releases. Another
possible resolution is that -ftrivial-auto-var-init=zero will persist
(as certain users have already started depending on it), but the name
of the guard flag will change.
In the meantime, zero initialization has proven itself as a good
production mitigation measure against uninitialized locals. Unlike pattern
initialization, which has a higher chance of triggering existing bugs,
zero initialization provides safe defaults for strings, pointers, indexes,
and sizes. On the other hand, pattern initialization remains safer for
return values. Chrome OS and Android are moving to using zero
initialization for production builds.
Performance-wise, the difference between pattern and zero initialization
is usually negligible, although the generated code for zero
initialization is more compact.
This patch renames CONFIG_INIT_STACK_ALL to CONFIG_INIT_STACK_ALL_PATTERN
and introduces another config option, CONFIG_INIT_STACK_ALL_ZERO, that
enables zero initialization for locals if the corresponding flags are
supported by Clang.
Cc: Kees Cook <keescook@chromium.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Alexander Potapenko <glider@google.com>
Link: https://lore.kernel.org/r/20200616083435.223038-1-glider@google.com
Reviewed-by: Maciej Żenczykowski <maze@google.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Change-Id: I3c69570e7e3d3bbb666709de6feb531000bce2bf
2020-06-16 17:34:35 +09:00
|
|
|
|
kbuild: Disable extra debugging info in .s output
Modern gcc adds view assignments, reset assertion checking in .loc
directives and a couple more additional debug markers, which clutters
the asm output unnecessarily:
For example:
bsp_resume:
.LFB3466:
.loc 1 1868 1 is_stmt 1 view -0
.cfi_startproc
.loc 1 1869 2 view .LVU73
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
.loc 1 1869 14 is_stmt 0 view .LVU74
movq this_cpu(%rip), %rax # this_cpu, this_cpu
movq 64(%rax), %rax # this_cpu.94_1->c_bsp_resume, _2
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
.loc 1 1869 5 view .LVU75
testq %rax, %rax # _2
je .L8 #,
.loc 1 1870 3 is_stmt 1 view .LVU76
movq $boot_cpu_data, %rdi #,
jmp __x86_indirect_thunk_rax
or
.loc 2 57 9 view .LVU478
.loc 2 57 9 view .LVU479
.loc 2 57 9 view .LVU480
.loc 2 57 9 view .LVU481
.LBB1385:
.LBB1383:
.LBB1379:
.LBB1377:
.LBB1375:
.loc 2 57 9 view .LVU482
.loc 2 57 9 view .LVU483
movl %edi, %edx # cpu, cpu
.LVL87:
.loc 2 57 9 is_stmt 0 view .LVU484
That MOV in there is drowned in debugging information and latter makes
it hard to follow the asm. And that DWARF info is not really needed for
asm output staring.
Disable the debug information generation which clutters the asm output
unnecessarily:
bsp_resume:
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
movq this_cpu(%rip), %rax # this_cpu, this_cpu
movq 64(%rax), %rax # this_cpu.94_1->c_bsp_resume, _2
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
testq %rax, %rax # _2
je .L8 #,
# arch/x86/kernel/cpu/common.c:1870: this_cpu->c_bsp_resume(&boot_cpu_data);
movq $boot_cpu_data, %rdi #,
jmp __x86_indirect_thunk_rax
.L8:
# arch/x86/kernel/cpu/common.c:1871: }
rep ret
.size bsp_resume, .-bsp_resume
[ bp: write commit message. ]
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
2019-02-10 15:51:00 +09:00
|
|
|
DEBUG_CFLAGS := $(call cc-option, -fno-var-tracking-assignments)
|
Fix gcc-4.9.0 miscompilation of load_balance() in scheduler
Michel Dänzer and a couple of other people reported inexplicable random
oopses in the scheduler, and the cause turns out to be gcc mis-compiling
the load_balance() function when debugging is enabled. The gcc bug
apparently goes back to gcc-4.5, but slight optimization changes means
that it now showed up as a problem in 4.9.0 and 4.9.1.
The instruction scheduling problem causes gcc to schedule a spill
operation to before the stack frame has been created, which in turn can
corrupt the spilled value if an interrupt comes in. There may be other
effects of this bug too, but that's the code generation problem seen in
Michel's case.
This is fixed in current gcc HEAD, but the workaround as suggested by
Markus Trippelsdorf is pretty simple: use -fno-var-tracking-assignments
when compiling the kernel, which disables the gcc code that causes the
problem. This can result in slightly worse debug information for
variable accesses, but that is infinitely preferable to actual code
generation problems.
Doing this unconditionally (not just for CONFIG_DEBUG_INFO) also allows
non-debug builds to verify that the debug build would be identical: we
can do
export GCC_COMPARE_DEBUG=1
to make gcc internally verify that the result of the build is
independent of the "-g" flag (it will make the compiler build everything
twice, toggling the debug flag, and compare the results).
Without the "-fno-var-tracking-assignments" option, the build would fail
(even with 4.8.3 that didn't show the actual stack frame bug) with a gcc
compare failure.
See also gcc bugzilla:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61801
Reported-by: Michel Dänzer <michel@daenzer.net>
Suggested-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Cc: Jakub Jelinek <jakub@redhat.com>
Cc: stable@kernel.org
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2014-07-27 06:52:01 +09:00
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
ifdef CONFIG_DEBUG_INFO
|
2014-07-31 03:50:18 +09:00
|
|
|
ifdef CONFIG_DEBUG_INFO_SPLIT
|
2019-02-22 16:56:09 +09:00
|
|
|
DEBUG_CFLAGS += -gsplit-dwarf
|
2014-07-31 03:50:18 +09:00
|
|
|
else
|
kbuild: Disable extra debugging info in .s output
Modern gcc adds view assignments, reset assertion checking in .loc
directives and a couple more additional debug markers, which clutters
the asm output unnecessarily:
For example:
bsp_resume:
.LFB3466:
.loc 1 1868 1 is_stmt 1 view -0
.cfi_startproc
.loc 1 1869 2 view .LVU73
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
.loc 1 1869 14 is_stmt 0 view .LVU74
movq this_cpu(%rip), %rax # this_cpu, this_cpu
movq 64(%rax), %rax # this_cpu.94_1->c_bsp_resume, _2
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
.loc 1 1869 5 view .LVU75
testq %rax, %rax # _2
je .L8 #,
.loc 1 1870 3 is_stmt 1 view .LVU76
movq $boot_cpu_data, %rdi #,
jmp __x86_indirect_thunk_rax
or
.loc 2 57 9 view .LVU478
.loc 2 57 9 view .LVU479
.loc 2 57 9 view .LVU480
.loc 2 57 9 view .LVU481
.LBB1385:
.LBB1383:
.LBB1379:
.LBB1377:
.LBB1375:
.loc 2 57 9 view .LVU482
.loc 2 57 9 view .LVU483
movl %edi, %edx # cpu, cpu
.LVL87:
.loc 2 57 9 is_stmt 0 view .LVU484
That MOV in there is drowned in debugging information and latter makes
it hard to follow the asm. And that DWARF info is not really needed for
asm output staring.
Disable the debug information generation which clutters the asm output
unnecessarily:
bsp_resume:
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
movq this_cpu(%rip), %rax # this_cpu, this_cpu
movq 64(%rax), %rax # this_cpu.94_1->c_bsp_resume, _2
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
testq %rax, %rax # _2
je .L8 #,
# arch/x86/kernel/cpu/common.c:1870: this_cpu->c_bsp_resume(&boot_cpu_data);
movq $boot_cpu_data, %rdi #,
jmp __x86_indirect_thunk_rax
.L8:
# arch/x86/kernel/cpu/common.c:1871: }
rep ret
.size bsp_resume, .-bsp_resume
[ bp: write commit message. ]
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
2019-02-10 15:51:00 +09:00
|
|
|
DEBUG_CFLAGS += -g
|
2014-07-31 03:50:18 +09:00
|
|
|
endif
|
2022-10-25 05:34:14 +09:00
|
|
|
ifeq ($(LLVM_IAS),1)
|
|
|
|
KBUILD_AFLAGS += -g
|
|
|
|
else
|
2014-02-15 08:19:17 +09:00
|
|
|
KBUILD_AFLAGS += -Wa,-gdwarf-2
|
2005-04-17 07:20:36 +09:00
|
|
|
endif
|
2020-11-10 03:35:28 +09:00
|
|
|
endif
|
|
|
|
|
2014-07-31 03:50:19 +09:00
|
|
|
ifdef CONFIG_DEBUG_INFO_DWARF4
|
2019-02-22 16:56:09 +09:00
|
|
|
DEBUG_CFLAGS += -gdwarf-4
|
2014-07-31 03:50:19 +09:00
|
|
|
endif
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2010-07-14 22:43:52 +09:00
|
|
|
ifdef CONFIG_DEBUG_INFO_REDUCED
|
kbuild: Disable extra debugging info in .s output
Modern gcc adds view assignments, reset assertion checking in .loc
directives and a couple more additional debug markers, which clutters
the asm output unnecessarily:
For example:
bsp_resume:
.LFB3466:
.loc 1 1868 1 is_stmt 1 view -0
.cfi_startproc
.loc 1 1869 2 view .LVU73
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
.loc 1 1869 14 is_stmt 0 view .LVU74
movq this_cpu(%rip), %rax # this_cpu, this_cpu
movq 64(%rax), %rax # this_cpu.94_1->c_bsp_resume, _2
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
.loc 1 1869 5 view .LVU75
testq %rax, %rax # _2
je .L8 #,
.loc 1 1870 3 is_stmt 1 view .LVU76
movq $boot_cpu_data, %rdi #,
jmp __x86_indirect_thunk_rax
or
.loc 2 57 9 view .LVU478
.loc 2 57 9 view .LVU479
.loc 2 57 9 view .LVU480
.loc 2 57 9 view .LVU481
.LBB1385:
.LBB1383:
.LBB1379:
.LBB1377:
.LBB1375:
.loc 2 57 9 view .LVU482
.loc 2 57 9 view .LVU483
movl %edi, %edx # cpu, cpu
.LVL87:
.loc 2 57 9 is_stmt 0 view .LVU484
That MOV in there is drowned in debugging information and latter makes
it hard to follow the asm. And that DWARF info is not really needed for
asm output staring.
Disable the debug information generation which clutters the asm output
unnecessarily:
bsp_resume:
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
movq this_cpu(%rip), %rax # this_cpu, this_cpu
movq 64(%rax), %rax # this_cpu.94_1->c_bsp_resume, _2
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
testq %rax, %rax # _2
je .L8 #,
# arch/x86/kernel/cpu/common.c:1870: this_cpu->c_bsp_resume(&boot_cpu_data);
movq $boot_cpu_data, %rdi #,
jmp __x86_indirect_thunk_rax
.L8:
# arch/x86/kernel/cpu/common.c:1871: }
rep ret
.size bsp_resume, .-bsp_resume
[ bp: write commit message. ]
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
2019-02-10 15:51:00 +09:00
|
|
|
DEBUG_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly) \
|
2013-02-08 06:58:40 +09:00
|
|
|
$(call cc-option,-fno-var-tracking)
|
2010-07-14 22:43:52 +09:00
|
|
|
endif
|
|
|
|
|
kbuild: Disable extra debugging info in .s output
Modern gcc adds view assignments, reset assertion checking in .loc
directives and a couple more additional debug markers, which clutters
the asm output unnecessarily:
For example:
bsp_resume:
.LFB3466:
.loc 1 1868 1 is_stmt 1 view -0
.cfi_startproc
.loc 1 1869 2 view .LVU73
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
.loc 1 1869 14 is_stmt 0 view .LVU74
movq this_cpu(%rip), %rax # this_cpu, this_cpu
movq 64(%rax), %rax # this_cpu.94_1->c_bsp_resume, _2
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
.loc 1 1869 5 view .LVU75
testq %rax, %rax # _2
je .L8 #,
.loc 1 1870 3 is_stmt 1 view .LVU76
movq $boot_cpu_data, %rdi #,
jmp __x86_indirect_thunk_rax
or
.loc 2 57 9 view .LVU478
.loc 2 57 9 view .LVU479
.loc 2 57 9 view .LVU480
.loc 2 57 9 view .LVU481
.LBB1385:
.LBB1383:
.LBB1379:
.LBB1377:
.LBB1375:
.loc 2 57 9 view .LVU482
.loc 2 57 9 view .LVU483
movl %edi, %edx # cpu, cpu
.LVL87:
.loc 2 57 9 is_stmt 0 view .LVU484
That MOV in there is drowned in debugging information and latter makes
it hard to follow the asm. And that DWARF info is not really needed for
asm output staring.
Disable the debug information generation which clutters the asm output
unnecessarily:
bsp_resume:
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
movq this_cpu(%rip), %rax # this_cpu, this_cpu
movq 64(%rax), %rax # this_cpu.94_1->c_bsp_resume, _2
# arch/x86/kernel/cpu/common.c:1869: if (this_cpu->c_bsp_resume)
testq %rax, %rax # _2
je .L8 #,
# arch/x86/kernel/cpu/common.c:1870: this_cpu->c_bsp_resume(&boot_cpu_data);
movq $boot_cpu_data, %rdi #,
jmp __x86_indirect_thunk_rax
.L8:
# arch/x86/kernel/cpu/common.c:1871: }
rep ret
.size bsp_resume, .-bsp_resume
[ bp: write commit message. ]
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
2019-02-10 15:51:00 +09:00
|
|
|
KBUILD_CFLAGS += $(DEBUG_CFLAGS)
|
|
|
|
export DEBUG_CFLAGS
|
|
|
|
|
2008-10-07 08:06:12 +09:00
|
|
|
ifdef CONFIG_FUNCTION_TRACER
|
2018-08-06 22:17:44 +09:00
|
|
|
ifdef CONFIG_FTRACE_MCOUNT_RECORD
|
|
|
|
# gcc 5 supports generating the mcount tables directly
|
|
|
|
ifeq ($(call cc-option-yn,-mrecord-mcount),y)
|
|
|
|
CC_FLAGS_FTRACE += -mrecord-mcount
|
|
|
|
export CC_USING_RECORD_MCOUNT := 1
|
|
|
|
endif
|
2018-08-06 22:17:46 +09:00
|
|
|
ifdef CONFIG_HAVE_NOP_MCOUNT
|
|
|
|
ifeq ($(call cc-option-yn, -mnop-mcount),y)
|
|
|
|
CC_FLAGS_FTRACE += -mnop-mcount
|
|
|
|
CC_FLAGS_USING += -DCC_USING_NOP_MCOUNT
|
|
|
|
endif
|
|
|
|
endif
|
2018-08-06 22:17:44 +09:00
|
|
|
endif
|
2011-02-10 03:15:59 +09:00
|
|
|
ifdef CONFIG_HAVE_FENTRY
|
2018-08-06 22:17:42 +09:00
|
|
|
ifeq ($(call cc-option-yn, -mfentry),y)
|
|
|
|
CC_FLAGS_FTRACE += -mfentry
|
|
|
|
CC_FLAGS_USING += -DCC_USING_FENTRY
|
|
|
|
endif
|
2011-02-10 03:15:59 +09:00
|
|
|
endif
|
2018-08-06 22:17:42 +09:00
|
|
|
export CC_FLAGS_FTRACE
|
|
|
|
KBUILD_CFLAGS += $(CC_FLAGS_FTRACE) $(CC_FLAGS_USING)
|
|
|
|
KBUILD_AFLAGS += $(CC_FLAGS_USING)
|
2010-10-14 06:12:30 +09:00
|
|
|
ifdef CONFIG_DYNAMIC_FTRACE
|
2010-10-15 12:32:44 +09:00
|
|
|
ifdef CONFIG_HAVE_C_RECORDMCOUNT
|
2010-10-14 06:12:30 +09:00
|
|
|
BUILD_C_RECORDMCOUNT := y
|
|
|
|
export BUILD_C_RECORDMCOUNT
|
|
|
|
endif
|
|
|
|
endif
|
2008-05-13 04:20:42 +09:00
|
|
|
endif
|
|
|
|
|
2008-01-22 05:31:44 +09:00
|
|
|
# We trigger additional mismatches with less inlining
|
|
|
|
ifdef CONFIG_DEBUG_SECTION_MISMATCH
|
|
|
|
KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once)
|
|
|
|
endif
|
|
|
|
|
2017-04-14 15:17:26 +09:00
|
|
|
ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
|
2018-08-22 22:51:09 +09:00
|
|
|
KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections
|
|
|
|
LDFLAGS_vmlinux += --gc-sections
|
2017-04-14 15:17:26 +09:00
|
|
|
endif
|
|
|
|
|
2019-04-05 03:44:11 +09:00
|
|
|
ifdef CONFIG_LIVEPATCH
|
|
|
|
KBUILD_CFLAGS += $(call cc-option, -flive-patching=inline-clone)
|
|
|
|
endif
|
|
|
|
|
2018-05-03 02:44:59 +09:00
|
|
|
ifdef CONFIG_SHADOW_CALL_STACK
|
|
|
|
CC_FLAGS_SCS := -fsanitize=shadow-call-stack
|
|
|
|
KBUILD_CFLAGS += $(CC_FLAGS_SCS)
|
|
|
|
export CC_FLAGS_SCS
|
|
|
|
endif
|
|
|
|
|
2017-11-29 01:48:49 +09:00
|
|
|
ifdef CONFIG_LTO_CLANG
|
|
|
|
ifdef CONFIG_THINLTO
|
|
|
|
CC_FLAGS_LTO_CLANG := -flto=thin $(call cc-option, -fsplit-lto-unit)
|
|
|
|
KBUILD_LDFLAGS += --thinlto-cache-dir=.thinlto-cache
|
|
|
|
else
|
|
|
|
CC_FLAGS_LTO_CLANG := -flto
|
|
|
|
endif
|
|
|
|
CC_FLAGS_LTO_CLANG += -fvisibility=default
|
2019-12-04 08:56:24 +09:00
|
|
|
|
2019-12-05 08:57:39 +09:00
|
|
|
# Limit inlining across translation units to reduce binary size
|
|
|
|
LD_FLAGS_LTO_CLANG := -mllvm -import-instr-limit=5
|
|
|
|
|
|
|
|
KBUILD_LDFLAGS += $(LD_FLAGS_LTO_CLANG)
|
|
|
|
KBUILD_LDFLAGS_MODULE += $(LD_FLAGS_LTO_CLANG)
|
|
|
|
|
2020-08-20 00:53:00 +09:00
|
|
|
KBUILD_LDS_MODULE += $(srctree)/scripts/module-lto.lds
|
2017-11-29 01:48:49 +09:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef CONFIG_LTO
|
|
|
|
CC_FLAGS_LTO := $(CC_FLAGS_LTO_CLANG)
|
|
|
|
KBUILD_CFLAGS += $(CC_FLAGS_LTO)
|
|
|
|
export CC_FLAGS_LTO
|
|
|
|
endif
|
|
|
|
|
2019-04-26 08:09:05 +09:00
|
|
|
ifdef CONFIG_CFI_CLANG
|
|
|
|
CC_FLAGS_CFI := -fsanitize=cfi \
|
2020-03-03 04:26:46 +09:00
|
|
|
-fno-sanitize-cfi-canonical-jump-tables \
|
|
|
|
-fno-sanitize-blacklist
|
2019-04-26 08:09:05 +09:00
|
|
|
|
|
|
|
ifdef CONFIG_MODULES
|
|
|
|
CC_FLAGS_CFI += -fsanitize-cfi-cross-dso
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef CONFIG_CFI_PERMISSIVE
|
|
|
|
CC_FLAGS_CFI += -fsanitize-recover=cfi \
|
|
|
|
-fno-sanitize-trap=cfi
|
|
|
|
endif
|
|
|
|
|
|
|
|
# If LTO flags are filtered out, we must also filter out CFI.
|
|
|
|
CC_FLAGS_LTO += $(CC_FLAGS_CFI)
|
|
|
|
KBUILD_CFLAGS += $(CC_FLAGS_CFI)
|
|
|
|
export CC_FLAGS_CFI
|
|
|
|
endif
|
|
|
|
|
2005-05-01 08:51:42 +09:00
|
|
|
# arch Makefile may override CC so keep this after arch Makefile is included
|
kbuild: remove kbuild cache
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 <yamada.masahiro@socionext.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
2018-05-28 18:21:38 +09:00
|
|
|
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
|
2005-05-01 08:51:42 +09:00
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
# warn about C99 declaration after statement
|
2018-10-01 18:44:37 +09:00
|
|
|
KBUILD_CFLAGS += -Wdeclaration-after-statement
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2018-06-26 07:59:34 +09:00
|
|
|
# Variable Length Arrays (VLAs) should not be used anywhere in the kernel
|
2019-05-09 15:45:49 +09:00
|
|
|
KBUILD_CFLAGS += -Wvla
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2006-06-25 07:07:55 +09:00
|
|
|
# disable pointer signed / unsigned warnings in gcc 4.0
|
2018-10-01 18:44:36 +09:00
|
|
|
KBUILD_CFLAGS += -Wno-pointer-sign
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2018-08-31 06:47:28 +09:00
|
|
|
# disable stringop warnings in gcc 8+
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
|
|
|
|
|
2020-05-10 06:30:29 +09:00
|
|
|
# We'll want to enable this eventually, but it's not going away for 5.7 at least
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, zero-length-bounds)
|
gcc-10: disable 'array-bounds' warning for now
commit 44720996e2d79e47d508b0abe99b931a726a3197 upstream.
This is another fine warning, related to the 'zero-length-bounds' one,
but hitting the same historical code in the kernel.
Because C didn't historically support flexible array members, we have
code that instead uses a one-sized array, the same way we have cases of
zero-sized arrays.
The one-sized arrays come from either not wanting to use the gcc
zero-sized array extension, or from a slight convenience-feature, where
particularly for strings, the size of the structure now includes the
allocation for the final NUL character.
So with a "char name[1];" at the end of a structure, you can do things
like
v = my_malloc(sizeof(struct vendor) + strlen(name));
and avoid the "+1" for the terminator.
Yes, the modern way to do that is with a flexible array, and using
'offsetof()' instead of 'sizeof()', and adding the "+1" by hand. That
also technically gets the size "more correct" in that it avoids any
alignment (and thus padding) issues, but this is another long-term
cleanup thing that will not happen for 5.7.
So disable the warning for now, even though it's potentially quite
useful. Having a slew of warnings that then hide more urgent new issues
is not an improvement.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-05-10 06:52:44 +09:00
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, array-bounds)
|
2020-05-10 07:40:52 +09:00
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-overflow)
|
2020-05-10 06:30:29 +09:00
|
|
|
|
gcc-10: disable 'restrict' warning for now
commit adc71920969870dfa54e8f40dac8616284832d02 upstream.
gcc-10 now warns about passing aliasing pointers to functions that take
restricted pointers.
That's actually a great warning, and if we ever start using 'restrict'
in the kernel, it might be quite useful. But right now we don't, and it
turns out that the only thing this warns about is an idiom where we have
declared a few functions to be "printf-like" (which seems to make gcc
pick up the restricted pointer thing), and then we print to the same
buffer that we also use as an input.
And people do that as an odd concatenation pattern, with code like this:
#define sysfs_show_gen_prop(buffer, fmt, ...) \
snprintf(buffer, PAGE_SIZE, "%s"fmt, buffer, __VA_ARGS__)
where we have 'buffer' as both the destination of the final result, and
as the initial argument.
Yes, it's a bit questionable. And outside of the kernel, people do have
standard declarations like
int snprintf( char *restrict buffer, size_t bufsz,
const char *restrict format, ... );
where that output buffer is marked as a restrict pointer that cannot
alias with any other arguments.
But in the context of the kernel, that 'use snprintf() to concatenate to
the end result' does work, and the pattern shows up in multiple places.
And we have not marked our own version of snprintf() as taking restrict
pointers, so the warning is incorrect for now, and gcc picks it up on
its own.
If we do start using 'restrict' in the kernel (and it might be a good
idea if people find places where it matters), we'll need to figure out
how to avoid this issue for snprintf and friends. But in the meantime,
this warning is not useful.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-05-10 07:45:21 +09:00
|
|
|
# Another good warning that we'll want to enable eventually
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, restrict)
|
|
|
|
|
Stop the ad-hoc games with -Wno-maybe-initialized
commit 78a5255ffb6a1af189a83e493d916ba1c54d8c75 upstream.
We have some rather random rules about when we accept the
"maybe-initialized" warnings, and when we don't.
For example, we consider it unreliable for gcc versions < 4.9, but also
if -O3 is enabled, or if optimizing for size. And then various kernel
config options disabled it, because they know that they trigger that
warning by confusing gcc sufficiently (ie PROFILE_ALL_BRANCHES).
And now gcc-10 seems to be introducing a lot of those warnings too, so
it falls under the same heading as 4.9 did.
At the same time, we have a very straightforward way to _enable_ that
warning when wanted: use "W=2" to enable more warnings.
So stop playing these ad-hoc games, and just disable that warning by
default, with the known and straight-forward "if you want to work on the
extra compiler warnings, use W=123".
Would it be great to have code that is always so obvious that it never
confuses the compiler whether a variable is used initialized or not?
Yes, it would. In a perfect world, the compilers would be smarter, and
our source code would be simpler.
That's currently not the world we live in, though.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-05-10 05:57:10 +09:00
|
|
|
# Enabled with W=2, disabled by default as noisy
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, maybe-uninitialized)
|
|
|
|
|
2009-04-09 20:34:34 +09:00
|
|
|
# disable invalid "can't wrap" optimizations for signed / pointers
|
2009-07-13 03:25:04 +09:00
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
|
2009-03-20 07:53:19 +09:00
|
|
|
|
kbuild: disable clang's default use of -fmerge-all-constants
Prasad reported that he has seen crashes in BPF subsystem with netd
on Android with arm64 in the form of (note, the taint is unrelated):
[ 4134.721483] Unable to handle kernel paging request at virtual address 800000001
[ 4134.820925] Mem abort info:
[ 4134.901283] Exception class = DABT (current EL), IL = 32 bits
[ 4135.016736] SET = 0, FnV = 0
[ 4135.119820] EA = 0, S1PTW = 0
[ 4135.201431] Data abort info:
[ 4135.301388] ISV = 0, ISS = 0x00000021
[ 4135.359599] CM = 0, WnR = 0
[ 4135.470873] user pgtable: 4k pages, 39-bit VAs, pgd = ffffffe39b946000
[ 4135.499757] [0000000800000001] *pgd=0000000000000000, *pud=0000000000000000
[ 4135.660725] Internal error: Oops: 96000021 [#1] PREEMPT SMP
[ 4135.674610] Modules linked in:
[ 4135.682883] CPU: 5 PID: 1260 Comm: netd Tainted: G S W 4.14.19+ #1
[ 4135.716188] task: ffffffe39f4aa380 task.stack: ffffff801d4e0000
[ 4135.731599] PC is at bpf_prog_add+0x20/0x68
[ 4135.741746] LR is at bpf_prog_inc+0x20/0x2c
[ 4135.751788] pc : [<ffffff94ab7ad584>] lr : [<ffffff94ab7ad638>] pstate: 60400145
[ 4135.769062] sp : ffffff801d4e3ce0
[...]
[ 4136.258315] Process netd (pid: 1260, stack limit = 0xffffff801d4e0000)
[ 4136.273746] Call trace:
[...]
[ 4136.442494] 3ca0: ffffff94ab7ad584 0000000060400145 ffffffe3a01bf8f8 0000000000000006
[ 4136.460936] 3cc0: 0000008000000000 ffffff94ab844204 ffffff801d4e3cf0 ffffff94ab7ad584
[ 4136.479241] [<ffffff94ab7ad584>] bpf_prog_add+0x20/0x68
[ 4136.491767] [<ffffff94ab7ad638>] bpf_prog_inc+0x20/0x2c
[ 4136.504536] [<ffffff94ab7b5d08>] bpf_obj_get_user+0x204/0x22c
[ 4136.518746] [<ffffff94ab7ade68>] SyS_bpf+0x5a8/0x1a88
Android's netd was basically pinning the uid cookie BPF map in BPF
fs (/sys/fs/bpf/traffic_cookie_uid_map) and later on retrieving it
again resulting in above panic. Issue is that the map was wrongly
identified as a prog! Above kernel was compiled with clang 4.0,
and it turns out that clang decided to merge the bpf_prog_iops and
bpf_map_iops into a single memory location, such that the two i_ops
could then not be distinguished anymore.
Reason for this miscompilation is that clang has the more aggressive
-fmerge-all-constants enabled by default. In fact, clang source code
has a comment about it in lib/AST/ExprConstant.cpp on why it is okay
to do so:
Pointers with different bases cannot represent the same object.
(Note that clang defaults to -fmerge-all-constants, which can
lead to inconsistent results for comparisons involving the address
of a constant; this generally doesn't matter in practice.)
The issue never appeared with gcc however, since gcc does not enable
-fmerge-all-constants by default and even *explicitly* states in
it's option description that using this flag results in non-conforming
behavior, quote from man gcc:
Languages like C or C++ require each variable, including multiple
instances of the same variable in recursive calls, to have distinct
locations, so using this option results in non-conforming behavior.
There are also various clang bug reports open on that matter [1],
where clang developers acknowledge the non-conforming behavior,
and refer to disabling it with -fno-merge-all-constants. But even
if this gets fixed in clang today, there are already users out there
that triggered this. Thus, fix this issue by explicitly adding
-fno-merge-all-constants to the kernel's Makefile to generically
disable this optimization, since potentially other places in the
kernel could subtly break as well.
Note, there is also a flag called -fmerge-constants (not supported
by clang), which is more conservative and only applies to strings
and it's enabled in gcc's -O/-O2/-O3/-Os optimization levels. In
gcc's code, the two flags -fmerge-{all-,}constants share the same
variable internally, so when disabling it via -fno-merge-all-constants,
then we really don't merge any const data (e.g. strings), and text
size increases with gcc (14,927,214 -> 14,942,646 for vmlinux.o).
$ gcc -fverbose-asm -O2 foo.c -S -o foo.S
-> foo.S lists -fmerge-constants under options enabled
$ gcc -fverbose-asm -O2 -fno-merge-all-constants foo.c -S -o foo.S
-> foo.S doesn't list -fmerge-constants under options enabled
$ gcc -fverbose-asm -O2 -fno-merge-all-constants -fmerge-constants foo.c -S -o foo.S
-> foo.S lists -fmerge-constants under options enabled
Thus, as a workaround we need to set both -fno-merge-all-constants
*and* -fmerge-constants in the Makefile in order for text size to
stay as is.
[1] https://bugs.llvm.org/show_bug.cgi?id=18538
Reported-by: Prasad Sodagudi <psodagud@codeaurora.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Chenbo Feng <fengc@google.com>
Cc: Richard Smith <richard-llvm@metafoo.co.uk>
Cc: Chandler Carruth <chandlerc@gmail.com>
Cc: linux-kernel@vger.kernel.org
Tested-by: Prasad Sodagudi <psodagud@codeaurora.org>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2018-03-21 09:18:24 +09:00
|
|
|
# clang sets -fmerge-all-constants by default as optimization, but this
|
|
|
|
# is non-conforming behavior for C and in fact breaks the kernel, so we
|
|
|
|
# need to disable it here generally.
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-merge-all-constants)
|
|
|
|
|
|
|
|
# for gcc -fno-merge-all-constants disables everything, but it is fine
|
|
|
|
# to have actual conforming behavior enabled.
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fmerge-constants)
|
|
|
|
|
2017-12-30 10:34:43 +09:00
|
|
|
# Make sure -fstack-check isn't enabled (like gentoo apparently did)
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-stack-check,)
|
|
|
|
|
2009-09-19 04:49:37 +09:00
|
|
|
# conserve stack if available
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fconserve-stack)
|
|
|
|
|
2013-12-24 06:56:06 +09:00
|
|
|
# Prohibit date/time macros, which would make the build non-deterministic
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-Werror=date-time)
|
|
|
|
|
2016-03-08 17:29:09 +09:00
|
|
|
# enforce correct pointer usage
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types)
|
|
|
|
|
2017-03-21 09:14:11 +09:00
|
|
|
# Require designated initializers for all marked structures
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init)
|
|
|
|
|
2018-03-30 13:15:26 +09:00
|
|
|
# change __FILE__ to the relative path from the srctree
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
|
|
|
|
|
2015-03-27 20:43:36 +09:00
|
|
|
include scripts/Makefile.kasan
|
|
|
|
include scripts/Makefile.extrawarn
|
2016-01-21 08:00:55 +09:00
|
|
|
include scripts/Makefile.ubsan
|
2014-04-14 18:27:10 +09:00
|
|
|
|
2019-08-21 02:09:41 +09:00
|
|
|
# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
|
|
|
|
KBUILD_CPPFLAGS += $(KCPPFLAGS)
|
|
|
|
KBUILD_AFLAGS += $(KAFLAGS)
|
|
|
|
KBUILD_CFLAGS += $(KCFLAGS)
|
2007-10-16 05:03:58 +09:00
|
|
|
|
2019-07-13 13:01:10 +09:00
|
|
|
KBUILD_LDFLAGS_MODULE += --build-id
|
|
|
|
LDFLAGS_vmlinux += --build-id
|
2007-07-19 17:48:40 +09:00
|
|
|
|
2022-08-11 07:24:40 +09:00
|
|
|
KBUILD_LDFLAGS += -z noexecstack
|
|
|
|
KBUILD_LDFLAGS += $(call ld-option,--no-warn-rwx-segments)
|
|
|
|
|
2022-02-09 21:30:54 +09:00
|
|
|
ifeq ($(CONFIG_MACH_ASUS_SAKE),y)
|
|
|
|
KBUILD_CPPFLAGS += -DASUS_SAKE_PROJECT=1
|
|
|
|
else ifeq ($(CONFIG_MACH_ASUS_VODKA),y)
|
|
|
|
KBUILD_CPPFLAGS += -DASUS_VODKA_PROJECT=1
|
|
|
|
endif
|
|
|
|
|
2009-03-05 04:59:07 +09:00
|
|
|
ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
|
2009-09-17 05:36:55 +09:00
|
|
|
LDFLAGS_vmlinux += $(call ld-option, -X,)
|
2009-03-05 04:59:07 +09:00
|
|
|
endif
|
|
|
|
|
2019-08-01 10:18:42 +09:00
|
|
|
ifeq ($(CONFIG_RELR),y)
|
2021-05-22 10:26:24 +09:00
|
|
|
LDFLAGS_vmlinux += --pack-dyn-relocs=relr --use-android-relr-tags
|
2019-08-01 10:18:42 +09:00
|
|
|
endif
|
|
|
|
|
2019-11-09 21:12:16 +09:00
|
|
|
# make the checker run with the right architecture
|
|
|
|
CHECKFLAGS += --arch=$(ARCH)
|
|
|
|
|
2018-05-29 03:27:35 +09:00
|
|
|
# insure the checker run with the right endianness
|
|
|
|
CHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)
|
|
|
|
|
2018-05-31 05:48:38 +09:00
|
|
|
# the checker needs the correct machine size
|
|
|
|
CHECKFLAGS += $(if $(CONFIG_64BIT),-m64,-m32)
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
# Default kernel image to build when no specific target is given.
|
2006-06-25 07:07:55 +09:00
|
|
|
# KBUILD_IMAGE may be overruled on the command line or
|
2005-04-17 07:20:36 +09:00
|
|
|
# set in the environment
|
|
|
|
# Also any assignments in arch/$(ARCH)/Makefile take precedence over
|
|
|
|
# this default value
|
|
|
|
export KBUILD_IMAGE ?= vmlinux
|
|
|
|
|
|
|
|
#
|
|
|
|
# INSTALL_PATH specifies where to place the updated kernel and system map
|
|
|
|
# images. Default is /boot, but you can set it to other values
|
|
|
|
export INSTALL_PATH ?= /boot
|
|
|
|
|
2013-12-02 08:56:28 +09:00
|
|
|
#
|
|
|
|
# INSTALL_DTBS_PATH specifies a prefix for relocations required by build roots.
|
|
|
|
# Like INSTALL_MOD_PATH, it isn't defined in the Makefile, but can be passed as
|
|
|
|
# an argument if needed. Otherwise it defaults to the kernel install path
|
|
|
|
#
|
|
|
|
export INSTALL_DTBS_PATH ?= $(INSTALL_PATH)/dtbs/$(KERNELRELEASE)
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
#
|
|
|
|
# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
|
|
|
|
# relocations required by build roots. This is not defined in the
|
2006-06-25 07:07:55 +09:00
|
|
|
# makefile but the argument can be passed to make if needed.
|
2005-04-17 07:20:36 +09:00
|
|
|
#
|
|
|
|
|
2006-01-16 20:46:07 +09:00
|
|
|
MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
|
2005-04-17 07:20:36 +09:00
|
|
|
export MODLIB
|
|
|
|
|
2006-06-22 09:53:09 +09:00
|
|
|
#
|
2014-04-28 16:32:43 +09:00
|
|
|
# INSTALL_MOD_STRIP, if defined, will cause modules to be
|
|
|
|
# stripped after they are installed. If INSTALL_MOD_STRIP is '1', then
|
|
|
|
# the default option --strip-debug will be used. Otherwise,
|
|
|
|
# INSTALL_MOD_STRIP value will be used as the options to the strip command.
|
2009-01-15 05:38:20 +09:00
|
|
|
|
2006-06-22 09:53:09 +09:00
|
|
|
ifdef INSTALL_MOD_STRIP
|
|
|
|
ifeq ($(INSTALL_MOD_STRIP),1)
|
2009-01-15 05:38:20 +09:00
|
|
|
mod_strip_cmd = $(STRIP) --strip-debug
|
2006-06-22 09:53:09 +09:00
|
|
|
else
|
2009-01-15 05:38:20 +09:00
|
|
|
mod_strip_cmd = $(STRIP) $(INSTALL_MOD_STRIP)
|
2006-06-22 09:53:09 +09:00
|
|
|
endif # INSTALL_MOD_STRIP=1
|
|
|
|
else
|
2009-01-15 05:38:20 +09:00
|
|
|
mod_strip_cmd = true
|
2006-06-22 09:53:09 +09:00
|
|
|
endif # INSTALL_MOD_STRIP
|
|
|
|
export mod_strip_cmd
|
|
|
|
|
2014-08-27 20:01:56 +09:00
|
|
|
# CONFIG_MODULE_COMPRESS, if defined, will cause module to be compressed
|
|
|
|
# after they are installed in agreement with CONFIG_MODULE_COMPRESS_GZIP
|
|
|
|
# or CONFIG_MODULE_COMPRESS_XZ.
|
|
|
|
|
|
|
|
mod_compress_cmd = true
|
|
|
|
ifdef CONFIG_MODULE_COMPRESS
|
|
|
|
ifdef CONFIG_MODULE_COMPRESS_GZIP
|
kbuild: fix broken builds because of GZIP,BZIP2,LZOP variables
commit e4a42c82e943b97ce124539fcd7a47445b43fa0d upstream.
Redefine GZIP, BZIP2, LZOP variables as KGZIP, KBZIP2, KLZOP resp.
GZIP, BZIP2, LZOP env variables are reserved by the tools. The original
attempt to redefine them internally doesn't work in makefiles/scripts
intercall scenarios, e.g., "make GZIP=gzip bindeb-pkg" and results in
broken builds. There can be other broken build commands because of this,
so the universal solution is to use non-reserved env variables for the
compression tools.
Fixes: 8dfb61dcbace ("kbuild: add variables for compression tools")
Signed-off-by: Denis Efremov <efremov@linux.com>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Cc: Matthias Maennich <maennich@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-06-08 18:59:44 +09:00
|
|
|
mod_compress_cmd = $(KGZIP) -n -f
|
2014-08-27 20:01:56 +09:00
|
|
|
endif # CONFIG_MODULE_COMPRESS_GZIP
|
|
|
|
ifdef CONFIG_MODULE_COMPRESS_XZ
|
kbuild: add variables for compression tools
commit 8dfb61dcbaceb19a5ded5e9c9dcf8d05acc32294 upstream.
Allow user to use alternative implementations of compression tools,
such as pigz, pbzip2, pxz. For example, multi-threaded tools to
speed up the build:
$ make GZIP=pigz BZIP2=pbzip2
Variables _GZIP, _BZIP2, _LZOP are used internally because original env
vars are reserved by the tools. The use of GZIP in gzip tool is obsolete
since 2015. However, alternative implementations (e.g., pigz) still rely
on it. BZIP2, BZIP, LZOP vars are not obsolescent.
The credit goes to @grsecurity.
As a sidenote, for multi-threaded lzma, xz compression one can use:
$ export XZ_OPT="--threads=0"
Signed-off-by: Denis Efremov <efremov@linux.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Matthias Maennich <maennich@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-06-05 16:39:55 +09:00
|
|
|
mod_compress_cmd = $(XZ) -f
|
2014-08-27 20:01:56 +09:00
|
|
|
endif # CONFIG_MODULE_COMPRESS_XZ
|
|
|
|
endif # CONFIG_MODULE_COMPRESS
|
|
|
|
export mod_compress_cmd
|
|
|
|
|
2013-01-25 12:11:31 +09:00
|
|
|
ifdef CONFIG_MODULE_SIG_ALL
|
2015-08-15 00:17:16 +09:00
|
|
|
$(eval $(call config_filename,MODULE_SIG_KEY))
|
|
|
|
|
|
|
|
mod_sign_cmd = scripts/sign-file $(CONFIG_MODULE_SIG_HASH) $(MODULE_SIG_KEY_SRCPREFIX)$(CONFIG_MODULE_SIG_KEY) certs/signing_key.x509
|
2012-10-19 10:23:15 +09:00
|
|
|
else
|
|
|
|
mod_sign_cmd = true
|
|
|
|
endif
|
|
|
|
export mod_sign_cmd
|
|
|
|
|
2019-03-27 02:48:39 +09:00
|
|
|
HOST_LIBELF_LIBS = $(shell pkg-config libelf --libs 2>/dev/null || echo -lelf)
|
|
|
|
|
2017-02-16 03:21:17 +09:00
|
|
|
ifdef CONFIG_STACK_VALIDATION
|
|
|
|
has_libelf := $(call try-run,\
|
kbuild: Add $(KBUILD_HOSTLDFLAGS) to 'has_libelf' test
commit f634ca650f724347892068489c7920631a3aac6a upstream.
Normally, invocations of $(HOSTCC) include $(KBUILD_HOSTLDFLAGS), which
in turn includes $(HOSTLDFLAGS), which allows users to pass in their own
flags when linking. However, the 'has_libelf' test does not, meaning
that if a user requests a specific linker via HOSTLDFLAGS=-fuse-ld=...,
it is not respected and the build might error.
For example, if a user building with clang wants to use all of the LLVM
tools without any GNU tools, they might remove all of the GNU tools from
their system or PATH then build with
$ make HOSTLDFLAGS=-fuse-ld=lld LLVM=1 LLVM_IAS=1
which says use all of the LLVM tools, the integrated assembler, and
ld.lld for linking host executables. Without this change, the build will
error because $(HOSTCC) uses its default linker, rather than the one
requested via -fuse-ld=..., which is GNU ld in clang's case in a default
configuration.
error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please
install libelf-dev, libelf-devel or elfutils-libelf-devel
make[1]: *** [Makefile:1260: prepare-objtool] Error 1
Add $(KBUILD_HOSTLDFLAGS) to the 'has_libelf' test so that the linker
choice is respected.
Link: https://github.com/ClangBuiltLinux/linux/issues/479
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Paul Barker <paul.barker@sancloud.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-04-23 05:19:14 +09:00
|
|
|
echo "int main() {}" | $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)
|
2017-02-16 03:21:17 +09:00
|
|
|
ifeq ($(has_libelf),1)
|
|
|
|
objtool_target := tools/objtool FORCE
|
|
|
|
else
|
|
|
|
SKIP_STACK_VALIDATION := 1
|
|
|
|
export SKIP_STACK_VALIDATION
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2019-01-15 16:19:00 +09:00
|
|
|
PHONY += prepare0
|
2012-10-19 10:23:15 +09:00
|
|
|
|
kbuild: make single targets work more correctly
Currently, the single target build directly descends into the directory
of the target. For example,
$ make foo/bar/baz.o
... directly descends into foo/bar/.
On the other hand, the normal build usually descends one directory at
a time, i.e. descends into foo/, and then foo/bar/.
This difference causes some problems.
[1] miss subdir-asflags-y, subdir-ccflags-y in upper Makefiles
The options in subdir-{as,cc}flags-y take effect in the current
and its sub-directories. In other words, they are inherited
downward. In the example above, the single target will miss
subdir-{as,cc}flags-y if they are defined in foo/Makefile.
[2] could be built in a different directory
As Documentation/kbuild/modules.rst section 4.3 says, Kbuild can
handle files that are spread over several sub-directories.
The build rule of foo/bar/baz.o may not necessarily be specified in
foo/bar/Makefile. It might be specifies in foo/Makefile as follows:
[foo/Makefile]
obj-y := bar/baz.o
This often happens when a module is so big that its source files
are divided into sub-directories.
In this case, there is no Makefile in the foo/bar/ directory, yet
the single target descends into foo/bar/, then fails due to the
missing Makefile. You can still do 'make foo/bar/' for partial
building, but cannot do 'make foo/bar/baz.s'. I believe the single
target '%.s' is a useful feature for inspecting the compiler output.
Some modules work around this issue by putting an empty Makefile
in every sub-directory.
This commit fixes those problems by making the single target build
descend in the same way as the normal build does.
Another change is the single target build will observe the CONFIG
options. Previously, it allowed users to build the foo.o even when
the corresponding CONFIG_FOO is disabled:
obj-$(CONFIG_FOO) += foo.o
In the new behavior, the single target build will just fail and show
"No rule to make target ..." (or "Nothing to be done for ..." if the
stale object already exists, but cannot be updated).
The disadvantage of this commit is the build speed. Now that the
single target build visits every directory and parses lots of
Makefiles, it is slower than before. (But, I hope it will not be
too slow.)
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-08-15 00:19:18 +09:00
|
|
|
export MODORDER := $(extmod-prefix)modules.order
|
2019-08-02 19:23:58 +09:00
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
ifeq ($(KBUILD_EXTMOD),)
|
2015-08-14 23:20:41 +09:00
|
|
|
core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
|
|
|
|
$(core-y) $(core-m) $(drivers-y) $(drivers-m) \
|
2015-09-22 17:47:29 +09:00
|
|
|
$(net-y) $(net-m) $(libs-y) $(libs-m) $(virt-y)))
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-04-27 12:33:37 +09:00
|
|
|
vmlinux-alldirs := $(sort $(vmlinux-dirs) Documentation \
|
|
|
|
$(patsubst %/,%,$(filter %/, $(init-) $(core-) \
|
|
|
|
$(drivers-) $(net-) $(libs-) $(virt-))))
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-08-11 00:53:04 +09:00
|
|
|
build-dirs := $(vmlinux-dirs)
|
2019-08-11 00:53:05 +09:00
|
|
|
clean-dirs := $(vmlinux-alldirs)
|
2019-08-11 00:53:04 +09:00
|
|
|
|
2018-02-10 23:25:04 +09:00
|
|
|
init-y := $(patsubst %/, %/built-in.a, $(init-y))
|
|
|
|
core-y := $(patsubst %/, %/built-in.a, $(core-y))
|
|
|
|
drivers-y := $(patsubst %/, %/built-in.a, $(drivers-y))
|
|
|
|
net-y := $(patsubst %/, %/built-in.a, $(net-y))
|
2005-04-17 07:20:36 +09:00
|
|
|
libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))
|
2018-02-10 23:25:04 +09:00
|
|
|
libs-y2 := $(patsubst %/, %/built-in.a, $(filter-out %.a, $(libs-y)))
|
|
|
|
virt-y := $(patsubst %/, %/built-in.a, $(virt-y))
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2012-05-05 17:18:41 +09:00
|
|
|
# Externally visible symbols (used by link-vmlinux.sh)
|
2019-01-17 09:10:04 +09:00
|
|
|
export KBUILD_VMLINUX_OBJS := $(head-y) $(init-y) $(core-y) $(libs-y2) \
|
|
|
|
$(drivers-y) $(net-y) $(virt-y)
|
2017-06-20 00:52:05 +09:00
|
|
|
export KBUILD_VMLINUX_LIBS := $(libs-y1)
|
2012-05-05 17:18:40 +09:00
|
|
|
export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds
|
2012-05-05 17:18:41 +09:00
|
|
|
export LDFLAGS_vmlinux
|
2019-09-21 22:18:46 +09:00
|
|
|
# used by scripts/Makefile.package
|
2019-05-16 01:18:54 +09:00
|
|
|
export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
|
2008-12-16 20:30:08 +09:00
|
|
|
|
2019-01-17 09:10:04 +09:00
|
|
|
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2018-03-16 16:37:15 +09:00
|
|
|
# Recurse until adjust_autoksyms.sh is satisfied
|
|
|
|
PHONY += autoksyms_recursive
|
2016-04-23 04:25:00 +09:00
|
|
|
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
2019-08-11 00:53:04 +09:00
|
|
|
autoksyms_recursive: descend modules.order
|
2016-04-26 00:55:08 +09:00
|
|
|
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
|
2022-06-24 04:11:47 +09:00
|
|
|
"$(MAKE) -f $(srctree)/Makefile autoksyms_recursive"
|
2016-04-23 04:25:00 +09:00
|
|
|
endif
|
2016-01-27 11:50:18 +09:00
|
|
|
|
2018-03-16 16:37:13 +09:00
|
|
|
# For the kernel to actually contain only the needed exported symbols,
|
|
|
|
# we have to build modules as well to determine what those symbols are.
|
|
|
|
# (this can be evaluated only once include/config/auto.conf has been included)
|
|
|
|
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
|
|
|
KBUILD_MODULES := 1
|
|
|
|
endif
|
|
|
|
|
kbuild: restore autoksyms.h touch to the top Makefile
Commit d3fc425e819b ("kbuild: make sure autoksyms.h exists early")
moved the code that touches autoksyms.h to scripts/kconfig/Makefile
with obscure reason.
From Nicolas' comment [1], he did not seem to be sure about the root
cause.
I guess I figured it out, so here is a fix-up I think is more correct.
According to the error log in the original post [2], the build failed
in scripts/mod/devicetable-offsets.c
scripts/mod/Makefile is descended from scripts/Makefile, which is
invoked from the top-level Makefile by the 'scripts' target.
To build vmlinux and/or modules, Kbuild descend into $(vmlinux-dirs).
This depends on 'prepare' and 'scripts' as follows:
$(vmlinux-dirs): prepare scripts
Because there is no dependency between 'prepare' and 'scripts', the
parallel building can execute them simultaneously.
'prepare' depends on 'prepare1', which touched autoksyms.h, while
'scripts' descends into script/, then scripts/mod/, which needs
<generated/autoksyms.h> if CONFIG_TRIM_UNUSED_KSYMS. It was the
reason of the race.
I am not happy to have unrelated code in the Kconfig Makefile, so
getting it back to the top Makefile.
I removed the standalone test target because I want to use it to
create an empty autoksyms.h file. Here is a little improvement;
unnecessary autoksyms.h is not created when CONFIG_TRIM_UNUSED_KSYMS
is disabled.
[1] https://lkml.org/lkml/2016/11/30/734
[2] https://lkml.org/lkml/2016/11/30/531
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Nicolas Pitre <nico@linaro.org>
2018-03-16 16:37:12 +09:00
|
|
|
autoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h)
|
|
|
|
|
2020-02-18 18:41:39 +09:00
|
|
|
quiet_cmd_autoksyms_h = GEN $@
|
2020-03-04 00:44:50 +09:00
|
|
|
cmd_autoksyms_h = mkdir -p $(dir $@); \
|
|
|
|
$(CONFIG_SHELL) $(srctree)/scripts/gen_autoksyms.sh $@
|
2020-02-18 18:41:39 +09:00
|
|
|
|
kbuild: restore autoksyms.h touch to the top Makefile
Commit d3fc425e819b ("kbuild: make sure autoksyms.h exists early")
moved the code that touches autoksyms.h to scripts/kconfig/Makefile
with obscure reason.
From Nicolas' comment [1], he did not seem to be sure about the root
cause.
I guess I figured it out, so here is a fix-up I think is more correct.
According to the error log in the original post [2], the build failed
in scripts/mod/devicetable-offsets.c
scripts/mod/Makefile is descended from scripts/Makefile, which is
invoked from the top-level Makefile by the 'scripts' target.
To build vmlinux and/or modules, Kbuild descend into $(vmlinux-dirs).
This depends on 'prepare' and 'scripts' as follows:
$(vmlinux-dirs): prepare scripts
Because there is no dependency between 'prepare' and 'scripts', the
parallel building can execute them simultaneously.
'prepare' depends on 'prepare1', which touched autoksyms.h, while
'scripts' descends into script/, then scripts/mod/, which needs
<generated/autoksyms.h> if CONFIG_TRIM_UNUSED_KSYMS. It was the
reason of the race.
I am not happy to have unrelated code in the Kconfig Makefile, so
getting it back to the top Makefile.
I removed the standalone test target because I want to use it to
create an empty autoksyms.h file. Here is a little improvement;
unnecessary autoksyms.h is not created when CONFIG_TRIM_UNUSED_KSYMS
is disabled.
[1] https://lkml.org/lkml/2016/11/30/734
[2] https://lkml.org/lkml/2016/11/30/531
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Nicolas Pitre <nico@linaro.org>
2018-03-16 16:37:12 +09:00
|
|
|
$(autoksyms_h):
|
2020-02-18 18:41:39 +09:00
|
|
|
$(call cmd,autoksyms_h)
|
2016-01-27 11:50:18 +09:00
|
|
|
|
2016-08-24 21:29:21 +09:00
|
|
|
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
|
|
|
|
|
|
|
|
# Final link of vmlinux with optional arch pass after final link
|
2017-08-02 11:31:06 +09:00
|
|
|
cmd_link-vmlinux = \
|
2018-08-24 08:20:39 +09:00
|
|
|
$(CONFIG_SHELL) $< $(LD) $(KBUILD_LDFLAGS) $(LDFLAGS_vmlinux) ; \
|
2016-08-24 21:29:21 +09:00
|
|
|
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
|
2016-04-23 04:25:00 +09:00
|
|
|
|
2018-03-16 16:37:15 +09:00
|
|
|
vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
|
2012-05-05 17:18:41 +09:00
|
|
|
+$(call if_changed,link-vmlinux)
|
2007-07-17 17:54:06 +09:00
|
|
|
|
kbuild: let fixdep directly write to .*.cmd files
Currently, fixdep writes dependencies to .*.tmp, which is renamed to
.*.cmd after everything succeeds. This is a very safe way to avoid
corrupted .*.cmd files. The if_changed_dep has carried this safety
mechanism since it was added in 2002.
If fixdep fails for some reasons or a user terminates the build while
fixdep is running, the incomplete output from the fixdep could be
troublesome.
This is my insight about some bad scenarios:
[1] If the compiler succeeds to generate *.o file, but fixdep fails
to write necessary dependencies to .*.cmd file, Make will miss
to rebuild the object when headers or CONFIG options are changed.
In this case, fixdep should not generate .*.cmd file at all so
that 'arg-check' will surely trigger the rebuild of the object.
[2] A partially constructed .*.cmd file may not be a syntactically
correct makefile. The next time Make runs, it would include it,
then fail to parse it. Once this happens, 'make clean' is be the
only way to fix it.
In fact, [1] is no longer a problem since commit 9c2af1c7377a ("kbuild:
add .DELETE_ON_ERROR special target"). Make deletes a target file on
any failure in its recipe. Because fixdep is a part of the recipe of
*.o target, if it fails, the *.o is deleted anyway. However, I am a
bit worried about the slight possibility of [2].
So, here is a solution. Let fixdep directly write to a .*.cmd file,
but allow makefiles to include it only when its corresponding target
exists.
This effectively reverts commit 2982c953570b ("kbuild: remove redundant
$(wildcard ...) for cmd_files calculation"), and commit 00d78ab2ba75
("kbuild: remove dead code in cmd_files calculation in top Makefile")
because now we must check the presence of targets.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2018-11-30 10:05:22 +09:00
|
|
|
targets := vmlinux
|
|
|
|
|
2014-04-28 16:26:18 +09:00
|
|
|
# The actual objects are generated when descending,
|
2005-04-17 07:20:36 +09:00
|
|
|
# make sure no implicit rule kicks in
|
2019-08-11 00:53:04 +09:00
|
|
|
$(sort $(vmlinux-deps)): descend ;
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-01-03 10:16:54 +09:00
|
|
|
filechk_kernel.release = \
|
2020-07-10 07:33:45 +09:00
|
|
|
echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion \
|
|
|
|
$(srctree) $(BRANCH) $(KMI_GENERATION))"
|
2013-07-11 22:34:51 +09:00
|
|
|
|
2013-06-28 18:27:31 +09:00
|
|
|
# Store (new) KERNELRELEASE string in include/config/kernel.release
|
2019-04-07 19:03:18 +09:00
|
|
|
include/config/kernel.release: FORCE
|
2013-07-11 22:34:51 +09:00
|
|
|
$(call filechk,kernel.release)
|
2006-01-10 05:20:34 +09:00
|
|
|
|
2018-03-16 16:37:11 +09:00
|
|
|
# Additional helpers built in scripts/
|
|
|
|
# Carefully list dependencies so we do not try to build scripts twice
|
|
|
|
# in parallel
|
|
|
|
PHONY += scripts
|
2018-11-29 12:13:24 +09:00
|
|
|
scripts: scripts_basic scripts_dtc
|
2018-03-16 16:37:11 +09:00
|
|
|
$(Q)$(MAKE) $(build)=$(@)
|
2006-01-10 05:20:34 +09:00
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
# Things we need to do before we recursively start building the kernel
|
2005-09-12 05:30:22 +09:00
|
|
|
# or the modules are listed in "prepare".
|
|
|
|
# A multi level approach is used. prepareN is processed before prepareN-1.
|
|
|
|
# archprepare is used in arch Makefiles and when processed asm symlink,
|
|
|
|
# version.h and scripts_basic is processed / created.
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-08-22 13:46:12 +09:00
|
|
|
PHONY += prepare archprepare
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-08-22 13:46:13 +09:00
|
|
|
archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
|
2019-07-17 15:17:59 +09:00
|
|
|
asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h
|
2005-09-12 05:30:22 +09:00
|
|
|
|
2018-11-29 11:58:50 +09:00
|
|
|
prepare0: archprepare
|
2018-11-29 12:13:24 +09:00
|
|
|
$(Q)$(MAKE) $(build)=scripts/mod
|
2005-09-11 04:05:36 +09:00
|
|
|
$(Q)$(MAKE) $(build)=.
|
2005-09-10 02:28:28 +09:00
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
# All the preparing..
|
2016-02-29 13:22:42 +09:00
|
|
|
prepare: prepare0 prepare-objtool
|
|
|
|
|
2017-10-04 12:56:06 +09:00
|
|
|
# Support for using generic headers in asm-generic
|
2018-12-05 20:28:04 +09:00
|
|
|
asm-generic := -f $(srctree)/scripts/Makefile.asm-generic obj
|
|
|
|
|
2017-10-04 12:56:06 +09:00
|
|
|
PHONY += asm-generic uapi-asm-generic
|
|
|
|
asm-generic: uapi-asm-generic
|
2019-03-17 11:01:09 +09:00
|
|
|
$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/asm \
|
|
|
|
generic=include/asm-generic
|
2017-10-04 12:56:06 +09:00
|
|
|
uapi-asm-generic:
|
2019-03-17 11:01:09 +09:00
|
|
|
$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/uapi/asm \
|
|
|
|
generic=include/uapi/asm-generic
|
2017-10-04 12:56:06 +09:00
|
|
|
|
2016-02-29 13:22:42 +09:00
|
|
|
PHONY += prepare-objtool
|
2016-03-04 02:39:30 +09:00
|
|
|
prepare-objtool: $(objtool_target)
|
2018-12-18 14:25:41 +09:00
|
|
|
ifeq ($(SKIP_STACK_VALIDATION),1)
|
|
|
|
ifdef CONFIG_UNWINDER_ORC
|
|
|
|
@echo "error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2
|
|
|
|
@false
|
|
|
|
else
|
|
|
|
@echo "warning: Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2
|
|
|
|
endif
|
|
|
|
endif
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
# Generate some files
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# KERNELRELEASE can change from a few different places, meaning version.h
|
|
|
|
# needs to be updated, so this check is forced on all builds
|
|
|
|
|
|
|
|
uts_len := 64
|
2019-07-19 17:37:33 +09:00
|
|
|
ifneq (,$(BUILD_NUMBER))
|
|
|
|
UTS_RELEASE=$(KERNELRELEASE)-ab$(BUILD_NUMBER)
|
|
|
|
else
|
|
|
|
UTS_RELEASE=$(KERNELRELEASE)
|
|
|
|
endif
|
2006-07-04 06:30:54 +09:00
|
|
|
define filechk_utsrelease.h
|
2019-07-19 17:37:33 +09:00
|
|
|
if [ `echo -n "$(UTS_RELEASE)" | wc -c ` -gt $(uts_len) ]; then \
|
|
|
|
echo '"$(UTS_RELEASE)" exceeds $(uts_len) characters' >&2; \
|
|
|
|
exit 1; \
|
|
|
|
fi; \
|
|
|
|
echo \#define UTS_RELEASE \"$(UTS_RELEASE)\"
|
2006-07-04 06:30:54 +09:00
|
|
|
endef
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
define filechk_version.h
|
2021-02-06 12:50:32 +09:00
|
|
|
if [ $(SUBLEVEL) -gt 255 ]; then \
|
|
|
|
echo \#define LINUX_VERSION_CODE $(shell \
|
2021-02-27 23:20:23 +09:00
|
|
|
expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + 255); \
|
2021-02-06 12:50:32 +09:00
|
|
|
else \
|
|
|
|
echo \#define LINUX_VERSION_CODE $(shell \
|
2021-02-27 23:20:23 +09:00
|
|
|
expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
|
2021-02-06 12:50:32 +09:00
|
|
|
fi; \
|
|
|
|
echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + \
|
|
|
|
((c) > 255 ? 255 : (c)))'
|
2005-04-17 07:20:36 +09:00
|
|
|
endef
|
|
|
|
|
2021-02-27 23:20:23 +09:00
|
|
|
$(version_h): PATCHLEVEL := $(if $(PATCHLEVEL), $(PATCHLEVEL), 0)
|
|
|
|
$(version_h): SUBLEVEL := $(if $(SUBLEVEL), $(SUBLEVEL), 0)
|
2018-07-25 14:16:11 +09:00
|
|
|
$(version_h): FORCE
|
2005-04-17 07:20:36 +09:00
|
|
|
$(call filechk,version.h)
|
2014-11-28 00:13:17 +09:00
|
|
|
$(Q)rm -f $(old_version_h)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2009-10-18 07:52:28 +09:00
|
|
|
include/generated/utsrelease.h: include/config/kernel.release FORCE
|
2006-07-04 06:30:54 +09:00
|
|
|
$(call filechk,utsrelease.h)
|
|
|
|
|
2008-12-16 20:33:43 +09:00
|
|
|
PHONY += headerdep
|
|
|
|
headerdep:
|
2011-04-27 06:17:11 +09:00
|
|
|
$(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \
|
|
|
|
$(srctree)/scripts/headerdep.pl -I$(srctree)/include
|
2008-12-16 20:33:43 +09:00
|
|
|
|
2006-06-18 19:58:39 +09:00
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Kernel headers
|
|
|
|
|
2008-06-05 23:43:46 +09:00
|
|
|
#Default location for installed headers
|
|
|
|
export INSTALL_HDR_PATH = $(objtree)/usr
|
2006-09-25 06:16:03 +09:00
|
|
|
|
kbuild: add 'headers' target to build up uapi headers in usr/include
In Linux build system, build targets and installation targets are
separated.
Examples are:
- 'make vmlinux' -> 'make install'
- 'make modules' -> 'make modules_install'
- 'make dtbs' -> 'make dtbs_install'
- 'make vdso' -> 'make vdso_install'
The intention is to run the build targets under the normal privilege,
then the installation targets under the root privilege since we need
the write permission to the system directories.
We have 'make headers_install' but the corresponding 'make headers'
stage does not exist. The purpose of headers_install is to provide
the kernel interface to C library. So, nobody would try to install
headers to /usr/include directly.
If 'sudo make INSTALL_HDR_PATH=/usr/include headers_install' were run,
some build artifacts in the kernel tree would be owned by root because
some of uapi headers are generated by 'uapi-asm-generic', 'archheaders'
targets.
Anyway, I believe it makes sense to split the header installation into
two stages.
[1] 'make headers'
Process headers in uapi directories by scripts/headers_install.sh
and copy them to usr/include
[2] 'make headers_install'
Copy '*.h' verbatim from usr/include to $(INSTALL_HDR_PATH)/include
For the backward compatibility, 'headers_install' depends on 'headers'.
Some samples expect uapi headers in usr/include. So, the 'headers'
target is useful to build up them in the fixed location usr/include
irrespective of INSTALL_HDR_PATH.
Another benefit is to stop polluting the final destination with the
time-stamp files '.install' and '.check'. Maybe you can see them in
your toolchains.
Lastly, my main motivation is to prepare for compile-testing uapi
headers. To build something, we have to save an object and .*.cmd
somewhere. The usr/include/ will be the work directory for that.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-06-04 19:14:02 +09:00
|
|
|
quiet_cmd_headers_install = INSTALL $(INSTALL_HDR_PATH)/include
|
|
|
|
cmd_headers_install = \
|
|
|
|
mkdir -p $(INSTALL_HDR_PATH); \
|
|
|
|
rsync -mrl --include='*/' --include='*\.h' --exclude='*' \
|
|
|
|
usr/include $(INSTALL_HDR_PATH)
|
2008-06-05 23:43:46 +09:00
|
|
|
|
2006-06-18 19:58:39 +09:00
|
|
|
PHONY += headers_install
|
kbuild: add 'headers' target to build up uapi headers in usr/include
In Linux build system, build targets and installation targets are
separated.
Examples are:
- 'make vmlinux' -> 'make install'
- 'make modules' -> 'make modules_install'
- 'make dtbs' -> 'make dtbs_install'
- 'make vdso' -> 'make vdso_install'
The intention is to run the build targets under the normal privilege,
then the installation targets under the root privilege since we need
the write permission to the system directories.
We have 'make headers_install' but the corresponding 'make headers'
stage does not exist. The purpose of headers_install is to provide
the kernel interface to C library. So, nobody would try to install
headers to /usr/include directly.
If 'sudo make INSTALL_HDR_PATH=/usr/include headers_install' were run,
some build artifacts in the kernel tree would be owned by root because
some of uapi headers are generated by 'uapi-asm-generic', 'archheaders'
targets.
Anyway, I believe it makes sense to split the header installation into
two stages.
[1] 'make headers'
Process headers in uapi directories by scripts/headers_install.sh
and copy them to usr/include
[2] 'make headers_install'
Copy '*.h' verbatim from usr/include to $(INSTALL_HDR_PATH)/include
For the backward compatibility, 'headers_install' depends on 'headers'.
Some samples expect uapi headers in usr/include. So, the 'headers'
target is useful to build up them in the fixed location usr/include
irrespective of INSTALL_HDR_PATH.
Another benefit is to stop polluting the final destination with the
time-stamp files '.install' and '.check'. Maybe you can see them in
your toolchains.
Lastly, my main motivation is to prepare for compile-testing uapi
headers. To build something, we have to save an object and .*.cmd
somewhere. The usr/include/ will be the work directory for that.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-06-04 19:14:02 +09:00
|
|
|
headers_install: headers
|
|
|
|
$(call cmd,headers_install)
|
2012-05-09 03:22:24 +09:00
|
|
|
|
kbuild: add 'headers' target to build up uapi headers in usr/include
In Linux build system, build targets and installation targets are
separated.
Examples are:
- 'make vmlinux' -> 'make install'
- 'make modules' -> 'make modules_install'
- 'make dtbs' -> 'make dtbs_install'
- 'make vdso' -> 'make vdso_install'
The intention is to run the build targets under the normal privilege,
then the installation targets under the root privilege since we need
the write permission to the system directories.
We have 'make headers_install' but the corresponding 'make headers'
stage does not exist. The purpose of headers_install is to provide
the kernel interface to C library. So, nobody would try to install
headers to /usr/include directly.
If 'sudo make INSTALL_HDR_PATH=/usr/include headers_install' were run,
some build artifacts in the kernel tree would be owned by root because
some of uapi headers are generated by 'uapi-asm-generic', 'archheaders'
targets.
Anyway, I believe it makes sense to split the header installation into
two stages.
[1] 'make headers'
Process headers in uapi directories by scripts/headers_install.sh
and copy them to usr/include
[2] 'make headers_install'
Copy '*.h' verbatim from usr/include to $(INSTALL_HDR_PATH)/include
For the backward compatibility, 'headers_install' depends on 'headers'.
Some samples expect uapi headers in usr/include. So, the 'headers'
target is useful to build up them in the fixed location usr/include
irrespective of INSTALL_HDR_PATH.
Another benefit is to stop polluting the final destination with the
time-stamp files '.install' and '.check'. Maybe you can see them in
your toolchains.
Lastly, my main motivation is to prepare for compile-testing uapi
headers. To build something, we have to save an object and .*.cmd
somewhere. The usr/include/ will be the work directory for that.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-06-04 19:14:02 +09:00
|
|
|
PHONY += archheaders archscripts
|
2008-06-05 23:43:46 +09:00
|
|
|
|
2019-06-04 19:14:04 +09:00
|
|
|
hdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj
|
2006-09-25 06:16:03 +09:00
|
|
|
|
2019-10-18 11:44:50 +09:00
|
|
|
techpack-dirs := $(shell find $(srctree)/techpack -maxdepth 1 -mindepth 1 -type d -not -name ".*")
|
|
|
|
techpack-dirs := $(subst $(srctree)/,,$(techpack-dirs))
|
|
|
|
|
kbuild: add 'headers' target to build up uapi headers in usr/include
In Linux build system, build targets and installation targets are
separated.
Examples are:
- 'make vmlinux' -> 'make install'
- 'make modules' -> 'make modules_install'
- 'make dtbs' -> 'make dtbs_install'
- 'make vdso' -> 'make vdso_install'
The intention is to run the build targets under the normal privilege,
then the installation targets under the root privilege since we need
the write permission to the system directories.
We have 'make headers_install' but the corresponding 'make headers'
stage does not exist. The purpose of headers_install is to provide
the kernel interface to C library. So, nobody would try to install
headers to /usr/include directly.
If 'sudo make INSTALL_HDR_PATH=/usr/include headers_install' were run,
some build artifacts in the kernel tree would be owned by root because
some of uapi headers are generated by 'uapi-asm-generic', 'archheaders'
targets.
Anyway, I believe it makes sense to split the header installation into
two stages.
[1] 'make headers'
Process headers in uapi directories by scripts/headers_install.sh
and copy them to usr/include
[2] 'make headers_install'
Copy '*.h' verbatim from usr/include to $(INSTALL_HDR_PATH)/include
For the backward compatibility, 'headers_install' depends on 'headers'.
Some samples expect uapi headers in usr/include. So, the 'headers'
target is useful to build up them in the fixed location usr/include
irrespective of INSTALL_HDR_PATH.
Another benefit is to stop polluting the final destination with the
time-stamp files '.install' and '.check'. Maybe you can see them in
your toolchains.
Lastly, my main motivation is to prepare for compile-testing uapi
headers. To build something, we have to save an object and .*.cmd
somewhere. The usr/include/ will be the work directory for that.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-06-04 19:14:02 +09:00
|
|
|
PHONY += headers
|
|
|
|
headers: $(version_h) scripts_unifdef uapi-asm-generic archheaders archscripts
|
2017-10-04 12:56:04 +09:00
|
|
|
$(if $(wildcard $(srctree)/arch/$(SRCARCH)/include/uapi/asm/Kbuild),, \
|
2012-10-03 02:01:57 +09:00
|
|
|
$(error Headers not exportable for the $(SRCARCH) architecture))
|
2019-06-04 19:14:03 +09:00
|
|
|
$(Q)$(MAKE) $(hdr-inst)=include/uapi
|
|
|
|
$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi
|
2019-10-18 11:44:50 +09:00
|
|
|
$(Q)for d in $(techpack-dirs); do \
|
|
|
|
$(MAKE) $(hdr-inst)=$$d/include/uapi; \
|
|
|
|
done
|
2006-06-18 19:58:39 +09:00
|
|
|
|
2019-11-07 16:14:41 +09:00
|
|
|
# Deprecated. It is no-op now.
|
2006-06-18 20:02:10 +09:00
|
|
|
PHONY += headers_check
|
2019-11-07 16:14:41 +09:00
|
|
|
headers_check:
|
|
|
|
@:
|
2019-10-18 11:44:50 +09:00
|
|
|
$(Q)for d in $(techpack-dirs); do \
|
|
|
|
$(MAKE) $(hdr-inst)=$$d/include/uapi HDRCHECK=1; \
|
|
|
|
done
|
2006-06-18 20:02:10 +09:00
|
|
|
|
2019-06-04 19:13:59 +09:00
|
|
|
ifdef CONFIG_HEADERS_INSTALL
|
kbuild: add 'headers' target to build up uapi headers in usr/include
In Linux build system, build targets and installation targets are
separated.
Examples are:
- 'make vmlinux' -> 'make install'
- 'make modules' -> 'make modules_install'
- 'make dtbs' -> 'make dtbs_install'
- 'make vdso' -> 'make vdso_install'
The intention is to run the build targets under the normal privilege,
then the installation targets under the root privilege since we need
the write permission to the system directories.
We have 'make headers_install' but the corresponding 'make headers'
stage does not exist. The purpose of headers_install is to provide
the kernel interface to C library. So, nobody would try to install
headers to /usr/include directly.
If 'sudo make INSTALL_HDR_PATH=/usr/include headers_install' were run,
some build artifacts in the kernel tree would be owned by root because
some of uapi headers are generated by 'uapi-asm-generic', 'archheaders'
targets.
Anyway, I believe it makes sense to split the header installation into
two stages.
[1] 'make headers'
Process headers in uapi directories by scripts/headers_install.sh
and copy them to usr/include
[2] 'make headers_install'
Copy '*.h' verbatim from usr/include to $(INSTALL_HDR_PATH)/include
For the backward compatibility, 'headers_install' depends on 'headers'.
Some samples expect uapi headers in usr/include. So, the 'headers'
target is useful to build up them in the fixed location usr/include
irrespective of INSTALL_HDR_PATH.
Another benefit is to stop polluting the final destination with the
time-stamp files '.install' and '.check'. Maybe you can see them in
your toolchains.
Lastly, my main motivation is to prepare for compile-testing uapi
headers. To build something, we have to save an object and .*.cmd
somewhere. The usr/include/ will be the work directory for that.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-06-04 19:14:02 +09:00
|
|
|
prepare: headers
|
2019-06-04 19:13:59 +09:00
|
|
|
endif
|
2006-06-18 20:02:10 +09:00
|
|
|
|
2019-06-04 19:14:01 +09:00
|
|
|
PHONY += scripts_unifdef
|
|
|
|
scripts_unifdef: scripts_basic
|
|
|
|
$(Q)$(MAKE) $(build)=scripts scripts/unifdef
|
|
|
|
|
2014-08-08 04:07:46 +09:00
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Kernel selftest
|
|
|
|
|
|
|
|
PHONY += kselftest
|
|
|
|
kselftest:
|
2017-09-07 07:44:35 +09:00
|
|
|
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests
|
2014-08-08 04:07:46 +09:00
|
|
|
|
2019-09-27 07:40:14 +09:00
|
|
|
kselftest-%: FORCE
|
|
|
|
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests $*
|
2015-10-08 11:41:18 +09:00
|
|
|
|
2016-01-08 16:27:34 +09:00
|
|
|
PHONY += kselftest-merge
|
|
|
|
kselftest-merge:
|
|
|
|
$(if $(wildcard $(objtree)/.config),, $(error No .config exists, config your kernel first!))
|
Merge remote-tracking branch 'remotes/origin/tmp-f686d9f' into msm-lahaina
* remotes/origin/tmp-f686d9f:
ANDROID: update abi_gki_aarch64.xml for 5.2-rc6
Linux 5.2-rc6
Revert "iommu/vt-d: Fix lock inversion between iommu->lock and device_domain_lock"
Bluetooth: Fix regression with minimum encryption key size alignment
tcp: refine memory limit test in tcp_fragment()
x86/vdso: Prevent segfaults due to hoisted vclock reads
SUNRPC: Fix a credential refcount leak
Revert "SUNRPC: Declare RPC timers as TIMER_DEFERRABLE"
net :sunrpc :clnt :Fix xps refcount imbalance on the error path
NFS4: Only set creation opendata if O_CREAT
ANDROID: gki_defconfig: workaround to enable configs
ANDROID: gki_defconfig: more configs for partners
ARM: 8867/1: vdso: pass --be8 to linker if necessary
KVM: nVMX: reorganize initial steps of vmx_set_nested_state
KVM: PPC: Book3S HV: Invalidate ERAT when flushing guest TLB entries
habanalabs: use u64_to_user_ptr() for reading user pointers
nfsd: replace Jeff by Chuck as nfsd co-maintainer
inet: clear num_timeout reqsk_alloc()
PCI/P2PDMA: Ignore root complex whitelist when an IOMMU is present
net: mvpp2: debugfs: Add pmap to fs dump
ipv6: Default fib6_type to RTN_UNICAST when not set
net: hns3: Fix inconsistent indenting
net/af_iucv: always register net_device notifier
net/af_iucv: build proper skbs for HiperTransport
net/af_iucv: remove GFP_DMA restriction for HiperTransport
doc: fix documentation about UIO_MEM_LOGICAL using
MAINTAINERS / Documentation: Thorsten Scherer is the successor of Gavin Schenk
docs: fb: Add TER16x32 to the available font names
MAINTAINERS: fpga: hand off maintainership to Moritz
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 507
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 506
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 505
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 504
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 503
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 502
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 501
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 499
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 498
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 497
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 496
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 495
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 491
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 490
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 489
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 488
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 487
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 486
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 485
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 484
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 482
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 481
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 480
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 479
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 477
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 475
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 474
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 473
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 472
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 471
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 469
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 468
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 467
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 466
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 465
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 464
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 463
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 462
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 461
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 460
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 459
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 457
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 456
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 455
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 454
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 452
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 451
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 250
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 248
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 247
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 246
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 245
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 244
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 243
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 239
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 238
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 237
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 235
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 233
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 232
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 231
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 230
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 226
KVM: arm/arm64: Fix emulated ptimer irq injection
net: dsa: mv88e6xxx: fix shift of FID bits in mv88e6185_g1_vtu_loadpurge()
tests: kvm: Check for a kernel warning
kvm: tests: Sort tests in the Makefile alphabetically
KVM: x86/mmu: Allocate PAE root array when using SVM's 32-bit NPT
KVM: x86: Modify struct kvm_nested_state to have explicit fields for data
fanotify: update connector fsid cache on add mark
quota: fix a problem about transfer quota
drm/i915: Don't clobber M/N values during fastset check
powerpc: enable a 30-bit ZONE_DMA for 32-bit pmac
ovl: make i_ino consistent with st_ino in more cases
scsi: qla2xxx: Fix hardlockup in abort command during driver remove
scsi: ufs: Avoid runtime suspend possibly being blocked forever
scsi: qedi: update driver version to 8.37.0.20
scsi: qedi: Check targetname while finding boot target information
hvsock: fix epollout hang from race condition
net/udp_gso: Allow TX timestamp with UDP GSO
net: netem: fix use after free and double free with packet corruption
net: netem: fix backlog accounting for corrupted GSO frames
net: lio_core: fix potential sign-extension overflow on large shift
tipc: pass tunnel dev as NULL to udp_tunnel(6)_xmit_skb
ip6_tunnel: allow not to count pkts on tstats by passing dev as NULL
ip_tunnel: allow not to count pkts on tstats by setting skb's dev to NULL
apparmor: reset pos on failure to unpack for various functions
apparmor: enforce nullbyte at end of tag string
apparmor: fix PROFILE_MEDIATES for untrusted input
RDMA/efa: Handle mmap insertions overflow
tun: wake up waitqueues after IFF_UP is set
drm: return -EFAULT if copy_to_user() fails
net: remove duplicate fetch in sock_getsockopt
tipc: fix issues with early FAILOVER_MSG from peer
bnx2x: Check if transceiver implements DDM before access
xhci: detect USB 3.2 capable host controllers correctly
usb: xhci: Don't try to recover an endpoint if port is in error state.
KVM: fix typo in documentation
drm/panfrost: Make sure a BO is only unmapped when appropriate
md: fix for divide error in status_resync
soc: ixp4xx: npe: Fix an IS_ERR() vs NULL check in probe
arm64/mm: don't initialize pgd_cache twice
MAINTAINERS: Update my email address
arm64/sve: <uapi/asm/ptrace.h> should not depend on <uapi/linux/prctl.h>
ovl: fix typo in MODULE_PARM_DESC
ovl: fix bogus -Wmaybe-unitialized warning
ovl: don't fail with disconnected lower NFS
mmc: core: Prevent processing SDIO IRQs when the card is suspended
mmc: sdhci: sdhci-pci-o2micro: Correctly set bus width when tuning
brcmfmac: sdio: Don't tune while the card is off
mmc: core: Add sdio_retune_hold_now() and sdio_retune_release()
brcmfmac: sdio: Disable auto-tuning around commands expected to fail
mmc: core: API to temporarily disable retuning for SDIO CRC errors
Revert "brcmfmac: disable command decode in sdio_aos"
ARM: ixp4xx: include irqs.h where needed
ARM: ixp4xx: mark ixp4xx_irq_setup as __init
ARM: ixp4xx: don't select SERIAL_OF_PLATFORM
firmware: trusted_foundations: add ARMv7 dependency
usb: dwc2: Use generic PHY width in params setup
RDMA/efa: Fix success return value in case of error
IB/hfi1: Handle port down properly in pio
IB/hfi1: Handle wakeup of orphaned QPs for pio
IB/hfi1: Wakeup QPs orphaned on wait list after flush
IB/hfi1: Use aborts to trigger RC throttling
IB/hfi1: Create inline to get extended headers
IB/hfi1: Silence txreq allocation warnings
IB/hfi1: Avoid hardlockup with flushlist_lock
KVM: PPC: Book3S HV: Only write DAWR[X] when handling h_set_dawr in real mode
KVM: PPC: Book3S HV: Fix r3 corruption in h_set_dabr()
fs/namespace: fix unprivileged mount propagation
vfs: fsmount: add missing mntget()
cifs: fix GlobalMid_Lock bug in cifs_reconnect
SMB3: retry on STATUS_INSUFFICIENT_RESOURCES instead of failing write
staging: erofs: add requirements field in superblock
arm64: ssbd: explicitly depend on <linux/prctl.h>
block: fix page leak when merging to same page
block: return from __bio_try_merge_page if merging occured in the same page
Btrfs: fix failure to persist compression property xattr deletion on fsync
riscv: remove unused barrier defines
usb: chipidea: udc: workaround for endpoint conflict issue
MAINTAINERS: Change QCOM repo location
mmc: mediatek: fix SDIO IRQ detection issue
mmc: mediatek: fix SDIO IRQ interrupt handle flow
mmc: core: complete HS400 before checking status
riscv: mm: synchronize MMU after pte change
MAINTAINERS: Update my email address to use @kernel.org
ANDROID: update abi_gki_aarch64.xml for 5.2-rc5
riscv: dts: add initial board data for the SiFive HiFive Unleashed
riscv: dts: add initial support for the SiFive FU540-C000 SoC
dt-bindings: riscv: convert cpu binding to json-schema
dt-bindings: riscv: sifive: add YAML documentation for the SiFive FU540
arch: riscv: add support for building DTB files from DT source data
drm/i915/gvt: ignore unexpected pvinfo write
lapb: fixed leak of control-blocks.
tipc: purge deferredq list for each grp member in tipc_group_delete
ax25: fix inconsistent lock state in ax25_destroy_timer
neigh: fix use-after-free read in pneigh_get_next
tcp: fix compile error if !CONFIG_SYSCTL
hv_sock: Suppress bogus "may be used uninitialized" warnings
be2net: Fix number of Rx queues used for flow hashing
net: handle 802.1P vlan 0 packets properly
Linux 5.2-rc5
tcp: enforce tcp_min_snd_mss in tcp_mtu_probing()
tcp: add tcp_min_snd_mss sysctl
tcp: tcp_fragment() should apply sane memory limits
tcp: limit payload size of sacked skbs
Revert "net: phylink: set the autoneg state in phylink_phy_change"
bpf: fix nested bpf tracepoints with per-cpu data
bpf: Fix out of bounds memory access in bpf_sk_storage
vsock/virtio: set SOCK_DONE on peer shutdown
net: dsa: rtl8366: Fix up VLAN filtering
net: phylink: set the autoneg state in phylink_phy_change
powerpc/32: fix build failure on book3e with KVM
powerpc/booke: fix fast syscall entry on SMP
powerpc/32s: fix initial setup of segment registers on secondary CPU
x86/microcode, cpuhotplug: Add a microcode loader CPU hotplug callback
net: add high_order_alloc_disable sysctl/static key
tcp: add tcp_tx_skb_cache sysctl
tcp: add tcp_rx_skb_cache sysctl
sysctl: define proc_do_static_key()
hv_netvsc: Set probe mode to sync
net: sched: flower: don't call synchronize_rcu() on mask creation
net: dsa: fix warning same module names
sctp: Free cookie before we memdup a new one
net: dsa: microchip: Don't try to read stats for unused ports
qmi_wwan: extend permitted QMAP mux_id value range
qmi_wwan: avoid RCU stalls on device disconnect when in QMAP mode
qmi_wwan: add network device usage statistics for qmimux devices
qmi_wwan: add support for QMAP padding in the RX path
bpf, x64: fix stack layout of JITed bpf code
Smack: Restore the smackfsdef mount option and add missing prefixes
bpf, devmap: Add missing RCU read lock on flush
bpf, devmap: Add missing bulk queue free
bpf, devmap: Fix premature entry free on destroying map
ftrace: Fix NULL pointer dereference in free_ftrace_func_mapper()
module: Fix livepatch/ftrace module text permissions race
tracing/uprobe: Fix obsolete comment on trace_uprobe_create()
tracing/uprobe: Fix NULL pointer dereference in trace_uprobe_create()
tracing: Make two symbols static
tracing: avoid build warning with HAVE_NOP_MCOUNT
tracing: Fix out-of-range read in trace_stack_print()
gfs2: Fix rounding error in gfs2_iomap_page_prepare
net: phylink: further mac_config documentation improvements
nfc: Ensure presence of required attributes in the deactivate_target handler
btrfs: start readahead also in seed devices
x86/kasan: Fix boot with 5-level paging and KASAN
cfg80211: report measurement start TSF correctly
cfg80211: fix memory leak of wiphy device name
cfg80211: util: fix bit count off by one
mac80211: do not start any work during reconfigure flow
cfg80211: use BIT_ULL in cfg80211_parse_mbssid_data()
mac80211: only warn once on chanctx_conf being NULL
mac80211: drop robust management frames from unknown TA
gpu: ipu-v3: image-convert: Fix image downsize coefficients
gpu: ipu-v3: image-convert: Fix input bytesperline for packed formats
gpu: ipu-v3: image-convert: Fix input bytesperline width/height align
thunderbolt: Implement CIO reset correctly for Titan Ridge
ARM: davinci: da8xx: specify dma_coherent_mask for lcdc
ARM: davinci: da850-evm: call regulator_has_full_constraints()
timekeeping: Repair ktime_get_coarse*() granularity
Revert "ALSA: hda/realtek - Improve the headset mic for Acer Aspire laptops"
ANDROID: update abi_gki_aarch64.xml
mm/devm_memremap_pages: fix final page put race
PCI/P2PDMA: track pgmap references per resource, not globally
lib/genalloc: introduce chunk owners
PCI/P2PDMA: fix the gen_pool_add_virt() failure path
mm/devm_memremap_pages: introduce devm_memunmap_pages
drivers/base/devres: introduce devm_release_action()
mm/vmscan.c: fix trying to reclaim unevictable LRU page
coredump: fix race condition between collapse_huge_page() and core dumping
mm/mlock.c: change count_mm_mlocked_page_nr return type
mm: mmu_gather: remove __tlb_reset_range() for force flush
fs/ocfs2: fix race in ocfs2_dentry_attach_lock()
mm/vmscan.c: fix recent_rotated history
mm/mlock.c: mlockall error for flag MCL_ONFAULT
scripts/decode_stacktrace.sh: prefix addr2line with $CROSS_COMPILE
mm/list_lru.c: fix memory leak in __memcg_init_list_lru_node
mm: memcontrol: don't batch updates of local VM stats and events
PCI: PM: Skip devices in D0 for suspend-to-idle
ANDROID: Removed extraneous configs from gki
powerpc/bpf: use unsigned division instruction for 64-bit operations
bpf: fix div64 overflow tests to properly detect errors
bpf: sync BPF_FIB_LOOKUP flag changes with BPF uapi
bpf: simplify definition of BPF_FIB_LOOKUP related flags
cifs: add spinlock for the openFileList to cifsInodeInfo
cifs: fix panic in smb2_reconnect
x86/fpu: Don't use current->mm to check for a kthread
KVM: nVMX: use correct clean fields when copying from eVMCS
vfio-ccw: Destroy kmem cache region on module exit
block/ps3vram: Use %llu to format sector_t after LBDAF removal
libata: Extend quirks for the ST1000LM024 drives with NOLPM quirk
bcache: only set BCACHE_DEV_WB_RUNNING when cached device attached
bcache: fix stack corruption by PRECEDING_KEY()
arm64/sve: Fix missing SVE/FPSIMD endianness conversions
blk-mq: remove WARN_ON(!q->elevator) from blk_mq_sched_free_requests
blkio-controller.txt: Remove references to CFQ
block/switching-sched.txt: Update to blk-mq schedulers
null_blk: remove duplicate check for report zone
blk-mq: no need to check return value of debugfs_create functions
io_uring: fix memory leak of UNIX domain socket inode
block: force select mq-deadline for zoned block devices
binder: fix possible UAF when freeing buffer
drm/amdgpu: return 0 by default in amdgpu_pm_load_smu_firmware
drm/amdgpu: Fix bounds checking in amdgpu_ras_is_supported()
ANDROID: x86 gki_defconfig: enable DMA_CMA
ANDROID: Fixed x86 regression
ANDROID: gki_defconfig: enable DMA_CMA
Input: synaptics - enable SMBus on ThinkPad E480 and E580
net: mvpp2: prs: Use the correct helpers when removing all VID filters
net: mvpp2: prs: Fix parser range for VID filtering
mlxsw: spectrum: Disallow prio-tagged packets when PVID is removed
mlxsw: spectrum_buffers: Reduce pool size on Spectrum-2
selftests: tc_flower: Add TOS matching test
mlxsw: spectrum_flower: Fix TOS matching
selftests: mlxsw: Test nexthop offload indication
mlxsw: spectrum_router: Refresh nexthop neighbour when it becomes dead
mlxsw: spectrum: Use different seeds for ECMP and LAG hash
net: tls, correctly account for copied bytes with multiple sk_msgs
vrf: Increment Icmp6InMsgs on the original netdev
cpuset: restore sanity to cpuset_cpus_allowed_fallback()
net: ethtool: Allow matching on vlan DEI bit
linux-next: DOC: RDS: Fix a typo in rds.txt
x86/kgdb: Return 0 from kgdb_arch_set_breakpoint()
mpls: fix af_mpls dependencies for real
selinux: fix a missing-check bug in selinux_sb_eat_lsm_opts()
selinux: fix a missing-check bug in selinux_add_mnt_opt( )
arm64: tlbflush: Ensure start/end of address range are aligned to stride
usb: typec: Make sure an alt mode exist before getting its partner
KVM: arm/arm64: vgic: Fix kvm_device leak in vgic_its_destroy
KVM: arm64: Filter out invalid core register IDs in KVM_GET_REG_LIST
KVM: arm64: Implement vq_present() as a macro
xdp: check device pointer before clearing
bpf: net: Set sk_bpf_storage back to NULL for cloned sk
Btrfs: fix race between block group removal and block group allocation
clocksource/drivers/arm_arch_timer: Don't trace count reader functions
i2c: pca-platform: Fix GPIO lookup code
thunderbolt: Make sure device runtime resume completes before taking domain lock
drm: add fallback override/firmware EDID modes workaround
i2c: acorn: fix i2c warning
arm64: Don't unconditionally add -Wno-psabi to KBUILD_CFLAGS
drm/edid: abstract override/firmware EDID retrieval
platform/mellanox: mlxreg-hotplug: Add devm_free_irq call to remove flow
platform/x86: mlx-platform: Fix parent device in i2c-mux-reg device registration
platform/x86: intel-vbtn: Report switch events when event wakes device
platform/x86: asus-wmi: Only Tell EC the OS will handle display hotkeys from asus_nb_wmi
ARM: mvebu_v7_defconfig: fix Ethernet on Clearfog
x86/resctrl: Prevent NULL pointer dereference when local MBM is disabled
x86/resctrl: Don't stop walking closids when a locksetup group is found
iommu/arm-smmu: Avoid constant zero in TLBI writes
drm/i915/perf: fix whitelist on Gen10+
drm/i915/sdvo: Implement proper HDMI audio support for SDVO
drm/i915: Fix per-pixel alpha with CCS
drm/i915/dmc: protect against reading random memory
drm/i915/dsi: Use a fuzzy check for burst mode clock check
Input: imx_keypad - make sure keyboard can always wake up system
selinux: log raw contexts as untrusted strings
ptrace: restore smp_rmb() in __ptrace_may_access()
IB/hfi1: Correct tid qp rcd to match verbs context
IB/hfi1: Close PSM sdma_progress sleep window
IB/hfi1: Validate fault injection opcode user input
geneve: Don't assume linear buffers in error handler
vxlan: Don't assume linear buffers in error handler
net: openvswitch: do not free vport if register_netdevice() is failed.
net: correct udp zerocopy refcnt also when zerocopy only on append
drm/amdgpu/{uvd,vcn}: fetch ring's read_ptr after alloc
ovl: fix wrong flags check in FS_IOC_FS[SG]ETXATTR ioctls
riscv: Fix udelay in RV32.
drm/vmwgfx: fix a warning due to missing dma_parms
riscv: export pm_power_off again
drm/vmwgfx: Honor the sg list segment size limitation
RISC-V: defconfig: enable clocks, serial console
drm/vmwgfx: Use the backdoor port if the HB port is not available
bpf: lpm_trie: check left child of last leftmost node for NULL
Revert "fuse: require /dev/fuse reads to have enough buffer capacity"
ALSA: ice1712: Check correct return value to snd_i2c_sendbytes (EWS/DMX 6Fire)
ALSA: oxfw: allow PCM capture for Stanton SCS.1m
ALSA: firewire-motu: fix destruction of data for isochronous resources
s390/ctl_reg: mark __ctl_set_bit and __ctl_clear_bit as __always_inline
s390/boot: disable address-of-packed-member warning
ANDROID: update gki aarch64 ABI representation
cgroup: Fix css_task_iter_advance_css_set() cset skip condition
drm/panfrost: Require the simple_ondemand governor
drm/panfrost: make devfreq optional again
drm/gem_shmem: Use a writecombine mapping for ->vaddr
mmc: sdhi: disallow HS400 for M3-W ES1.2, RZ/G2M, and V3H
ASoC: Intel: sst: fix kmalloc call with wrong flags
ASoC: core: Fix deadlock in snd_soc_instantiate_card()
cgroup/bfq: revert bfq.weight symlink change
ARM: dts: am335x phytec boards: Fix cd-gpios active level
ARM: dts: dra72x: Disable usb4_tm target module
nfp: ensure skb network header is set for packet redirect
tcp: fix undo spurious SYNACK in passive Fast Open
mpls: fix af_mpls dependencies
ibmvnic: Fix unchecked return codes of memory allocations
ibmvnic: Refresh device multicast list after reset
ibmvnic: Do not close unopened driver during reset
mpls: fix warning with multi-label encap
net: phy: rename Asix Electronics PHY driver
ipv6: flowlabel: fl6_sock_lookup() must use atomic_inc_not_zero
net: ipv4: fib_semantics: fix uninitialized variable
Input: iqs5xx - get axis info before calling input_mt_init_slots()
Linux 5.2-rc4
drm: panel-orientation-quirks: Add quirk for GPD MicroPC
drm: panel-orientation-quirks: Add quirk for GPD pocket2
counter/ftm-quaddec: Add missing dependencies in Kconfig
staging: iio: adt7316: Fix build errors when GPIOLIB is not set
x86/fpu: Update kernel's FPU state before using for the fsave header
MAINTAINERS: Karthikeyan Ramasubramanian is MIA
i2c: xiic: Add max_read_len quirk
ANDROID: update ABI representation
gpio: pca953x: hack to fix 24 bit gpio expanders
net/mlx5e: Support tagged tunnel over bond
net/mlx5e: Avoid detaching non-existing netdev under switchdev mode
net/mlx5e: Fix source port matching in fdb peer flow rule
net/mlx5e: Replace reciprocal_scale in TX select queue function
net/mlx5e: Add ndo_set_feature for uplink representor
net/mlx5: Avoid reloading already removed devices
net/mlx5: Update pci error handler entries and command translation
RAS/CEC: Convert the timer callback to a workqueue
RAS/CEC: Fix binary search function
x86/mm/KASLR: Compute the size of the vmemmap section properly
can: purge socket error queue on sock destruct
can: flexcan: Remove unneeded registration message
can: af_can: Fix error path of can_init()
can: m_can: implement errata "Needless activation of MRAF irq"
can: mcp251x: add support for mcp25625
dt-bindings: can: mcp251x: add mcp25625 support
can: xilinx_can: use correct bittiming_const for CAN FD core
can: flexcan: fix timeout when set small bitrate
can: usb: Kconfig: Remove duplicate menu entry
lockref: Limit number of cmpxchg loop retries
uaccess: add noop untagged_addr definition
x86/insn-eval: Fix use-after-free access to LDT entry
kbuild: use more portable 'command -v' for cc-cross-prefix
s390/unwind: correct stack switching during unwind
scsi: hpsa: correct ioaccel2 chaining
btrfs: Always trim all unallocated space in btrfs_trim_free_extents
netfilter: ipv6: nf_defrag: accept duplicate fragments again
powerpc/32s: fix booting with CONFIG_PPC_EARLY_DEBUG_BOOTX
drm/meson: fix G12A primary plane disabling
drm/meson: fix primary plane disabling
drm/meson: fix G12A HDMI PLL settings for 4K60 1000/1001 variations
block, bfq: add weight symlink to the bfq.weight cgroup parameter
cgroup: let a symlink too be created with a cftype file
powerpc/64s: __find_linux_pte() synchronization vs pmdp_invalidate()
powerpc/64s: Fix THP PMD collapse serialisation
powerpc: Fix kexec failure on book3s/32
drm/nouveau/secboot/gp10[2467]: support newer FW to fix SEC2 failures on some boards
drm/nouveau/secboot: enable loading of versioned LS PMU/SEC2 ACR msgqueue FW
drm/nouveau/secboot: split out FW version-specific LS function pointers
drm/nouveau/secboot: pass max supported FW version to LS load funcs
drm/nouveau/core: support versioned firmware loading
drm/nouveau/core: pass subdev into nvkm_firmware_get, rather than device
block: free sched's request pool in blk_cleanup_queue
bpf: expand section tests for test_section_names
bpf: more msg_name rewrite tests to test_sock_addr
bpf, bpftool: enable recvmsg attach types
bpf, libbpf: enable recvmsg attach types
bpf: sync tooling uapi header
bpf: fix unconnected udp hooks
vfio/mdev: Synchronize device create/remove with parent removal
vfio/mdev: Avoid creating sysfs remove file on stale device removal
pktgen: do not sleep with the thread lock held.
net: mvpp2: Use strscpy to handle stat strings
net: rds: fix memory leak in rds_ib_flush_mr_pool
ipv6: fix EFAULT on sendto with icmpv6 and hdrincl
ipv6: use READ_ONCE() for inet->hdrincl as in ipv4
soundwire: intel: set dai min and max channels correctly
soundwire: stream: fix bad unlock balance
x86/fpu: Use fault_in_pages_writeable() for pre-faulting
nvme-rdma: use dynamic dma mapping per command
nvme: Fix u32 overflow in the number of namespace list calculation
vfio/mdev: Improve the create/remove sequence
SoC: rt274: Fix internal jack assignment in set_jack callback
ALSA: hdac: fix memory release for SST and SOF drivers
ASoC: SOF: Intel: hda: use the defined ppcap functions
ASoC: core: move DAI pre-links initiation to snd_soc_instantiate_card
ASoC: Intel: cht_bsw_rt5672: fix kernel oops with platform_name override
ASoC: Intel: cht_bsw_nau8824: fix kernel oops with platform_name override
ASoC: Intel: bytcht_es8316: fix kernel oops with platform_name override
ASoC: Intel: cht_bsw_max98090: fix kernel oops with platform_name override
Revert "gfs2: Replace gl_revokes with a GLF flag"
arm64: Silence gcc warnings about arch ABI drift
parisc: Fix crash due alternative coding for NP iopdir_fdc bit
parisc: Use lpa instruction to load physical addresses in driver code
parisc: configs: Remove useless UEVENT_HELPER_PATH
parisc: Use implicit space register selection for loading the coherence index of I/O pdirs
usb: gadget: udc: lpc32xx: fix return value check in lpc32xx_udc_probe()
usb: gadget: dwc2: fix zlp handling
usb: dwc2: Set actual frame number for completed ISOC transfer for none DDMA
usb: gadget: udc: lpc32xx: allocate descriptor with GFP_ATOMIC
usb: gadget: fusb300_udc: Fix memory leak of fusb300->ep[i]
usb: phy: mxs: Disable external charger detect in mxs_phy_hw_init()
usb: dwc2: Fix DMA cache alignment issues
usb: dwc2: host: Fix wMaxPacketSize handling (fix webcam regression)
ARM64: trivial: s/TIF_SECOMP/TIF_SECCOMP/ comment typo fix
drm/komeda: Potential error pointer dereference
drm/komeda: remove set but not used variable 'kcrtc'
x86/CPU: Add more Icelake model numbers
hwmon: (pmbus/core) Treat parameters as paged if on multiple pages
hwmon: (pmbus/core) mutex_lock write in pmbus_set_samples
hwmon: (core) add thermal sensors only if dev->of_node is present
Revert "fib_rules: return 0 directly if an exactly same rule exists when NLM_F_EXCL not supplied"
net: aquantia: fix wol configuration not applied sometimes
ethtool: fix potential userspace buffer overflow
Fix memory leak in sctp_process_init
net: rds: fix memory leak when unload rds_rdma
ipv6: fix the check before getting the cookie in rt6_get_cookie
ipv4: not do cache for local delivery if bc_forwarding is enabled
selftests: vm: Fix test build failure when built by itself
tools: bpftool: Fix JSON output when lookup fails
mmc: also set max_segment_size in the device
mtip32xx: also set max_segment_size in the device
rsxx: don't call dma_set_max_seg_size
nvme-pci: don't limit DMA segement size
s390/qeth: handle error when updating TX queue count
s390/qeth: fix VLAN attribute in bridge_hostnotify udev event
s390/qeth: check dst entry before use
s390/qeth: handle limited IPv4 broadcast in L3 TX path
ceph: fix error handling in ceph_get_caps()
ceph: avoid iput_final() while holding mutex or in dispatch thread
ceph: single workqueue for inode related works
cgroup: css_task_iter_skip()'d iterators must be advanced before accessed
drm/amd/amdgpu: add RLC firmware to support raven1 refresh
drm/amd/powerplay: add set_power_profile_mode for raven1_refresh
drm/amdgpu: fix ring test failure issue during s3 in vce 3.0 (V2)
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 450
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 449
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 448
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 446
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 445
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 444
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 443
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 442
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 440
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 438
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 437
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 436
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 435
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 434
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 433
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 432
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 431
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 430
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 429
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 428
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 426
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 424
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 423
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 422
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 421
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 420
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 419
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 418
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 417
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 416
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 414
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 412
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 411
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 410
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 409
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 408
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 407
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 406
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 405
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 404
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 403
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 402
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 401
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 400
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 399
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 397
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 396
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 395
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 394
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 393
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 392
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 391
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 390
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 389
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 388
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 387
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 380
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 378
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 377
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 376
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 375
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 373
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 372
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 371
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 370
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 367
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 365
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 364
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 363
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 362
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 354
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 353
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 352
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 351
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 350
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 349
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 348
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 347
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 346
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 345
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 344
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 343
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 342
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 341
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 340
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 339
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 338
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 336
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 335
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 334
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 332
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 330
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 328
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 326
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 325
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 324
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 323
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 322
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 321
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 320
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 316
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 315
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 314
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 313
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 312
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 311
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 310
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 309
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 308
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 307
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 305
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 301
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 300
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 299
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 297
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 296
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 295
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 294
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 292
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 291
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 290
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 289
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 287
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 285
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 284
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 283
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 281
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 280
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 278
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 277
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 276
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 275
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 274
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 273
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 272
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 271
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 270
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 269
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 268
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 267
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 266
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 265
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 264
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 263
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 262
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 260
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 258
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 257
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 256
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 254
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 253
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 252
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 251
lib/test_stackinit: Handle Clang auto-initialization pattern
block: Drop unlikely before IS_ERR(_OR_NULL)
xen/swiotlb: don't initialize swiotlb twice on arm64
s390/mm: fix address space detection in exception handling
HID: logitech-dj: Fix 064d:c52f receiver support
Revert "HID: core: Call request_module before doing device_add"
Revert "HID: core: Do not call request_module() in async context"
Revert "HID: Increase maximum report size allowed by hid_field_extract()"
tests: fix pidfd-test compilation
signal: improve comments
samples: fix pidfd-metadata compilation
arm64: arch_timer: mark functions as __always_inline
arm64: smp: Moved cpu_logical_map[] to smp.h
arm64: cpufeature: Fix missing ZFR0 in __read_sysreg_by_encoding()
selftests/bpf: move test_lirc_mode2_user to TEST_GEN_PROGS_EXTENDED
USB: Fix chipmunk-like voice when using Logitech C270 for recording audio.
USB: usb-storage: Add new ID to ums-realtek
udmabuf: actually unmap the scatterlist
net: fix indirect calls helpers for ptype list hooks.
net: ipvlan: Fix ipvlan device tso disabled while NETIF_F_IP_CSUM is set
scsi: smartpqi: unlock on error in pqi_submit_raid_request_synchronous()
scsi: ufs: Check that space was properly alloced in copy_query_response
udp: only choose unbound UDP socket for multicast when not in a VRF
net/tls: replace the sleeping lock around RX resync with a bit lock
Revert "net/tls: avoid NULL-deref on resync during device removal"
block: aoe: no need to check return value of debugfs_create functions
net: dsa: sja1105: Fix link speed not working at 100 Mbps and below
net: phylink: avoid reducing support mask
scripts/checkstack.pl: Fix arm64 wrong or unknown architecture
kbuild: tar-pkg: enable communication with jobserver
kconfig: tests: fix recursive inclusion unit test
kbuild: teach kselftest-merge to find nested config files
nvmet: fix data_len to 0 for bdev-backed write_zeroes
MAINTAINERS: Hand over skd maintainership
ASoC: sun4i-i2s: Add offset to RX channel select
ASoC: sun4i-i2s: Fix sun8i tx channel offset mask
ASoC: max98090: remove 24-bit format support if RJ is 0
ASoC: da7219: Fix build error without CONFIG_I2C
ASoC: SOF: Intel: hda: Fix COMPILE_TEST build error
drm/arm/hdlcd: Allow a bit of clock tolerance
drm/arm/hdlcd: Actually validate CRTC modes
drm/arm/mali-dp: Add a loop around the second set CVAL and try 5 times
drm/komeda: fixing of DMA mapping sg segment warning
netfilter: ipv6: nf_defrag: fix leakage of unqueued fragments
habanalabs: Read upper bits of trace buffer from RWPHI
arm64: arch_k3: Fix kconfig dependency warning
drm: don't block fb changes for async plane updates
drm/vc4: fix fb references in async update
drm/msm: fix fb references in async update
drm/amd: fix fb references in async update
drm/rockchip: fix fb references in async update
xen-blkfront: switch kcalloc to kvcalloc for large array allocation
drm/mediatek: call mtk_dsi_stop() after mtk_drm_crtc_atomic_disable()
drm/mediatek: clear num_pipes when unbind driver
drm/mediatek: call drm_atomic_helper_shutdown() when unbinding driver
drm/mediatek: unbind components in mtk_drm_unbind()
drm/mediatek: fix unbind functions
net: sfp: read eeprom in maximum 16 byte increments
selftests: set sysctl bc_forwarding properly in router_broadcast.sh
ANDROID: update gki aarch64 ABI representation
net: ethernet: mediatek: Use NET_IP_ALIGN to judge if HW RX_2BYTE_OFFSET is enabled
net: ethernet: mediatek: Use hw_feature to judge if HWLRO is supported
net: ethernet: ti: cpsw_ethtool: fix ethtool ring param set
ANDROID: gki_defconfig: Enable CMA, SLAB_FREELIST (RANDOM and HARDENED) on x86
bpf: udp: Avoid calling reuseport's bpf_prog from udp_gro
bpf: udp: ipv6: Avoid running reuseport's bpf_prog from __udp6_lib_err
rcu: locking and unlocking need to always be at least barriers
ANDROID: gki_defconfig: enable SLAB_FREELIST_RANDOM, SLAB_FREELIST_HARDENED
ANDROID: gki_defconfig: enable CMA and increase CMA_AREAS
ASoC: SOF: fix DSP oops definitions in FW ABI
ASoC: hda: fix unbalanced codec dev refcount for HDA_DEV_ASOC
ASoC: SOF: ipc: replace fw ready bitfield with explicit bit ordering
ASoC: SOF: bump to ABI 3.6
ASoC: SOF: soundwire: add initial soundwire support
ASoC: SOF: uapi: mirror firmware changes
ASoC: Intel: Baytrail: add quirk for Aegex 10 (RU2) tablet
xfs: inode btree scrubber should calculate im_boffset correctly
mmc: sdhci_am654: Fix SLOTTYPE write
usb: typec: ucsi: ccg: fix memory leak in do_flash
ANDROID: update gki aarch64 ABI representation
habanalabs: Fix virtual address access via debugfs for 2MB pages
drm/komeda: Constify the usage of komeda_component/pipeline/dev_funcs
x86/power: Fix 'nosmt' vs hibernation triple fault during resume
mm/vmalloc: Avoid rare case of flushing TLB with weird arguments
mm/vmalloc: Fix calculation of direct map addr range
PM: sleep: Add kerneldoc comments to some functions
drm/i915/gvt: save RING_HEAD into vreg when vgpu switched out
sparc: perf: fix updated event period in response to PERF_EVENT_IOC_PERIOD
mdesc: fix a missing-check bug in get_vdev_port_node_info()
drm/i915/gvt: add F_CMD_ACCESS flag for wa regs
sparc64: Fix regression in non-hypervisor TLB flush xcall
packet: unconditionally free po->rollover
Update my email address
net: hns: Fix loopback test failed at copper ports
Linux 5.2-rc3
net: dsa: mv88e6xxx: avoid error message on remove from VLAN 0
mm, compaction: make sure we isolate a valid PFN
include/linux/generic-radix-tree.h: fix kerneldoc comment
kernel/signal.c: trace_signal_deliver when signal_group_exit
drivers/iommu/intel-iommu.c: fix variable 'iommu' set but not used
spdxcheck.py: fix directory structures
kasan: initialize tag to 0xff in __kasan_kmalloc
z3fold: fix sheduling while atomic
scripts/gdb: fix invocation when CONFIG_COMMON_CLK is not set
mm/gup: continue VM_FAULT_RETRY processing even for pre-faults
ocfs2: fix error path kobject memory leak
memcg: make it work on sparse non-0-node systems
mm, memcg: consider subtrees in memory.events
prctl_set_mm: downgrade mmap_sem to read lock
prctl_set_mm: refactor checks from validate_prctl_map
kernel/fork.c: make max_threads symbol static
arch/arm/boot/compressed/decompress.c: fix build error due to lz4 changes
arch/parisc/configs/c8000_defconfig: remove obsoleted CONFIG_DEBUG_SLAB_LEAK
mm/vmalloc.c: fix typo in comment
lib/sort.c: fix kernel-doc notation warnings
mm: fix Documentation/vm/hmm.rst Sphinx warnings
treewide: fix typos of SPDX-License-Identifier
crypto: ux500 - fix license comment syntax error
MAINTAINERS: add I2C DT bindings to ARM platforms
MAINTAINERS: add DT bindings to i2c drivers
mwifiex: Fix heap overflow in mwifiex_uap_parse_tail_ies()
iwlwifi: mvm: change TLC config cmd sent by rs to be async
iwlwifi: Fix double-free problems in iwl_req_fw_callback()
iwlwifi: fix AX201 killer sku loading firmware issue
iwlwifi: print fseq info upon fw assert
iwlwifi: clear persistence bit according to device family
iwlwifi: fix load in rfkill flow for unified firmware
iwlwifi: mvm: remove d3_sram debugfs file
bpf, riscv: clear high 32 bits for ALU32 add/sub/neg/lsh/rsh/arsh
libbpf: Return btf_fd for load_sk_storage_btf
HID: a4tech: fix horizontal scrolling
HID: hyperv: Add a module description line
net: dsa: sja1105: Don't store frame type in skb->cb
block: print offending values when cloned rq limits are exceeded
blk-mq: Document the blk_mq_hw_queue_to_node() arguments
blk-mq: Fix spelling in a source code comment
block: Fix bsg_setup_queue() kernel-doc header
block: Fix rq_qos_wait() kernel-doc header
block: Fix blk_mq_*_map_queues() kernel-doc headers
block: Fix throtl_pending_timer_fn() kernel-doc header
block: Convert blk_invalidate_devt() header into a non-kernel-doc header
block/partitions/ldm: Convert a kernel-doc header into a non-kernel-doc header
leds: avoid flush_work in atomic context
cgroup: Include dying leaders with live threads in PROCS iterations
cgroup: Implement css_task_iter_skip()
cgroup: Call cgroup_release() before __exit_signal()
netfilter: nf_tables: fix module autoload with inet family
Revert "lockd: Show pid of lockd for remote locks"
ALSA: hda/realtek - Update headset mode for ALC256
fs/adfs: fix filename fixup handling for "/" and "//" names
fs/adfs: move append_filetype_suffix() into adfs_object_fixup()
fs/adfs: remove truncated filename hashing
fs/adfs: factor out filename fixup
fs/adfs: factor out object fixups
fs/adfs: factor out filename case lowering
fs/adfs: factor out filename comparison
ovl: doc: add non-standard corner cases
pstore/ram: Run without kernel crash dump region
MAINTAINERS: add Vasily Gorbik and Christian Borntraeger for s390
MAINTAINERS: Farewell Martin Schwidefsky
pstore: Set tfm to NULL on free_buf_for_compression
nds32: add new emulations for floating point instruction
nds32: Avoid IEX status being incorrectly modified
math-emu: Use statement expressions to fix Wshift-count-overflow warning
net: correct zerocopy refcnt with udp MSG_MORE
ethtool: Check for vlan etype or vlan tci when parsing flow_rule
net: don't clear sock->sk early to avoid trouble in strparser
net-gro: fix use-after-free read in napi_gro_frags()
net: dsa: tag_8021q: Create a stable binary format
net: dsa: tag_8021q: Change order of rx_vid setup
net: mvpp2: fix bad MVPP2_TXQ_SCHED_TOKEN_CNTR_REG queue value
docs cgroups: add another example size for hugetlb
NFSv4.1: Fix bug only first CB_NOTIFY_LOCK is handled
NFSv4.1: Again fix a race where CB_NOTIFY_LOCK fails to wake a waiter
ipv4: tcp_input: fix stack out of bounds when parsing TCP options.
mlxsw: spectrum: Prevent force of 56G
mlxsw: spectrum_acl: Avoid warning after identical rules insertion
SUNRPC: Fix a use after free when a server rejects the RPCSEC_GSS credential
net: dsa: mv88e6xxx: fix handling of upper half of STATS_TYPE_PORT
SUNRPC fix regression in umount of a secure mount
r8169: fix MAC address being lost in PCI D3
treewide: Add SPDX license identifier - Kbuild
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 225
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 224
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 223
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 222
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 221
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 220
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 218
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 217
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 216
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 215
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 214
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 213
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 211
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 210
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 209
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 207
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 206
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 203
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 200
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 199
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 198
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 197
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 195
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 193
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 191
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 190
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 188
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 185
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 183
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 182
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 180
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 179
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 178
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 177
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 176
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 175
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 173
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 172
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 171
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 170
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 167
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 165
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 164
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 162
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 161
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 160
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 159
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 158
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 155
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 154
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 153
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 151
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 150
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 149
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 148
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 147
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 144
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 143
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 142
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 140
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 139
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 138
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 137
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 136
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 135
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 133
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 132
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 131
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 130
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 129
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 128
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 127
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 126
net: core: support XDP generic on stacked devices.
netvsc: unshare skb in VF rx handler
udp: Avoid post-GRO UDP checksum recalculation
nvme-tcp: fix queue mapping when queue count is limited
nvme-rdma: fix queue mapping when queue count is limited
fpga: zynqmp-fpga: Correctly handle error pointer
selftests: vm: install test_vmalloc.sh for run_vmtests
userfaultfd: selftest: fix compiler warning
kselftest/cgroup: fix incorrect test_core skip
kselftest/cgroup: fix unexpected testing failure on test_core
kselftest/cgroup: fix unexpected testing failure on test_memcontrol
xtensa: Fix section mismatch between memblock_reserve and mem_reserve
signal/ptrace: Don't leak unitialized kernel memory with PTRACE_PEEK_SIGINFO
mwifiex: Abort at too short BSS descriptor element
mwifiex: Fix possible buffer overflows at parsing bss descriptor
drm/i915/gvt: Assign NULL to the pointer after memory free.
drm/i915/gvt: Check if cur_pt_type is valid
x86: intel_epb: Do not build when CONFIG_PM is unset
crypto: hmac - fix memory leak in hmac_init_tfm()
crypto: jitterentropy - change back to module_init()
ARM: dts: Drop bogus CLKSEL for timer12 on dra7
KVM: PPC: Book3S HV: Restore SPRG3 in kvmhv_p9_guest_entry()
KVM: PPC: Book3S HV: Fix lockdep warning when entering guest on POWER9
KVM: PPC: Book3S HV: XIVE: Fix page offset when clearing ESB pages
KVM: PPC: Book3S HV: XIVE: Take the srcu read lock when accessing memslots
KVM: PPC: Book3S HV: XIVE: Do not clear IRQ data of passthrough interrupts
KVM: PPC: Book3S HV: XIVE: Introduce a new mutex for the XIVE device
drm/i915/gvt: Fix cmd length of VEB_DI_IECP
drm/i915/gvt: refine ggtt range validation
drm/i915/gvt: Fix vGPU CSFE_CHICKEN1_REG mmio handler
drm/i915/gvt: Fix GFX_MODE handling
drm/i915/gvt: Update force-to-nonpriv register whitelist
drm/i915/gvt: Initialize intel_gvt_gtt_entry in stack
ima: show rules with IMA_INMASK correctly
evm: check hash algorithm passed to init_desc()
scsi: libsas: delete sas port if expander discover failed
scsi: libsas: only clear phy->in_shutdown after shutdown event done
scsi: scsi_dh_alua: Fix possible null-ptr-deref
scsi: smartpqi: properly set both the DMA mask and the coherent DMA mask
scsi: zfcp: fix to prevent port_remove with pure auto scan LUNs (only sdevs)
scsi: zfcp: fix missing zfcp_port reference put on -EBUSY from port_remove
scsi: libcxgbi: add a check for NULL pointer in cxgbi_check_route()
net: phy: dp83867: Set up RGMII TX delay
net: phy: dp83867: do not call config_init twice
net: phy: dp83867: increase SGMII autoneg timer duration
net: phy: dp83867: fix speed 10 in sgmii mode
net: phy: marvell10g: report if the PHY fails to boot firmware
net: phylink: ensure consistent phy interface mode
cgroup: Use css_tryget() instead of css_tryget_online() in task_get_css()
blk-mq: Fix memory leak in error handling
usbip: usbip_host: fix stub_dev lock context imbalance regression
net: sh_eth: fix mdio access in sh_eth_close() for R-Car Gen2 and RZ/A1 SoCs
MIPS: uprobes: remove set but not used variable 'epc'
s390/crypto: fix possible sleep during spinlock aquired
MIPS: pistachio: Build uImage.gz by default
MIPS: Make virt_addr_valid() return bool
MIPS: Bounds check virt_addr_valid
CIFS: cifs_read_allocate_pages: don't iterate through whole page array on ENOMEM
RDMA/efa: Remove MAYEXEC flag check from mmap flow
mlx5: avoid 64-bit division
IB/hfi1: Validate page aligned for a given virtual address
IB/{qib, hfi1, rdmavt}: Correct ibv_devinfo max_mr value
IB/hfi1: Insure freeze_work work_struct is canceled on shutdown
IB/rdmavt: Fix alloc_qpn() WARN_ON()
ASoC: sun4i-codec: fix first delay on Speaker
drm/amdgpu: reserve stollen vram for raven series
media: venus: hfi_parser: fix a regression in parser
selftests: bpf: fix compiler warning in flow_dissector test
arm64: use the correct function type for __arm64_sys_ni_syscall
arm64: use the correct function type in SYSCALL_DEFINE0
arm64: fix syscall_fn_t type
block: don't protect generic_make_request_checks with blk_queue_enter
block: move blk_exit_queue into __blk_release_queue
selftests: bpf: complete sub-register zero extension checks
selftests: bpf: move sub-register zero extension checks into subreg.c
ovl: detect overlapping layers
drm/i915/icl: Add WaDisableBankHangMode
ALSA: fireface: Use ULL suffixes for 64-bit constants
signal/arm64: Use force_sig not force_sig_fault for SIGKILL
nl80211: fill all policy .type entries
mac80211: free peer keys before vif down in mesh
ANDROID: ABI out: Use the extension .xml rather then .out
drm/mediatek: respect page offset for PRIME mmap calls
drm/mediatek: adjust ddp clock control flow
ALSA: hda/realtek - Improve the headset mic for Acer Aspire laptops
KVM: PPC: Book3S HV: XIVE: Fix the enforced limit on the vCPU identifier
KVM: PPC: Book3S HV: XIVE: Do not test the EQ flag validity when resetting
KVM: PPC: Book3S HV: XIVE: Clear file mapping when device is released
KVM: PPC: Book3S HV: Don't take kvm->lock around kvm_for_each_vcpu
KVM: PPC: Book3S: Use new mutex to synchronize access to rtas token list
KVM: PPC: Book3S HV: Use new mutex to synchronize MMU setup
KVM: PPC: Book3S HV: Avoid touching arch.mmu_ready in XIVE release functions
Revert "drivers: thermal: tsens: Add new operation to check if a sensor is enabled"
net/mlx5e: Disable rxhash when CQE compress is enabled
net/mlx5e: restrict the real_dev of vlan device is the same as uplink device
net/mlx5: Allocate root ns memory using kzalloc to match kfree
net/mlx5: Avoid double free in fs init error unwinding path
net/mlx5: Avoid double free of root ns in the error flow path
net/mlx5: Fix error handling in mlx5_load()
Documentation: net-sysfs: Remove duplicate PHY device documentation
llc: fix skb leak in llc_build_and_send_ui_pkt()
selftests: pmtu: Fix encapsulating device in pmtu_vti6_link_change_mtu
dfs_cache: fix a wrong use of kfree in flush_cache_ent()
fs/cifs/smb2pdu.c: fix buffer free in SMB2_ioctl_free
cifs: fix memory leak of pneg_inbuf on -EOPNOTSUPP ioctl case
xenbus: Avoid deadlock during suspend due to open transactions
xen/pvcalls: Remove set but not used variable
tracing: Avoid memory leak in predicate_parse()
habanalabs: fix bug in checking huge page optimization
mmc: sdhci: Fix SDIO IRQ thread deadlock
dpaa_eth: use only online CPU portals
net: mvneta: Fix err code path of probe
net: stmmac: Do not output error on deferred probe
Btrfs: fix race updating log root item during fsync
Btrfs: fix wrong ctime and mtime of a directory after log replay
ARC: [plat-hsdk] Get rid of inappropriate PHY settings
ARC: [plat-hsdk]: Add support of Vivante GPU
ARC: [plat-hsdk]: enable creg-gpio controller
Btrfs: fix fsync not persisting changed attributes of a directory
btrfs: qgroup: Check bg while resuming relocation to avoid NULL pointer dereference
btrfs: reloc: Also queue orphan reloc tree for cleanup to avoid BUG_ON()
Btrfs: incremental send, fix emission of invalid clone operations
Btrfs: incremental send, fix file corruption when no-holes feature is enabled
btrfs: correct zstd workspace manager lock to use spin_lock_bh()
btrfs: Ensure replaced device doesn't have pending chunk allocation
ia64: fix build errors by exporting paddr_to_nid()
ASoC: SOF: Intel: hda: fix the hda init chip
ASoC: SOF: ipc: fix a race, leading to IPC timeouts
ASoC: SOF: control: correct the copy size for bytes kcontrol put
ASoC: SOF: pcm: remove warning - initialize workqueue on open
ASoC: SOF: pcm: clear hw_params_upon_resume flag correctly
ASoC: SOF: core: fix error handling with the probe workqueue
ASoC: SOF: core: remove snd_soc_unregister_component in case of error
ASoC: SOF: core: remove DSP after unregistering machine driver
ASoC: soc-core: fixup references at soc_cleanup_card_resources()
arm64/module: revert to unsigned interpretation of ABS16/32 relocations
KVM: s390: Do not report unusabled IDs via KVM_CAP_MAX_VCPU_ID
kvm: fix compile on s390 part 2
xprtrdma: Use struct_size() in kzalloc()
tools headers UAPI: Sync kvm.h headers with the kernel sources
perf record: Fix s390 missing module symbol and warning for non-root users
perf machine: Read also the end of the kernel
perf test vmlinux-kallsyms: Ignore aliases to _etext when searching on kallsyms
perf session: Add missing swap ops for namespace events
perf namespace: Protect reading thread's namespace
tools headers UAPI: Sync drm/drm.h with the kernel
s390/crypto: fix gcm-aes-s390 selftest failures
s390/zcrypt: Fix wrong dispatching for control domain CPRBs
s390/pci: fix assignment of bus resources
s390/pci: fix struct definition for set PCI function
s390: mark __cpacf_check_opcode() and cpacf_query_func() as __always_inline
s390: add unreachable() to dump_fault_info() to fix -Wmaybe-uninitialized
tools headers UAPI: Sync drm/i915_drm.h with the kernel
tools headers UAPI: Sync linux/fs.h with the kernel
tools headers UAPI: Sync linux/sched.h with the kernel
tools arch x86: Sync asm/cpufeatures.h with the with the kernel
tools include UAPI: Update copy of files related to new fspick, fsmount, fsconfig, fsopen, move_mount and open_tree syscalls
perf arm64: Fix mksyscalltbl when system kernel headers are ahead of the kernel
perf data: Fix 'strncat may truncate' build failure with recent gcc
arm64: Fix the arm64_personality() syscall wrapper redirection
rtw88: Make some symbols static
rtw88: avoid circular locking between local->iflist_mtx and rtwdev->mutex
rsi: Properly initialize data in rsi_sdio_ta_reset
rtw88: fix unassigned rssi_level in rtw_sta_info
rtw88: fix subscript above array bounds compiler warning
fuse: extract helper for range writeback
fuse: fix copy_file_range() in the writeback case
mmc: meson-gx: fix irq ack
mmc: tmio: fix SCC error handling to avoid false positive CRC error
mmc: tegra: Fix a warning message
memstick: mspro_block: Fix an error code in mspro_block_issue_req()
mac80211: mesh: fix RCU warning
nl80211: fix station_info pertid memory leak
mac80211: Do not use stack memory with scatterlist for GMAC
ALSA: line6: Assure canceling delayed work at disconnection
configfs: Fix use-after-free when accessing sd->s_dentry
ALSA: hda - Force polling mode on CNL for fixing codec communication
i2c: synquacer: fix synquacer_i2c_doxfer() return value
i2c: mlxcpld: Fix wrong initialization order in probe
i2c: dev: fix potential memory leak in i2cdev_ioctl_rdwr
RDMA/core: Fix panic when port_data isn't initialized
RDMA/uverbs: Pass udata on uverbs error unwind
RDMA/core: Clear out the udata before error unwind
net: aquantia: tcp checksum 0xffff being handled incorrectly
net: aquantia: fix LRO with FCS error
net: aquantia: check rx csum for all packets in LRO session
net: aquantia: tx clean budget logic error
vhost: scsi: add weight support
vhost: vsock: add weight support
vhost_net: fix possible infinite loop
vhost: introduce vhost_exceeds_weight()
virtio: Fix indentation of VIRTIO_MMIO
virtio: add unlikely() to WARN_ON_ONCE()
iommu/vt-d: Set the right field for Page Walk Snoop
iommu/vt-d: Fix lock inversion between iommu->lock and device_domain_lock
iommu: Add missing new line for dma type
drm/etnaviv: lock MMU while dumping core
block: Don't revalidate bdev of hidden gendisk
loop: Don't change loop device under exclusive opener
drm/imx: ipuv3-plane: fix atomic update status query for non-plus i.MX6Q
drm/qxl: drop WARN_ONCE()
iio: temperature: mlx90632 Relax the compatibility check
iio: imu: st_lsm6dsx: fix PM support for st_lsm6dsx i2c controller
staging:iio:ad7150: fix threshold mode config bit
fuse: add FUSE_WRITE_KILL_PRIV
fuse: fallocate: fix return with locked inode
PCI: PM: Avoid possible suspend-to-idle issue
ACPI: PM: Call pm_set_suspend_via_firmware() during hibernation
ACPI/PCI: PM: Add missing wakeup.flags.valid checks
ovl: support the FS_IOC_FS[SG]ETXATTR ioctls
soundwire: stream: fix out of boundary access on port properties
net: tulip: de4x5: Drop redundant MODULE_DEVICE_TABLE()
selftests/tls: add test for sleeping even though there is data
net/tls: fix no wakeup on partial reads
selftests/tls: test for lowat overshoot with multiple records
net/tls: fix lowat calculation if some data came from previous record
dpaa2-eth: Make constant 64-bit long
dpaa2-eth: Use PTR_ERR_OR_ZERO where appropriate
dpaa2-eth: Fix potential spectre issue
bonding/802.3ad: fix slave link initialization transition states
io_uring: Fix __io_uring_register() false success
net: ethtool: Document get_rxfh_context and set_rxfh_context ethtool ops
net: stmmac: dwmac-mediatek: modify csr_clk value to fix mdio read/write fail
net: stmmac: fix csr_clk can't be zero issue
net: stmmac: update rx tail pointer register to fix rx dma hang issue.
ip_sockglue: Fix missing-check bug in ip_ra_control()
ipv6_sockglue: Fix a missing-check bug in ip6_ra_control()
efi: Allow the number of EFI configuration tables entries to be zero
efi/x86/Add missing error handling to old_memmap 1:1 mapping code
parisc: Fix compiler warnings in float emulation code
parisc/slab: cleanup after /proc/slab_allocators removal
bpf: sockmap, fix use after free from sleep in psock backlog workqueue
net: sched: don't use tc_action->order during action dump
cxgb4: Revert "cxgb4: Remove SGE_HOST_PAGE_SIZE dependency on page size"
net: fec: fix the clk mismatch in failed_reset path
habanalabs: Avoid using a non-initialized MMU cache mutex
habanalabs: fix debugfs code
uapi/habanalabs: add opcode for enable/disable device debug mode
habanalabs: halt debug engines on user process close
selftests: rtc: rtctest: specify timeouts
selftests/harness: Allow test to configure timeout
selftests/ftrace: Add checkbashisms meta-testcase
selftests/ftrace: Make a script checkbashisms clean
media: smsusb: better handle optional alignment
test_firmware: Use correct snprintf() limit
genwqe: Prevent an integer overflow in the ioctl
parport: Fix mem leak in parport_register_dev_model
fpga: dfl: expand minor range when registering chrdev region
fpga: dfl: Add lockdep classes for pdata->lock
fpga: dfl: afu: Pass the correct device to dma_mapping_error()
fpga: stratix10-soc: fix use-after-free on s10_init()
w1: ds2408: Fix typo after 49695ac46861 (reset on output_write retry with readback)
kheaders: Do not regenerate archive if config is not changed
kheaders: Move from proc to sysfs
drm/amd/display: Don't load DMCU for Raven 1 (v2)
drm/i915: Maintain consistent documentation subsection ordering
scripts/sphinx-pre-install: make it handle Sphinx versions
docs: Fix conf.py for Sphinx 2.0
vt/fbcon: deinitialize resources in visual_init() after failed memory allocation
xfs: fix broken log reservation debugging
clocksource/drivers/timer-ti-dm: Change to new style declaration
ASoC: core: lock client_mutex while removing link components
ASoC: simple-card: Restore original configuration of DAI format
{nl,mac}80211: allow 4addr AP operation on crypto controlled devices
mac80211_hwsim: mark expected switch fall-through
mac80211: fix rate reporting inside cfg80211_calculate_bitrate_he()
mac80211: remove set but not used variable 'old'
mac80211: handle deauthentication/disassociation from TDLS peer
gpio: fix gpio-adp5588 build errors
pinctrl: stmfx: Fix compile issue when CONFIG_OF_GPIO is not defined
staging: kpc2000: Add dependency on MFD_CORE to kconfig symbol 'KPC2000'
perf/ring-buffer: Use regular variables for nesting
perf/ring-buffer: Always use {READ,WRITE}_ONCE() for rb->user_page data
perf/ring_buffer: Add ordering to rb->nest increment
perf/ring_buffer: Fix exposing a temporarily decreased data_head
x86/CPU/AMD: Don't force the CPB cap when running under a hypervisor
x86/boot: Provide KASAN compatible aliases for string routines
ALSA: hda/realtek - Enable micmute LED for Huawei laptops
Input: uinput - add compat ioctl number translation for UI_*_FF_UPLOAD
Input: silead - add MSSL0017 to acpi_device_id
cxgb4: offload VLAN flows regardless of VLAN ethtype
hsr: fix don't prune the master node from the node_db
net: mvpp2: cls: Fix leaked ethtool_rx_flow_rule
docs: fix multiple doc build warnings in enumeration.rst
lib/list_sort: fix kerneldoc build error
docs: fix numaperf.rst and add it to the doc tree
doc: Cope with the deprecation of AutoReporter
doc: Cope with Sphinx logging deprecations
bpf: sockmap, restore sk_write_space when psock gets dropped
selftests: bpf: add zero extend checks for ALU32 and/or/xor
bpf, riscv: clear target register high 32-bits for and/or/xor on ALU32
spi: abort spi_sync if failed to prepare_transfer_hardware
ALSA: hda/realtek - Set default power save node to 0
ipv4/igmp: fix build error if !CONFIG_IP_MULTICAST
powerpc/kexec: Fix loading of kernel + initramfs with kexec_file_load()
MIPS: TXx9: Fix boot crash in free_initmem()
MIPS: remove a space after -I to cope with header search paths for VDSO
MIPS: mark ginvt() as __always_inline
ipv4/igmp: fix another memory leak in igmpv3_del_delrec()
bnxt_en: Device serial number is supported only for PFs.
bnxt_en: Reduce memory usage when running in kdump kernel.
bnxt_en: Fix possible BUG() condition when calling pci_disable_msix().
bnxt_en: Fix aggregation buffer leak under OOM condition.
ipv6: Fix redirect with VRF
net: stmmac: fix reset gpio free missing
mISDN: make sure device name is NUL terminated
net: macb: save/restore the remaining registers and features
media: dvb: warning about dvb frequency limits produces too much noise
net/tls: don't ignore netdev notifications if no TLS features
net/tls: fix state removal with feature flags off
net/tls: avoid NULL-deref on resync during device removal
Documentation: add TLS offload documentation
Documentation: tls: RSTify the ktls documentation
Documentation: net: move device drivers docs to a submenu
mISDN: Fix indenting in dsp_cmx.c
ocelot: Dont allocate another multicast list, use __dev_mc_sync
Validate required parameters in inet6_validate_link_af
xhci: Use %zu for printing size_t type
xhci: Convert xhci_handshake() to use readl_poll_timeout_atomic()
xhci: Fix immediate data transfer if buffer is already DMA mapped
usb: xhci: avoid null pointer deref when bos field is NULL
usb: xhci: Fix a potential null pointer dereference in xhci_debugfs_create_endpoint()
xhci: update bounce buffer with correct sg num
media: usb: siano: Fix false-positive "uninitialized variable" warning
spi: spi-fsl-spi: call spi_finalize_current_message() at the end
ALSA: hda/realtek - Check headset type by unplug and resume
powerpc/perf: Fix MMCRA corruption by bhrb_filter
powerpc/powernv: Return for invalid IMC domain
HID: logitech-hidpp: Add support for the S510 remote control
HID: multitouch: handle faulty Elo touch device
selftests: netfilter: add flowtable test script
netfilter: nft_flow_offload: IPCB is only valid for ipv4 family
netfilter: nft_flow_offload: don't offload when sequence numbers need adjustment
netfilter: nft_flow_offload: set liberal tracking mode for tcp
netfilter: nf_flow_table: ignore DF bit setting
ASoC: Intel: sof-rt5682: fix AMP quirk support
ASoC: Intel: sof-rt5682: fix for codec button mapping
clk: ti: clkctrl: Fix clkdm_clk handling
clk: imx: imx8mm: fix int pll clk gate
clk: sifive: restrict Kconfig scope for the FU540 PRCI driver
RDMA/hns: Fix PD memory leak for internal allocation
netfilter: nat: fix udp checksum corruption
selftests: netfilter: missing error check when setting up veth interface
RDMA/srp: Rename SRP sysfs name after IB device rename trigger
ipvs: Fix use-after-free in ip_vs_in
ARC: [plat-hsdk]: Add missing FIFO size entry in GMAC node
ARC: [plat-hsdk]: Add missing multicast filter bins number to GMAC node
samples, bpf: suppress compiler warning
samples, bpf: fix to change the buffer size for read()
bpf: Check sk_fullsock() before returning from bpf_sk_lookup()
bpf: fix out-of-bounds read in __bpf_skc_lookup
Documentation/networking: fix af_xdp.rst Sphinx warnings
netfilter: nft_fib: Fix existence check support
netfilter: nf_queue: fix reinject verdict handling
dmaengine: sprd: Add interrupt support for 2-stage transfer
dmaengine: sprd: Fix the right place to configure 2-stage transfer
dmaengine: sprd: Fix block length overflow
dmaengine: sprd: Fix the incorrect start for 2-stage destination channels
dmaengine: sprd: Add validation of current descriptor in irq handler
dmaengine: sprd: Fix the possible crash when getting descriptor status
tty: max310x: Fix external crystal register setup
serial: sh-sci: disable DMA for uart_console
serial: imx: remove log spamming error message
tty: serial: msm_serial: Fix XON/XOFF
USB: serial: option: add Telit 0x1260 and 0x1261 compositions
USB: serial: pl2303: add Allied Telesis VT-Kit3
USB: serial: option: add support for Simcom SIM7500/SIM7600 RNDIS mode
dmaengine: tegra210-adma: Fix spelling
dmaengine: tegra210-adma: Fix channel FIFO configuration
dmaengine: tegra210-adma: Fix crash during probe
dmaengine: mediatek-cqdma: sleeping in atomic context
dmaengine: dw-axi-dmac: fix null dereference when pointer first is null
perf/x86/intel/ds: Fix EVENT vs. UEVENT PEBS constraints
USB: rio500: update Documentation
USB: rio500: simplify locking
USB: rio500: fix memory leak in close after disconnect
USB: rio500: refuse more than one device at a time
usbip: usbip_host: fix BUG: sleeping function called from invalid context
USB: sisusbvga: fix oops in error path of sisusb_probe
USB: Add LPM quirk for Surface Dock GigE adapter
media: usb: siano: Fix general protection fault in smsusb
usb: mtu3: fix up undefined reference to usb_debug_root
USB: Fix slab-out-of-bounds write in usb_get_bos_descriptor
Input: elantech - enable middle button support on 2 ThinkPads
dmaengine: fsl-qdma: Add improvement
dmaengine: jz4780: Fix transfers being ACKed too soon
gcc-plugins: Fix build failures under Darwin host
MAINTAINERS: Update Stefan Wahren email address
netfilter: nf_tables: fix oops during rule dump
ARC: mm: SIGSEGV userspace trying to access kernel virtual memory
ARC: fix build warnings
ARM: dts: bcm: Add missing device_type = "memory" property
soc: bcm: brcmstb: biuctrl: Register writes require a barrier
soc: brcmstb: Fix error path for unsupported CPUs
ARM: dts: dra71x: Disable usb4_tm target module
ARM: dts: dra71x: Disable rtc target module
ARM: dts: dra76x: Disable usb4_tm target module
ARM: dts: dra76x: Disable rtc target module
ASoC: simple-card: Fix configuration of DAI format
ASoC: Intel: soc-acpi: Fix machine selection order
ASoC: rt5677-spi: Handle over reading when flipping bytes
ASoC: soc-dpm: fixup DAI active unbalance
pinctrl: intel: Clear interrupt status in mask/unmask callback
pinctrl: intel: Use GENMASK() consistently
parisc: Allow building 64-bit kernel without -mlong-calls compiler option
parisc: Kconfig: remove ARCH_DISCARD_MEMBLOCK
staging: wilc1000: Fix some double unlock bugs in wilc_wlan_cleanup()
staging: vc04_services: prevent integer overflow in create_pagelist()
Staging: vc04_services: Fix a couple error codes
staging: wlan-ng: fix adapter initialization failure
staging: kpc2000: double unlock in error handling in kpc_dma_transfer()
staging: kpc2000: Fix build error without CONFIG_UIO
staging: kpc2000: fix build error on xtensa
staging: erofs: set sb->s_root to NULL when failing from __getname()
ARM: imx: cpuidle-imx6sx: Restrict the SW2ISO increase to i.MX6SX
firmware: imx: SCU irq should ONLY be enabled after SCU IPC is ready
arm64: imx: Fix build error without CONFIG_SOC_BUS
ima: fix wrong signed policy requirement when not appraising
x86/ima: Check EFI_RUNTIME_SERVICES before using
stacktrace: Unbreak stack_trace_save_tsk_reliable()
HID: wacom: Sync INTUOSP2_BT touch state after each frame if necessary
HID: wacom: Correct button numbering 2nd-gen Intuos Pro over Bluetooth
HID: wacom: Send BTN_TOUCH in response to INTUOSP2_BT eraser contact
HID: wacom: Don't report anything prior to the tool entering range
HID: wacom: Don't set tool type until we're in range
ASoC: cs42xx8: Add regcache mask dirty
regulator: tps6507x: Fix boot regression due to testing wrong init_data pointer
ASoC: fsl_asrc: Fix the issue about unsupported rate
spi: bitbang: Fix NULL pointer dereference in spi_unregister_master
Input: elan_i2c - increment wakeup count if wake source
wireless: Skip directory when generating certificates
ASoC: ak4458: rstn_control - return a non-zero on error only
ASoC: soc-pcm: BE dai needs prepare when pause release after resume
ASoC: ak4458: add return value for ak4458_probe
ASoC : cs4265 : readable register too low
ASoC: SOF: fix error in verbose ipc command parsing
ASoC: SOF: fix race in FW boot timeout handling
ASoC: SOF: nocodec: fix undefined reference
iio: adc: ti-ads8688: fix timestamp is not updated in buffer
iio: dac: ds4422/ds4424 fix chip verification
HID: rmi: Use SET_REPORT request on control endpoint for Acer Switch 3 and 5
HID: logitech-hidpp: add support for the MX5500 keyboard
HID: logitech-dj: add support for the Logitech MX5500's Bluetooth Mini-Receiver
HID: i2c-hid: add iBall Aer3 to descriptor override
spi: Fix Raspberry Pi breakage
ARM: dts: dra76x: Update MMC2_HS200_MANUAL1 iodelay values
ARM: dts: am57xx-idk: Remove support for voltage switching for SD card
bus: ti-sysc: Handle devices with no control registers
ARM: dts: Configure osc clock for d_can on am335x
iio: imu: mpu6050: Fix FIFO layout for ICM20602
lkdtm/bugs: Adjust recursion test to avoid elision
lkdtm/usercopy: Moves the KERNEL_DS test to non-canonical
iio: adc: ads124: avoid buffer overflow
iio: adc: modify NPCM ADC read reference voltage
Change-Id: I98c823993370027391cc21dfb239c3049f025136
Signed-off-by: Raghavendra Rao Ananta <rananta@codeaurora.org>
2019-06-25 09:30:20 +09:00
|
|
|
$(Q)find $(srctree)/tools/testing/selftests -name config | \
|
|
|
|
xargs $(srctree)/scripts/kconfig/merge_config.sh -m $(objtree)/.config
|
2019-08-21 16:03:48 +09:00
|
|
|
$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
|
2016-01-08 16:27:34 +09:00
|
|
|
|
2018-01-11 06:19:37 +09:00
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Devicetree files
|
|
|
|
|
|
|
|
ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),)
|
|
|
|
dtstree := arch/$(SRCARCH)/boot/dts
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifneq ($(dtstree),)
|
|
|
|
|
2019-08-22 13:46:12 +09:00
|
|
|
%.dtb: include/config/kernel.release scripts_dtc
|
2018-01-11 06:19:37 +09:00
|
|
|
$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
|
|
|
|
|
2020-02-23 04:04:34 +09:00
|
|
|
PHONY += dtbs dtbs_install dtbs_check
|
2020-03-04 12:20:36 +09:00
|
|
|
dtbs: include/config/kernel.release scripts_dtc
|
2018-01-11 06:19:37 +09:00
|
|
|
$(Q)$(MAKE) $(build)=$(dtstree)
|
|
|
|
|
2020-03-04 12:20:36 +09:00
|
|
|
ifneq ($(filter dtbs_check, $(MAKECMDGOALS)),)
|
|
|
|
dtbs: dt_binding_check
|
|
|
|
endif
|
|
|
|
|
2018-09-07 03:26:07 +09:00
|
|
|
dtbs_check: export CHECK_DTBS=1
|
2020-03-04 12:20:36 +09:00
|
|
|
dtbs_check: dtbs
|
2018-09-07 03:26:07 +09:00
|
|
|
|
2018-01-11 06:19:37 +09:00
|
|
|
dtbs_install:
|
|
|
|
$(Q)$(MAKE) $(dtbinst)=$(dtstree)
|
|
|
|
|
|
|
|
ifdef CONFIG_OF_EARLY_FLATTREE
|
|
|
|
all: dtbs
|
|
|
|
endif
|
|
|
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
PHONY += scripts_dtc
|
|
|
|
scripts_dtc: scripts_basic
|
|
|
|
$(Q)$(MAKE) $(build)=scripts/dtc
|
|
|
|
|
2020-02-23 04:04:34 +09:00
|
|
|
PHONY += dt_binding_check
|
2018-09-07 03:26:07 +09:00
|
|
|
dt_binding_check: scripts_dtc
|
|
|
|
$(Q)$(MAKE) $(build)=Documentation/devicetree/bindings
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Modules
|
|
|
|
|
|
|
|
ifdef CONFIG_MODULES
|
|
|
|
|
2006-06-25 07:07:55 +09:00
|
|
|
# By default, build modules as well
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2010-03-10 20:28:58 +09:00
|
|
|
all: modules
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2020-05-31 17:47:06 +09:00
|
|
|
# When we're building modules with modversions, we need to consider
|
|
|
|
# the built-in objects during the descend as well, in order to
|
|
|
|
# make sure the checksums are up to date before we record them.
|
|
|
|
ifdef CONFIG_MODVERSIONS
|
|
|
|
KBUILD_BUILTIN := 1
|
|
|
|
endif
|
|
|
|
|
2014-04-28 16:32:43 +09:00
|
|
|
# Build modules
|
2007-12-07 21:04:30 +09:00
|
|
|
#
|
2014-04-28 16:32:43 +09:00
|
|
|
# A module can be listed more than once in obj-m resulting in
|
|
|
|
# duplicate lines in modules.order files. Those are removed
|
|
|
|
# using awk while concatenating to the final file.
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2006-03-06 07:14:10 +09:00
|
|
|
PHONY += modules
|
2019-06-24 01:13:28 +09:00
|
|
|
modules: $(if $(KBUILD_BUILTIN),vmlinux) modules.order modules.builtin
|
2020-05-22 04:53:35 +09:00
|
|
|
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
2020-04-15 14:31:15 +09:00
|
|
|
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
|
|
|
|
"$(MAKE) -f $(srctree)/Makefile vmlinux"
|
2020-05-22 04:53:35 +09:00
|
|
|
endif
|
2006-08-09 04:36:08 +09:00
|
|
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
2019-05-18 01:07:15 +09:00
|
|
|
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/modules-check.sh
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-08-11 00:53:04 +09:00
|
|
|
modules.order: descend
|
|
|
|
$(Q)$(AWK) '!x[$$0]++' $(addsuffix /$@, $(build-dirs)) > $@
|
2019-06-24 01:13:28 +09:00
|
|
|
|
2019-08-11 00:53:04 +09:00
|
|
|
modbuiltin-dirs := $(addprefix _modbuiltin_, $(build-dirs))
|
2010-03-08 18:07:12 +09:00
|
|
|
|
2019-06-24 01:13:27 +09:00
|
|
|
modules.builtin: $(modbuiltin-dirs)
|
2019-08-11 00:53:04 +09:00
|
|
|
$(Q)$(AWK) '!x[$$0]++' $(addsuffix /$@, $(build-dirs)) > $@
|
2010-03-08 18:07:12 +09:00
|
|
|
|
2019-06-24 01:13:27 +09:00
|
|
|
PHONY += $(modbuiltin-dirs)
|
|
|
|
# tristate.conf is not included from this Makefile. Add it as a prerequisite
|
|
|
|
# here to make it self-healing in case somebody accidentally removes it.
|
|
|
|
$(modbuiltin-dirs): include/config/tristate.conf
|
|
|
|
$(Q)$(MAKE) $(modbuiltin)=$(patsubst _modbuiltin_%,%,$@)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
# Target to prepare building external modules
|
2006-03-06 07:14:10 +09:00
|
|
|
PHONY += modules_prepare
|
2018-11-29 12:56:30 +09:00
|
|
|
modules_prepare: prepare
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
# Target to install modules
|
2006-03-06 07:14:10 +09:00
|
|
|
PHONY += modules_install
|
2005-04-17 07:20:36 +09:00
|
|
|
modules_install: _modinst_ _modinst_post
|
|
|
|
|
2006-03-06 07:14:10 +09:00
|
|
|
PHONY += _modinst_
|
2010-06-08 05:22:12 +09:00
|
|
|
_modinst_:
|
2005-04-17 07:20:36 +09:00
|
|
|
@rm -rf $(MODLIB)/kernel
|
|
|
|
@rm -f $(MODLIB)/source
|
|
|
|
@mkdir -p $(MODLIB)/kernel
|
2017-08-20 15:04:11 +09:00
|
|
|
@ln -s $(abspath $(srctree)) $(MODLIB)/source
|
2005-04-17 07:20:36 +09:00
|
|
|
@if [ ! $(objtree) -ef $(MODLIB)/build ]; then \
|
|
|
|
rm -f $(MODLIB)/build ; \
|
2014-04-26 00:29:45 +09:00
|
|
|
ln -s $(CURDIR) $(MODLIB)/build ; \
|
2005-04-17 07:20:36 +09:00
|
|
|
fi
|
2019-07-17 15:17:50 +09:00
|
|
|
@sed 's:^:kernel/:' modules.order > $(MODLIB)/modules.order
|
|
|
|
@sed 's:^:kernel/:' modules.builtin > $(MODLIB)/modules.builtin
|
2019-04-30 01:11:14 +09:00
|
|
|
@cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
|
2006-08-09 04:36:08 +09:00
|
|
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2007-10-19 04:24:21 +09:00
|
|
|
# This depmod is only for convenience to give the initial
|
2005-04-17 07:20:36 +09:00
|
|
|
# boot a modules.dep even before / is mounted read-write. However the
|
|
|
|
# boot script depmod is the master version.
|
2006-03-06 07:14:10 +09:00
|
|
|
PHONY += _modinst_post
|
2013-07-11 11:02:51 +09:00
|
|
|
_modinst_post: _modinst_
|
2007-10-19 04:24:21 +09:00
|
|
|
$(call cmd,depmod)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2012-11-05 07:39:24 +09:00
|
|
|
ifeq ($(CONFIG_MODULE_SIG), y)
|
|
|
|
PHONY += modules_sign
|
|
|
|
modules_sign:
|
|
|
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modsign
|
|
|
|
endif
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
else # CONFIG_MODULES
|
|
|
|
|
|
|
|
# Modules not configured
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
2016-03-13 09:39:22 +09:00
|
|
|
PHONY += modules modules_install
|
|
|
|
modules modules_install:
|
2012-07-08 06:04:40 +09:00
|
|
|
@echo >&2
|
|
|
|
@echo >&2 "The present kernel configuration has modules disabled."
|
|
|
|
@echo >&2 "Type 'make config' and enable loadable module support."
|
|
|
|
@echo >&2 "Then build a kernel with module support enabled."
|
|
|
|
@echo >&2
|
2005-04-17 07:20:36 +09:00
|
|
|
@exit 1
|
|
|
|
|
|
|
|
endif # CONFIG_MODULES
|
|
|
|
|
|
|
|
###
|
|
|
|
# Cleaning is done on three levels.
|
|
|
|
# make clean Delete most generated files
|
|
|
|
# Leave enough to build external modules
|
|
|
|
# make mrproper Delete the current configuration, and all generated files
|
|
|
|
# make distclean Remove editor backup files, patch leftover files and the like
|
|
|
|
|
|
|
|
# Directories & files removed with 'make clean'
|
kbuild: create *.mod with full directory path and remove MODVERDIR
While descending directories, Kbuild produces objects for modules,
but do not link final *.ko files; it is done in the modpost.
To keep track of modules, Kbuild creates a *.mod file in $(MODVERDIR)
for every module it is building. Some post-processing steps read the
necessary information from *.mod files. This avoids descending into
directories again. This mechanism was introduced in 2003 or so.
Later, commit 551559e13af1 ("kbuild: implement modules.order") added
modules.order. So, we can simply read it out to know all the modules
with directory paths. This is easier than parsing the first line of
*.mod files.
$(MODVERDIR) has a flat directory structure, that is, *.mod files
are named only with base names. This is based on the assumption that
the module name is unique across the tree. This assumption is really
fragile.
Stephen Rothwell reported a race condition caused by a module name
conflict:
https://lkml.org/lkml/2019/5/13/991
In parallel building, two different threads could write to the same
$(MODVERDIR)/*.mod simultaneously.
Non-unique module names are the source of all kind of troubles, hence
commit 3a48a91901c5 ("kbuild: check uniqueness of module names")
introduced a new checker script.
However, it is still fragile in the build system point of view because
this race happens before scripts/modules-check.sh is invoked. If it
happens again, the modpost will emit unclear error messages.
To fix this issue completely, create *.mod with full directory path
so that two threads never attempt to write to the same file.
$(MODVERDIR) is no longer needed.
Since modules with directory paths are listed in modules.order, Kbuild
is still able to find *.mod files without additional descending.
I also killed cmd_secanalysis; scripts/mod/sumversion.c computes MD4 hash
for modules with MODULE_VERSION(). When CONFIG_DEBUG_SECTION_MISMATCH=y,
it occurs not only in the modpost stage, but also during directory
descending, where sumversion.c may parse stale *.mod files. It would emit
'No such file or directory' warning when an object consisting a module is
renamed, or when a single-obj module is turned into a multi-obj module or
vice versa.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Nicolas Pitre <nico@fluxnic.net>
2019-07-17 15:17:57 +09:00
|
|
|
CLEAN_DIRS += include/ksym
|
2019-04-30 01:11:14 +09:00
|
|
|
CLEAN_FILES += modules.builtin.modinfo
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
# Directories & files removed with 'make mrproper'
|
kbuild: compile-test exported headers to ensure they are self-contained
Multiple people have suggested compile-testing UAPI headers to ensure
they can be really included from user-space. "make headers_check" is
obviously not enough to catch bugs, and we often leak unresolved
references to user-space.
Use the new header-test-y syntax to implement it. Please note exported
headers are compile-tested with a completely different set of compiler
flags. The header search path is set to $(objtree)/usr/include since
exported headers should not include unexported ones.
We use -std=gnu89 for the kernel space since the kernel code highly
depends on GNU extensions. On the other hand, UAPI headers should be
written in more standardized C, so they are compiled with -std=c90.
This will emit errors if C++ style comments, the keyword 'inline', etc.
are used. Please use C style comments (/* ... */), '__inline__', etc.
in UAPI headers.
There is additional compiler requirement to enable this test because
many of UAPI headers include <stdlib.h>, <sys/ioctl.h>, <sys/time.h>,
etc. directly or indirectly. You cannot use kernel.org pre-built
toolchains [1] since they lack <stdlib.h>.
I reused CONFIG_CC_CAN_LINK to check the system header availability.
The intention is slightly different, but a compiler that can link
userspace programs provide system headers.
For now, a lot of headers need to be excluded because they cannot
be compiled standalone, but this is a good start point.
[1] https://mirrors.edge.kernel.org/pub/tools/crosstool/index.html
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
2019-07-01 09:58:40 +09:00
|
|
|
MRPROPER_DIRS += include/config include/generated \
|
2019-08-21 16:02:02 +09:00
|
|
|
arch/$(SRCARCH)/include/generated .tmp_objdiff \
|
|
|
|
debian/ snap/ tar-install/
|
2017-09-22 14:31:13 +09:00
|
|
|
MRPROPER_FILES += .config .config.old .version \
|
2019-07-15 23:01:49 +09:00
|
|
|
Module.symvers \
|
2015-07-21 05:16:30 +09:00
|
|
|
signing_key.pem signing_key.priv signing_key.x509 \
|
|
|
|
x509.genkey extra_certificates signing_key.x509.keyid \
|
2019-08-21 16:02:02 +09:00
|
|
|
signing_key.x509.signer vmlinux-gdb.py \
|
|
|
|
*.spec
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-07-15 23:01:49 +09:00
|
|
|
# Directories & files removed with 'make distclean'
|
|
|
|
DISTCLEAN_DIRS +=
|
|
|
|
DISTCLEAN_FILES += tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
# clean - Delete most, but leave enough to build external modules
|
|
|
|
#
|
|
|
|
clean: rm-dirs := $(CLEAN_DIRS)
|
|
|
|
clean: rm-files := $(CLEAN_FILES)
|
|
|
|
|
2019-08-11 00:53:05 +09:00
|
|
|
PHONY += archclean vmlinuxclean
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2012-10-29 20:23:02 +09:00
|
|
|
vmlinuxclean:
|
|
|
|
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean
|
2016-08-24 21:29:21 +09:00
|
|
|
$(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean)
|
2012-10-29 20:23:02 +09:00
|
|
|
|
|
|
|
clean: archclean vmlinuxclean
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
# mrproper - Delete all generated files, including .config
|
|
|
|
#
|
|
|
|
mrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS))
|
|
|
|
mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
|
2017-05-14 23:50:01 +09:00
|
|
|
mrproper-dirs := $(addprefix _mrproper_,scripts)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-01-14 17:29:29 +09:00
|
|
|
PHONY += $(mrproper-dirs) mrproper
|
2005-04-17 07:20:36 +09:00
|
|
|
$(mrproper-dirs):
|
|
|
|
$(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
|
|
|
|
|
2019-01-14 17:29:29 +09:00
|
|
|
mrproper: clean $(mrproper-dirs)
|
2005-04-17 07:20:36 +09:00
|
|
|
$(call cmd,rmdirs)
|
|
|
|
$(call cmd,rmfiles)
|
|
|
|
|
|
|
|
# distclean
|
|
|
|
#
|
2019-07-15 23:01:49 +09:00
|
|
|
distclean: rm-dirs := $(wildcard $(DISTCLEAN_DIRS))
|
|
|
|
distclean: rm-files := $(wildcard $(DISTCLEAN_FILES))
|
|
|
|
|
2006-03-06 07:14:10 +09:00
|
|
|
PHONY += distclean
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
distclean: mrproper
|
2019-07-15 23:01:49 +09:00
|
|
|
$(call cmd,rmdirs)
|
|
|
|
$(call cmd,rmfiles)
|
2005-04-17 07:20:36 +09:00
|
|
|
@find $(srctree) $(RCS_FIND_IGNORE) \
|
2006-06-25 07:07:55 +09:00
|
|
|
\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
|
2017-01-22 23:02:32 +09:00
|
|
|
-o -name '*.bak' -o -name '#*#' -o -name '*%' \
|
|
|
|
-o -name 'core' \) \
|
2005-04-17 07:20:36 +09:00
|
|
|
-type f -print | xargs rm -f
|
|
|
|
|
|
|
|
|
|
|
|
# Packaging of the kernel to various formats
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
2010-06-07 19:44:25 +09:00
|
|
|
%src-pkg: FORCE
|
2019-08-21 16:02:04 +09:00
|
|
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@
|
2006-06-09 14:12:37 +09:00
|
|
|
%pkg: include/config/kernel.release FORCE
|
2019-08-21 16:02:04 +09:00
|
|
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
# Brief documentation of the typical targets used
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
2008-04-07 05:16:07 +09:00
|
|
|
boards := $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*_defconfig)
|
2014-10-28 22:18:20 +09:00
|
|
|
boards := $(sort $(notdir $(boards)))
|
2008-04-07 05:16:07 +09:00
|
|
|
board-dirs := $(dir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*/*_defconfig))
|
|
|
|
board-dirs := $(sort $(notdir $(board-dirs:/=)))
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2016-03-13 09:39:55 +09:00
|
|
|
PHONY += help
|
2005-04-17 07:20:36 +09:00
|
|
|
help:
|
|
|
|
@echo 'Cleaning targets:'
|
2006-12-13 03:09:40 +09:00
|
|
|
@echo ' clean - Remove most generated files but keep the config and'
|
2006-09-24 21:01:08 +09:00
|
|
|
@echo ' enough build support to build external modules'
|
2006-12-13 03:09:40 +09:00
|
|
|
@echo ' mrproper - Remove all generated files + config + various backup files'
|
2006-09-24 21:01:08 +09:00
|
|
|
@echo ' distclean - mrproper + remove editor backup and patch files'
|
2005-04-17 07:20:36 +09:00
|
|
|
@echo ''
|
|
|
|
@echo 'Configuration targets:'
|
|
|
|
@$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
|
|
|
|
@echo ''
|
|
|
|
@echo 'Other generic targets:'
|
|
|
|
@echo ' all - Build all targets marked with [*]'
|
|
|
|
@echo '* vmlinux - Build the bare kernel'
|
|
|
|
@echo '* modules - Build all modules'
|
2005-11-24 04:11:34 +09:00
|
|
|
@echo ' modules_install - Install all modules to INSTALL_MOD_PATH (default: /)'
|
2005-04-17 07:20:36 +09:00
|
|
|
@echo ' dir/ - Build all files in dir and below'
|
2015-12-11 01:35:19 +09:00
|
|
|
@echo ' dir/file.[ois] - Build specified target only'
|
2017-04-25 05:04:58 +09:00
|
|
|
@echo ' dir/file.ll - Build the LLVM assembly file'
|
|
|
|
@echo ' (requires compiler support for LLVM assembly generation)'
|
2010-01-14 02:31:44 +09:00
|
|
|
@echo ' dir/file.lst - Build specified mixed source/assembly target only'
|
|
|
|
@echo ' (requires a recent binutils and recent build (System.map))'
|
2005-07-08 09:56:08 +09:00
|
|
|
@echo ' dir/file.ko - Build module including final link'
|
2009-04-25 01:35:23 +09:00
|
|
|
@echo ' modules_prepare - Set up for building external modules'
|
2005-04-17 07:20:36 +09:00
|
|
|
@echo ' tags/TAGS - Generate tags file for editors'
|
|
|
|
@echo ' cscope - Generate cscope index'
|
2011-01-14 21:07:05 +09:00
|
|
|
@echo ' gtags - Generate GNU GLOBAL index'
|
2014-07-11 22:57:24 +09:00
|
|
|
@echo ' kernelrelease - Output the release version string (use with make -s)'
|
|
|
|
@echo ' kernelversion - Output the version stored in Makefile (use with make -s)'
|
|
|
|
@echo ' image_name - Output the image name (use with make -s)'
|
2008-06-21 07:24:17 +09:00
|
|
|
@echo ' headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
|
2007-01-29 21:47:01 +09:00
|
|
|
echo ' (default: $(INSTALL_HDR_PATH))'; \
|
2008-06-21 07:24:17 +09:00
|
|
|
echo ''
|
2017-05-09 07:55:08 +09:00
|
|
|
@echo 'Static analysers:'
|
2005-04-17 07:20:36 +09:00
|
|
|
@echo ' checkstack - Generate a list of stack hogs'
|
|
|
|
@echo ' namespacecheck - Name space analysis on compiled kernel'
|
2007-11-15 05:34:55 +09:00
|
|
|
@echo ' versioncheck - Sanity check on version.h usage'
|
2007-11-05 05:01:55 +09:00
|
|
|
@echo ' includecheck - Check for duplicate included header files'
|
2007-08-25 06:04:56 +09:00
|
|
|
@echo ' export_report - List the usages of all exported symbols'
|
2010-06-07 00:15:01 +09:00
|
|
|
@echo ' headerdep - Detect inclusion cycles in headers'
|
2017-11-14 18:47:20 +09:00
|
|
|
@echo ' coccicheck - Check with Coccinelle'
|
2010-06-07 00:15:01 +09:00
|
|
|
@echo ''
|
2019-11-11 23:56:43 +09:00
|
|
|
@echo 'Tools:'
|
|
|
|
@echo ' nsdeps - Generate missing symbol namespace dependencies'
|
|
|
|
@echo ''
|
2017-05-09 07:55:08 +09:00
|
|
|
@echo 'Kernel selftest:'
|
2014-08-08 04:07:46 +09:00
|
|
|
@echo ' kselftest - Build and run kernel selftest (run as root)'
|
|
|
|
@echo ' Build, install, and boot kernel before'
|
|
|
|
@echo ' running kselftest on it'
|
2015-10-08 11:41:18 +09:00
|
|
|
@echo ' kselftest-clean - Remove all generated kselftest files'
|
2017-10-07 09:17:52 +09:00
|
|
|
@echo ' kselftest-merge - Merge all the config dependencies of kselftest to existing'
|
2016-01-08 16:27:34 +09:00
|
|
|
@echo ' .config.'
|
2014-08-08 04:07:46 +09:00
|
|
|
@echo ''
|
2018-01-11 06:19:37 +09:00
|
|
|
@$(if $(dtstree), \
|
|
|
|
echo 'Devicetree:'; \
|
2019-08-14 03:38:25 +09:00
|
|
|
echo '* dtbs - Build device tree blobs for enabled boards'; \
|
|
|
|
echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)'; \
|
|
|
|
echo ' dt_binding_check - Validate device tree binding documents'; \
|
|
|
|
echo ' dtbs_check - Validate device tree source files';\
|
2018-01-11 06:19:37 +09:00
|
|
|
echo '')
|
|
|
|
|
2017-05-09 07:55:08 +09:00
|
|
|
@echo 'Userspace tools targets:'
|
|
|
|
@echo ' use "make tools/help"'
|
|
|
|
@echo ' or "cd tools; make help"'
|
|
|
|
@echo ''
|
2005-04-17 07:20:36 +09:00
|
|
|
@echo 'Kernel packaging:'
|
2019-08-21 16:02:04 +09:00
|
|
|
@$(MAKE) -f $(srctree)/scripts/Makefile.package help
|
2005-04-17 07:20:36 +09:00
|
|
|
@echo ''
|
|
|
|
@echo 'Documentation targets:'
|
2017-05-14 23:50:01 +09:00
|
|
|
@$(MAKE) -f $(srctree)/Documentation/Makefile dochelp
|
2005-04-17 07:20:36 +09:00
|
|
|
@echo ''
|
2008-04-26 11:34:58 +09:00
|
|
|
@echo 'Architecture specific targets ($(SRCARCH)):'
|
2005-04-17 07:20:36 +09:00
|
|
|
@$(if $(archhelp),$(archhelp),\
|
2008-04-26 11:34:58 +09:00
|
|
|
echo ' No architecture specific help defined for $(SRCARCH)')
|
2005-04-17 07:20:36 +09:00
|
|
|
@echo ''
|
|
|
|
@$(if $(boards), \
|
|
|
|
$(foreach b, $(boards), \
|
|
|
|
printf " %-24s - Build for %s\\n" $(b) $(subst _defconfig,,$(b));) \
|
|
|
|
echo '')
|
2008-04-07 05:16:07 +09:00
|
|
|
@$(if $(board-dirs), \
|
|
|
|
$(foreach b, $(board-dirs), \
|
|
|
|
printf " %-16s - Show %s-specific targets\\n" help-$(b) $(b);) \
|
|
|
|
printf " %-16s - Show all of the above\\n" help-boards; \
|
|
|
|
echo '')
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
@echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
|
2006-08-09 04:35:14 +09:00
|
|
|
@echo ' make V=2 [targets] 2 => give reason for rebuild of target'
|
2005-04-17 07:20:36 +09:00
|
|
|
@echo ' make O=dir [targets] Locate all output files in "dir", including .config'
|
2017-06-06 18:07:53 +09:00
|
|
|
@echo ' make C=1 [targets] Check re-compiled c source with $$CHECK (sparse by default)'
|
2006-05-24 05:57:23 +09:00
|
|
|
@echo ' make C=2 [targets] Force check of all c source with $$CHECK'
|
2011-06-16 20:26:23 +09:00
|
|
|
@echo ' make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
|
2019-09-01 01:25:55 +09:00
|
|
|
@echo ' make W=n [targets] Enable extra build checks, n=1,2,3 where'
|
2011-04-28 05:15:27 +09:00
|
|
|
@echo ' 1: warnings which may be relevant and do not occur too often'
|
|
|
|
@echo ' 2: warnings which occur quite often but may still be relevant'
|
|
|
|
@echo ' 3: more obscure warnings, can most likely be ignored'
|
2011-04-29 21:45:31 +09:00
|
|
|
@echo ' Multiple levels can be combined with W=12 or W=123'
|
2005-04-17 07:20:36 +09:00
|
|
|
@echo ''
|
|
|
|
@echo 'Execute "make" or "make all" to build all targets marked with [*] '
|
|
|
|
@echo 'For further info see the ./README file'
|
|
|
|
|
|
|
|
|
2008-04-07 05:16:07 +09:00
|
|
|
help-board-dirs := $(addprefix help-,$(board-dirs))
|
|
|
|
|
|
|
|
help-boards: $(help-board-dirs)
|
|
|
|
|
2014-11-28 21:31:43 +09:00
|
|
|
boards-per-dir = $(sort $(notdir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/$*/*_defconfig)))
|
2008-04-07 05:16:07 +09:00
|
|
|
|
|
|
|
$(help-board-dirs): help-%:
|
|
|
|
@echo 'Architecture specific targets ($(SRCARCH) $*):'
|
|
|
|
@$(if $(boards-per-dir), \
|
|
|
|
$(foreach b, $(boards-per-dir), \
|
|
|
|
printf " %-24s - Build for %s\\n" $*/$(b) $(subst _defconfig,,$(b));) \
|
|
|
|
echo '')
|
|
|
|
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
# Documentation targets
|
|
|
|
# ---------------------------------------------------------------------------
|
2017-10-10 00:26:15 +09:00
|
|
|
DOC_TARGETS := xmldocs latexdocs pdfdocs htmldocs epubdocs cleandocs \
|
|
|
|
linkcheckdocs dochelp refcheckdocs
|
Documentation/sphinx: add basic working Sphinx configuration and build
Add basic configuration and makefile to build documentation from any
.rst files under Documentation using Sphinx. For starters, there's just
the placeholder index.rst.
At the top level Makefile, hook Sphinx documentation targets alongside
(but independent of) the DocBook toolchain, having both be run on the
various 'make *docs' targets.
All Sphinx processing is placed into Documentation/Makefile.sphinx. Both
that and the Documentation/DocBook/Makefile are now expected to handle
all the documentation targets, explicitly ignoring them if they're not
relevant for that particular toolchain. The changes to the existing
DocBook Makefile are kept minimal.
There is graceful handling of missing Sphinx and rst2pdf (which is
needed for pdf output) by checking for the tool and python module,
respectively, with informative messages to the user.
If the Read the Docs theme (sphinx_rtd_theme) is available, use it, but
otherwise gracefully fall back to the Sphinx default theme, with an
informative message to the user, and slightly less pretty HTML output.
Sphinx can now handle htmldocs, pdfdocs (if rst2pdf is available),
epubdocs and xmldocs targets. The output documents are written into per
output type subdirectories under Documentation/output.
Finally, you can pass options to sphinx-build using the SPHINXBUILD make
variable. For example, 'make SPHINXOPTS=-v htmldocs' for more verbose
output from Sphinx.
This is based on the original work by Jonathan Corbet, but he probably
wouldn't recognize this as his own anymore.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2016-05-19 21:14:05 +09:00
|
|
|
PHONY += $(DOC_TARGETS)
|
2019-08-22 02:33:21 +09:00
|
|
|
$(DOC_TARGETS):
|
2017-05-14 23:50:01 +09:00
|
|
|
$(Q)$(MAKE) $(build)=Documentation $@
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-02-19 18:33:02 +09:00
|
|
|
# Misc
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
PHONY += scripts_gdb
|
2019-06-04 19:13:57 +09:00
|
|
|
scripts_gdb: prepare0
|
2019-02-19 18:33:04 +09:00
|
|
|
$(Q)$(MAKE) $(build)=scripts/gdb
|
2019-02-19 18:33:05 +09:00
|
|
|
$(Q)ln -fsn $(abspath $(srctree)/scripts/gdb/vmlinux-gdb.py)
|
2019-02-19 18:33:02 +09:00
|
|
|
|
|
|
|
ifdef CONFIG_GDB_SCRIPTS
|
|
|
|
all: scripts_gdb
|
|
|
|
endif
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
else # KBUILD_EXTMOD
|
|
|
|
|
|
|
|
###
|
|
|
|
# External module support.
|
|
|
|
# When building external modules the kernel used as basis is considered
|
|
|
|
# read-only, and no consistency checks are made and the make
|
|
|
|
# system is not used on the basis kernel. If updates are required
|
|
|
|
# in the basis kernel ordinary make commands (without M=...) must
|
|
|
|
# be used.
|
|
|
|
#
|
|
|
|
# The following are the only valid targets when building external
|
|
|
|
# modules.
|
|
|
|
# make M=dir clean Delete all automatically generated files
|
|
|
|
# make M=dir modules Make all modules in specified dir
|
|
|
|
# make M=dir Same as 'make M=dir modules'
|
|
|
|
# make M=dir modules_install
|
2006-06-25 07:07:55 +09:00
|
|
|
# Install the modules built in the module directory
|
2005-04-17 07:20:36 +09:00
|
|
|
# Assumes install directory is already created
|
|
|
|
|
|
|
|
# We are always building modules
|
|
|
|
KBUILD_MODULES := 1
|
|
|
|
|
2006-03-06 07:14:10 +09:00
|
|
|
PHONY += $(objtree)/Module.symvers
|
2005-04-17 07:20:36 +09:00
|
|
|
$(objtree)/Module.symvers:
|
|
|
|
@test -e $(objtree)/Module.symvers || ( \
|
|
|
|
echo; \
|
|
|
|
echo " WARNING: Symbol version dump $(objtree)/Module.symvers"; \
|
|
|
|
echo " is missing; modules will have no dependencies and modversions."; \
|
|
|
|
echo )
|
|
|
|
|
2019-08-11 00:53:04 +09:00
|
|
|
build-dirs := $(KBUILD_EXTMOD)
|
|
|
|
PHONY += modules
|
|
|
|
modules: descend $(objtree)/Module.symvers
|
2006-08-09 04:36:08 +09:00
|
|
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2006-03-06 07:14:10 +09:00
|
|
|
PHONY += modules_install
|
2006-01-29 07:51:57 +09:00
|
|
|
modules_install: _emodinst_ _emodinst_post
|
2006-02-14 23:58:15 +09:00
|
|
|
|
2006-03-06 07:14:10 +09:00
|
|
|
install-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra)
|
|
|
|
PHONY += _emodinst_
|
2006-01-29 07:51:57 +09:00
|
|
|
_emodinst_:
|
|
|
|
$(Q)mkdir -p $(MODLIB)/$(install-dir)
|
2006-08-09 04:36:08 +09:00
|
|
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2006-03-06 07:14:10 +09:00
|
|
|
PHONY += _emodinst_post
|
2006-01-29 07:51:57 +09:00
|
|
|
_emodinst_post: _emodinst_
|
|
|
|
$(call cmd,depmod)
|
|
|
|
|
2019-08-11 00:53:05 +09:00
|
|
|
clean-dirs := $(KBUILD_EXTMOD)
|
2010-09-06 19:00:08 +09:00
|
|
|
clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-08-11 00:53:00 +09:00
|
|
|
PHONY += /
|
|
|
|
/:
|
|
|
|
@echo >&2 '"$(MAKE) /" is no longer supported. Please use "$(MAKE) ./" instead.'
|
|
|
|
|
2016-03-13 09:39:55 +09:00
|
|
|
PHONY += help
|
2005-04-17 07:20:36 +09:00
|
|
|
help:
|
|
|
|
@echo ' Building external modules.'
|
|
|
|
@echo ' Syntax: make -C path/to/kernel/src M=$$PWD target'
|
|
|
|
@echo ''
|
|
|
|
@echo ' modules - default target, build the module(s)'
|
|
|
|
@echo ' modules_install - install the module'
|
|
|
|
@echo ' clean - remove generated files in module directory only'
|
|
|
|
@echo ''
|
2006-01-25 15:13:18 +09:00
|
|
|
|
2018-11-29 12:56:30 +09:00
|
|
|
PHONY += prepare
|
2005-04-17 07:20:36 +09:00
|
|
|
endif # KBUILD_EXTMOD
|
|
|
|
|
2019-11-18 13:52:47 +09:00
|
|
|
# Single targets
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# To build individual files in subdirectories, you can do like this:
|
|
|
|
#
|
|
|
|
# make foo/bar/baz.s
|
|
|
|
#
|
|
|
|
# The supported suffixes for single-target are listed in 'single-targets'
|
|
|
|
#
|
|
|
|
# To build only under specific subdirectories, you can do like this:
|
|
|
|
#
|
|
|
|
# make foo/bar/baz/
|
|
|
|
|
|
|
|
ifdef single-build
|
|
|
|
|
|
|
|
# .ko is special because modpost is needed
|
|
|
|
single-ko := $(sort $(filter %.ko, $(MAKECMDGOALS)))
|
|
|
|
single-no-ko := $(sort $(patsubst %.ko,%.mod, $(MAKECMDGOALS)))
|
|
|
|
|
|
|
|
$(single-ko): single_modpost
|
|
|
|
@:
|
|
|
|
$(single-no-ko): descend
|
|
|
|
@:
|
|
|
|
|
|
|
|
ifeq ($(KBUILD_EXTMOD),)
|
|
|
|
# For the single build of in-tree modules, use a temporary file to avoid
|
|
|
|
# the situation of modules_install installing an invalid modules.order.
|
|
|
|
MODORDER := .modules.tmp
|
|
|
|
endif
|
|
|
|
|
|
|
|
PHONY += single_modpost
|
|
|
|
single_modpost: $(single-no-ko)
|
|
|
|
$(Q){ $(foreach m, $(single-ko), echo $(extmod-prefix)$m;) } > $(MODORDER)
|
|
|
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
|
|
|
|
|
|
|
KBUILD_MODULES := 1
|
|
|
|
|
|
|
|
export KBUILD_SINGLE_TARGETS := $(addprefix $(extmod-prefix), $(single-no-ko))
|
|
|
|
|
|
|
|
# trim unrelated directories
|
|
|
|
build-dirs := $(foreach d, $(build-dirs), \
|
|
|
|
$(if $(filter $(d)/%, $(KBUILD_SINGLE_TARGETS)), $(d)))
|
|
|
|
|
|
|
|
endif
|
|
|
|
|
2019-08-11 00:53:04 +09:00
|
|
|
# Handle descending into subdirectories listed in $(build-dirs)
|
|
|
|
# Preset locale variables to speed up the build process. Limit locale
|
|
|
|
# tweaks to this spot to avoid wrong language settings when running
|
|
|
|
# make menuconfig etc.
|
|
|
|
# Error messages still appears in the original language
|
|
|
|
PHONY += descend $(build-dirs)
|
|
|
|
descend: $(build-dirs)
|
|
|
|
$(build-dirs): prepare
|
2019-11-18 13:52:47 +09:00
|
|
|
$(Q)$(MAKE) $(build)=$@ \
|
|
|
|
single-build=$(if $(filter-out $@/, $(single-no-ko)),1) \
|
|
|
|
need-builtin=1 need-modorder=1
|
2019-08-11 00:53:04 +09:00
|
|
|
|
2019-08-11 00:53:05 +09:00
|
|
|
clean-dirs := $(addprefix _clean_, $(clean-dirs))
|
|
|
|
PHONY += $(clean-dirs) clean
|
|
|
|
$(clean-dirs):
|
|
|
|
$(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
|
|
|
|
|
2010-09-06 19:00:08 +09:00
|
|
|
clean: $(clean-dirs)
|
|
|
|
$(call cmd,rmdirs)
|
|
|
|
$(call cmd,rmfiles)
|
2011-05-11 07:47:16 +09:00
|
|
|
@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
|
2017-11-17 01:49:13 +09:00
|
|
|
\( -name '*.[aios]' -o -name '*.ko' -o -name '.*.cmd' \
|
2018-09-07 03:26:07 +09:00
|
|
|
-o -name '*.ko.*' \
|
|
|
|
-o -name '*.dtb' -o -name '*.dtb.S' -o -name '*.dt.yaml' \
|
2017-11-17 01:49:13 +09:00
|
|
|
-o -name '*.dwo' -o -name '*.lst' \
|
2019-11-11 23:56:43 +09:00
|
|
|
-o -name '*.su' -o -name '*.mod' -o -name '*.ns_deps' \
|
2010-09-06 19:00:08 +09:00
|
|
|
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
|
2018-03-23 22:04:31 +09:00
|
|
|
-o -name '*.lex.c' -o -name '*.tab.[ch]' \
|
2018-03-23 22:04:37 +09:00
|
|
|
-o -name '*.asn1.[ch]' \
|
2010-09-06 19:00:08 +09:00
|
|
|
-o -name '*.symtypes' -o -name 'modules.order' \
|
|
|
|
-o -name modules.builtin -o -name '.tmp_*.o.*' \
|
2016-05-24 07:09:38 +09:00
|
|
|
-o -name '*.c.[012]*.*' \
|
2017-04-25 05:04:58 +09:00
|
|
|
-o -name '*.ll' \
|
2017-11-29 01:48:49 +09:00
|
|
|
-o -name '*.gcno' \
|
|
|
|
-o -name '*.*.symversions' \) -type f -print | xargs rm -f
|
2010-09-06 19:00:08 +09:00
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
# Generate tags for editors
|
|
|
|
# ---------------------------------------------------------------------------
|
2008-12-04 06:24:13 +09:00
|
|
|
quiet_cmd_tags = GEN $@
|
2019-08-25 22:28:37 +09:00
|
|
|
cmd_tags = $(BASH) $(srctree)/scripts/tags.sh $@
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2011-01-14 21:07:05 +09:00
|
|
|
tags TAGS cscope gtags: FORCE
|
2005-04-17 07:20:36 +09:00
|
|
|
$(call cmd,tags)
|
|
|
|
|
2019-11-11 23:56:43 +09:00
|
|
|
# Script to generate missing namespace dependencies
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
PHONY += nsdeps
|
|
|
|
|
|
|
|
nsdeps: modules
|
|
|
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost nsdeps
|
|
|
|
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
# Scripts to check various things for consistency
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
2011-04-27 06:15:01 +09:00
|
|
|
PHONY += includecheck versioncheck coccicheck namespacecheck export_report
|
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
includecheck:
|
2011-04-27 06:18:29 +09:00
|
|
|
find $(srctree)/* $(RCS_FIND_IGNORE) \
|
2005-04-17 07:20:36 +09:00
|
|
|
-name '*.[hcS]' -type f -print | sort \
|
2007-11-05 19:51:44 +09:00
|
|
|
| xargs $(PERL) -w $(srctree)/scripts/checkincludes.pl
|
2005-04-17 07:20:36 +09:00
|
|
|
|
|
|
|
versioncheck:
|
2011-04-27 06:19:28 +09:00
|
|
|
find $(srctree)/* $(RCS_FIND_IGNORE) \
|
2005-04-17 07:20:36 +09:00
|
|
|
-name '*.[hcS]' -type f -print | sort \
|
2007-11-05 19:51:44 +09:00
|
|
|
| xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2010-06-07 00:15:01 +09:00
|
|
|
coccicheck:
|
2019-08-25 22:28:37 +09:00
|
|
|
$(Q)$(BASH) $(srctree)/scripts/$@
|
2010-06-07 00:15:01 +09:00
|
|
|
|
2005-04-17 07:20:36 +09:00
|
|
|
namespacecheck:
|
|
|
|
$(PERL) $(srctree)/scripts/namespace.pl
|
|
|
|
|
2007-08-25 06:04:56 +09:00
|
|
|
export_report:
|
|
|
|
$(PERL) $(srctree)/scripts/export_report.pl
|
|
|
|
|
2013-06-24 21:48:37 +09:00
|
|
|
PHONY += checkstack kernelrelease kernelversion image_name
|
2006-09-27 17:50:37 +09:00
|
|
|
|
2006-12-13 17:34:12 +09:00
|
|
|
# UML needs a little special treatment here. It wants to use the host
|
|
|
|
# toolchain, so needs $(SUBARCH) passed to checkstack.pl. Everyone
|
|
|
|
# else wants $(ARCH), including people doing cross-builds, which means
|
|
|
|
# that $(SUBARCH) doesn't work here.
|
|
|
|
ifeq ($(ARCH), um)
|
|
|
|
CHECKSTACK_ARCH := $(SUBARCH)
|
|
|
|
else
|
|
|
|
CHECKSTACK_ARCH := $(ARCH)
|
|
|
|
endif
|
2005-04-17 07:20:36 +09:00
|
|
|
checkstack:
|
|
|
|
$(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
|
2019-07-06 12:07:11 +09:00
|
|
|
$(PERL) $(srctree)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2010-08-20 18:36:06 +09:00
|
|
|
kernelrelease:
|
2020-07-10 07:33:45 +09:00
|
|
|
@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion \
|
|
|
|
$(srctree) $(BRANCH) $(KMI_GENERATION))"
|
2010-06-28 11:45:21 +09:00
|
|
|
|
2006-01-10 05:20:34 +09:00
|
|
|
kernelversion:
|
2006-01-16 20:12:12 +09:00
|
|
|
@echo $(KERNELVERSION)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2013-06-24 21:48:37 +09:00
|
|
|
image_name:
|
|
|
|
@echo $(KBUILD_IMAGE)
|
|
|
|
|
2012-04-12 01:36:18 +09:00
|
|
|
# Clear a bunch of variables before executing the submake
|
2019-02-22 16:40:06 +09:00
|
|
|
|
|
|
|
ifeq ($(quiet),silent_)
|
|
|
|
tools_silent=s
|
|
|
|
endif
|
|
|
|
|
2012-04-12 01:36:18 +09:00
|
|
|
tools/: FORCE
|
2012-11-06 06:02:08 +09:00
|
|
|
$(Q)mkdir -p $(objtree)/tools
|
2019-07-06 12:07:11 +09:00
|
|
|
$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/
|
2012-04-12 01:36:18 +09:00
|
|
|
|
|
|
|
tools/%: FORCE
|
2012-11-06 06:02:08 +09:00
|
|
|
$(Q)mkdir -p $(objtree)/tools
|
2019-07-06 12:07:11 +09:00
|
|
|
$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $*
|
2012-04-12 01:36:18 +09:00
|
|
|
|
2014-04-28 16:26:18 +09:00
|
|
|
# FIXME Should go into a make.lib or something
|
2005-04-17 07:20:36 +09:00
|
|
|
# ===========================================================================
|
|
|
|
|
|
|
|
quiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN $(wildcard $(rm-dirs)))
|
|
|
|
cmd_rmdirs = rm -rf $(rm-dirs)
|
|
|
|
|
|
|
|
quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files)))
|
|
|
|
cmd_rmfiles = rm -f $(rm-files)
|
|
|
|
|
2008-04-22 07:53:56 +09:00
|
|
|
# Run depmod only if we have System.map and depmod is executable
|
2007-10-19 04:24:21 +09:00
|
|
|
quiet_cmd_depmod = DEPMOD $(KERNELRELEASE)
|
2011-06-16 05:15:47 +09:00
|
|
|
cmd_depmod = $(CONFIG_SHELL) $(srctree)/scripts/depmod.sh $(DEPMOD) \
|
2018-05-09 16:23:48 +09:00
|
|
|
$(KERNELRELEASE)
|
2007-10-19 04:24:21 +09:00
|
|
|
|
kbuild: let fixdep directly write to .*.cmd files
Currently, fixdep writes dependencies to .*.tmp, which is renamed to
.*.cmd after everything succeeds. This is a very safe way to avoid
corrupted .*.cmd files. The if_changed_dep has carried this safety
mechanism since it was added in 2002.
If fixdep fails for some reasons or a user terminates the build while
fixdep is running, the incomplete output from the fixdep could be
troublesome.
This is my insight about some bad scenarios:
[1] If the compiler succeeds to generate *.o file, but fixdep fails
to write necessary dependencies to .*.cmd file, Make will miss
to rebuild the object when headers or CONFIG options are changed.
In this case, fixdep should not generate .*.cmd file at all so
that 'arg-check' will surely trigger the rebuild of the object.
[2] A partially constructed .*.cmd file may not be a syntactically
correct makefile. The next time Make runs, it would include it,
then fail to parse it. Once this happens, 'make clean' is be the
only way to fix it.
In fact, [1] is no longer a problem since commit 9c2af1c7377a ("kbuild:
add .DELETE_ON_ERROR special target"). Make deletes a target file on
any failure in its recipe. Because fixdep is a part of the recipe of
*.o target, if it fails, the *.o is deleted anyway. However, I am a
bit worried about the slight possibility of [2].
So, here is a solution. Let fixdep directly write to a .*.cmd file,
but allow makefiles to include it only when its corresponding target
exists.
This effectively reverts commit 2982c953570b ("kbuild: remove redundant
$(wildcard ...) for cmd_files calculation"), and commit 00d78ab2ba75
("kbuild: remove dead code in cmd_files calculation in top Makefile")
because now we must check the presence of targets.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2018-11-30 10:05:22 +09:00
|
|
|
# read saved command lines for existing targets
|
|
|
|
existing-targets := $(wildcard $(sort $(targets)))
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-02-22 16:40:08 +09:00
|
|
|
-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2019-08-11 00:53:03 +09:00
|
|
|
endif # config-targets
|
|
|
|
endif # mixed-build
|
|
|
|
endif # need-sub-make
|
2005-04-17 07:20:36 +09:00
|
|
|
|
2006-03-06 07:14:10 +09:00
|
|
|
PHONY += FORCE
|
2005-04-17 07:20:36 +09:00
|
|
|
FORCE:
|
2006-03-06 07:14:10 +09:00
|
|
|
|
2018-07-05 12:33:07 +09:00
|
|
|
# Declare the contents of the PHONY variable as phony. We keep that
|
2009-04-09 20:34:34 +09:00
|
|
|
# information in a variable so we can use it in if_changed and friends.
|
2006-03-06 07:14:10 +09:00
|
|
|
.PHONY: $(PHONY)
|