Pull Kbuild updates from Masahiro Yamada: "Build system: - add CONFIG_UNUSED_KSYMS_WHITELIST, which will be useful to define a fixed set of export symbols for Generic Kernel Image (GKI) - allow to run 'make dt_binding_check' without .config - use full schema for checking DT examples in *.yaml files - make modpost fail for missing MODULE_IMPORT_NS(), which makes more sense because we know the produced modules are never loadable - Remove unused 'AS' variable Kconfig: - sanitize DEFCONFIG_LIST, and remove ARCH_DEFCONFIG from Kconfig files - relax the 'imply' behavior so that symbols implied by 'y' can become 'm' - make 'imply' obey 'depends on' in order to make 'imply' really weak Misc: - add documentation on building the kernel with Clang/LLVM - revive __HAVE_ARCH_STRLEN for 32bit sparc to use optimized strlen() - fix warning from deb-pkg builds when CONFIG_DEBUG_INFO=n - various script and Makefile cleanups" * tag 'kbuild-v5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (34 commits) Makefile: Update kselftest help information kbuild: deb-pkg: fix warning when CONFIG_DEBUG_INFO is unset kbuild: add outputmakefile to no-dot-config-targets kbuild: remove AS variable net: wan: wanxl: refactor the firmware rebuild rule net: wan: wanxl: use $(M68KCC) instead of $(M68KAS) for rebuilding firmware net: wan: wanxl: use allow to pass CROSS_COMPILE_M68k for rebuilding firmware kbuild: add comment about grouped target kbuild: add -Wall to KBUILD_HOSTCXXFLAGS kconfig: remove unused variable in qconf.cc sparc: revive __HAVE_ARCH_STRLEN for 32bit sparc kbuild: refactor Makefile.dtbinst more kbuild: compute the dtbs_install destination more simply Makefile: disallow data races on gcc-10 as well kconfig: make 'imply' obey the direct dependency kconfig: allow symbols implied by y to become m net: drop_monitor: use IS_REACHABLE() to guard net_dm_hw_report() modpost: return error if module is missing ns imports and MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=n modpost: rework and consolidate logging interface kbuild: allow to run dt_binding_check without kernel configuration ...
Unified · Split
| @@ -2,7 +2,8 @@ · 1 unmodified line | ||
| 2 | 2 | # Makefile for Sphinx documentation |
| 3 | 3 | # |
| 4 | 4 | |
| 5 | −subdir-y := devicetree/bindings/ | |
| 5 | +# for cleaning | |
| 6 | +subdir- := devicetree/bindings | |
| 6 | 7 | |
| 7 | 8 | # Check for broken documentation file references |
| 8 | 9 | ifeq ($(CONFIG_WARN_MISSING_DOCUMENTS),y) |
| @@ -1,2 +1,2 @@ | ||
| 1 | 1 | *.example.dts |
| 2 | −processed-schema.yaml | |
| 2 | +processed-schema*.yaml | |
| @@ -2,7 +2,6 @@ · 1 unmodified line | ||
| 2 | 2 | DT_DOC_CHECKER ?= dt-doc-validate |
| 3 | 3 | DT_EXTRACT_EX ?= dt-extract-example |
| 4 | 4 | DT_MK_SCHEMA ?= dt-mk-schema |
| 5 | −DT_MK_SCHEMA_FLAGS := $(if $(DT_SCHEMA_FILES), -u) | |
| 6 | 5 | |
| 7 | 6 | quiet_cmd_chk_binding = CHKDT $(patsubst $(srctree)/%,%,$<) |
| 8 | 7 | cmd_chk_binding = $(DT_DOC_CHECKER) -u $(srctree)/$(src) $< ; \ |
| @@ -11,26 +10,35 @@ quiet_cmd_chk_binding = CHKDT $(patsubst $(srctree)/%,%,$<) · 2 unmodified lines | ||
| 11 | 10 | $(obj)/%.example.dts: $(src)/%.yaml FORCE |
| 12 | 11 | $(call if_changed,chk_binding) |
| 13 | 12 | |
| 14 | −DT_TMP_SCHEMA := processed-schema.yaml | |
| 13 | +# Use full schemas when checking %.example.dts | |
| 14 | +DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml | |
| 15 | 15 | |
| 16 | 16 | quiet_cmd_mk_schema = SCHEMA $@ |
| 17 | 17 | cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@ $(real-prereqs) |
| 18 | 18 | |
| 19 | −DT_DOCS = $(shell \ | |
| 19 | +DT_DOCS = $(addprefix $(src)/, \ | |
| 20 | + $(shell \ | |
| 20 | 21 | cd $(srctree)/$(src) && \ |
| 21 | 22 | find * \( -name '*.yaml' ! \ |
| 22 | − -name $(DT_TMP_SCHEMA) ! \ | |
| 23 | + -name 'processed-schema*' ! \ | |
| 23 | 24 | -name '*.example.dt.yaml' \) \ |
| 24 | − ) | |
| 25 | + )) | |
| 25 | 26 | |
| 26 | −DT_SCHEMA_FILES ?= $(addprefix $(src)/,$(DT_DOCS)) | |
| 27 | +DT_SCHEMA_FILES ?= $(DT_DOCS) | |
| 27 | 28 | |
| 28 | −ifeq ($(CHECK_DTBS),) | |
| 29 | −extra-y += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES)) | |
| 30 | −extra-y += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES)) | |
| 31 | −endif | |
| 29 | +extra-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES)) | |
| 30 | +extra-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES)) | |
| 31 | +extra-$(CHECK_DT_BINDING) += processed-schema-examples.yaml | |
| 32 | 32 | |
| 33 | −$(obj)/$(DT_TMP_SCHEMA): $(DT_SCHEMA_FILES) FORCE | |
| 33 | +override DTC_FLAGS := \ | |
| 34 | + -Wno-avoid_unnecessary_addr_size \ | |
| 35 | + -Wno-graph_child_address | |
| 36 | + | |
| 37 | +$(obj)/processed-schema-examples.yaml: $(DT_DOCS) FORCE | |
| 38 | + $(call if_changed,mk_schema) | |
| 39 | + | |
| 40 | +$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := -u | |
| 41 | +$(obj)/processed-schema.yaml: $(DT_SCHEMA_FILES) FORCE | |
| 34 | 42 | $(call if_changed,mk_schema) |
| 35 | 43 | |
| 36 | −extra-y += $(DT_TMP_SCHEMA) | |
| 44 | +extra-y += processed-schema.yaml | |
| @@ -147,6 +147,10 @@ Note that ``dtbs_check`` will skip any binding schema files with errors. It is · 146 unmodified lines | ||
| 147 | 147 | necessary to use ``dt_binding_check`` to get all the validation errors in the |
| 148 | 148 | binding schema files. |
| 149 | 149 | |
| 150 | +It is possible to run both in a single command:: | |
| 151 | + | |
| 152 | + make dt_binding_check dtbs_check | |
| 153 | + | |
| 150 | 154 | It is also possible to run checks with a single schema file by setting the |
| 151 | 155 | ``DT_SCHEMA_FILES`` variable to a specific schema file. |
| 152 | 156 | |
| @@ -20,6 +20,7 @@ Kernel Build System · 19 unmodified lines | ||
| 20 | 20 | issues |
| 21 | 21 | reproducible-builds |
| 22 | 22 | gcc-plugins |
| 23 | + llvm | |
| 23 | 24 | |
| 24 | 25 | .. only:: subproject and html |
| 25 | 26 | |
| @@ -159,11 +159,11 @@ applicable everywhere (see syntax). · 158 unmodified lines | ||
| 159 | 159 | Given the following example:: |
| 160 | 160 | |
| 161 | 161 | config FOO |
| 162 | − tristate | |
| 162 | + tristate "foo" | |
| 163 | 163 | imply BAZ |
| 164 | 164 | |
| 165 | 165 | config BAZ |
| 166 | − tristate | |
| 166 | + tristate "baz" | |
| 167 | 167 | depends on BAR |
| 168 | 168 | |
| 169 | 169 | The following values are possible: |
| @@ -173,7 +173,10 @@ applicable everywhere (see syntax). · 3 unmodified lines | ||
| 173 | 173 | === === ============= ============== |
| 174 | 174 | n y n N/m/y |
| 175 | 175 | m y m M/y/n |
| 176 | − y y y Y/n | |
| 176 | + y y y Y/m/n | |
| 177 | + n m n N/m | |
| 178 | + m m m M/n | |
| 179 | + y m n M/n | |
| 177 | 180 | y n * N |
| 178 | 181 | === === ============= ============== |
| 179 | 182 | |
| @@ -181,6 +184,24 @@ applicable everywhere (see syntax). · 1 unmodified line | ||
| 181 | 184 | ability to hook into a secondary subsystem while allowing the user to |
| 182 | 185 | configure that subsystem out without also having to unset these drivers. |
| 183 | 186 | |
| 187 | + Note: If the combination of FOO=y and BAR=m causes a link error, | |
| 188 | + you can guard the function call with IS_REACHABLE():: | |
| 189 | + | |
| 190 | + foo_init() | |
| 191 | + { | |
| 192 | + if (IS_REACHABLE(CONFIG_BAZ)) | |
| 193 | + baz_register(&foo); | |
| 194 | + ... | |
| 195 | + } | |
| 196 | + | |
| 197 | + Note: If the feature provided by BAZ is highly desirable for FOO, | |
| 198 | + FOO should imply not only BAZ, but also its dependency BAR:: | |
| 199 | + | |
| 200 | + config FOO | |
| 201 | + tristate "foo" | |
| 202 | + imply BAR | |
| 203 | + imply BAZ | |
| 204 | + | |
| 184 | 205 | - limiting menu display: "visible if" <expr> |
| 185 | 206 | |
| 186 | 207 | This attribute is only applicable to menu blocks, if the condition is |
| @@ -0,0 +1,80 @@ | ||
| 1 | +============================== | |
| 2 | +Building Linux with Clang/LLVM | |
| 3 | +============================== | |
| 4 | + | |
| 5 | +This document covers how to build the Linux kernel with Clang and LLVM | |
| 6 | +utilities. | |
| 7 | + | |
| 8 | +About | |
| 9 | +----- | |
| 10 | + | |
| 11 | +The Linux kernel has always traditionally been compiled with GNU toolchains | |
| 12 | +such as GCC and binutils. Ongoing work has allowed for `Clang | |
| 13 | +<https://clang.llvm.org/>`_ and `LLVM <https://llvm.org/>`_ utilities to be | |
| 14 | +used as viable substitutes. Distributions such as `Android | |
| 15 | +<https://www.android.com/>`_, `ChromeOS | |
| 16 | +<https://www.chromium.org/chromium-os>`_, and `OpenMandriva | |
| 17 | +<https://www.openmandriva.org/>`_ use Clang built kernels. `LLVM is a | |
| 18 | +collection of toolchain components implemented in terms of C++ objects | |
| 19 | +<https://www.aosabook.org/en/llvm.html>`_. Clang is a front-end to LLVM that | |
| 20 | +supports C and the GNU C extensions required by the kernel, and is pronounced | |
| 21 | +"klang," not "see-lang." | |
| 22 | + | |
| 23 | +Clang | |
| 24 | +----- | |
| 25 | + | |
| 26 | +The compiler used can be swapped out via `CC=` command line argument to `make`. | |
| 27 | +`CC=` should be set when selecting a config and during a build. | |
| 28 | + | |
| 29 | + make CC=clang defconfig | |
| 30 | + | |
| 31 | + make CC=clang | |
| 32 | + | |
| 33 | +Cross Compiling | |
| 34 | +--------------- | |
| 35 | + | |
| 36 | +A single Clang compiler binary will typically contain all supported backends, | |
| 37 | +which can help simplify cross compiling. | |
| 38 | + | |
| 39 | + ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make CC=clang | |
| 40 | + | |
| 41 | +`CROSS_COMPILE` is not used to prefix the Clang compiler binary, instead | |
| 42 | +`CROSS_COMPILE` is used to set a command line flag: `--target <triple>`. For | |
| 43 | +example: | |
| 44 | + | |
| 45 | + clang --target aarch64-linux-gnu foo.c | |
| 46 | + | |
| 47 | +LLVM Utilities | |
| 48 | +-------------- | |
| 49 | + | |
| 50 | +LLVM has substitutes for GNU binutils utilities. These can be invoked as | |
| 51 | +additional parameters to `make`. | |
| 52 | + | |
| 53 | + make CC=clang AS=clang LD=ld.lld AR=llvm-ar NM=llvm-nm STRIP=llvm-strip \\ | |
| 54 | + OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump OBJSIZE=llvm-objsize \\ | |
| 55 | + READELF=llvm-readelf HOSTCC=clang HOSTCXX=clang++ HOSTAR=llvm-ar \\ | |
| 56 | + HOSTLD=ld.lld | |
| 57 | + | |
| 58 | +Getting Help | |
| 59 | +------------ | |
| 60 | + | |
| 61 | +- `Website <https://clangbuiltlinux.github.io/>`_ | |
| 62 | +- `Mailing List <https://groups.google.com/forum/#!forum/clang-built-linux>`_: <clang-built-linux@googlegroups.com> | |
| 63 | +- `Issue Tracker <https://github.com/ClangBuiltLinux/linux/issues>`_ | |
| 64 | +- IRC: #clangbuiltlinux on chat.freenode.net | |
| 65 | +- `Telegram <https://t.me/ClangBuiltLinux>`_: @ClangBuiltLinux | |
| 66 | +- `Wiki <https://github.com/ClangBuiltLinux/linux/wiki>`_ | |
| 67 | +- `Beginner Bugs <https://github.com/ClangBuiltLinux/linux/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22>`_ | |
| 68 | + | |
| 69 | +Getting LLVM | |
| 70 | +------------- | |
| 71 | + | |
| 72 | +- http://releases.llvm.org/download.html | |
| 73 | +- https://github.com/llvm/llvm-project | |
| 74 | +- https://llvm.org/docs/GettingStarted.html | |
| 75 | +- https://llvm.org/docs/CMake.html | |
| 76 | +- https://apt.llvm.org/ | |
| 77 | +- https://www.archlinux.org/packages/extra/x86_64/llvm/ | |
| 78 | +- https://github.com/ClangBuiltLinux/tc-build | |
| 79 | +- https://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-source | |
| 80 | +- https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/ | |
| @@ -4139,6 +4139,7 @@ B: https://github.com/ClangBuiltLinux/linux/issues · 4138 unmodified lines | ||
| 4139 | 4139 | C: irc://chat.freenode.net/clangbuiltlinux |
| 4140 | 4140 | S: Supported |
| 4141 | 4141 | K: \b(?i:clang|llvm)\b |
| 4142 | +F: Documentation/kbuild/llvm.rst | |
| 4142 | 4143 | |
| 4143 | 4144 | CLEANCACHE API |
| 4144 | 4145 | M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> |
| @@ -255,7 +255,8 @@ clean-targets := %clean mrproper cleandocs · 254 unmodified lines | ||
| 255 | 255 | no-dot-config-targets := $(clean-targets) \ |
| 256 | 256 | cscope gtags TAGS tags help% %docs check% coccicheck \ |
| 257 | 257 | $(version_h) headers headers_% archheaders archscripts \ |
| 258 | − %asm-generic kernelversion %src-pkg | |
| 258 | + %asm-generic kernelversion %src-pkg dt_binding_check \ | |
| 259 | + outputmakefile | |
| 259 | 260 | no-sync-config-targets := $(no-dot-config-targets) install %install \ |
| 260 | 261 | kernelrelease |
| 261 | 262 | single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ |
| @@ -388,6 +389,9 @@ endif · 126 unmodified lines | ||
| 388 | 389 | KCONFIG_CONFIG ?= .config |
| 389 | 390 | export KCONFIG_CONFIG |
| 390 | 391 | |
| 392 | +# Default file for 'make defconfig'. This may be overridden by arch-Makefile. | |
| 393 | +export KBUILD_DEFCONFIG := defconfig | |
| 394 | + | |
| 391 | 395 | # SHELL used by kbuild |
| 392 | 396 | CONFIG_SHELL := sh |
| 393 | 397 | |
| @@ -400,12 +404,11 @@ HOSTCXX = g++ · 6 unmodified lines | ||
| 400 | 404 | KBUILD_HOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 \ |
| 401 | 405 | -fomit-frame-pointer -std=gnu89 $(HOST_LFS_CFLAGS) \ |
| 402 | 406 | $(HOSTCFLAGS) |
| 403 | −KBUILD_HOSTCXXFLAGS := -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS) | |
| 407 | +KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS) | |
| 404 | 408 | KBUILD_HOSTLDFLAGS := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS) |
| 405 | 409 | KBUILD_HOSTLDLIBS := $(HOST_LFS_LIBS) $(HOSTLDLIBS) |
| 406 | 410 | |
| 407 | 411 | # Make variables (CC, etc...) |
| 408 | −AS = $(CROSS_COMPILE)as | |
| 409 | 412 | LD = $(CROSS_COMPILE)ld |
| 410 | 413 | CC = $(CROSS_COMPILE)gcc |
| 411 | 414 | CPP = $(CC) -E |
| @@ -472,7 +475,7 @@ KBUILD_LDFLAGS := · 60 unmodified lines | ||
| 472 | 475 | GCC_PLUGINS_CFLAGS := |
| 473 | 476 | CLANG_FLAGS := |
| 474 | 477 | |
| 475 | −export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC | |
| 478 | +export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC | |
| 476 | 479 | export CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE READELF PAHOLE LEX YACC AWK INSTALLKERNEL |
| 477 | 480 | export PERL PYTHON PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX |
| 478 | 481 | export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE |
| @@ -535,7 +538,7 @@ endif · 56 unmodified lines | ||
| 535 | 538 | ifneq ($(GCC_TOOLCHAIN),) |
| 536 | 539 | CLANG_FLAGS += --gcc-toolchain=$(GCC_TOOLCHAIN) |
| 537 | 540 | endif |
| 538 | −ifeq ($(shell $(AS) --version 2>&1 | head -n 1 | grep clang),) | |
| 541 | +ifeq ($(if $(AS),$(shell $(AS) --version 2>&1 | head -n 1 | grep clang)),) | |
| 539 | 542 | CLANG_FLAGS += -no-integrated-as |
| 540 | 543 | endif |
| 541 | 544 | CLANG_FLAGS += -Werror=unknown-warning-option |
| @@ -674,6 +677,7 @@ $(KCONFIG_CONFIG): · 132 unmodified lines | ||
| 674 | 677 | # |
| 675 | 678 | # This exploits the 'multi-target pattern rule' trick. |
| 676 | 679 | # The syncconfig should be executed only once to make all the targets. |
| 680 | +# (Note: use the grouped target '&:' when we bump to GNU Make 4.3) | |
| 677 | 681 | %/auto.conf %/auto.conf.cmd: $(KCONFIG_CONFIG) |
| 678 | 682 | $(Q)$(MAKE) -f $(srctree)/Makefile syncconfig |
| 679 | 683 | else # !may-sync-config |
| @@ -714,6 +718,7 @@ endif · 34 unmodified lines | ||
| 714 | 718 | |
| 715 | 719 | # Tell gcc to never replace conditional load with a non-conditional one |
| 716 | 720 | KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0) |
| 721 | +KBUILD_CFLAGS += $(call cc-option,-fno-allow-store-data-races) | |
| 717 | 722 | |
| 718 | 723 | include scripts/Makefile.kcov |
| 719 | 724 | include scripts/Makefile.gcc-plugins |
| @@ -729,7 +734,7 @@ KBUILD_CFLAGS += $(call cc-option,-fno-reorder-blocks,) \ · 9 unmodified lines | ||
| 729 | 734 | endif |
| 730 | 735 | |
| 731 | 736 | ifneq ($(CONFIG_FRAME_WARN),0) |
| 732 | −KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN}) | |
| 737 | +KBUILD_CFLAGS += -Wframe-larger-than=$(CONFIG_FRAME_WARN) | |
| 733 | 738 | endif |
| 734 | 739 | |
| 735 | 740 | stackp-flags-$(CONFIG_CC_HAS_STACKPROTECTOR_NONE) := -fno-stack-protector |
| @@ -1063,9 +1068,12 @@ endif · 327 unmodified lines | ||
| 1063 | 1068 | |
| 1064 | 1069 | autoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h) |
| 1065 | 1070 | |
| 1071 | +quiet_cmd_autoksyms_h = GEN $@ | |
| 1072 | + cmd_autoksyms_h = mkdir -p $(dir $@); \ | |
| 1073 | + $(CONFIG_SHELL) $(srctree)/scripts/gen_autoksyms.sh $@ | |
| 1074 | + | |
| 1066 | 1075 | $(autoksyms_h): |
| 1067 | − $(Q)mkdir -p $(dir $@) | |
| 1068 | − $(Q)touch $@ | |
| 1076 | + $(call cmd,autoksyms_h) | |
| 1069 | 1077 | |
| 1070 | 1078 | ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) |
| 1071 | 1079 | |
| @@ -1240,14 +1248,18 @@ ifneq ($(dtstree),) · 168 unmodified lines | ||
| 1240 | 1248 | $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ |
| 1241 | 1249 | |
| 1242 | 1250 | PHONY += dtbs dtbs_install dtbs_check |
| 1243 | −dtbs dtbs_check: include/config/kernel.release scripts_dtc | |
| 1251 | +dtbs: include/config/kernel.release scripts_dtc | |
| 1244 | 1252 | $(Q)$(MAKE) $(build)=$(dtstree) |
| 1245 | 1253 | |
| 1246 | −dtbs_check: export CHECK_DTBS=1 | |
| 1247 | −dtbs_check: dt_binding_check | |
| 1254 | +ifneq ($(filter dtbs_check, $(MAKECMDGOALS)),) | |
| 1255 | +export CHECK_DTBS=y | |
| 1256 | +dtbs: dt_binding_check | |
| 1257 | +endif | |
| 1258 | + | |
| 1259 | +dtbs_check: dtbs | |
| 1248 | 1260 | |
| 1249 | 1261 | dtbs_install: |
| 1250 | − $(Q)$(MAKE) $(dtbinst)=$(dtstree) | |
| 1262 | + $(Q)$(MAKE) $(dtbinst)=$(dtstree) dst=$(INSTALL_DTBS_PATH) | |
| 1251 | 1263 | |
| 1252 | 1264 | ifdef CONFIG_OF_EARLY_FLATTREE |
| 1253 | 1265 | all: dtbs |
| @@ -1259,6 +1271,10 @@ PHONY += scripts_dtc · 5 unmodified lines | ||
| 1259 | 1271 | scripts_dtc: scripts_basic |
| 1260 | 1272 | $(Q)$(MAKE) $(build)=scripts/dtc |
| 1261 | 1273 | |
| 1274 | +ifneq ($(filter dt_binding_check, $(MAKECMDGOALS)),) | |
| 1275 | +export CHECK_DT_BINDING=y | |
| 1276 | +endif | |
| 1277 | + | |
| 1262 | 1278 | PHONY += dt_binding_check |
| 1263 | 1279 | dt_binding_check: scripts_dtc |
| 1264 | 1280 | $(Q)$(MAKE) $(build)=Documentation/devicetree/bindings |
| @@ -1470,12 +1486,15 @@ help: · 205 unmodified lines | ||
| 1470 | 1486 | @echo ' nsdeps - Generate missing symbol namespace dependencies' |
| 1471 | 1487 | @echo '' |
| 1472 | 1488 | @echo 'Kernel selftest:' |
| 1473 | − @echo ' kselftest - Build and run kernel selftest (run as root)' | |
| 1474 | − @echo ' Build, install, and boot kernel before' | |
| 1475 | − @echo ' running kselftest on it' | |
| 1476 | − @echo ' kselftest-clean - Remove all generated kselftest files' | |
| 1477 | − @echo ' kselftest-merge - Merge all the config dependencies of kselftest to existing' | |
| 1478 | − @echo ' .config.' | |
| 1489 | + @echo ' kselftest - Build and run kernel selftest' | |
| 1490 | + @echo ' Build, install, and boot kernel before' | |
| 1491 | + @echo ' running kselftest on it' | |
| 1492 | + @echo ' Run as root for full coverage' | |
| 1493 | + @echo ' kselftest-all - Build kernel selftest' | |
| 1494 | + @echo ' kselftest-install - Build and install kernel selftest' | |
| 1495 | + @echo ' kselftest-clean - Remove all generated kselftest files' | |
| 1496 | + @echo ' kselftest-merge - Merge all the config dependencies of' | |
| 1497 | + @echo ' kselftest to existing .config.' | |
| 1479 | 1498 | @echo '' |
| 1480 | 1499 | @$(if $(dtstree), \ |
| 1481 | 1500 | echo 'Devicetree:'; \ |
| @@ -87,11 +87,6 @@ config SUPERH64 · 86 unmodified lines | ||
| 87 | 87 | select HAVE_EXIT_THREAD |
| 88 | 88 | select KALLSYMS |
| 89 | 89 | |
| 90 | −config ARCH_DEFCONFIG | |
| 91 | − string | |
| 92 | − default "arch/sh/configs/shx3_defconfig" if SUPERH32 | |
| 93 | − default "arch/sh/configs/cayman_defconfig" if SUPERH64 | |
| 94 | − | |
| 95 | 90 | config GENERIC_BUG |
| 96 | 91 | def_bool y |
| 97 | 92 | depends on BUG && SUPERH32 |
| @@ -96,11 +96,6 @@ config SPARC64 · 95 unmodified lines | ||
| 96 | 96 | select PCI_DOMAINS if PCI |
| 97 | 97 | select ARCH_HAS_GIGANTIC_PAGE |
| 98 | 98 | |
| 99 | −config ARCH_DEFCONFIG | |
| 100 | − string | |
| 101 | − default "arch/sparc/configs/sparc32_defconfig" if SPARC32 | |
| 102 | − default "arch/sparc/configs/sparc64_defconfig" if SPARC64 | |
| 103 | − | |
| 104 | 99 | config ARCH_PROC_KCORE_TEXT |
| 105 | 100 | def_bool y |
| 106 | 101 | |
| @@ -37,6 +37,10 @@ void *memmove(void *, const void *, __kernel_size_t); · 36 unmodified lines | ||
| 37 | 37 | #define __HAVE_ARCH_MEMCMP |
| 38 | 38 | int memcmp(const void *,const void *,__kernel_size_t); |
| 39 | 39 | |
| 40 | +/* Now the str*() stuff... */ | |
| 41 | +#define __HAVE_ARCH_STRLEN | |
| 42 | +__kernel_size_t strlen(const char *); | |
| 43 | + | |
| 40 | 44 | #define __HAVE_ARCH_STRNCMP |
| 41 | 45 | int strncmp(const char *, const char *, __kernel_size_t); |
| 42 | 46 | |
| @@ -12,8 +12,4 @@ · 11 unmodified lines | ||
| 12 | 12 | |
| 13 | 13 | #include <asm/asi.h> |
| 14 | 14 | |
| 15 | −/* Now the str*() stuff... */ | |
| 16 | −#define __HAVE_ARCH_STRLEN | |
| 17 | −__kernel_size_t strlen(const char *); | |
| 18 | − | |
| 19 | 15 | #endif /* !(__SPARC64_STRING_H__) */ |
| @@ -240,11 +240,6 @@ config OUTPUT_FORMAT · 239 unmodified lines | ||
| 240 | 240 | default "elf32-i386" if X86_32 |
| 241 | 241 | default "elf64-x86-64" if X86_64 |
| 242 | 242 | |
| 243 | −config ARCH_DEFCONFIG | |
| 244 | − string | |
| 245 | − default "arch/x86/configs/i386_defconfig" if X86_32 | |
| 246 | − default "arch/x86/configs/x86_64_defconfig" if X86_64 | |
| 247 | − | |
| 248 | 243 | config LOCKDEP_SUPPORT |
| 249 | 244 | def_bool y |
| 250 | 245 | |
| @@ -27,11 +27,6 @@ config X86_64 · 26 unmodified lines | ||
| 27 | 27 | def_bool 64BIT |
| 28 | 28 | select MODULES_USE_ELF_RELA |
| 29 | 29 | |
| 30 | −config ARCH_DEFCONFIG | |
| 31 | − string | |
| 32 | − default "arch/um/configs/i386_defconfig" if X86_32 | |
| 33 | − default "arch/um/configs/x86_64_defconfig" if X86_64 | |
| 34 | − | |
| 35 | 30 | config 3_LEVEL_PGTABLES |
| 36 | 31 | bool "Three-level pagetables" if !64BIT |
| 37 | 32 | default 64BIT |
| @@ -200,7 +200,7 @@ config WANXL_BUILD_FIRMWARE · 199 unmodified lines | ||
| 200 | 200 | depends on WANXL && !PREVENT_FIRMWARE_BUILD |
| 201 | 201 | help |
| 202 | 202 | Allows you to rebuild firmware run by the QUICC processor. |
| 203 | − It requires as68k, ld68k and hexdump programs. | |
| 203 | + It requires m68k toolchains and hexdump programs. | |
| 204 | 204 | |
| 205 | 205 | You should never need this option, say N. |
| 206 | 206 | |
| @@ -40,21 +40,30 @@ $(obj)/wanxl.o: $(obj)/wanxlfw.inc · 39 unmodified lines | ||
| 40 | 40 | |
| 41 | 41 | ifeq ($(CONFIG_WANXL_BUILD_FIRMWARE),y) |
| 42 | 42 | ifeq ($(ARCH),m68k) |
| 43 | − AS68K = $(AS) | |
| 44 | − LD68K = $(LD) | |
| 43 | + M68KCC = $(CC) | |
| 44 | + M68KLD = $(LD) | |
| 45 | 45 | else |
| 46 | − AS68K = as68k | |
| 47 | − LD68K = ld68k | |
| 46 | + M68KCC = $(CROSS_COMPILE_M68K)gcc | |
| 47 | + M68KLD = $(CROSS_COMPILE_M68K)ld | |
| 48 | 48 | endif |
| 49 | 49 | |
| 50 | −quiet_cmd_build_wanxlfw = BLD FW $@ | |
| 51 | − cmd_build_wanxlfw = \ | |
| 52 | − $(CPP) -D__ASSEMBLY__ -Wp,-MD,$(depfile) -I$(srctree)/include/uapi $< | $(AS68K) -m68360 -o $(obj)/wanxlfw.o; \ | |
| 53 | − $(LD68K) --oformat binary -Ttext 0x1000 $(obj)/wanxlfw.o -o $(obj)/wanxlfw.bin; \ | |
| 54 | − hexdump -ve '"\n" 16/1 "0x%02X,"' $(obj)/wanxlfw.bin | sed 's/0x ,//g;1s/^/static const u8 firmware[]={/;$$s/,$$/\n};\n/' >$(obj)/wanxlfw.inc; \ | |
| 55 | − rm -f $(obj)/wanxlfw.bin $(obj)/wanxlfw.o | |
| 50 | +quiet_cmd_build_wanxlfw = BLDFW $@ | |
| 51 | + cmd_build_wanxlfw = hexdump -ve '"\n" 16/1 "0x%02X,"' $< | \ | |
| 52 | + sed 's/0x ,//g;1s/^/static const u8 firmware[]={/;$$s/,$$/\n};\n/' > $@ | |
| 56 | 53 | |
| 57 | −$(obj)/wanxlfw.inc: $(src)/wanxlfw.S | |
| 58 | − $(call if_changed_dep,build_wanxlfw) | |
| 59 | −targets += wanxlfw.inc | |
| 54 | +$(obj)/wanxlfw.inc: $(obj)/wanxlfw.bin FORCE | |
| 55 | + $(call if_changed,build_wanxlfw) | |
| 56 | + | |
| 57 | +quiet_cmd_m68kld_bin_o = M68KLD $@ | |
| 58 | + cmd_m68kld_bin_o = $(M68KLD) --oformat binary -Ttext 0x1000 $< -o $@ | |
| 59 | + | |
| 60 | +$(obj)/wanxlfw.bin: $(obj)/wanxlfw.o FORCE | |
| 61 | + $(call if_changed,m68kld_bin_o) | |
| 62 | + | |
| 63 | +quiet_cmd_m68kas_o_S = M68KAS $@ | |
| 64 | + cmd_m68kas_o_S = $(M68KCC) -D__ASSEMBLY__ -Wp,-MD,$(depfile) -I$(srctree)/include/uapi -c -o $@ $< | |
| 65 | + | |
| 66 | +$(obj)/wanxlfw.o: $(src)/wanxlfw.S FORCE | |
| 67 | + $(call if_changed_dep,m68kas_o_S) | |
| 60 | 68 | endif |
| 69 | +targets += wanxlfw.inc wanxlfw.bin wanxlfw.o | |
| @@ -19,7 +19,7 @@ struct net_dm_hw_metadata { · 18 unmodified lines | ||
| 19 | 19 | struct net_device *input_dev; |
| 20 | 20 | }; |
| 21 | 21 | |
| 22 | −#if IS_ENABLED(CONFIG_NET_DROP_MONITOR) | |
| 22 | +#if IS_REACHABLE(CONFIG_NET_DROP_MONITOR) | |
| 23 | 23 | void net_dm_hw_report(struct sk_buff *skb, |
| 24 | 24 | const struct net_dm_hw_metadata *hw_metadata); |
| 25 | 25 | #else |
| @@ -6,8 +6,7 @@ config DEFCONFIG_LIST · 5 unmodified lines | ||
| 6 | 6 | default "/lib/modules/$(shell,uname -r)/.config" |
| 7 | 7 | default "/etc/kernel-config" |
| 8 | 8 | default "/boot/config-$(shell,uname -r)" |
| 9 | − default ARCH_DEFCONFIG | |
| 10 | − default "arch/$(ARCH)/defconfig" | |
| 9 | + default "arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)" | |
| 11 | 10 | |
| 12 | 11 | config CC_IS_GCC |
| 13 | 12 | def_bool $(success,$(CC) --version | head -n 1 | grep -q gcc) |
| @@ -2211,6 +2210,19 @@ config TRIM_UNUSED_KSYMS · 2197 unmodified lines | ||
| 2211 | 2210 | |
| 2212 | 2211 | If unsure, or if you need to build out-of-tree modules, say N. |
| 2213 | 2212 | |
| 2213 | +config UNUSED_KSYMS_WHITELIST | |
| 2214 | + string "Whitelist of symbols to keep in ksymtab" | |
| 2215 | + depends on TRIM_UNUSED_KSYMS | |
| 2216 | + help | |
| 2217 | + By default, all unused exported symbols will be un-exported from the | |
| 2218 | + build when TRIM_UNUSED_KSYMS is selected. | |
| 2219 | + | |
| 2220 | + UNUSED_KSYMS_WHITELIST allows to whitelist symbols that must be kept | |
| 2221 | + exported at all times, even in absence of in-tree users. The value to | |
| 2222 | + set here is the path to a text file containing the list of symbols, | |
| 2223 | + one per line. The path can be absolute, or relative to the kernel | |
| 2224 | + source tree. | |
| 2225 | + | |
| 2214 | 2226 | endif # MODULES |
| 2215 | 2227 | |
| 2216 | 2228 | config MODULES_TREE_LOOKUP |
| @@ -266,7 +266,7 @@ config ENABLE_MUST_CHECK · 265 unmodified lines | ||
| 266 | 266 | attribute warn_unused_result" messages. |
| 267 | 267 | |
| 268 | 268 | config FRAME_WARN |
| 269 | − int "Warn for stack frames larger than (needs gcc 4.4)" | |
| 269 | + int "Warn for stack frames larger than" | |
| 270 | 270 | range 0 8192 |
| 271 | 271 | default 2048 if GCC_PLUGIN_LATENT_ENTROPY |
| 272 | 272 | default 1280 if (!64BIT && PARISC) |
| @@ -276,7 +276,6 @@ config FRAME_WARN · 3 unmodified lines | ||
| 276 | 276 | Tell gcc to warn at build time for stack frames larger than this. |
| 277 | 277 | Setting this too low will cause a lot of warnings. |
| 278 | 278 | Setting it to 0 disables the warning. |
| 279 | − Requires gcc 4.4 | |
| 280 | 279 | |
| 281 | 280 | config STRIP_ASM_SYMS |
| 282 | 281 | bool "Strip assembler-generated symbols during link" |
| @@ -13,28 +13,24 @@ src := $(obj) · 12 unmodified lines | ||
| 13 | 13 | PHONY := __dtbs_install |
| 14 | 14 | __dtbs_install: |
| 15 | 15 | |
| 16 | −export dtbinst_root ?= $(obj) | |
| 17 | − | |
| 18 | 16 | include include/config/auto.conf |
| 19 | 17 | include scripts/Kbuild.include |
| 20 | 18 | include $(src)/Makefile |
| 21 | 19 | |
| 22 | −dtbinst-files := $(sort $(dtb-y) $(if $(CONFIG_OF_ALL_DTBS), $(dtb-))) | |
| 23 | −dtbinst-dirs := $(subdir-y) $(subdir-m) | |
| 24 | − | |
| 25 | −# Helper targets for Installing DTBs into the boot directory | |
| 26 | −quiet_cmd_dtb_install = INSTALL $< | |
| 27 | − cmd_dtb_install = mkdir -p $(2); cp $< $(2) | |
| 20 | +dtbs := $(addprefix $(dst)/, $(dtb-y) $(if $(CONFIG_OF_ALL_DTBS),$(dtb-))) | |
| 21 | +subdirs := $(addprefix $(obj)/, $(subdir-y) $(subdir-m)) | |
| 28 | 22 | |
| 29 | −install-dir = $(patsubst $(dtbinst_root)%,$(INSTALL_DTBS_PATH)%,$(obj)) | |
| 23 | +__dtbs_install: $(dtbs) $(subdirs) | |
| 24 | + @: | |
| 30 | 25 | |
| 31 | −$(dtbinst-files): %.dtb: $(obj)/%.dtb | |
| 32 | − $(call cmd,dtb_install,$(install-dir)) | |
| 26 | +quiet_cmd_dtb_install = INSTALL $@ | |
| 27 | + cmd_dtb_install = install -D $< $@ | |
| 33 | 28 | |
| 34 | −$(dtbinst-dirs): | |
| 35 | − $(Q)$(MAKE) $(dtbinst)=$(obj)/$@ | |
| 29 | +$(dst)/%.dtb: $(obj)/%.dtb | |
| 30 | + $(call cmd,dtb_install) | |
| 36 | 31 | |
| 37 | −PHONY += $(dtbinst-files) $(dtbinst-dirs) | |
| 38 | −__dtbs_install: $(dtbinst-files) $(dtbinst-dirs) | |
| 32 | +PHONY += $(subdirs) | |
| 33 | +$(subdirs): | |
| 34 | + $(Q)$(MAKE) $(dtbinst)=$@ dst=$(patsubst $(obj)/%,$(dst)/%,$@) | |
| 39 | 35 | |
| 40 | 36 | .PHONY: $(PHONY) |
| @@ -297,7 +297,8 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) FORCE · 296 unmodified lines | ||
| 297 | 297 | |
| 298 | 298 | DT_CHECKER ?= dt-validate |
| 299 | 299 | DT_BINDING_DIR := Documentation/devicetree/bindings |
| 300 | −DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml | |
| 300 | +# DT_TMP_SCHEMA may be overridden from Documentation/devicetree/bindings/Makefile | |
| 301 | +DT_TMP_SCHEMA ?= $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml | |
| 301 | 302 | |
| 302 | 303 | quiet_cmd_dtb_check = CHECK $@ |
| 303 | 304 | cmd_dtb_check = $(DT_CHECKER) -u $(srctree)/$(DT_BINDING_DIR) -p $(DT_TMP_SCHEMA) $@ |
| @@ -46,13 +46,14 @@ include scripts/Kbuild.include · 45 unmodified lines | ||
| 46 | 46 | kernelsymfile := $(objtree)/Module.symvers |
| 47 | 47 | modulesymfile := $(firstword $(KBUILD_EXTMOD))/Module.symvers |
| 48 | 48 | |
| 49 | −MODPOST = scripts/mod/modpost \ | |
| 50 | − $(if $(CONFIG_MODVERSIONS),-m) \ | |
| 51 | − $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a) \ | |
| 52 | − $(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \ | |
| 53 | − $(if $(KBUILD_EXTMOD),$(addprefix -e ,$(KBUILD_EXTRA_SYMBOLS))) \ | |
| 54 | − $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \ | |
| 55 | − $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \ | |
| 49 | +MODPOST = scripts/mod/modpost \ | |
| 50 | + $(if $(CONFIG_MODVERSIONS),-m) \ | |
| 51 | + $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a) \ | |
| 52 | + $(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \ | |
| 53 | + $(if $(KBUILD_EXTMOD),$(addprefix -e ,$(KBUILD_EXTRA_SYMBOLS))) \ | |
| 54 | + $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \ | |
| 55 | + $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \ | |
| 56 | + $(if $(CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS)$(KBUILD_NSDEPS),-N) \ | |
| 56 | 57 | $(if $(KBUILD_MODPOST_WARN),-w) |
| 57 | 58 | |
| 58 | 59 | ifdef MODPOST_VMLINUX |
| @@ -1,14 +1,13 @@ | ||
| 1 | 1 | #!/bin/sh |
| 2 | 2 | # SPDX-License-Identifier: GPL-2.0-only |
| 3 | 3 | |
| 4 | −# Script to create/update include/generated/autoksyms.h and dependency files | |
| 4 | +# Script to update include/generated/autoksyms.h and dependency files | |
| 5 | 5 | # |
| 6 | 6 | # Copyright: (C) 2016 Linaro Limited |
| 7 | 7 | # Created by: Nicolas Pitre, January 2016 |
| 8 | 8 | # |
| 9 | 9 | |
| 10 | −# Create/update the include/generated/autoksyms.h file from the list | |
| 11 | −# of all module's needed symbols as recorded on the second line of *.mod files. | |
| 10 | +# Update the include/generated/autoksyms.h file. | |
| 12 | 11 | # |
| 13 | 12 | # For each symbol being added or removed, the corresponding dependency |
| 14 | 13 | # file's timestamp is updated to force a rebuild of the affected source |
| @@ -38,23 +37,8 @@ esac · 23 unmodified lines | ||
| 38 | 37 | # We need access to CONFIG_ symbols |
| 39 | 38 | . include/config/auto.conf |
| 40 | 39 | |
| 41 | −# Generate a new ksym list file with symbols needed by the current | |
| 42 | −# set of modules. | |
| 43 | −cat > "$new_ksyms_file" << EOT | |
| 44 | −/* | |
| 45 | − * Automatically generated file; DO NOT EDIT. | |
| 46 | − */ | |
| 47 | − | |
| 48 | −EOT | |
| 49 | −sed 's/ko$/mod/' modules.order | | |
| 50 | −xargs -n1 sed -n -e '2{s/ /\n/g;/^$/!p;}' -- | | |
| 51 | −sort -u | | |
| 52 | −sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$new_ksyms_file" | |
| 53 | − | |
| 54 | −# Special case for modversions (see modpost.c) | |
| 55 | −if [ -n "$CONFIG_MODVERSIONS" ]; then | |
| 56 | − echo "#define __KSYM_module_layout 1" >> "$new_ksyms_file" | |
| 57 | −fi | |
| 40 | +# Generate a new symbol list file | |
| 41 | +$CONFIG_SHELL $srctree/scripts/gen_autoksyms.sh "$new_ksyms_file" | |
| 58 | 42 | |
| 59 | 43 | # Extract changes between old and new list and touch corresponding |
| 60 | 44 | # dependency files. |
| @@ -77,11 +77,6 @@ · 76 unmodified lines | ||
| 77 | 77 | * dependencies on include/config/my/option.h for every |
| 78 | 78 | * CONFIG_MY_OPTION encountered in any of the prerequisites. |
| 79 | 79 | * |
| 80 | − * It will also filter out all the dependencies on *.ver. We need | |
| 81 | − * to make sure that the generated version checksum are globally up | |
| 82 | − * to date before even starting the recursive build, so it's too late | |
| 83 | − * at this point anyway. | |
| 84 | − * | |
| 85 | 80 | * We don't even try to really parse the header files, but |
| 86 | 81 | * merely grep, i.e. if CONFIG_FOO is mentioned in a comment, it will |
| 87 | 82 | * be picked up as well. It's not a problem with respect to |
| @@ -251,7 +246,7 @@ static void parse_config_file(const char *p) · 163 unmodified lines | ||
| 251 | 246 | } |
| 252 | 247 | p += 7; |
| 253 | 248 | q = p; |
| 254 | − while (*q && (isalnum(*q) || *q == '_')) | |
| 249 | + while (isalnum(*q) || *q == '_') | |
| 255 | 250 | q++; |
| 256 | 251 | if (str_ends_with(p, q - p, "_MODULE")) |
| 257 | 252 | r = q - 7; |
| @@ -299,8 +294,7 @@ static void *read_file(const char *filename) · 41 unmodified lines | ||
| 299 | 294 | static int is_ignored_file(const char *s, int len) |
| 300 | 295 | { |
| 301 | 296 | return str_ends_with(s, len, "include/generated/autoconf.h") || |
| 302 | − str_ends_with(s, len, "include/generated/autoksyms.h") || | |
| 303 | − str_ends_with(s, len, ".ver"); | |
| 297 | + str_ends_with(s, len, "include/generated/autoksyms.h"); | |
| 304 | 298 | } |
| 305 | 299 | |
| 306 | 300 | /* |
| @@ -1,8 +1,9 @@ | ||
| 1 | 1 | # SPDX-License-Identifier: GPL-2.0 |
| 2 | 2 | # scripts/dtc makefile |
| 3 | 3 | |
| 4 | −hostprogs := dtc | |
| 5 | −always-$(CONFIG_DTC) := $(hostprogs) | |
| 4 | +hostprogs := dtc | |
| 5 | +always-$(CONFIG_DTC) += $(hostprogs) | |
| 6 | +always-$(CHECK_DT_BINDING) += $(hostprogs) | |
| 6 | 7 | |
| 7 | 8 | dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \ |
| 8 | 9 | srcpos.o checks.o util.o |
| @@ -10,7 +10,7 @@ else · 9 unmodified lines | ||
| 10 | 10 | HOSTLIBS := hostcxxlibs |
| 11 | 11 | HOST_EXTRACXXFLAGS += -I$(GCC_PLUGINS_DIR)/include -I$(src) -std=gnu++98 -fno-rtti |
| 12 | 12 | HOST_EXTRACXXFLAGS += -fno-exceptions -fasynchronous-unwind-tables -ggdb |
| 13 | − HOST_EXTRACXXFLAGS += -Wno-narrowing -Wno-unused-variable | |
| 13 | + HOST_EXTRACXXFLAGS += -Wno-narrowing -Wno-unused-variable -Wno-c++11-compat | |
| 14 | 14 | export HOST_EXTRACXXFLAGS |
| 15 | 15 | endif |
| 16 | 16 | |
| @@ -0,0 +1,52 @@ | ||
| 1 | +#!/bin/sh | |
| 2 | +# SPDX-License-Identifier: GPL-2.0-only | |
| 3 | + | |
| 4 | +# Create an autoksyms.h header file from the list of all module's needed symbols | |
| 5 | +# as recorded on the second line of *.mod files and the user-provided symbol | |
| 6 | +# whitelist. | |
| 7 | + | |
| 8 | +set -e | |
| 9 | + | |
| 10 | +output_file="$1" | |
| 11 | + | |
| 12 | +# Use "make V=1" to debug this script. | |
| 13 | +case "$KBUILD_VERBOSE" in | |
| 14 | +*1*) | |
| 15 | + set -x | |
| 16 | + ;; | |
| 17 | +esac | |
| 18 | + | |
| 19 | +# We need access to CONFIG_ symbols | |
| 20 | +. include/config/auto.conf | |
| 21 | + | |
| 22 | +ksym_wl=/dev/null | |
| 23 | +if [ -n "$CONFIG_UNUSED_KSYMS_WHITELIST" ]; then | |
| 24 | + # Use 'eval' to expand the whitelist path and check if it is relative | |
| 25 | + eval ksym_wl="$CONFIG_UNUSED_KSYMS_WHITELIST" | |
| 26 | + [ "${ksym_wl}" != "${ksym_wl#/}" ] || ksym_wl="$abs_srctree/$ksym_wl" | |
| 27 | + if [ ! -f "$ksym_wl" ] || [ ! -r "$ksym_wl" ]; then | |
| 28 | + echo "ERROR: '$ksym_wl' whitelist file not found" >&2 | |
| 29 | + exit 1 | |
| 30 | + fi | |
| 31 | +fi | |
| 32 | + | |
| 33 | +# Generate a new ksym list file with symbols needed by the current | |
| 34 | +# set of modules. | |
| 35 | +cat > "$output_file" << EOT | |
| 36 | +/* | |
| 37 | + * Automatically generated file; DO NOT EDIT. | |
| 38 | + */ | |
| 39 | + | |
| 40 | +EOT | |
| 41 | + | |
| 42 | +[ -f modules.order ] && modlist=modules.order || modlist=/dev/null | |
| 43 | +sed 's/ko$/mod/' $modlist | | |
| 44 | +xargs -n1 sed -n -e '2{s/ /\n/g;/^$/!p;}' -- | | |
| 45 | +cat - "$ksym_wl" | | |
| 46 | +sort -u | | |
| 47 | +sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$output_file" | |
| 48 | + | |
| 49 | +# Special case for modversions (see modpost.c) | |
| 50 | +if [ -n "$CONFIG_MODVERSIONS" ]; then | |
| 51 | + echo "#define __KSYM_module_layout 1" >> "$output_file" | |
| 52 | +fi | |
| @@ -12,10 +12,6 @@ else · 11 unmodified lines | ||
| 12 | 12 | Kconfig := Kconfig |
| 13 | 13 | endif |
| 14 | 14 | |
| 15 | −ifndef KBUILD_DEFCONFIG | |
| 16 | −KBUILD_DEFCONFIG := defconfig | |
| 17 | −endif | |
| 18 | − | |
| 19 | 15 | ifeq ($(quiet),silent_) |
| 20 | 16 | silent := -s |
| 21 | 17 | endif |
| @@ -309,8 +309,6 @@ ConfigList::ConfigList(ConfigView* p, const char *name) · 308 unmodified lines | ||
| 309 | 309 | showName(false), showRange(false), showData(false), mode(singleMode), optMode(normalOpt), |
| 310 | 310 | rootEntry(0), headerPopup(0) |
| 311 | 311 | { |
| 312 | − int i; | |
| 313 | − | |
| 314 | 312 | setObjectName(name); |
| 315 | 313 | setSortingEnabled(false); |
| 316 | 314 | setRootIsDecorated(true); |
| @@ -221,7 +221,7 @@ static void sym_calc_visibility(struct symbol *sym) · 220 unmodified lines | ||
| 221 | 221 | sym_set_changed(sym); |
| 222 | 222 | } |
| 223 | 223 | tri = no; |
| 224 | − if (sym->implied.expr && sym->dir_dep.tri != no) | |
| 224 | + if (sym->implied.expr) | |
| 225 | 225 | tri = expr_calc_value(sym->implied.expr); |
| 226 | 226 | if (tri == mod && sym_get_type(sym) == S_BOOLEAN) |
| 227 | 227 | tri = yes; |
| @@ -394,6 +394,8 @@ void sym_calc_value(struct symbol *sym) · 166 unmodified lines | ||
| 394 | 394 | if (sym->implied.tri != no) { |
| 395 | 395 | sym->flags |= SYMBOL_WRITE; |
| 396 | 396 | newval.tri = EXPR_OR(newval.tri, sym->implied.tri); |
| 397 | + newval.tri = EXPR_AND(newval.tri, | |
| 398 | + sym->dir_dep.tri); | |
| 397 | 399 | } |
| 398 | 400 | } |
| 399 | 401 | calc_newval: |
| @@ -401,8 +403,7 @@ void sym_calc_value(struct symbol *sym) · 1 unmodified line | ||
| 401 | 403 | sym_warn_unmet_dep(sym); |
| 402 | 404 | newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri); |
| 403 | 405 | } |
| 404 | − if (newval.tri == mod && | |
| 405 | − (sym_get_type(sym) == S_BOOLEAN || sym->implied.tri == yes)) | |
| 406 | + if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN) | |
| 406 | 407 | newval.tri = yes; |
| 407 | 408 | break; |
| 408 | 409 | case S_STRING: |
| @@ -484,8 +485,6 @@ bool sym_tristate_within_range(struct symbol *sym, tristate val) · 75 unmodified lines | ||
| 484 | 485 | return false; |
| 485 | 486 | if (sym->visible <= sym->rev_dep.tri) |
| 486 | 487 | return false; |
| 487 | − if (sym->implied.tri == yes && val == mod) | |
| 488 | − return false; | |
| 489 | 488 | if (sym_is_choice_value(sym) && sym->visible == yes) |
| 490 | 489 | return val == yes; |
| 491 | 490 | return val >= sym->rev_dep.tri && val <= sym->visible; |
| @@ -10,17 +10,6 @@ CC=$6 · 9 unmodified lines | ||
| 10 | 10 | |
| 11 | 11 | vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; } |
| 12 | 12 | |
| 13 | −# If compile.h exists already and we don't own autoconf.h | |
| 14 | −# (i.e. we're not the same user who did make *config), don't | |
| 15 | −# modify compile.h | |
| 16 | −# So "sudo make install" won't change the "compiled by <user>" | |
| 17 | −# do "compiled by root" | |
| 18 | − | |
| 19 | −if [ -r $TARGET -a ! -O include/generated/autoconf.h ]; then | |
| 20 | − vecho " SKIPPED $TARGET" | |
| 21 | − exit 0 | |
| 22 | −fi | |
| 23 | − | |
| 24 | 13 | # Do not expand names |
| 25 | 14 | set -f |
| 26 | 15 | |
| @@ -39,6 +39,8 @@ static int sec_mismatch_count = 0; · 38 unmodified lines | ||
| 39 | 39 | static int sec_mismatch_fatal = 0; |
| 40 | 40 | /* ignore missing files */ |
| 41 | 41 | static int ignore_missing_files; |
| 42 | +/* If set to 1, only warn (instead of error) about missing ns imports */ | |
| 43 | +static int allow_missing_ns_imports; | |
| 42 | 44 | |
| 43 | 45 | enum export { |
| 44 | 46 | export_plain, export_unused, export_gpl, |
| @@ -51,41 +53,33 @@ enum export { · 6 unmodified lines | ||
| 51 | 53 | |
| 52 | 54 | #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr)) |
| 53 | 55 | |
| 54 | −#define PRINTF __attribute__ ((format (printf, 1, 2))) | |
| 55 | − | |
| 56 | −PRINTF void fatal(const char *fmt, ...) | |
| 56 | +void __attribute__((format(printf, 2, 3))) | |
| 57 | +modpost_log(enum loglevel loglevel, const char *fmt, ...) | |
| 57 | 58 | { |
| 58 | 59 | va_list arglist; |
| 59 | 60 | |
| 60 | − fprintf(stderr, "FATAL: "); | |
| 61 | − | |
| 62 | − va_start(arglist, fmt); | |
| 63 | − vfprintf(stderr, fmt, arglist); | |
| 64 | − va_end(arglist); | |
| 65 | − | |
| 66 | − exit(1); | |
| 67 | −} | |
| 68 | − | |
| 69 | −PRINTF void warn(const char *fmt, ...) | |
| 70 | −{ | |
| 71 | − va_list arglist; | |
| 61 | + switch (loglevel) { | |
| 62 | + case LOG_WARN: | |
| 63 | + fprintf(stderr, "WARNING: "); | |
| 64 | + break; | |
| 65 | + case LOG_ERROR: | |
| 66 | + fprintf(stderr, "ERROR: "); | |
| 67 | + break; | |
| 68 | + case LOG_FATAL: | |
| 69 | + fprintf(stderr, "FATAL: "); | |
| 70 | + break; | |
| 71 | + default: /* invalid loglevel, ignore */ | |
| 72 | + break; | |
| 73 | + } | |
| 72 | 74 | |
| 73 | − fprintf(stderr, "WARNING: "); | |
| 75 | + fprintf(stderr, "modpost: "); | |
| 74 | 76 | |
| 75 | 77 | va_start(arglist, fmt); |
| 76 | 78 | vfprintf(stderr, fmt, arglist); |
| 77 | 79 | va_end(arglist); |
| 78 | −} | |
| 79 | − | |
| 80 | −PRINTF void merror(const char *fmt, ...) | |
| 81 | −{ | |
| 82 | − va_list arglist; | |
| 83 | 80 | |
| 84 | − fprintf(stderr, "ERROR: "); | |
| 85 | − | |
| 86 | − va_start(arglist, fmt); | |
| 87 | − vfprintf(stderr, fmt, arglist); | |
| 88 | − va_end(arglist); | |
| 81 | + if (loglevel == LOG_FATAL) | |
| 82 | + exit(1); | |
| 89 | 83 | } |
| 90 | 84 | |
| 91 | 85 | static inline bool strends(const char *str, const char *postfix) |
| @@ -113,7 +107,7 @@ static int is_vmlinux(const char *modname) · 21 unmodified lines | ||
| 113 | 107 | void *do_nofail(void *ptr, const char *expr) |
| 114 | 108 | { |
| 115 | 109 | if (!ptr) |
| 116 | − fatal("modpost: Memory allocation failure: %s.\n", expr); | |
| 110 | + fatal("Memory allocation failure: %s.\n", expr); | |
| 117 | 111 | |
| 118 | 112 | return ptr; |
| 119 | 113 | } |
| @@ -2022,7 +2016,7 @@ static void read_symbols(const char *modname) · 1902 unmodified lines | ||
| 2022 | 2016 | |
| 2023 | 2017 | license = get_modinfo(&info, "license"); |
| 2024 | 2018 | if (!license && !is_vmlinux(modname)) |
| 2025 | − warn("modpost: missing MODULE_LICENSE() in %s\n" | |
| 2019 | + warn("missing MODULE_LICENSE() in %s\n" | |
| 2026 | 2020 | "see include/linux/module.h for " |
| 2027 | 2021 | "more information\n", modname); |
| 2028 | 2022 | while (license) { |
| @@ -2153,15 +2147,15 @@ static void check_for_gpl_usage(enum export exp, const char *m, const char *s) · 124 unmodified lines | ||
| 2153 | 2147 | |
| 2154 | 2148 | switch (exp) { |
| 2155 | 2149 | case export_gpl: |
| 2156 | − fatal("modpost: GPL-incompatible module %s%s " | |
| 2150 | + fatal("GPL-incompatible module %s%s " | |
| 2157 | 2151 | "uses GPL-only symbol '%s'\n", m, e, s); |
| 2158 | 2152 | break; |
| 2159 | 2153 | case export_unused_gpl: |
| 2160 | − fatal("modpost: GPL-incompatible module %s%s " | |
| 2154 | + fatal("GPL-incompatible module %s%s " | |
| 2161 | 2155 | "uses GPL-only symbol marked UNUSED '%s'\n", m, e, s); |
| 2162 | 2156 | break; |
| 2163 | 2157 | case export_gpl_future: |
| 2164 | − warn("modpost: GPL-incompatible module %s%s " | |
| 2158 | + warn("GPL-incompatible module %s%s " | |
| 2165 | 2159 | "uses future GPL-only symbol '%s'\n", m, e, s); |
| 2166 | 2160 | break; |
| 2167 | 2161 | case export_plain: |
| @@ -2179,7 +2173,7 @@ static void check_for_unused(enum export exp, const char *m, const char *s) · 11 unmodified lines | ||
| 2179 | 2173 | switch (exp) { |
| 2180 | 2174 | case export_unused: |
| 2181 | 2175 | case export_unused_gpl: |
| 2182 | − warn("modpost: module %s%s " | |
| 2176 | + warn("module %s%s " | |
| 2183 | 2177 | "uses symbol '%s' marked UNUSED\n", m, e, s); |
| 2184 | 2178 | break; |
| 2185 | 2179 | default: |
| @@ -2198,14 +2192,11 @@ static int check_exports(struct module *mod) · 12 unmodified lines | ||
| 2198 | 2192 | exp = find_symbol(s->name); |
| 2199 | 2193 | if (!exp || exp->module == mod) { |
| 2200 | 2194 | if (have_vmlinux && !s->weak) { |
| 2201 | − if (warn_unresolved) { | |
| 2202 | − warn("\"%s\" [%s.ko] undefined!\n", | |
| 2203 | − s->name, mod->name); | |
| 2204 | − } else { | |
| 2205 | − merror("\"%s\" [%s.ko] undefined!\n", | |
| 2206 | − s->name, mod->name); | |
| 2195 | + modpost_log(warn_unresolved ? LOG_WARN : LOG_ERROR, | |
| 2196 | + "\"%s\" [%s.ko] undefined!\n", | |
| 2197 | + s->name, mod->name); | |
| 2198 | + if (!warn_unresolved) | |
| 2207 | 2199 | err = 1; |
| 2208 | − } | |
| 2209 | 2200 | } |
| 2210 | 2201 | continue; |
| 2211 | 2202 | } |
| @@ -2217,8 +2208,11 @@ static int check_exports(struct module *mod) · 5 unmodified lines | ||
| 2217 | 2208 | |
| 2218 | 2209 | if (exp->namespace && |
| 2219 | 2210 | !module_imports_namespace(mod, exp->namespace)) { |
| 2220 | − warn("module %s uses symbol %s from namespace %s, but does not import it.\n", | |
| 2221 | − basename, exp->name, exp->namespace); | |
| 2211 | + modpost_log(allow_missing_ns_imports ? LOG_WARN : LOG_ERROR, | |
| 2212 | + "module %s uses symbol %s from namespace %s, but does not import it.\n", | |
| 2213 | + basename, exp->name, exp->namespace); | |
| 2214 | + if (!allow_missing_ns_imports) | |
| 2215 | + err = 1; | |
| 2222 | 2216 | add_namespace(&mod->missing_namespaces, exp->namespace); |
| 2223 | 2217 | } |
| 2224 | 2218 | |
| @@ -2565,7 +2559,7 @@ int main(int argc, char **argv) · 340 unmodified lines | ||
| 2565 | 2559 | struct ext_sym_list *extsym_iter; |
| 2566 | 2560 | struct ext_sym_list *extsym_start = NULL; |
| 2567 | 2561 | |
| 2568 | − while ((opt = getopt(argc, argv, "i:e:mnsT:o:awEd:")) != -1) { | |
| 2562 | + while ((opt = getopt(argc, argv, "i:e:mnsT:o:awENd:")) != -1) { | |
| 2569 | 2563 | switch (opt) { |
| 2570 | 2564 | case 'i': |
| 2571 | 2565 | kernel_read = optarg; |
| @@ -2603,6 +2597,9 @@ int main(int argc, char **argv) · 31 unmodified lines | ||
| 2603 | 2597 | case 'E': |
| 2604 | 2598 | sec_mismatch_fatal = 1; |
| 2605 | 2599 | break; |
| 2600 | + case 'N': | |
| 2601 | + allow_missing_ns_imports = 1; | |
| 2602 | + break; | |
| 2606 | 2603 | case 'd': |
| 2607 | 2604 | missing_namespace_deps = optarg; |
| 2608 | 2605 | break; |
| @@ -2658,7 +2655,7 @@ int main(int argc, char **argv) · 49 unmodified lines | ||
| 2658 | 2655 | if (dump_write) |
| 2659 | 2656 | write_dump(dump_write); |
| 2660 | 2657 | if (sec_mismatch_count && sec_mismatch_fatal) |
| 2661 | − fatal("modpost: Section mismatches detected.\n" | |
| 2658 | + fatal("Section mismatches detected.\n" | |
| 2662 | 2659 | "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n"); |
| 2663 | 2660 | for (n = 0; n < SYMBOL_HASH_SIZE; n++) { |
| 2664 | 2661 | struct symbol *s; |
| @@ -198,6 +198,14 @@ void *grab_file(const char *filename, unsigned long *size); · 197 unmodified lines | ||
| 198 | 198 | char* get_next_line(unsigned long *pos, void *file, unsigned long size); |
| 199 | 199 | void release_file(void *file, unsigned long size); |
| 200 | 200 | |
| 201 | −void fatal(const char *fmt, ...); | |
| 202 | −void warn(const char *fmt, ...); | |
| 203 | −void merror(const char *fmt, ...); | |
| 201 | +enum loglevel { | |
| 202 | + LOG_WARN, | |
| 203 | + LOG_ERROR, | |
| 204 | + LOG_FATAL | |
| 205 | +}; | |
| 206 | + | |
| 207 | +void modpost_log(enum loglevel loglevel, const char *fmt, ...); | |
| 208 | + | |
| 209 | +#define warn(fmt, args...) modpost_log(LOG_WARN, fmt, ##args) | |
| 210 | +#define merror(fmt, args...) modpost_log(LOG_ERROR, fmt, ##args) | |
| 211 | +#define fatal(fmt, args...) modpost_log(LOG_FATAL, fmt, ##args) | |
| @@ -198,6 +198,10 @@ Description: Linux support headers for userspace development · 197 unmodified lines | ||
| 198 | 198 | This package provides userspaces headers from the Linux kernel. These headers |
| 199 | 199 | are used by the installed headers for GNU glibc and other system libraries. |
| 200 | 200 | Multi-Arch: same |
| 201 | +EOF | |
| 202 | + | |
| 203 | +if is_enabled CONFIG_DEBUG_INFO; then | |
| 204 | +cat <<EOF >> debian/control | |
| 201 | 205 | |
| 202 | 206 | Package: $dbg_packagename |
| 203 | 207 | Section: debug |
| @@ -206,6 +210,7 @@ Description: Linux kernel debugging symbols for $version · 2 unmodified lines | ||
| 206 | 210 | This package will come in handy if you need to debug the kernel. It provides |
| 207 | 211 | all the necessary debug symbols for the kernel and its modules. |
| 208 | 212 | EOF |
| 213 | +fi | |
| 209 | 214 | |
| 210 | 215 | cat <<EOF > debian/rules |
| 211 | 216 | #!$(command -v $MAKE) -f |