mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-13 14:24:11 +08:00
Kbuild fixes for v5.11 (2nd)
- Use the 'python3' command to invoke python scripts because some distributions do not provide the 'python' command any more. - Clean-up and update documents - Use pkg-config to search libcrypto - Fix duplicated debug flags - Ignore some more stubs in scripts/kallsyms.c -----BEGIN PGP SIGNATURE----- iQJJBAABCgAzFiEEbmPs18K1szRHjPqEPYsBB53g2wYFAmAfT5IVHG1hc2FoaXJv eUBrZXJuZWwub3JnAAoJED2LAQed4NsGc6cP/RuSLpAghrcMzVfD8M+f/lFGwR2h c6uDRR1r5lf+75dobadN/Kah2vRihfBH/ovwXPvU5EtgOHC6NKT0fTeZvhAz9gWA 75fyiddIMGWgH3GilCoCS/1Yf7iCZIjTwDXc3SI1Rx8TvlFwcImivjdoVKZgDH5u aV50IT6d7IXqTzvpguhXPuTqpSnRcodyCyWE5Lo6Wq4622v6hxaoisdUSmWjwCmA xiI4mTseg+r4Mo8NjRhu/A6V6vwvtMSrnrYXQY6tERUwaJFJOLHxEfsc6HkfWenJ y3nub5ODUim1iqBLZzQyiTckoN6Ss86OW/wSxwFoRjROydFk3LzOEfnZ34Gub41+ 2WJtfz9219EY3xdpM9CZMyl8+DY0Dxz2NeJQ3eWuRFTIRH+GPn9hA6H/Lk4P73jX /IcXRkoxGl3cjNTdscN/YBKyp1qFmn0960TJUh0j5kiRiXtunlvs+EMchVk4NzhU /82vXSrFIEZAvVyUKf5WswRglKLEzwWavdHdqiniowWX1hf0PWGOKSJ1azi15ufV wzcL1+0N81LC+IZMp+R6WmkeaFXF8raGwjLshZf2YDd2eBBXqXfyBB+zn59D59Zm 8EvDFiGRbGKoSu/hrwko0ipZkoZ5YXDp5fTU99+KoZDWnbpcreCp50D0aBF0JERy CX+KCw40kXHYP9A4 =DI2e -----END PGP SIGNATURE----- Merge tag 'kbuild-fixes-v5.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild Pull Kbuild fixes from Masahiro Yamada: - Use the 'python3' command to invoke python scripts because some distributions do not provide the 'python' command any more. - Clean-up and update documents - Use pkg-config to search libcrypto - Fix duplicated debug flags - Ignore some more stubs in scripts/kallsyms.c * tag 'kbuild-fixes-v5.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: kallsyms: fix nonconverging kallsyms table with lld kbuild: fix duplicated flags in DEBUG_CFLAGS scripts/clang-tools: switch explicitly to Python 3 kbuild: remove PYTHON variable Documentation/llvm: Add a section about supported architectures Revert "checkpatch: add check for keyword 'boolean' in Kconfig definitions" scripts: use pkg-config to locate libcrypto kconfig: mconf: fix HOSTCC call doc: gcc-plugins: update gcc-plugins.rst kbuild: simplify GCC_PLUGINS enablement in dummy-tools/gcc Documentation/Kbuild: Remove references to gcc-plugin.sh scripts: switch explicitly to Python 3
This commit is contained in:
commit
2db138bb9f
@ -75,7 +75,7 @@ quiet_cmd_sphinx = SPHINX $@ --> file://$(abspath $(BUILDDIR)/$3/$4)
|
||||
cmd_sphinx = $(MAKE) BUILDDIR=$(abspath $(BUILDDIR)) $(build)=Documentation/userspace-api/media $2 && \
|
||||
PYTHONDONTWRITEBYTECODE=1 \
|
||||
BUILDDIR=$(abspath $(BUILDDIR)) SPHINX_CONF=$(abspath $(srctree)/$(src)/$5/$(SPHINX_CONF)) \
|
||||
$(PYTHON) $(srctree)/scripts/jobserver-exec \
|
||||
$(PYTHON3) $(srctree)/scripts/jobserver-exec \
|
||||
$(SHELL) $(srctree)/Documentation/sphinx/parallel-wrapper.sh \
|
||||
$(SPHINXBUILD) \
|
||||
-b $2 \
|
||||
|
@ -11,16 +11,13 @@ compiler [1]_. They are useful for runtime instrumentation and static analysis.
|
||||
We can analyse, change and add further code during compilation via
|
||||
callbacks [2]_, GIMPLE [3]_, IPA [4]_ and RTL passes [5]_.
|
||||
|
||||
The GCC plugin infrastructure of the kernel supports all gcc versions from
|
||||
4.5 to 6.0, building out-of-tree modules, cross-compilation and building in a
|
||||
separate directory.
|
||||
Plugin source files have to be compilable by both a C and a C++ compiler as well
|
||||
because gcc versions 4.5 and 4.6 are compiled by a C compiler,
|
||||
gcc-4.7 can be compiled by a C or a C++ compiler,
|
||||
and versions 4.8+ can only be compiled by a C++ compiler.
|
||||
The GCC plugin infrastructure of the kernel supports building out-of-tree
|
||||
modules, cross-compilation and building in a separate directory.
|
||||
Plugin source files have to be compilable by a C++ compiler.
|
||||
|
||||
Currently the GCC plugin infrastructure supports only the x86, arm, arm64 and
|
||||
powerpc architectures.
|
||||
Currently the GCC plugin infrastructure supports only some architectures.
|
||||
Grep "select HAVE_GCC_PLUGINS" to find out which architectures support
|
||||
GCC plugins.
|
||||
|
||||
This infrastructure was ported from grsecurity [6]_ and PaX [7]_.
|
||||
|
||||
@ -47,20 +44,13 @@ Files
|
||||
This is a compatibility header for GCC plugins.
|
||||
It should be always included instead of individual gcc headers.
|
||||
|
||||
**$(src)/scripts/gcc-plugin.sh**
|
||||
|
||||
This script checks the availability of the included headers in
|
||||
gcc-common.h and chooses the proper host compiler to build the plugins
|
||||
(gcc-4.7 can be built by either gcc or g++).
|
||||
|
||||
**$(src)/scripts/gcc-plugins/gcc-generate-gimple-pass.h,
|
||||
$(src)/scripts/gcc-plugins/gcc-generate-ipa-pass.h,
|
||||
$(src)/scripts/gcc-plugins/gcc-generate-simple_ipa-pass.h,
|
||||
$(src)/scripts/gcc-plugins/gcc-generate-rtl-pass.h**
|
||||
|
||||
These headers automatically generate the registration structures for
|
||||
GIMPLE, SIMPLE_IPA, IPA and RTL passes. They support all gcc versions
|
||||
from 4.5 to 6.0.
|
||||
GIMPLE, SIMPLE_IPA, IPA and RTL passes.
|
||||
They should be preferred to creating the structures by hand.
|
||||
|
||||
|
||||
@ -68,21 +58,25 @@ Usage
|
||||
=====
|
||||
|
||||
You must install the gcc plugin headers for your gcc version,
|
||||
e.g., on Ubuntu for gcc-4.9::
|
||||
e.g., on Ubuntu for gcc-10::
|
||||
|
||||
apt-get install gcc-4.9-plugin-dev
|
||||
apt-get install gcc-10-plugin-dev
|
||||
|
||||
Or on Fedora::
|
||||
|
||||
dnf install gcc-plugin-devel
|
||||
|
||||
Enable a GCC plugin based feature in the kernel config::
|
||||
Enable the GCC plugin infrastructure and some plugin(s) you want to use
|
||||
in the kernel config::
|
||||
|
||||
CONFIG_GCC_PLUGIN_CYC_COMPLEXITY = y
|
||||
CONFIG_GCC_PLUGINS=y
|
||||
CONFIG_GCC_PLUGIN_CYC_COMPLEXITY=y
|
||||
CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y
|
||||
...
|
||||
|
||||
To compile only the plugin(s)::
|
||||
To compile the minimum tool set including the plugin(s)::
|
||||
|
||||
make gcc-plugins
|
||||
make scripts
|
||||
|
||||
or just run the kernel make and compile the whole kernel with
|
||||
the cyclomatic complexity GCC plugin.
|
||||
@ -91,7 +85,8 @@ the cyclomatic complexity GCC plugin.
|
||||
4. How to add a new GCC plugin
|
||||
==============================
|
||||
|
||||
The GCC plugins are in $(src)/scripts/gcc-plugins/. You can use a file or a directory
|
||||
here. It must be added to $(src)/scripts/gcc-plugins/Makefile,
|
||||
$(src)/scripts/Makefile.gcc-plugins and $(src)/arch/Kconfig.
|
||||
The GCC plugins are in scripts/gcc-plugins/. You need to put plugin source files
|
||||
right under scripts/gcc-plugins/. Creating subdirectories is not supported.
|
||||
It must be added to scripts/gcc-plugins/Makefile, scripts/Makefile.gcc-plugins
|
||||
and a relevant Kconfig file.
|
||||
See the cyc_complexity_plugin.c (CONFIG_GCC_PLUGIN_CYC_COMPLEXITY) GCC plugin.
|
||||
|
@ -63,6 +63,50 @@ They can be enabled individually. The full list of the parameters: ::
|
||||
Currently, the integrated assembler is disabled by default. You can pass
|
||||
``LLVM_IAS=1`` to enable it.
|
||||
|
||||
Supported Architectures
|
||||
-----------------------
|
||||
|
||||
LLVM does not target all of the architectures that Linux supports and
|
||||
just because a target is supported in LLVM does not mean that the kernel
|
||||
will build or work without any issues. Below is a general summary of
|
||||
architectures that currently work with ``CC=clang`` or ``LLVM=1``. Level
|
||||
of support corresponds to "S" values in the MAINTAINERS files. If an
|
||||
architecture is not present, it either means that LLVM does not target
|
||||
it or there are known issues. Using the latest stable version of LLVM or
|
||||
even the development tree will generally yield the best results.
|
||||
An architecture's ``defconfig`` is generally expected to work well,
|
||||
certain configurations may have problems that have not been uncovered
|
||||
yet. Bug reports are always welcome at the issue tracker below!
|
||||
|
||||
.. list-table::
|
||||
:widths: 10 10 10
|
||||
:header-rows: 1
|
||||
|
||||
* - Architecture
|
||||
- Level of support
|
||||
- ``make`` command
|
||||
* - arm
|
||||
- Supported
|
||||
- ``LLVM=1``
|
||||
* - arm64
|
||||
- Supported
|
||||
- ``LLVM=1``
|
||||
* - mips
|
||||
- Maintained
|
||||
- ``CC=clang``
|
||||
* - powerpc
|
||||
- Maintained
|
||||
- ``CC=clang``
|
||||
* - riscv
|
||||
- Maintained
|
||||
- ``CC=clang``
|
||||
* - s390
|
||||
- Maintained
|
||||
- ``CC=clang``
|
||||
* - x86
|
||||
- Supported
|
||||
- ``LLVM=1``
|
||||
|
||||
Getting Help
|
||||
------------
|
||||
|
||||
|
@ -755,7 +755,7 @@ more details, with real examples.
|
||||
bits on the scripts nonetheless.
|
||||
|
||||
Kbuild provides variables $(CONFIG_SHELL), $(AWK), $(PERL),
|
||||
$(PYTHON) and $(PYTHON3) to refer to interpreters for the respective
|
||||
and $(PYTHON3) to refer to interpreters for the respective
|
||||
scripts.
|
||||
|
||||
Example::
|
||||
|
7
Makefile
7
Makefile
@ -452,7 +452,6 @@ AWK = awk
|
||||
INSTALLKERNEL := installkernel
|
||||
DEPMOD = depmod
|
||||
PERL = perl
|
||||
PYTHON = python
|
||||
PYTHON3 = python3
|
||||
CHECK = sparse
|
||||
BASH = bash
|
||||
@ -508,7 +507,7 @@ CLANG_FLAGS :=
|
||||
|
||||
export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC
|
||||
export CPP AR NM STRIP OBJCOPY OBJDUMP READELF PAHOLE RESOLVE_BTFIDS LEX YACC AWK INSTALLKERNEL
|
||||
export PERL PYTHON PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
|
||||
export PERL PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
|
||||
export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ ZSTD
|
||||
export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE
|
||||
|
||||
@ -812,10 +811,12 @@ KBUILD_CFLAGS += -ftrivial-auto-var-init=zero
|
||||
KBUILD_CFLAGS += -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
|
||||
endif
|
||||
|
||||
DEBUG_CFLAGS :=
|
||||
|
||||
# Workaround for GCC versions < 5.0
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61801
|
||||
ifdef CONFIG_CC_IS_GCC
|
||||
DEBUG_CFLAGS := $(call cc-ifversion, -lt, 0500, $(call cc-option, -fno-var-tracking-assignments))
|
||||
DEBUG_CFLAGS += $(call cc-ifversion, -lt, 0500, $(call cc-option, -fno-var-tracking-assignments))
|
||||
endif
|
||||
|
||||
ifdef CONFIG_DEBUG_INFO
|
||||
|
@ -69,7 +69,7 @@ vmlinux.bin: vmlinux FORCE
|
||||
$(call if_changed,objcopy)
|
||||
|
||||
unwcheck: vmlinux
|
||||
-$(Q)READELF=$(READELF) $(PYTHON) $(srctree)/arch/ia64/scripts/unwcheck.py $<
|
||||
-$(Q)READELF=$(READELF) $(PYTHON3) $(srctree)/arch/ia64/scripts/unwcheck.py $<
|
||||
|
||||
archclean:
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Usage: unwcheck.py FILE
|
||||
|
@ -3,6 +3,9 @@
|
||||
# scripts contains sources for various helper programs used throughout
|
||||
# the kernel for the build process.
|
||||
|
||||
CRYPTO_LIBS = $(shell pkg-config --libs libcrypto 2> /dev/null || echo -lcrypto)
|
||||
CRYPTO_CFLAGS = $(shell pkg-config --cflags libcrypto 2> /dev/null)
|
||||
|
||||
hostprogs-always-$(CONFIG_BUILD_BIN2C) += bin2c
|
||||
hostprogs-always-$(CONFIG_KALLSYMS) += kallsyms
|
||||
hostprogs-always-$(BUILD_C_RECORDMCOUNT) += recordmcount
|
||||
@ -14,8 +17,9 @@ hostprogs-always-$(CONFIG_SYSTEM_EXTRA_CERTIFICATE) += insert-sys-cert
|
||||
|
||||
HOSTCFLAGS_sorttable.o = -I$(srctree)/tools/include
|
||||
HOSTCFLAGS_asn1_compiler.o = -I$(srctree)/include
|
||||
HOSTLDLIBS_sign-file = -lcrypto
|
||||
HOSTLDLIBS_extract-cert = -lcrypto
|
||||
HOSTLDLIBS_sign-file = $(CRYPTO_LIBS)
|
||||
HOSTCFLAGS_extract-cert.o = $(CRYPTO_CFLAGS)
|
||||
HOSTLDLIBS_extract-cert = $(CRYPTO_LIBS)
|
||||
|
||||
ifdef CONFIG_UNWINDER_ORC
|
||||
ifeq ($(ARCH),x86_64)
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Copyright 2004 Matt Mackall <mpm@selenic.com>
|
||||
#
|
||||
|
@ -3390,13 +3390,6 @@ sub process {
|
||||
}
|
||||
}
|
||||
|
||||
# discourage the use of boolean for type definition attributes of Kconfig options
|
||||
if ($realfile =~ /Kconfig/ &&
|
||||
$line =~ /^\+\s*\bboolean\b/) {
|
||||
WARN("CONFIG_TYPE_BOOLEAN",
|
||||
"Use of boolean is deprecated, please use bool instead.\n" . $herecurr);
|
||||
}
|
||||
|
||||
if (($realfile =~ /Makefile.*/ || $realfile =~ /Kbuild.*/) &&
|
||||
($line =~ /\+(EXTRA_[A-Z]+FLAGS).*/)) {
|
||||
my $flag = $1;
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Copyright (C) Google LLC, 2018
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Copyright (C) Google LLC, 2020
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# diffconfig - a tool to compare .config files.
|
||||
|
@ -75,16 +75,12 @@ if arg_contain -S "$@"; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# For scripts/gcc-plugin.sh
|
||||
# To set GCC_PLUGINS
|
||||
if arg_contain -print-file-name=plugin "$@"; then
|
||||
plugin_dir=$(mktemp -d)
|
||||
|
||||
sed -n 's/.*#include "\(.*\)"/\1/p' $(dirname $0)/../gcc-plugins/gcc-common.h |
|
||||
while read header
|
||||
do
|
||||
mkdir -p $plugin_dir/include/$(dirname $header)
|
||||
touch $plugin_dir/include/$header
|
||||
done
|
||||
mkdir -p $plugin_dir/include
|
||||
touch $plugin_dir/include/plugin-version.h
|
||||
|
||||
echo $plugin_dir
|
||||
exit 0
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# This determines how many parallel tasks "make" is expecting, as it is
|
||||
|
@ -112,6 +112,12 @@ static bool is_ignored_symbol(const char *name, char type)
|
||||
"__crc_", /* modversions */
|
||||
"__efistub_", /* arm64 EFI stub namespace */
|
||||
"__kvm_nvhe_", /* arm64 non-VHE KVM namespace */
|
||||
"__AArch64ADRPThunk_", /* arm64 lld */
|
||||
"__ARMV5PILongThunk_", /* arm lld */
|
||||
"__ARMV7PILongThunk_",
|
||||
"__ThumbV7PILongThunk_",
|
||||
"__LA25Thunk_", /* mips lld */
|
||||
"__microLA25Thunk_",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -35,7 +35,7 @@ fi
|
||||
|
||||
# As a final fallback before giving up, check if $HOSTCC knows of a default
|
||||
# ncurses installation (e.g. from a vendor-specific sysroot).
|
||||
if echo '#include <ncurses.h>' | "${HOSTCC}" -E - >/dev/null 2>&1; then
|
||||
if echo '#include <ncurses.h>' | ${HOSTCC} -E - >/dev/null 2>&1; then
|
||||
echo cflags=\"-D_GNU_SOURCE\"
|
||||
echo libs=\"-lncurses\"
|
||||
exit 0
|
||||
|
Loading…
Reference in New Issue
Block a user