summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2022-10-10 12:00:45 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2022-10-10 12:00:45 -0700
commit8afc66e8d43be8edcf442165b70d50dd33091e68 (patch)
tree7e39a0a1f32b0d46acdac06c6ec515402ac9f583
parent4de65c5830233e7a4adf2e679510089ec4e210c7 (diff)
parent0715fdb03e2c4f5748d245a231e422602ed29f33 (diff)
downloadlinux-8afc66e8d43be8edcf442165b70d50dd33091e68.tar.gz
linux-8afc66e8d43be8edcf442165b70d50dd33091e68.tar.bz2
linux-8afc66e8d43be8edcf442165b70d50dd33091e68.zip
Merge tag 'kbuild-v6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild
Pull Kbuild updates from Masahiro Yamada: - Remove potentially incomplete targets when Kbuid is interrupted by SIGINT etc in case GNU Make may miss to do that when stderr is piped to another program. - Rewrite the single target build so it works more correctly. - Fix rpm-pkg builds with V=1. - List top-level subdirectories in ./Kbuild. - Ignore auto-generated __kstrtab_* and __kstrtabns_* symbols in kallsyms. - Avoid two different modules in lib/zstd/ having shared code, which potentially causes building the common code as build-in and modular back-and-forth. - Unify two modpost invocations to optimize the build process. - Remove head-y syntax in favor of linker scripts for placing particular sections in the head of vmlinux. - Bump the minimal GNU Make version to 3.82. - Clean up misc Makefiles and scripts. * tag 'kbuild-v6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (41 commits) docs: bump minimal GNU Make version to 3.82 ia64: simplify esi object addition in Makefile Revert "kbuild: Check if linker supports the -X option" kbuild: rebuild .vmlinux.export.o when its prerequisite is updated kbuild: move modules.builtin(.modinfo) rules to Makefile.vmlinux_o zstd: Fixing mixed module-builtin objects kallsyms: ignore __kstrtab_* and __kstrtabns_* symbols kallsyms: take the input file instead of reading stdin kallsyms: drop duplicated ignore patterns from kallsyms.c kbuild: reuse mksysmap output for kallsyms mksysmap: update comment about __crc_* kbuild: remove head-y syntax kbuild: use obj-y instead extra-y for objects placed at the head kbuild: hide error checker logs for V=1 builds kbuild: re-run modpost when it is updated kbuild: unify two modpost invocations kbuild: move vmlinux.o rule to the top Makefile kbuild: move .vmlinux.objs rule to Makefile.modpost kbuild: list sub-directories in ./Kbuild Makefile.compiler: replace cc-ifversion with compiler-specific macros ...
-rw-r--r--Documentation/kbuild/makefiles.rst56
-rw-r--r--Documentation/process/changes.rst4
-rw-r--r--Kbuild78
-rw-r--r--Makefile184
-rw-r--r--arch/alpha/Makefile2
-rw-r--r--arch/alpha/kernel/Makefile4
-rw-r--r--arch/arc/Makefile2
-rw-r--r--arch/arc/kernel/Makefile4
-rw-r--r--arch/arm/Makefile3
-rw-r--r--arch/arm/kernel/Makefile4
-rw-r--r--arch/arm64/Makefile3
-rw-r--r--arch/arm64/kernel/Makefile4
-rw-r--r--arch/csky/Makefile2
-rw-r--r--arch/csky/kernel/Makefile4
-rw-r--r--arch/hexagon/Makefile2
-rw-r--r--arch/hexagon/kernel/Makefile3
-rw-r--r--arch/ia64/Makefile1
-rw-r--r--arch/ia64/kernel/Makefile9
-rw-r--r--arch/loongarch/Makefile2
-rw-r--r--arch/loongarch/kernel/Makefile4
-rw-r--r--arch/m68k/68000/Makefile2
-rw-r--r--arch/m68k/Makefile9
-rw-r--r--arch/m68k/coldfire/Makefile2
-rw-r--r--arch/m68k/kernel/Makefile23
-rw-r--r--arch/microblaze/Makefile1
-rw-r--r--arch/microblaze/kernel/Makefile4
-rw-r--r--arch/mips/Makefile2
-rw-r--r--arch/mips/kernel/Makefile4
-rw-r--r--arch/nios2/Kbuild2
-rw-r--r--arch/nios2/Makefile5
-rw-r--r--arch/nios2/kernel/Makefile2
-rw-r--r--arch/openrisc/Makefile2
-rw-r--r--arch/openrisc/kernel/Makefile4
-rw-r--r--arch/parisc/Makefile2
-rw-r--r--arch/parisc/kernel/Makefile4
-rw-r--r--arch/powerpc/Makefile12
-rwxr-xr-xarch/powerpc/boot/wrapper2
-rw-r--r--arch/powerpc/kernel/Makefile20
-rw-r--r--arch/riscv/Makefile2
-rw-r--r--arch/riscv/kernel/Makefile2
-rw-r--r--arch/s390/Makefile2
-rw-r--r--arch/s390/boot/version.c1
-rw-r--r--arch/s390/kernel/Makefile4
-rw-r--r--arch/sh/Makefile2
-rw-r--r--arch/sh/kernel/Makefile4
-rw-r--r--arch/sparc/Makefile2
-rw-r--r--arch/sparc/kernel/Makefile3
-rw-r--r--arch/x86/Makefile5
-rw-r--r--arch/x86/boot/compressed/kaslr.c1
-rw-r--r--arch/x86/boot/version.c1
-rw-r--r--arch/x86/kernel/Makefile10
-rw-r--r--arch/xtensa/Makefile2
-rw-r--r--arch/xtensa/kernel/Makefile4
-rw-r--r--drivers/gpu/drm/amd/display/dc/dml/Makefile2
-rw-r--r--include/linux/export-internal.h6
-rw-r--r--init/.gitignore2
-rw-r--r--init/Makefile57
-rwxr-xr-xinit/build-version10
-rw-r--r--init/version-timestamp.c31
-rw-r--r--init/version.c37
-rwxr-xr-xkernel/gen_kheaders.sh6
-rw-r--r--lib/Kconfig8
-rw-r--r--lib/zstd/Makefile16
-rw-r--r--lib/zstd/common/entropy_common.c5
-rw-r--r--lib/zstd/common/zstd_common.c10
-rw-r--r--scripts/Kbuild.include23
-rw-r--r--scripts/Makefile.build56
-rw-r--r--scripts/Makefile.compiler10
-rw-r--r--scripts/Makefile.extrawarn4
-rw-r--r--scripts/Makefile.lib33
-rw-r--r--scripts/Makefile.modfinal2
-rw-r--r--scripts/Makefile.modpost114
-rw-r--r--scripts/Makefile.package5
-rw-r--r--scripts/Makefile.vmlinux21
-rw-r--r--scripts/Makefile.vmlinux_o47
-rw-r--r--scripts/asn1_compiler.c6
-rwxr-xr-xscripts/atomic/check-atomics.sh33
-rwxr-xr-xscripts/check-local-export97
-rwxr-xr-xscripts/clang-tools/gen_compile_commands.py19
-rw-r--r--scripts/head-object-list.txt53
-rw-r--r--scripts/kallsyms.c54
-rw-r--r--scripts/kconfig/conf.c2
-rw-r--r--scripts/kconfig/lkc.h5
-rwxr-xr-xscripts/link-vmlinux.sh72
-rwxr-xr-xscripts/mkcompile_h96
-rwxr-xr-xscripts/mksysmap24
-rwxr-xr-xscripts/package/mkspec4
87 files changed, 729 insertions, 763 deletions
diff --git a/Documentation/kbuild/makefiles.rst b/Documentation/kbuild/makefiles.rst
index 5ea1e72d89c8..6b7368d1f516 100644
--- a/Documentation/kbuild/makefiles.rst
+++ b/Documentation/kbuild/makefiles.rst
@@ -341,19 +341,7 @@ more details, with real examples.
Examples are:
- 1) head objects
-
- Some objects must be placed at the head of vmlinux. They are
- directly linked to vmlinux without going through built-in.a
- A typical use-case is an object that contains the entry point.
-
- arch/$(SRCARCH)/Makefile should specify such objects as head-y.
-
- Discussion:
- Given that we can control the section order in the linker script,
- why do we need head-y?
-
- 2) vmlinux linker script
+ 1) vmlinux linker script
The linker script for vmlinux is located at
arch/$(SRCARCH)/kernel/vmlinux.lds
@@ -361,10 +349,6 @@ more details, with real examples.
Example::
# arch/x86/kernel/Makefile
- extra-y := head_$(BITS).o
- extra-y += head$(BITS).o
- extra-y += ebda.o
- extra-y += platform-quirks.o
extra-y += vmlinux.lds
$(extra-y) should only contain targets needed for vmlinux.
@@ -683,22 +667,27 @@ more details, with real examples.
In the above example, -Wno-unused-but-set-variable will be added to
KBUILD_CFLAGS only if gcc really accepts it.
- cc-ifversion
- cc-ifversion tests the version of $(CC) and equals the fourth parameter
- if version expression is true, or the fifth (if given) if the version
- expression is false.
+ gcc-min-version
+ gcc-min-version tests if the value of $(CONFIG_GCC_VERSION) is greater than
+ or equal to the provided value and evaluates to y if so.
+
+ Example::
+
+ cflags-$(call gcc-min-version, 70100) := -foo
+
+ In this example, cflags-y will be assigned the value -foo if $(CC) is gcc and
+ $(CONFIG_GCC_VERSION) is >= 7.1.
+
+ clang-min-version
+ clang-min-version tests if the value of $(CONFIG_CLANG_VERSION) is greater
+ than or equal to the provided value and evaluates to y if so.
Example::
- #fs/reiserfs/Makefile
- ccflags-y := $(call cc-ifversion, -lt, 0402, -O1)
+ cflags-$(call clang-min-version, 110000) := -foo
- In this example, ccflags-y will be assigned the value -O1 if the
- $(CC) version is less than 4.2.
- cc-ifversion takes all the shell operators:
- -eq, -ne, -lt, -le, -gt, and -ge
- The third parameter may be a text as in this example, but it may also
- be an expanded variable or a macro.
+ In this example, cflags-y will be assigned the value -foo if $(CC) is clang
+ and $(CONFIG_CLANG_VERSION) is >= 11.0.0.
cc-cross-prefix
cc-cross-prefix is used to check if there exists a $(CC) in path with
@@ -1099,8 +1088,7 @@ When kbuild executes, the following steps are followed (roughly):
- The values of the above variables are expanded in arch/$(SRCARCH)/Makefile.
5) All object files are then linked and the resulting file vmlinux is
located at the root of the obj tree.
- The very first objects linked are listed in head-y, assigned by
- arch/$(SRCARCH)/Makefile.
+ The very first objects linked are listed in scripts/head-object-list.txt.
6) Finally, the architecture-specific part does any required post processing
and builds the final bootimage.
- This includes building boot records
@@ -1272,6 +1260,9 @@ When kbuild executes, the following steps are followed (roughly):
All object files for vmlinux. They are linked to vmlinux in the same
order as listed in KBUILD_VMLINUX_OBJS.
+ The objects listed in scripts/head-object-list.txt are exceptions;
+ they are placed before the other objects.
+
KBUILD_VMLINUX_LIBS
All .a "lib" files for vmlinux. KBUILD_VMLINUX_OBJS and
@@ -1315,8 +1306,7 @@ When kbuild executes, the following steps are followed (roughly):
machinery is all architecture-independent.
- head-y, core-y, libs-y, drivers-y
- $(head-y) lists objects to be linked first in vmlinux.
+ core-y, libs-y, drivers-y
$(libs-y) lists directories where a lib.a archive can be located.
diff --git a/Documentation/process/changes.rst b/Documentation/process/changes.rst
index 9a90197989dd..9844ca3a71a6 100644
--- a/Documentation/process/changes.rst
+++ b/Documentation/process/changes.rst
@@ -33,7 +33,7 @@ GNU C 5.1 gcc --version
Clang/LLVM (optional) 11.0.0 clang --version
Rust (optional) 1.62.0 rustc --version
bindgen (optional) 0.56.0 bindgen --version
-GNU make 3.81 make --version
+GNU make 3.82 make --version
bash 4.2 bash --version
binutils 2.23 ld -v
flex 2.5.35 flex --version
@@ -108,7 +108,7 @@ It depends on ``libclang``.
Make
----
-You will need GNU make 3.81 or later to build the kernel.
+You will need GNU make 3.82 or later to build the kernel.
Bash
----
diff --git a/Kbuild b/Kbuild
index fa441b98c9f6..464b34a08f51 100644
--- a/Kbuild
+++ b/Kbuild
@@ -2,18 +2,18 @@
#
# Kbuild for top-level directory of the kernel
-#####
+# Prepare global headers and check sanity before descending into sub-directories
+# ---------------------------------------------------------------------------
+
# Generate bounds.h
bounds-file := include/generated/bounds.h
-always-y := $(bounds-file)
targets := kernel/bounds.s
$(bounds-file): kernel/bounds.s FORCE
$(call filechk,offsets,__LINUX_BOUNDS_H__)
-#####
# Generate timeconst.h
timeconst-file := include/generated/timeconst.h
@@ -23,12 +23,10 @@ filechk_gentimeconst = echo $(CONFIG_HZ) | bc -q $<
$(timeconst-file): kernel/time/timeconst.bc FORCE
$(call filechk,gentimeconst)
-#####
# Generate asm-offsets.h
offsets-file := include/generated/asm-offsets.h
-always-y += $(offsets-file)
targets += arch/$(SRCARCH)/kernel/asm-offsets.s
arch/$(SRCARCH)/kernel/asm-offsets.s: $(timeconst-file) $(bounds-file)
@@ -36,24 +34,66 @@ arch/$(SRCARCH)/kernel/asm-offsets.s: $(timeconst-file) $(bounds-file)
$(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s FORCE
$(call filechk,offsets,__ASM_OFFSETS_H__)
-#####
# Check for missing system calls
-always-y += missing-syscalls
-
quiet_cmd_syscalls = CALL $<
cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) $(missing_syscalls_flags)
-missing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE
+PHONY += missing-syscalls
+missing-syscalls: scripts/checksyscalls.sh $(offsets-file)
$(call cmd,syscalls)
-#####
-# Check atomic headers are up-to-date
-
-always-y += old-atomics
-
-quiet_cmd_atomics = CALL $<
- cmd_atomics = $(CONFIG_SHELL) $<
-
-old-atomics: scripts/atomic/check-atomics.sh FORCE
- $(call cmd,atomics)
+# Check the manual modification of atomic headers
+
+quiet_cmd_check_sha1 = CHKSHA1 $<
+ cmd_check_sha1 = \
+ if ! command -v sha1sum >/dev/null; then \
+ echo "warning: cannot check the header due to sha1sum missing"; \
+ exit 0; \
+ fi; \
+ if [ "$$(sed -n '$$s:// ::p' $<)" != \
+ "$$(sed '$$d' $< | sha1sum | sed 's/ .*//')" ]; then \
+ echo "error: $< has been modified." >&2; \
+ exit 1; \
+ fi; \
+ touch $@
+
+atomic-checks += $(addprefix $(obj)/.checked-, \
+ atomic-arch-fallback.h \
+ atomic-instrumented.h \
+ atomic-long.h)
+
+targets += $(atomic-checks)
+$(atomic-checks): $(obj)/.checked-%: include/linux/atomic/% FORCE
+ $(call if_changed,check_sha1)
+
+# A phony target that depends on all the preparation targets
+
+PHONY += prepare
+prepare: $(offsets-file) missing-syscalls $(atomic-checks)
+ @:
+
+# Ordinary directory descending
+# ---------------------------------------------------------------------------
+
+obj-y += init/
+obj-y += usr/
+obj-y += arch/$(SRCARCH)/
+obj-y += $(ARCH_CORE)
+obj-y += kernel/
+obj-y += certs/
+obj-y += mm/
+obj-y += fs/
+obj-y += ipc/
+obj-y += security/
+obj-y += crypto/
+obj-$(CONFIG_BLOCK) += block/
+obj-$(CONFIG_IO_URING) += io_uring/
+obj-$(CONFIG_RUST) += rust/
+obj-y += $(ARCH_LIB)
+obj-y += drivers/
+obj-y += sound/
+obj-$(CONFIG_SAMPLES) += samples/
+obj-$(CONFIG_NET) += net/
+obj-y += virt/
+obj-y += $(ARCH_DRIVERS)
diff --git a/Makefile b/Makefile
index f659d3085121..d66187d53b5f 100644
--- a/Makefile
+++ b/Makefile
@@ -538,7 +538,7 @@ LDFLAGS_MODULE =
CFLAGS_KERNEL =
RUSTFLAGS_KERNEL =
AFLAGS_KERNEL =
-LDFLAGS_vmlinux =
+export LDFLAGS_vmlinux =
# Use USERINCLUDE when you must reference the UAPI directories only.
USERINCLUDE := \
@@ -648,7 +648,7 @@ quiet_cmd_makefile = GEN Makefile
} > Makefile
outputmakefile:
- $(Q)if [ -f $(srctree)/.config -o \
+ @if [ -f $(srctree)/.config -o \
-d $(srctree)/include/config -o \
-d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
echo >&2 "***"; \
@@ -710,6 +710,8 @@ else
__all: modules
endif
+targets :=
+
# Decide whether to build built-in, modular, or both.
# Normally, just do built-in.
@@ -741,11 +743,8 @@ endif
ifeq ($(KBUILD_EXTMOD),)
# Objects we will link into vmlinux / subdirs we need to visit
-core-y := init/ usr/ arch/$(SRCARCH)/
-drivers-y := drivers/ sound/
-drivers-$(CONFIG_SAMPLES) += samples/
-drivers-$(CONFIG_NET) += net/
-drivers-y += virt/
+core-y :=
+drivers-y :=
libs-y := lib/
endif # KBUILD_EXTMOD
@@ -804,7 +803,7 @@ else # !may-sync-config
PHONY += include/config/auto.conf
include/config/auto.conf:
- $(Q)test -e include/generated/autoconf.h -a -e $@ || ( \
+ @test -e include/generated/autoconf.h -a -e $@ || ( \
echo >&2; \
echo >&2 " ERROR: Kernel configuration is invalid."; \
echo >&2 " include/generated/autoconf.h or $@ are missing.";\
@@ -862,7 +861,6 @@ KBUILD_CFLAGS += $(stackp-flags-y)
KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror
KBUILD_CFLAGS-$(CONFIG_CC_NO_ARRAY_BOUNDS) += -Wno-array-bounds
-KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
KBUILD_RUSTFLAGS-$(CONFIG_WERROR) += -Dwarnings
KBUILD_RUSTFLAGS += $(KBUILD_RUSTFLAGS-y)
@@ -1041,7 +1039,6 @@ ifdef CONFIG_CC_IS_GCC
KBUILD_CFLAGS += -Wno-maybe-uninitialized
endif
-ifdef CONFIG_CC_IS_GCC
# The allocators already balk at large sizes, so silence the compiler
# warnings for bounds checks involving those possible values. While
# -Wno-alloc-size-larger-than would normally be used here, earlier versions
@@ -1053,8 +1050,8 @@ ifdef CONFIG_CC_IS_GCC
# ignored, continuing to default to PTRDIFF_MAX. So, left with no other
# choice, we must perform a versioned check to disable this warning.
# https://lore.kernel.org/lkml/20210824115859.187f272f@canb.auug.org.au
-KBUILD_CFLAGS += $(call cc-ifversion, -ge, 0901, -Wno-alloc-size-larger-than)
-endif
+KBUILD_CFLAGS-$(call gcc-min-version, 90100) += -Wno-alloc-size-larger-than
+KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)