Commit 8afc66e8 authored by Linus Torvalds's avatar Linus Torvalds

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
  ...
parents 4de65c58 0715fdb0
...@@ -341,19 +341,7 @@ more details, with real examples. ...@@ -341,19 +341,7 @@ more details, with real examples.
Examples are: Examples are:
1) head objects 1) vmlinux linker script
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
The linker script for vmlinux is located at The linker script for vmlinux is located at
arch/$(SRCARCH)/kernel/vmlinux.lds arch/$(SRCARCH)/kernel/vmlinux.lds
...@@ -361,10 +349,6 @@ more details, with real examples. ...@@ -361,10 +349,6 @@ more details, with real examples.
Example:: Example::
# arch/x86/kernel/Makefile # 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 += vmlinux.lds
$(extra-y) should only contain targets needed for vmlinux. $(extra-y) should only contain targets needed for vmlinux.
...@@ -683,22 +667,27 @@ more details, with real examples. ...@@ -683,22 +667,27 @@ more details, with real examples.
In the above example, -Wno-unused-but-set-variable will be added to In the above example, -Wno-unused-but-set-variable will be added to
KBUILD_CFLAGS only if gcc really accepts it. KBUILD_CFLAGS only if gcc really accepts it.
cc-ifversion gcc-min-version
cc-ifversion tests the version of $(CC) and equals the fourth parameter gcc-min-version tests if the value of $(CONFIG_GCC_VERSION) is greater than
if version expression is true, or the fifth (if given) if the version or equal to the provided value and evaluates to y if so.
expression is false.
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:: Example::
#fs/reiserfs/Makefile cflags-$(call clang-min-version, 110000) := -foo
ccflags-y := $(call cc-ifversion, -lt, 0402, -O1)
In this example, ccflags-y will be assigned the value -O1 if the In this example, cflags-y will be assigned the value -foo if $(CC) is clang
$(CC) version is less than 4.2. and $(CONFIG_CLANG_VERSION) is >= 11.0.0.
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.
cc-cross-prefix cc-cross-prefix
cc-cross-prefix is used to check if there exists a $(CC) in path with 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): ...@@ -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. - 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 5) All object files are then linked and the resulting file vmlinux is
located at the root of the obj tree. located at the root of the obj tree.
The very first objects linked are listed in head-y, assigned by The very first objects linked are listed in scripts/head-object-list.txt.
arch/$(SRCARCH)/Makefile.
6) Finally, the architecture-specific part does any required post processing 6) Finally, the architecture-specific part does any required post processing
and builds the final bootimage. and builds the final bootimage.
- This includes building boot records - This includes building boot records
...@@ -1272,6 +1260,9 @@ When kbuild executes, the following steps are followed (roughly): ...@@ -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 All object files for vmlinux. They are linked to vmlinux in the same
order as listed in KBUILD_VMLINUX_OBJS. 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 KBUILD_VMLINUX_LIBS
All .a "lib" files for vmlinux. KBUILD_VMLINUX_OBJS and All .a "lib" files for vmlinux. KBUILD_VMLINUX_OBJS and
...@@ -1315,8 +1306,7 @@ When kbuild executes, the following steps are followed (roughly): ...@@ -1315,8 +1306,7 @@ When kbuild executes, the following steps are followed (roughly):
machinery is all architecture-independent. machinery is all architecture-independent.
head-y, core-y, libs-y, drivers-y core-y, libs-y, drivers-y
$(head-y) lists objects to be linked first in vmlinux.
$(libs-y) lists directories where a lib.a archive can be located. $(libs-y) lists directories where a lib.a archive can be located.
......
...@@ -33,7 +33,7 @@ GNU C 5.1 gcc --version ...@@ -33,7 +33,7 @@ GNU C 5.1 gcc --version
Clang/LLVM (optional) 11.0.0 clang --version Clang/LLVM (optional) 11.0.0 clang --version
Rust (optional) 1.62.0 rustc --version Rust (optional) 1.62.0 rustc --version
bindgen (optional) 0.56.0 bindgen --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 bash 4.2 bash --version
binutils 2.23 ld -v binutils 2.23 ld -v
flex 2.5.35 flex --version flex 2.5.35 flex --version
...@@ -108,7 +108,7 @@ It depends on ``libclang``. ...@@ -108,7 +108,7 @@ It depends on ``libclang``.
Make 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 Bash
---- ----
......
...@@ -2,18 +2,18 @@ ...@@ -2,18 +2,18 @@
# #
# Kbuild for top-level directory of the kernel # Kbuild for top-level directory of the kernel
##### # Prepare global headers and check sanity before descending into sub-directories
# ---------------------------------------------------------------------------
# Generate bounds.h # Generate bounds.h
bounds-file := include/generated/bounds.h bounds-file := include/generated/bounds.h
always-y := $(bounds-file)
targets := kernel/bounds.s targets := kernel/bounds.s
$(bounds-file): kernel/bounds.s FORCE $(bounds-file): kernel/bounds.s FORCE
$(call filechk,offsets,__LINUX_BOUNDS_H__) $(call filechk,offsets,__LINUX_BOUNDS_H__)
#####
# Generate timeconst.h # Generate timeconst.h
timeconst-file := include/generated/timeconst.h timeconst-file := include/generated/timeconst.h
...@@ -23,12 +23,10 @@ filechk_gentimeconst = echo $(CONFIG_HZ) | bc -q $< ...@@ -23,12 +23,10 @@ filechk_gentimeconst = echo $(CONFIG_HZ) | bc -q $<
$(timeconst-file): kernel/time/timeconst.bc FORCE $(timeconst-file): kernel/time/timeconst.bc FORCE
$(call filechk,gentimeconst) $(call filechk,gentimeconst)
#####
# Generate asm-offsets.h # Generate asm-offsets.h
offsets-file := include/generated/asm-offsets.h offsets-file := include/generated/asm-offsets.h
always-y += $(offsets-file)
targets += arch/$(SRCARCH)/kernel/asm-offsets.s targets += arch/$(SRCARCH)/kernel/asm-offsets.s
arch/$(SRCARCH)/kernel/asm-offsets.s: $(timeconst-file) $(bounds-file) arch/$(SRCARCH)/kernel/asm-offsets.s: $(timeconst-file) $(bounds-file)
...@@ -36,24 +34,66 @@ 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 $(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s FORCE
$(call filechk,offsets,__ASM_OFFSETS_H__) $(call filechk,offsets,__ASM_OFFSETS_H__)
#####
# Check for missing system calls # Check for missing system calls
always-y += missing-syscalls
quiet_cmd_syscalls = CALL $< quiet_cmd_syscalls = CALL $<
cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) $(missing_syscalls_flags) 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) $(call cmd,syscalls)
##### # Check the manual modification of atomic headers
# Check atomic headers are up-to-date
quiet_cmd_check_sha1 = CHKSHA1 $<
always-y += old-atomics cmd_check_sha1 = \
if ! command -v sha1sum >/dev/null; then \
quiet_cmd_atomics = CALL $< echo "warning: cannot check the header due to sha1sum missing"; \
cmd_atomics = $(CONFIG_SHELL) $< exit 0; \
fi; \
old-atomics: scripts/atomic/check-atomics.sh FORCE if [ "$$(sed -n '$$s:// ::p' $<)" != \
$(call cmd,atomics) "$$(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)
This diff is collapsed.
...@@ -36,8 +36,6 @@ cflags-y += $(cpuflags-y) ...@@ -36,8 +36,6 @@ cflags-y += $(cpuflags-y)
# BWX is most important, but we don't really want any emulation ever. # BWX is most important, but we don't really want any emulation ever.
KBUILD_CFLAGS += $(cflags-y) -Wa,-mev6 KBUILD_CFLAGS += $(cflags-y) -Wa,-mev6
head-y := arch/alpha/kernel/head.o
libs-y += arch/alpha/lib/ libs-y += arch/alpha/lib/
# export what is needed by arch/alpha/boot/Makefile # export what is needed by arch/alpha/boot/Makefile
......
...@@ -3,11 +3,11 @@ ...@@ -3,11 +3,11 @@
# Makefile for the linux kernel. # Makefile for the linux kernel.
# #
extra-y := head.o vmlinux.lds extra-y := vmlinux.lds
asflags-y := $(KBUILD_CFLAGS) asflags-y := $(KBUILD_CFLAGS)
ccflags-y := -Wno-sign-compare ccflags-y := -Wno-sign-compare
obj-y := entry.o traps.o process.o osf_sys.o irq.o \ obj-y := head.o entry.o traps.o process.o osf_sys.o irq.o \
irq_alpha.o signal.o setup.o ptrace.o time.o \ irq_alpha.o signal.o setup.o ptrace.o time.o \
systbls.o err_common.o io.o bugs.o termios.o systbls.o err_common.o io.o bugs.o termios.o
......
...@@ -82,8 +82,6 @@ KBUILD_CFLAGS += $(cflags-y) ...@@ -82,8 +82,6 @@ KBUILD_CFLAGS += $(cflags-y)
KBUILD_AFLAGS += $(KBUILD_CFLAGS) KBUILD_AFLAGS += $(KBUILD_CFLAGS)
KBUILD_LDFLAGS += $(ldflags-y) KBUILD_LDFLAGS += $(ldflags-y)
head-y := arch/arc/kernel/head.o
# w/o this dtb won't embed into kernel binary # w/o this dtb won't embed into kernel binary
core-y += arch/arc/boot/dts/ core-y += arch/arc/boot/dts/
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) # Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
# #
obj-y := arcksyms.o setup.o irq.o reset.o ptrace.o process.o devtree.o obj-y := head.o arcksyms.o setup.o irq.o reset.o ptrace.o process.o devtree.o
obj-y += signal.o traps.o sys.o troubleshoot.o stacktrace.o disasm.o obj-y += signal.o traps.o sys.o troubleshoot.o stacktrace.o disasm.o
obj-$(CONFIG_ISA_ARCOMPACT) += entry-compact.o intc-compact.o obj-$(CONFIG_ISA_ARCOMPACT) += entry-compact.o intc-compact.o
obj-$(CONFIG_ISA_ARCV2) += entry-arcv2.o intc-arcv2.o obj-$(CONFIG_ISA_ARCV2) += entry-arcv2.o intc-arcv2.o
...@@ -31,4 +31,4 @@ else ...@@ -31,4 +31,4 @@ else
obj-y += ctx_sw_asm.o obj-y += ctx_sw_asm.o
endif endif
extra-y := vmlinux.lds head.o extra-y := vmlinux.lds
...@@ -137,9 +137,6 @@ KBUILD_AFLAGS +=$(CFLAGS_ABI) $(AFLAGS_ISA) $(arch-y) $(tune-y) -include asm/uni ...@@ -137,9 +137,6 @@ KBUILD_AFLAGS +=$(CFLAGS_ABI) $(AFLAGS_ISA) $(arch-y) $(tune-y) -include asm/uni
CHECKFLAGS += -D__arm__ CHECKFLAGS += -D__arm__
#Default value
head-y := arch/arm/kernel/head$(MMUEXT).o
# Text offset. This list is sorted numerically by address in order to # Text offset. This list is sorted numerically by address in order to
# provide a means to avoid/resolve conflicts in multi-arch kernels. # provide a means to avoid/resolve conflicts in multi-arch kernels.
# Note: the 32kB below this value is reserved for use by the kernel # Note: the 32kB below this value is reserved for use by the kernel
......
...@@ -88,7 +88,7 @@ obj-$(CONFIG_VDSO) += vdso.o ...@@ -88,7 +88,7 @@ obj-$(CONFIG_VDSO) += vdso.o
obj-$(CONFIG_EFI) += efi.o obj-$(CONFIG_EFI) += efi.o
obj-$(CONFIG_PARAVIRT) += paravirt.o obj-$(CONFIG_PARAVIRT) += paravirt.o
head-y := head$(MMUEXT).o obj-y += head$(MMUEXT).o
obj-$(CONFIG_DEBUG_LL) += debug.o obj-$(CONFIG_DEBUG_LL) += debug.o
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
obj-$(CONFIG_ARM_PATCH_PHYS_VIRT) += phys2virt.o obj-$(CONFIG_ARM_PATCH_PHYS_VIRT) += phys2virt.o
...@@ -108,4 +108,4 @@ obj-$(CONFIG_HAVE_ARM_SMCCC) += smccc-call.o ...@@ -108,4 +108,4 @@ obj-$(CONFIG_HAVE_ARM_SMCCC) += smccc-call.o
obj-$(CONFIG_GENERIC_CPU_VULNERABILITIES) += spectre.o obj-$(CONFIG_GENERIC_CPU_VULNERABILITIES) += spectre.o
extra-y := $(head-y) vmlinux.lds extra-y := vmlinux.lds
...@@ -133,9 +133,6 @@ ifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_REGS),y) ...@@ -133,9 +133,6 @@ ifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_REGS),y)
CC_FLAGS_FTRACE := -fpatchable-function-entry=2 CC_FLAGS_FTRACE := -fpatchable-function-entry=2
endif endif
# Default value
head-y := arch/arm64/kernel/head.o
ifeq ($(CONFIG_KASAN_SW_TAGS), y) ifeq ($(CONFIG_KASAN_SW_TAGS), y)
KASAN_SHADOW_SCALE_SHIFT := 4 KASAN_SHADOW_SCALE_SHIFT := 4
else ifeq ($(CONFIG_KASAN_GENERIC), y) else ifeq ($(CONFIG_KASAN_GENERIC), y)
......
...@@ -86,8 +86,8 @@ $(obj)/vdso-wrap.o: $(obj)/vdso/vdso.so ...@@ -86,8 +86,8 @@ $(obj)/vdso-wrap.o: $(obj)/vdso/vdso.so
$(obj)/vdso32-wrap.o: $(obj)/vdso32/vdso.so $(obj)/vdso32-wrap.o: $(obj)/vdso32/vdso.so
obj-y += probes/ obj-y += probes/
head-y := head.o obj-y += head.o
extra-y += $(head-y) vmlinux.lds extra-y += vmlinux.lds
ifeq ($(CONFIG_DEBUG_EFI),y) ifeq ($(CONFIG_DEBUG_EFI),y)
AFLAGS_head.o += -DVMLINUX_PATH="\"$(realpath $(objtree)/vmlinux)\"" AFLAGS_head.o += -DVMLINUX_PATH="\"$(realpath $(objtree)/vmlinux)\""
......
...@@ -59,8 +59,6 @@ LDFLAGS += -EL ...@@ -59,8 +59,6 @@ LDFLAGS += -EL
KBUILD_AFLAGS += $(KBUILD_CFLAGS) KBUILD_AFLAGS += $(KBUILD_CFLAGS)
head-y := arch/csky/kernel/head.o
core-y += arch/csky/$(CSKYABI)/ core-y += arch/csky/$(CSKYABI)/
libs-y += arch/csky/lib/ \ libs-y += arch/csky/lib/ \
......
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-2.0-only
extra-y := head.o vmlinux.lds extra-y := vmlinux.lds
obj-y += entry.o atomic.o signal.o traps.o irq.o time.o vdso.o vdso/ obj-y += head.o entry.o atomic.o signal.o traps.o irq.o time.o vdso.o vdso/
obj-y += power.o syscall.o syscall_table.o setup.o io.o obj-y += power.o syscall.o syscall_table.o setup.o io.o
obj-y += process.o cpu-probe.o ptrace.o stacktrace.o obj-y += process.o cpu-probe.o ptrace.o stacktrace.o
obj-y += probes/ obj-y += probes/
......
...@@ -32,5 +32,3 @@ KBUILD_LDFLAGS += $(ldflags-y) ...@@ -32,5 +32,3 @@ KBUILD_LDFLAGS += $(ldflags-y)
TIR_NAME := r19 TIR_NAME := r19
KBUILD_CFLAGS += -ffixed-$(TIR_NAME) -DTHREADINFO_REG=$(TIR_NAME) -D__linux__ KBUILD_CFLAGS += -ffixed-$(TIR_NAME) -DTHREADINFO_REG=$(TIR_NAME) -D__linux__
KBUILD_AFLAGS += -DTHREADINFO_REG=$(TIR_NAME) KBUILD_AFLAGS += -DTHREADINFO_REG=$(TIR_NAME)
head-y := arch/hexagon/kernel/head.o
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
extra-y := head.o vmlinux.lds extra-y := vmlinux.lds
obj-y += head.o
obj-$(CONFIG_SMP) += smp.o obj-$(CONFIG_SMP) += smp.o
obj-y += setup.o irq_cpu.o traps.o syscalltab.o signal.o time.o obj-y += setup.o irq_cpu.o traps.o syscalltab.o signal.o time.o
......
...@@ -44,7 +44,6 @@ quiet_cmd_objcopy = OBJCOPY $@ ...@@ -44,7 +44,6 @@ quiet_cmd_objcopy = OBJCOPY $@
cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@ cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
KBUILD_CFLAGS += $(cflags-y) KBUILD_CFLAGS += $(cflags-y)
head-y := arch/ia64/kernel/head.o
libs-y += arch/ia64/lib/ libs-y += arch/ia64/lib/
......
...@@ -7,9 +7,9 @@ ifdef CONFIG_DYNAMIC_FTRACE ...@@ -7,9 +7,9 @@ ifdef CONFIG_DYNAMIC_FTRACE
CFLAGS_REMOVE_ftrace.o = -pg CFLAGS_REMOVE_ftrace.o = -pg
endif endif
extra-y := head.o vmlinux.lds extra-y := vmlinux.lds
obj-y := entry.o efi.o efi_stub.o gate-data.o fsys.o irq.o irq_ia64.o \ obj-y := head.o entry.o efi.o efi_stub.o gate-data.o fsys.o irq.o irq_ia64.o \
irq_lsapic.o ivt.o pal.o patch.o process.o ptrace.o sal.o \ irq_lsapic.o ivt.o pal.o patch.o process.o ptrace.o sal.o \
salinfo.o setup.o signal.o sys_ia64.o time.o traps.o unaligned.o \ salinfo.o setup.o signal.o sys_ia64.o time.o traps.o unaligned.o \
unwind.o mca.o mca_asm.o topology.o dma-mapping.o iosapic.o acpi.o \ unwind.o mca.o mca_asm.o topology.o dma-mapping.o iosapic.o acpi.o \
...@@ -34,10 +34,7 @@ mca_recovery-y += mca_drv.o mca_drv_asm.o ...@@ -34,10 +34,7 @@ mca_recovery-y += mca_drv.o mca_drv_asm.o
obj-$(CONFIG_IA64_MC_ERR_INJECT)+= err_inject.o obj-$(CONFIG_IA64_MC_ERR_INJECT)+= err_inject.o
obj-$(CONFIG_STACKTRACE) += stacktrace.o obj-$(CONFIG_STACKTRACE) += stacktrace.o
obj-$(CONFIG_IA64_ESI) += esi.o obj-$(CONFIG_IA64_ESI) += esi.o esi_stub.o # must be in kernel proper
ifneq ($(CONFIG_IA64_ESI),)
obj-y += esi_stub.o # must be in kernel proper
endif
obj-$(CONFIG_INTEL_IOMMU) += pci-dma.o obj-$(CONFIG_INTEL_IOMMU) += pci-dma.o
obj-$(CONFIG_ELF_CORE) += elfcore.o obj-$(CONFIG_ELF_CORE) += elfcore.o
......
...@@ -79,8 +79,6 @@ CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \ ...@@ -79,8 +79,6 @@ CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \
sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g') sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g')
endif endif
head-y := arch/loongarch/kernel/head.o
libs-y += arch/loongarch/lib/ libs-y += arch/loongarch/lib/
libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
# Makefile for the Linux/LoongArch kernel. # Makefile for the Linux/LoongArch kernel.
# #
extra-y := head.o vmlinux.lds extra-y := vmlinux.lds
obj-y += cpu-probe.o cacheinfo.o env.o setup.o entry.o genex.o \ obj-y += head.o cpu-probe.o cacheinfo.o env.o setup.o entry.o genex.o \
traps.o irq.o idle.o process.o dma.o mem.o io.o reset.o switch.o \ traps.o irq.o idle.o process.o dma.o mem.o io.o reset.o switch.o \
elf.o syscall.o signal.o time.o topology.o inst.o ptrace.o vdso.o elf.o syscall.o signal.o time.o topology.o inst.o ptrace.o vdso.o
......
...@@ -17,4 +17,4 @@ obj-$(CONFIG_DRAGEN2) += dragen2.o ...@@ -17,4 +17,4 @@ obj-$(CONFIG_DRAGEN2) += dragen2.o
obj-$(CONFIG_UCSIMM) += ucsimm.o obj-$(CONFIG_UCSIMM) += ucsimm.o
obj-$(CONFIG_UCDIMM) += ucsimm.o obj-$(CONFIG_UCDIMM) += ucsimm.o
extra-y := head.o obj-y += head.o
...@@ -86,15 +86,6 @@ ifdef CONFIG_KGDB ...@@ -86,15 +86,6 @@ ifdef CONFIG_KGDB
KBUILD_CFLAGS := $(subst -fomit-frame-pointer,,$(KBUILD_CFLAGS)) -g KBUILD_CFLAGS := $(subst -fomit-frame-pointer,,$(KBUILD_CFLAGS)) -g
endif endif
#
# Select the assembler head startup code. Order is important. The default
# head code is first, processor specific selections can override it after.
#
head-y := arch/m68k/kernel/head.o
head-$(CONFIG_SUN3) := arch/m68k/kernel/sun3-head.o
head-$(CONFIG_M68000) := arch/m68k/68000/head.o
head-$(CONFIG_COLDFIRE) := arch/m68k/coldfire/head.o
libs-y += arch/m68k/lib/ libs-y += arch/m68k/lib/
......
...@@ -45,4 +45,4 @@ obj-$(CONFIG_STMARK2) += stmark2.o ...@@ -45,4 +45,4 @@ obj-$(CONFIG_STMARK2) += stmark2.o
obj-$(CONFIG_PCI) += pci.o obj-$(CONFIG_PCI) += pci.o
obj-y += gpio.o obj-y += gpio.o
extra-y := head.o obj-y += head.o
...@@ -3,19 +3,20 @@ ...@@ -3,19 +3,20 @@
# Makefile for the linux kernel. # Makefile for the linux kernel.
# #
extra-$(CONFIG_AMIGA) := head.o
extra-$(CONFIG_ATARI) := head.o
extra-$(CONFIG_MAC) := head.o
extra-$(CONFIG_APOLLO) := head.o
extra-$(CONFIG_VME) := head.o
extra-$(CONFIG_HP300) := head.o
extra-$(CONFIG_Q40) := head.o
extra-$(CONFIG_SUN3X) := head.o
extra-$(CONFIG_VIRT) := head.o
extra-$(CONFIG_SUN3) := sun3-head.o
extra-y += vmlinux.lds extra-y += vmlinux.lds
obj-y := entry.o irq.o module.o process.o ptrace.o obj-$(CONFIG_AMIGA) := head.o
obj-$(CONFIG_ATARI) := head.o
obj-$(CONFIG_MAC) := head.o
obj-$(CONFIG_APOLLO) := head.o
obj-$(CONFIG_VME) := head.o
obj-$(CONFIG_HP300) := head.o
obj-$(CONFIG_Q40) := head.o
obj-$(CONFIG_SUN3X) := head.o
obj-$(CONFIG_VIRT) := head.o
obj-$(CONFIG_SUN3) := sun3-head.o
obj-y += entry.o irq.o module.o process.o ptrace.o
obj-y += setup.o signal.o sys_m68k.o syscalltable.o time.o traps.o obj-y += setup.o signal.o sys_m68k.o syscalltable.o time.o traps.o
obj-$(CONFIG_MMU_MOTOROLA) += ints.o vectors.o obj-$(CONFIG_MMU_MOTOROLA) += ints.o vectors.o
......
...@@ -48,7 +48,6 @@ CPUFLAGS-1 += $(call cc-option,-mcpu=v$(CPU_VER)) ...@@ -48,7 +48,6 @@ CPUFLAGS-1 += $(call cc-option,-mcpu=v$(CPU_VER))
# r31 holds current when in kernel mode # r31 holds current when in kernel mode
KBUILD_CFLAGS += -ffixed-r31 $(CPUFLAGS-y) $(CPUFLAGS-1) $(CPUFLAGS-2) KBUILD_CFLAGS += -ffixed-r31 $(CPUFLAGS-y) $(CPUFLAGS-1) $(CPUFLAGS-2)
head-y := arch/microblaze/kernel/head.o
libs-y += arch/microblaze/lib/ libs-y += arch/microblaze/lib/
boot := arch/microblaze/boot boot := arch/microblaze/boot
......
...@@ -12,9 +12,9 @@ CFLAGS_REMOVE_ftrace.o = -pg ...@@ -12,9 +12,9 @@ CFLAGS_REMOVE_ftrace.o = -pg
CFLAGS_REMOVE_process.o = -pg CFLAGS_REMOVE_process.o = -pg
endif endif
extra-y := head.o vmlinux.lds extra-y := vmlinux.lds
obj-y += dma.o exceptions.o \ obj-y += head.o dma.o exceptions.o \
hw_exception_handler.o irq.o \ hw_exception_handler.o irq.o \
process.o prom.o ptrace.o \ process.o prom.o ptrace.o \
reset.o setup.o signal.o sys_microblaze.o timer.o traps.o unwind.o reset.o setup.o signal.o sys_microblaze.o timer.o traps.o unwind.o
......
...@@ -324,8 +324,6 @@ endif ...@@ -324,8 +324,6 @@ endif
OBJCOPYFLAGS += --remove-section=.reginfo OBJCOPYFLAGS += --remove-section=.reginfo
head-y := arch/mips/kernel/head.o
libs-y += arch/mips/lib/ libs-y += arch/mips/lib/
libs-$(CONFIG_MIPS_FP_SUPPORT) += arch/mips/math-emu/ libs-$(CONFIG_MIPS_FP_SUPPORT) += arch/mips/math-emu/
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
# Makefile for the Linux/MIPS kernel. # Makefile for the Linux/MIPS kernel.
# #
extra-y := head.o vmlinux.lds extra-y := vmlinux.lds
obj-y += branch.o cmpxchg.o elf.o entry.o genex.o idle.o irq.o \ obj-y += head.o branch.o cmpxchg.o elf.o entry.o genex.o idle.o irq.o \
process.o prom.o ptrace.o reset.o setup.o signal.o \ process.o prom.o ptrace.o reset.o setup.o signal.o \
syscall.o time.o topology.o traps.o unaligned.o watch.o \ syscall.o time.o topology.o traps.o unaligned.o watch.o \
vdso.o cacheinfo.o vdso.o cacheinfo.o
......
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-2.0-only
obj-y += kernel/ mm/ platform/ boot/dts/
# for cleaning # for cleaning
subdir- += boot subdir- += boot
...@@ -37,10 +37,7 @@ KBUILD_CFLAGS += -DUTS_SYSNAME=\"$(UTS_SYSNAME)\" ...@@ -37,10 +37,7 @@ KBUILD_CFLAGS += -DUTS_SYSNAME=\"$(UTS_SYSNAME)\"
KBUILD_CFLAGS += -fno-builtin KBUILD_CFLAGS += -fno-builtin
KBUILD_CFLAGS += -G 0 KBUILD_CFLAGS += -G 0
head-y := arch/nios2/kernel/head.o
libs-y += arch/nios2/lib/ $(LIBGCC) libs-y += arch/nios2/lib/ $(LIBGCC)
core-y += arch/nios2/kernel/ arch/nios2/mm/
core-y += arch/nios2/platform/
INSTALL_PATH ?= /tftpboot INSTALL_PATH ?= /tftpboot
nios2-boot := arch/$(ARCH)/boot nios2-boot := arch/$(ARCH)/boot
...@@ -48,8 +45,6 @@ BOOT_TARGETS = vmImage zImage ...@@ -48,8 +45,6 @@ BOOT_TARGETS = vmImage zImage
PHONY += $(BOOT_TARGETS) install PHONY += $(BOOT_TARGETS) install
KBUILD_IMAGE := $(nios2-boot)/vmImage KBUILD_IMAGE := $(nios2-boot)/vmImage
core-y += $(nios2-boot)/dts/
all: vmImage all: vmImage
$(BOOT_TARGETS): vmlinux $(BOOT_TARGETS): vmlinux
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
# Makefile for the nios2 linux kernel. # Makefile for the nios2 linux kernel.
# #
extra-y += head.o
extra-y += vmlinux.lds extra-y += vmlinux.lds
obj-y += head.o
obj-y += cpuinfo.o obj-y += cpuinfo.o
obj-y += entry.o obj-y += entry.o
obj-y += insnemu.o obj-y += insnemu.o
......
...@@ -55,8 +55,6 @@ ifeq ($(CONFIG_OPENRISC_HAVE_INST_SEXT),y) ...@@ -55,8 +55,6 @@ ifeq ($(CONFIG_OPENRISC_HAVE_INST_SEXT),y)
KBUILD_CFLAGS += $(call cc-option,-msext) KBUILD_CFLAGS += $(call cc-option,-msext)
endif endif
head-y := arch/openrisc/kernel/head.o
libs-y += $(LIBGCC) libs-y += $(LIBGCC)
PHONY += vmlinux.bin PHONY += vmlinux.bin
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
# Makefile for the linux kernel. # Makefile for the linux kernel.
# #
extra-y := head.o vmlinux.lds extra-y := vmlinux.lds
obj-y := setup.o or32_ksyms.o process.o dma.o \ obj-y := head.o setup.o or32_ksyms.o process.o dma.o \
traps.o time.o irq.o entry.o ptrace.o signal.o \ traps.o time.o irq.o entry.o ptrace.o signal.o \
sys_call_table.o unwinder.o sys_call_table.o unwinder.o
......
...@@ -113,8 +113,6 @@ cflags-$(CONFIG_PA7100LC) += -march=1.1 -mschedule=7100LC ...@@ -113,8 +113,6 @@ cflags-$(CONFIG_PA7100LC) += -march=1.1 -mschedule=7100LC
cflags-$(CONFIG_PA7300LC) += -march=1.1 -mschedule=7300 cflags-$(CONFIG_PA7300LC) += -march=1.1 -mschedule=7300
cflags-$(CONFIG_PA8X00) += -march=2.0 -mschedule=8000 cflags-$(CONFIG_PA8X00) += -march=2.0 -mschedule=8000
head-y := arch/parisc/kernel/head.o
KBUILD_CFLAGS += $(cflags-y) KBUILD_CFLAGS += $(cflags-y)
LIBGCC := $(shell $(CC) -print-libgcc-file-name) LIBGCC := $(shell $(CC) -print-libgcc-file-name)
export LIBGCC export LIBGCC
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
# Makefile for arch/parisc/kernel # Makefile for arch/parisc/kernel
# #
extra-y := head.o vmlinux.lds extra-y := vmlinux.lds
obj-y := cache.o pacache.o setup.o pdt.o traps.o time.o irq.o \ obj-y := head.o cache.o pacache.o setup.o pdt.o traps.o time.o irq.o \
pa7300lc.o syscall.o entry.o sys_parisc.o firmware.o \ pa7300lc.o syscall.o entry.o sys_parisc.o firmware.o \
ptrace.o hardware.o inventory.o drivers.o alternative.o \ ptrace.o hardware.o inventory.o drivers.o alternative.o \
signal.o hpmc.o real2.o parisc_ksyms.o unaligned.o \ signal.o hpmc.o real2.o parisc_ksyms.o unaligned.o \
......
...@@ -232,18 +232,6 @@ KBUILD_CFLAGS += $(cpu-as-y) ...@@ -232,18 +232,6 @@ KBUILD_CFLAGS += $(cpu-as-y)
KBUILD_AFLAGS += $(aflags-y) KBUILD_AFLAGS += $(aflags-y)
KBUILD_CFLAGS += $(cflags-y) KBUILD_CFLAGS += $(cflags-y)
head-$(CONFIG_PPC64) := arch/powerpc/kernel/head_64.o
head-$(CONFIG_PPC_BOOK3S_32) := arch/powerpc/kernel/head_book3s_32.o
head-$(CONFIG_PPC_8xx) := arch/powerpc/kernel/head_8xx.o
head-$(CONFIG_40x) := arch/powerpc/kernel/head_40x.o
head-$(CONFIG_44x) := arch/powerpc/kernel/head_44x.o
head-$(CONFIG_PPC_85xx) := arch/powerpc/kernel/head_85xx.o
head-$(CONFIG_PPC64) += arch/powerpc/kernel/entry_64.o
head-$(CONFIG_PPC_FPU) += arch/powerpc/kernel/fpu.o
head-$(CONFIG_ALTIVEC) += arch/powerpc/kernel/vector.o
head-$(CONFIG_PPC_OF_BOOT_TRAMPOLINE) += arch/powerpc/kernel/prom_init.o
# Default to zImage, override when needed # Default to zImage, override when needed
all: zImage all: zImage
......
...@@ -433,7 +433,7 @@ fi ...@@ -433,7 +433,7 @@ fi
# Extract kernel version information, some platforms want to include # Extract kernel version information, some platforms want to include
# it in the image header # it in the image header
version=`${CROSS}strings "$kernel" | grep '^Linux version [-0-9.]' | \ version=`${CROSS}strings "$kernel" | grep '^Linux version [-0-9.]' | \
cut -d' ' -f3` head -n1 | cut -d' ' -f3`
if [ -n "$version" ]; then if [ -n "$version" ]; then
uboot_version="-n Linux-$version" uboot_version="-n Linux-$version"
fi fi
......
...@@ -116,12 +116,12 @@ obj-$(CONFIG_PPC_E500) += cpu_setup_e500.o ...@@ -116,12 +116,12 @@ obj-$(CONFIG_PPC_E500) += cpu_setup_e500.o
obj-$(CONFIG_PPC_DOORBELL) += dbell.o obj-$(CONFIG_PPC_DOORBELL) += dbell.o
obj-$(CONFIG_JUMP_LABEL) += jump_label.o obj-$(CONFIG_JUMP_LABEL) += jump_label.o
extra-$(CONFIG_PPC64) := head_64.o obj-$(CONFIG_PPC64) += head_64.o
extra-$(CONFIG_PPC_BOOK3S_32) := head_book3s_32.o obj-$(CONFIG_PPC_BOOK3S_32) += head_book3s_32.o
extra-$(CONFIG_40x) := head_40x.o obj-$(CONFIG_40x) += head_40x.o
extra-$(CONFIG_44x) := head_44x.o obj-$(CONFIG_44x) += head_44x.o
extra-$(CONFIG_PPC_85xx) := head_85xx.o obj-$(CONFIG_PPC_8xx) += head_8xx.o
extra-$(CONFIG_PPC_8xx) := head_8xx.o obj-$(CONFIG_FSL_BOOKE) += head_85xx.o
extra-y += vmlinux.lds extra-y += vmlinux.lds
obj-$(CONFIG_RELOCATABLE) += reloc_$(BITS).o obj-$(CONFIG_RELOCATABLE) += reloc_$(BITS).o
...@@ -196,10 +196,10 @@ KCOV_INSTRUMENT_paca.o := n ...@@ -196,10 +196,10 @@ KCOV_INSTRUMENT_paca.o := n
CFLAGS_setup_64.o += -fno-stack-protector CFLAGS_setup_64.o += -fno-stack-protector
CFLAGS_paca.o += -fno-stack-protector CFLAGS_paca.o += -fno-stack-protector
extra-$(CONFIG_PPC_FPU) += fpu.o obj-$(CONFIG_PPC_FPU) += fpu.o
extra-$(CONFIG_ALTIVEC) += vector.o obj-$(CONFIG_ALTIVEC) += vector.o
extra-$(CONFIG_PPC64) += entry_64.o obj-$(CONFIG_PPC64) += entry_64.o
extra-$(CONFIG_PPC_OF_BOOT_TRAMPOLINE) += prom_init.o obj-$(CONFIG_PPC_OF_BOOT_TRAMPOLINE) += prom_init.o
extra-$(CONFIG_PPC_OF_BOOT_TRAMPOLINE) += prom_init_check extra-$(CONFIG_PPC_OF_BOOT_TRAMPOLINE) += prom_init_check
......
...@@ -110,8 +110,6 @@ else ...@@ -110,8 +110,6 @@ else
KBUILD_IMAGE := $(boot)/Image.gz KBUILD_IMAGE := $(boot)/Image.gz
endif endif
head-y := arch/riscv/kernel/head.o
libs-y += arch/riscv/lib/ libs-y += arch/riscv/lib/
libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
......
...@@ -28,9 +28,9 @@ KASAN_SANITIZE_cpufeature.o := n ...@@ -28,9 +28,9 @@ KASAN_SANITIZE_cpufeature.o := n
endif endif
endif endif
extra-y += head.o
extra-y += vmlinux.lds extra-y += vmlinux.lds
obj-y += head.o
obj-y += soc.o obj-y += soc.o
obj-$(CONFIG_RISCV_ALTERNATIVE) += alternative.o obj-$(CONFIG_RISCV_ALTERNATIVE) += alternative.o
obj-y += cpu.o obj-y += cpu.o
......
...@@ -119,8 +119,6 @@ export KBUILD_CFLAGS_DECOMPRESSOR ...@@ -119,8 +119,6 @@ export KBUILD_CFLAGS_DECOMPRESSOR
OBJCOPYFLAGS := -O binary OBJCOPYFLAGS := -O binary
head-y := arch/s390/kernel/head64.o
libs-y += arch/s390/lib/ libs-y += arch/s390/lib/
drivers-y += drivers/s390/ drivers-y += drivers/s390/
......
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0
#include <generated/utsversion.h>
#include <generated/utsrelease.h> #include <generated/utsrelease.h>
#include <generated/compile.h> #include <generated/compile.h>
#include "boot.h" #include "boot.h"
......
...@@ -33,7 +33,7 @@ CFLAGS_stacktrace.o += -fno-optimize-sibling-calls ...@@ -33,7 +33,7 @@ CFLAGS_stacktrace.o += -fno-optimize-sibling-calls
CFLAGS_dumpstack.o += -fno-optimize-sibling-calls CFLAGS_dumpstack.o += -fno-optimize-sibling-calls
CFLAGS_unwind_bc.o += -fno-optimize-sibling-calls CFLAGS_unwind_bc.o += -fno-optimize-sibling-calls
obj-y := traps.o time.o process.o earlypgm.o early.o setup.o idle.o vtime.o obj-y := head64.o traps.o time.o process.o earlypgm.o early.o setup.o idle.o vtime.o
obj-y += processor.o syscall.o ptrace.o signal.o cpcmd.o ebcdic.o nmi.o obj-y += processor.o syscall.o ptrace.o signal.o cpcmd.o ebcdic.o nmi.o
obj-y += debug.o irq.o ipl.o dis.o diag.o vdso.o cpufeature.o obj-y += debug.o irq.o ipl.o dis.o diag.o vdso.o cpufeature.o
obj-y += sysinfo.o lgr.o os_info.o machine_kexec.o obj-y += sysinfo.o lgr.o os_info.o machine_kexec.o
...@@ -42,7 +42,7 @@ obj-y += entry.o reipl.o relocate_kernel.o kdebugfs.o alternative.o ...@@ -42,7 +42,7 @@ obj-y += entry.o reipl.o relocate_kernel.o kdebugfs.o alternative.o
obj-y += nospec-branch.o ipl_vmparm.o machine_kexec_reloc.o unwind_bc.o obj-y += nospec-branch.o ipl_vmparm.o machine_kexec_reloc.o unwind_bc.o
obj-y += smp.o text_amode31.o stacktrace.o abs_lowcore.o obj-y += smp.o text_amode31.o stacktrace.o abs_lowcore.o
extra-y += head64.o vmlinux.lds extra-y += vmlinux.lds
obj-$(CONFIG_SYSFS) += nospec-sysfs.o obj-$(CONFIG_SYSFS) += nospec-sysfs.o
CFLAGS_REMOVE_nospec-branch.o += $(CC_FLAGS_EXPOLINE) CFLAGS_REMOVE_nospec-branch.o += $(CC_FLAGS_EXPOLINE)
......
...@@ -114,8 +114,6 @@ endif ...@@ -114,8 +114,6 @@ endif
export ld-bfd export ld-bfd
head-y := arch/sh/kernel/head_32.o
# Mach groups # Mach groups
machdir-$(CONFIG_SOLUTION_ENGINE) += mach-se machdir-$(CONFIG_SOLUTION_ENGINE) += mach-se
machdir-$(CONFIG_SH_HP6XX) += mach-hp6xx machdir-$(CONFIG_SH_HP6XX) += mach-hp6xx
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# Makefile for the Linux/SuperH kernel. # Makefile for the Linux/SuperH kernel.
# #
extra-y := head_32.o vmlinux.lds extra-y := vmlinux.lds
ifdef CONFIG_FUNCTION_TRACER ifdef CONFIG_FUNCTION_TRACER
# Do not profile debug and lowlevel utilities # Do not profile debug and lowlevel utilities
...@@ -12,7 +12,7 @@ endif ...@@ -12,7 +12,7 @@ endif
CFLAGS_REMOVE_return_address.o = -pg CFLAGS_REMOVE_return_address.o = -pg
obj-y := debugtraps.o dumpstack.o \ obj-y := head_32.o debugtraps.o dumpstack.o \
idle.o io.o irq.o irq_32.o kdebugfs.o \ idle.o io.o irq.o irq_32.o kdebugfs.o \
machvec.o nmi_debug.o process.o \ machvec.o nmi_debug.o process.o \
process_32.o ptrace.o ptrace_32.o \ process_32.o ptrace.o ptrace_32.o \
......
...@@ -56,8 +56,6 @@ endif ...@@ -56,8 +56,6 @@ endif
endif endif
head-y := arch/sparc/kernel/head_$(BITS).o
libs-y += arch/sparc/prom/ libs-y += arch/sparc/prom/
libs-y += arch/sparc/lib/ libs-y += arch/sparc/lib/
......
...@@ -7,8 +7,6 @@ ...@@ -7,8 +7,6 @@
asflags-y := -ansi asflags-y := -ansi
ccflags-y := -Werror ccflags-y := -Werror
extra-y := head_$(BITS).o
# Undefine sparc when processing vmlinux.lds - it is used # Undefine sparc when processing vmlinux.lds - it is used
# And teach CPP we are doing $(BITS) builds (for this case) # And teach CPP we are doing $(BITS) builds (for this case)
CPPFLAGS_vmlinux.lds := -Usparc -m$(BITS) CPPFLAGS_vmlinux.lds := -Usparc -m$(BITS)
...@@ -22,6 +20,7 @@ CFLAGS_REMOVE_perf_event.o := -pg ...@@ -22,6 +20,7 @@ CFLAGS_REMOVE_perf_event.o := -pg
CFLAGS_REMOVE_pcr.o := -pg CFLAGS_REMOVE_pcr.o := -pg
endif endif
obj-y := head_$(BITS).o
obj-$(CONFIG_SPARC64) += urtt_fill.o obj-$(CONFIG_SPARC64) += urtt_fill.o
obj-$(CONFIG_SPARC32) += entry.o wof.o wuf.o obj-$(CONFIG_SPARC32) += entry.o wof.o wuf.o
obj-$(CONFIG_SPARC32) += etrap_32.o obj-$(CONFIG_SPARC32) += etrap_32.o
......
...@@ -244,11 +244,6 @@ archheaders: ...@@ -244,11 +244,6 @@ archheaders:
### ###
# Kernel objects # Kernel objects
head-y := arch/x86/kernel/head_$(BITS).o
head-y += arch/x86/kernel/head$(BITS).o
head-y += arch/x86/kernel/ebda.o
head-y += arch/x86/kernel/platform-quirks.o
libs-y += arch/x86/lib/ libs-y += arch/x86/lib/
# drivers-y are linked after core-y # drivers-y are linked after core-y
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <linux/uts.h> #include <linux/uts.h>
#include <linux/utsname.h> #include <linux/utsname.h>
#include <linux/ctype.h> #include <linux/ctype.h>
#include <generated/utsversion.h>
#include <generated/utsrelease.h> #include <generated/utsrelease.h>
#define _SETUP #define _SETUP
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
*/ */
#include "boot.h" #include "boot.h"
#include <generated/utsversion.h>
#include <generated/utsrelease.h> #include <generated/utsrelease.h>
#include <generated/compile.h> #include <generated/compile.h>
......
...@@ -3,10 +3,6 @@ ...@@ -3,10 +3,6 @@
# Makefile for the linux kernel. # Makefile for the linux kernel.
# #
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 += vmlinux.lds
CPPFLAGS_vmlinux.lds += -U$(UTS_MACHINE) CPPFLAGS_vmlinux.lds += -U$(UTS_MACHINE)
...@@ -42,7 +38,11 @@ KCOV_INSTRUMENT := n ...@@ -42,7 +38,11 @@ KCOV_INSTRUMENT := n
CFLAGS_irq.o := -I $(srctree)/$(src)/../include/asm/trace CFLAGS_irq.o := -I $(srctree)/$(src)/../include/asm/trace
obj-y := process_$(BITS).o signal.o obj-y += head_$(BITS).o
obj-y += head$(BITS).o
obj-y += ebda.o
obj-y += platform-quirks.o
obj-y += process_$(BITS).o signal.o
obj-$(CONFIG_COMPAT) += signal_compat.o obj-$(CONFIG_COMPAT) += signal_compat.o
obj-y += traps.o idt.o irq.o irq_$(BITS).o dumpstack_$(BITS).o obj-y += traps.o idt.o irq.o irq_$(BITS).o dumpstack_$(BITS).o
obj-y += time.o ioport.o dumpstack.o nmi.o obj-y += time.o ioport.o dumpstack.o nmi.o
......
...@@ -55,8 +55,6 @@ KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(vardirs) $(plfdirs)) ...@@ -55,8 +55,6 @@ KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(vardirs) $(plfdirs))
KBUILD_DEFCONFIG := iss_defconfig KBUILD_DEFCONFIG := iss_defconfig
head-y := arch/xtensa/kernel/head.o
libs-y += arch/xtensa/lib/ libs-y += arch/xtensa/lib/
boot := arch/xtensa/boot boot := arch/xtensa/boot
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
# Makefile for the Linux/Xtensa kernel. # Makefile for the Linux/Xtensa kernel.
# #
extra-y := head.o vmlinux.lds extra-y := vmlinux.lds
obj-y := align.o coprocessor.o entry.o irq.o platform.o process.o \ obj-y := head.o align.o coprocessor.o entry.o irq.o platform.o process.o \
ptrace.o setup.o signal.o stacktrace.o syscall.o time.o traps.o \ ptrace.o setup.o signal.o stacktrace.o syscall.o time.o traps.o \
vectors.o vectors.o
......
...@@ -34,7 +34,7 @@ dml_ccflags := -mhard-float -maltivec ...@@ -34,7 +34,7 @@ dml_ccflags := -mhard-float -maltivec
endif endif
ifdef CONFIG_CC_IS_GCC ifdef CONFIG_CC_IS_GCC
ifeq ($(call cc-ifversion, -lt, 0701, y), y) ifneq ($(call gcc-min-version, 70100),y)
IS_OLD_GCC = 1 IS_OLD_GCC = 1
endif endif
endif endif
......
...@@ -10,8 +10,10 @@ ...@@ -10,8 +10,10 @@
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/types.h> #include <linux/types.h>
/* __used is needed to keep __crc_* for LTO */
#define SYMBOL_CRC(sym, crc, sec) \ #define SYMBOL_CRC(sym, crc, sec) \
u32 __section("___kcrctab" sec "+" #sym) __used __crc_##sym = crc asm(".section \"___kcrctab" sec "+" #sym "\",\"a\"" "\n" \
"__crc_" #sym ":" "\n" \
".long " #crc "\n" \
".previous" "\n")
#endif /* __LINUX_EXPORT_INTERNAL_H__ */ #endif /* __LINUX_EXPORT_INTERNAL_H__ */
# SPDX-License-Identifier: GPL-2.0-only
/utsversion-tmp.h
...@@ -19,20 +19,43 @@ mounts-y := do_mounts.o ...@@ -19,20 +19,43 @@ mounts-y := do_mounts.o
mounts-$(CONFIG_BLK_DEV_RAM) += do_mounts_rd.o mounts-$(CONFIG_BLK_DEV_RAM) += do_mounts_rd.o
mounts-$(CONFIG_BLK_DEV_INITRD) += do_mounts_initrd.o mounts-$(CONFIG_BLK_DEV_INITRD) += do_mounts_initrd.o
# dependencies on generated files need to be listed explicitly #
$(obj)/version.o: include/generated/compile.h # UTS_VERSION
#
# compile.h changes depending on hostname, generation number, etc,
# so we regenerate it always. smp-flag-$(CONFIG_SMP) := SMP
# mkcompile_h will make sure to only update the preempt-flag-$(CONFIG_PREEMPT_BUILD) := PREEMPT
# actual file if its content has changed. preempt-flag-$(CONFIG_PREEMPT_DYNAMIC) := PREEMPT_DYNAMIC
preempt-flag-$(CONFIG_PREEMPT_RT) := PREEMPT_RT
quiet_cmd_compile.h = CHK $@
cmd_compile.h = \ build-version = $(or $(KBUILD_BUILD_VERSION), $(build-version-auto))
$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \ build-timestamp = $(or $(KBUILD_BUILD_TIMESTAMP), $(build-timestamp-auto))
"$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT_BUILD)" \
"$(CONFIG_PREEMPT_DYNAMIC)" "$(CONFIG_PREEMPT_RT)" \ # Maximum length of UTS_VERSION is 64 chars
"$(CONFIG_CC_VERSION_TEXT)" "$(LD)" filechk_uts_version = \
utsver=$$(echo '$(pound)'"$(build-version)" $(smp-flag-y) $(preempt-flag-y) "$(build-timestamp)" | cut -b -64); \
include/generated/compile.h: FORCE echo '$(pound)'define UTS_VERSION \""$${utsver}"\"
$(call cmd,compile.h)
#
# Build version.c with temporary UTS_VERSION
#
$(obj)/utsversion-tmp.h: FORCE
$(call filechk,uts_version)
clean-files += utsversion-tmp.h
$(obj)/version.o: $(obj)/utsversion-tmp.h
CFLAGS_version.o := -include $(obj)/utsversion-tmp.h
#
# Build version-timestamp.c with final UTS_VERSION
#
include/generated/utsversion.h: build-version-auto = $(shell $(srctree)/$(src)/build-version)
include/generated/utsversion.h: build-timestamp-auto = $(shell LC_ALL=C date)
include/generated/utsversion.h: FORCE
$(call filechk,uts_version)
$(obj)/version-timestamp.o: include/generated/utsversion.h
CFLAGS_version-timestamp.o := -include include/generated/utsversion.h
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-only
prev_ver=$(cat .version 2>/dev/null) &&
ver=$(expr ${prev_ver} + 1 2>/dev/null) ||
ver=1
echo ${ver} > .version
echo ${ver}
// SPDX-License-Identifier: GPL-2.0-only
#include <generated/compile.h>
#include <generated/utsrelease.h>
#include <linux/version.h>
#include <linux/proc_ns.h>
#include <linux/refcount.h>
#include <linux/uts.h>
#include <linux/utsname.h>
struct uts_namespace init_uts_ns = {
.ns.count = REFCOUNT_INIT(2),
.name = {
.sysname = UTS_SYSNAME,
.nodename = UTS_NODENAME,
.release = UTS_RELEASE,
.version = UTS_VERSION,
.machine = UTS_MACHINE,
.domainname = UTS_DOMAINNAME,
},
.user_ns = &init_user_ns,
.ns.inum = PROC_UTS_INIT_INO,
#ifdef CONFIG_UTS_NS
.ns.ops = &utsns_operations,
#endif
};
/* FIXED STRINGS! Don't touch! */
const char linux_banner[] =
"Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
...@@ -16,27 +16,8 @@ ...@@ -16,27 +16,8 @@
#include <linux/uts.h> #include <linux/uts.h>
#include <linux/utsname.h> #include <linux/utsname.h>
#include <generated/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/version.h>
#include <linux/proc_ns.h> #include <linux/proc_ns.h>
struct uts_namespace init_uts_ns = {
.ns.count = REFCOUNT_INIT(2),
.name = {
.sysname = UTS_SYSNAME,
.nodename = UTS_NODENAME,
.release = UTS_RELEASE,
.version = UTS_VERSION,
.machine = UTS_MACHINE,
.domainname = UTS_DOMAINNAME,
},
.user_ns = &init_user_ns,
.ns.inum = PROC_UTS_INIT_INO,
#ifdef CONFIG_UTS_NS
.ns.ops = &utsns_operations,
#endif
};
EXPORT_SYMBOL_GPL(init_uts_ns);
static int __init early_hostname(char *arg) static int __init early_hostname(char *arg)
{ {
size_t bufsize = sizeof(init_uts_ns.name.nodename); size_t bufsize = sizeof(init_uts_ns.name.nodename);
...@@ -52,11 +33,6 @@ static int __init early_hostname(char *arg) ...@@ -52,11 +33,6 @@ static int __init early_hostname(char *arg)
} }
early_param("hostname", early_hostname); early_param("hostname", early_hostname);
/* FIXED STRINGS! Don't touch! */
const char linux_banner[] =
"Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
const char linux_proc_banner[] = const char linux_proc_banner[] =
"%s version %s" "%s version %s"
" (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")" " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")"
...@@ -64,3 +40,16 @@ const char linux_proc_banner[] = ...@@ -64,3 +40,16 @@ const char linux_proc_banner[] =
BUILD_SALT; BUILD_SALT;
BUILD_LTO_INFO; BUILD_LTO_INFO;
/*
* init_uts_ns and linux_banner contain the build version and timestamp,
* which are really fixed at the very last step of build process.
* They are compiled with __weak first, and without __weak later.
*/
struct uts_namespace init_uts_ns __weak;
const char linux_banner[] __weak;
#include "version-timestamp.c"
EXPORT_SYMBOL_GPL(init_uts_ns);
...@@ -31,8 +31,8 @@ if [ "$building_out_of_srctree" ]; then ...@@ -31,8 +31,8 @@ if [ "$building_out_of_srctree" ]; then
fi fi
all_dirs="$all_dirs $dir_list" all_dirs="$all_dirs $dir_list"
# include/generated/compile.h is ignored because it is touched even when none # include/generated/utsversion.h is ignored because it is generated after this
# of the source files changed. # script is executed. (utsversion.h is unneeded for kheaders)
# #
# When Kconfig regenerates include/generated/autoconf.h, its timestamp is # When Kconfig regenerates include/generated/autoconf.h, its timestamp is
# updated, but the contents might be still the same. When any CONFIG option is # updated, but the contents might be still the same. When any CONFIG option is
...@@ -42,7 +42,7 @@ all_dirs="$all_dirs $dir_list" ...@@ -42,7 +42,7 @@ all_dirs="$all_dirs $dir_list"
# #
# Ignore them for md5 calculation to avoid pointless regeneration. # Ignore them for md5 calculation to avoid pointless regeneration.
headers_md5="$(find $all_dirs -name "*.h" | headers_md5="$(find $all_dirs -name "*.h" |
grep -v "include/generated/compile.h" | grep -v "include/generated/utsversion.h" |
grep -v "include/generated/autoconf.h" | grep -v "include/generated/autoconf.h" |
xargs ls -l | md5sum | cut -d ' ' -f1)" xargs ls -l | md5sum | cut -d ' ' -f1)"
......
...@@ -343,12 +343,16 @@ config LZ4HC_COMPRESS ...@@ -343,12 +343,16 @@ config LZ4HC_COMPRESS
config LZ4_DECOMPRESS config LZ4_DECOMPRESS
tristate tristate
config ZSTD_COMPRESS config ZSTD_COMMON
select XXHASH select XXHASH
tristate tristate
config ZSTD_COMPRESS
select ZSTD_COMMON
tristate
config ZSTD_DECOMPRESS config ZSTD_DECOMPRESS
select XXHASH select ZSTD_COMMON
tristate tristate
source "lib/xz/Kconfig" source "lib/xz/Kconfig"
......
...@@ -10,14 +10,10 @@ ...@@ -10,14 +10,10 @@
# ################################################################ # ################################################################
obj-$(CONFIG_ZSTD_COMPRESS) += zstd_compress.o obj-$(CONFIG_ZSTD_COMPRESS) += zstd_compress.o
obj-$(CONFIG_ZSTD_DECOMPRESS) += zstd_decompress.o obj-$(CONFIG_ZSTD_DECOMPRESS) += zstd_decompress.o
obj-$(CONFIG_ZSTD_COMMON) += zstd_common.o
zstd_compress-y := \ zstd_compress-y := \
zstd_compress_module.o \ zstd_compress_module.o \
common/debug.o \
common/entropy_common.o \
common/error_private.o \
common/fse_decompress.o \
common/zstd_common.o \
compress/fse_compress.o \ compress/fse_compress.o \
compress/hist.o \ compress/hist.o \
compress/huf_compress.o \ compress/huf_compress.o \
...@@ -33,12 +29,14 @@ zstd_compress-y := \ ...@@ -33,12 +29,14 @@ zstd_compress-y := \
zstd_decompress-y := \ zstd_decompress-y := \
zstd_decompress_module.o \ zstd_decompress_module.o \
decompress/huf_decompress.o \
decompress/zstd_ddict.o \
decompress/zstd_decompress.o \
decompress/zstd_decompress_block.o \
zstd_common-y := \
common/debug.o \ common/debug.o \
common/entropy_common.o \ common/entropy_common.o \
common/error_private.o \ common/error_private.o \
common/fse_decompress.o \ common/fse_decompress.o \
common/zstd_common.o \ common/zstd_common.o \
decompress/huf_decompress.o \
decompress/zstd_ddict.o \
decompress/zstd_decompress.o \
decompress/zstd_decompress_block.o \
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
/* ************************************* /* *************************************
* Dependencies * Dependencies
***************************************/ ***************************************/
#include <linux/module.h>
#include "mem.h" #include "mem.h"
#include "error_private.h" /* ERR_*, ERROR */ #include "error_private.h" /* ERR_*, ERROR */
#define FSE_STATIC_LINKING_ONLY /* FSE_MIN_TABLELOG */ #define FSE_STATIC_LINKING_ONLY /* FSE_MIN_TABLELOG */
...@@ -239,7 +240,7 @@ size_t FSE_readNCount( ...@@ -239,7 +240,7 @@ size_t FSE_readNCount(
{ {
return FSE_readNCount_bmi2(normalizedCounter, maxSVPtr, tableLogPtr, headerBuffer, hbSize, /* bmi2 */ 0); return FSE_readNCount_bmi2(normalizedCounter, maxSVPtr, tableLogPtr, headerBuffer, hbSize, /* bmi2 */ 0);
} }
EXPORT_SYMBOL_GPL(FSE_readNCount);
/*! HUF_readStats() : /*! HUF_readStats() :
Read compact Huffman tree, saved by HUF_writeCTable(). Read compact Huffman tree, saved by HUF_writeCTable().
...@@ -255,6 +256,7 @@ size_t HUF_readStats(BYTE* huffWeight, size_t hwSize, U32* rankStats, ...@@ -255,6 +256,7 @@ size_t HUF_readStats(BYTE* huffWeight, size_t hwSize, U32* rankStats,
U32 wksp[HUF_READ_STATS_WORKSPACE_SIZE_U32]; U32 wksp[HUF_READ_STATS_WORKSPACE_SIZE_U32];
return HUF_readStats_wksp(huffWeight, hwSize, rankStats, nbSymbolsPtr, tableLogPtr, src, srcSize, wksp, sizeof(wksp), /* bmi2 */ 0); return HUF_readStats_wksp(huffWeight, hwSize, rankStats, nbSymbolsPtr, tableLogPtr, src, srcSize, wksp, sizeof(wksp), /* bmi2 */ 0);
} }
EXPORT_SYMBOL_GPL(HUF_readStats);
FORCE_INLINE_TEMPLATE size_t FORCE_INLINE_TEMPLATE size_t
HUF_readStats_body(BYTE* huffWeight, size_t hwSize, U32* rankStats, HUF_readStats_body(BYTE* huffWeight, size_t hwSize, U32* rankStats,
...@@ -355,3 +357,4 @@ size_t HUF_readStats_wksp(BYTE* huffWeight, size_t hwSize, U32* rankStats, ...@@ -355,3 +357,4 @@ size_t HUF_readStats_wksp(BYTE* huffWeight, size_t hwSize, U32* rankStats,
(void)bmi2; (void)bmi2;
return HUF_readStats_body_default(huffWeight, hwSize, rankStats, nbSymbolsPtr, tableLogPtr, src, srcSize, workSpace, wkspSize); return HUF_readStats_body_default(huffWeight, hwSize, rankStats, nbSymbolsPtr, tableLogPtr, src, srcSize, workSpace, wkspSize);
} }
EXPORT_SYMBOL_GPL(HUF_readStats_wksp);
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
/*-************************************* /*-*************************************
* Dependencies * Dependencies
***************************************/ ***************************************/
#include <linux/module.h>
#define ZSTD_DEPS_NEED_MALLOC #define ZSTD_DEPS_NEED_MALLOC
#include "zstd_deps.h" /* ZSTD_malloc, ZSTD_calloc, ZSTD_free, ZSTD_memset */ #include "zstd_deps.h" /* ZSTD_malloc, ZSTD_calloc, ZSTD_free, ZSTD_memset */
#include "error_private.h" #include "error_private.h"
...@@ -35,14 +36,17 @@ const char* ZSTD_versionString(void) { return ZSTD_VERSION_STRING; } ...@@ -35,14 +36,17 @@ const char* ZSTD_versionString(void) { return ZSTD_VERSION_STRING; }
* tells if a return value is an error code * tells if a return value is an error code
* symbol is required for external callers */ * symbol is required for external callers */
unsigned ZSTD_isError(size_t code) { return ERR_isError(code); } unsigned ZSTD_isError(size_t code) { return ERR_isError(code); }
EXPORT_SYMBOL_GPL(ZSTD_isError);
/*! ZSTD_getErrorName() : /*! ZSTD_getErrorName() :
* provides error code string from function result (useful for debugging) */ * provides error code string from function result (useful for debugging) */
const char* ZSTD_getErrorName(size_t code) { return ERR_getErrorName(code); } const char* ZSTD_getErrorName(size_t code) { return ERR_getErrorName(code); }
EXPORT_SYMBOL_GPL(ZSTD_getErrorName);
/*! ZSTD_getError() : /*! ZSTD_getError() :
* convert a `size_t` function result into a proper ZSTD_errorCode enum */ * convert a `size_t` function result into a proper ZSTD_errorCode enum */
ZSTD_ErrorCode ZSTD_getErrorCode(size_t code) { return ERR_getErrorCode(code); } ZSTD_ErrorCode ZSTD_getErrorCode(size_t code) { return ERR_getErrorCode(code); }
EXPORT_SYMBOL_GPL(ZSTD_getErrorCode);
/*! ZSTD_getErrorString() : /*! ZSTD_getErrorString() :
* provides error code string from enum */ * provides error code string from enum */
...@@ -59,6 +63,7 @@ void* ZSTD_customMalloc(size_t size, ZSTD_customMem customMem) ...@@ -59,6 +63,7 @@ void* ZSTD_customMalloc(size_t size, ZSTD_customMem customMem)
return customMem.customAlloc(customMem.opaque, size); return customMem.customAlloc(customMem.opaque, size);
return ZSTD_malloc(size); return ZSTD_malloc(size);
} }
EXPORT_SYMBOL_GPL(ZSTD_customMalloc);
void* ZSTD_customCalloc(size_t size, ZSTD_customMem customMem) void* ZSTD_customCalloc(size_t size, ZSTD_customMem customMem)
{ {
...@@ -71,6 +76,7 @@ void* ZSTD_customCalloc(size_t size, ZSTD_customMem customMem) ...@@ -71,6 +76,7 @@ void* ZSTD_customCalloc(size_t size, ZSTD_customMem customMem)
} }
return ZSTD_calloc(1, size); return ZSTD_calloc(1, size);
} }
EXPORT_SYMBOL_GPL(ZSTD_customCalloc);
void ZSTD_customFree(void* ptr, ZSTD_customMem customMem) void ZSTD_customFree(void* ptr, ZSTD_customMem customMem)
{ {
...@@ -81,3 +87,7 @@ void ZSTD_customFree(void* ptr, ZSTD_customMem customMem) ...@@ -81,3 +87,7 @@ void ZSTD_customFree(void* ptr, ZSTD_customMem customMem)
ZSTD_free(ptr); ZSTD_free(ptr);
} }
} }
EXPORT_SYMBOL_GPL(ZSTD_customFree);
MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("Zstd Common");
...@@ -100,8 +100,29 @@ echo-cmd = $(if $($(quiet)cmd_$(1)),\ ...@@ -100,8 +100,29 @@ echo-cmd = $(if $($(quiet)cmd_$(1)),\
quiet_redirect := quiet_redirect :=
silent_redirect := exec >/dev/null; silent_redirect := exec >/dev/null;
# Delete the target on interruption
#
# GNU Make automatically deletes the target if it has already been changed by
# the interrupted recipe. So, you can safely stop the build by Ctrl-C (Make
# will delete incomplete targets), and resume it later.
#
# However, this does not work when the stderr is piped to another program, like
# $ make >&2 | tee log
# Make dies with SIGPIPE before cleaning the targets.
#
# To address it, we clean the target in signal traps.
#
# Make deletes the target when it catches SIGHUP, SIGINT, SIGQUIT, SIGTERM.
# So, we cover them, and also SIGPIPE just in case.
#
# Of course, this is unneeded for phony targets.
delete-on-interrupt = \
$(if $(filter-out $(PHONY), $@), \
$(foreach sig, HUP INT QUIT TERM PIPE, \
trap 'rm -f $@; trap - $(sig); kill -s $(sig) $$$$' $(sig);))
# printing commands # printing commands
cmd = @set -e; $(echo-cmd) $($(quiet)redirect) $(cmd_$(1)) cmd = @set -e; $(echo-cmd) $($(quiet)redirect) $(delete-on-interrupt) $(cmd_$(1))
### ###
# if_changed - execute command if any prerequisite is newer than # if_changed - execute command if any prerequisite is newer than
......
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
src := $(obj) src := $(obj)
PHONY := __build PHONY := $(obj)/
__build: $(obj)/:
# Init all relevant variables used in kbuild files so # Init all relevant variables used in kbuild files so
# 1) they have correct type # 1) they have correct type
...@@ -383,7 +383,7 @@ $(obj)/%.o: $(src)/%.S FORCE ...@@ -383,7 +383,7 @@ $(obj)/%.o: $(src)/%.S FORCE
targets += $(filter-out $(subdir-builtin), $(real-obj-y)) targets += $(filter-out $(subdir-builtin), $(real-obj-y))
targets += $(filter-out $(subdir-modorder), $(real-obj-m)) targets += $(filter-out $(subdir-modorder), $(real-obj-m))
targets += $(real-dtb-y) $(lib-y) $(always-y) $(MAKECMDGOALS) targets += $(real-dtb-y) $(lib-y) $(always-y)
# Linker scripts preprocessor (.lds.S -> .lds) # Linker scripts preprocessor (.lds.S -> .lds)
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
...@@ -434,7 +434,7 @@ $(obj)/built-in.a: $(real-obj-y) FORCE ...@@ -434,7 +434,7 @@ $(obj)/built-in.a: $(real-obj-y) FORCE
cmd_modules_order = { $(foreach m, $(real-prereqs), \ cmd_modules_order = { $(foreach m, $(real-prereqs), \
$(if $(filter %/modules.order, $m), cat $m, echo $(patsubst %.o,%.ko,$m));) :; } \ $(if $(filter %/modules.order, $m), cat $m, echo $(patsubst %.o,%.ko,$m));) :; } \
| $(AWK) '!x[$$0]++' - > $@ > $@
$(obj)/modules.order: $(obj-m) FORCE $(obj)/modules.order: $(obj-m) FORCE
$(call if_changed,modules_order) $(call if_changed,modules_order)
...@@ -460,8 +460,6 @@ $(multi-obj-m): %.o: %.mod FORCE ...@@ -460,8 +460,6 @@ $(multi-obj-m): %.o: %.mod FORCE
$(call if_changed_rule,ld_multi_m) $(call if_changed_rule,ld_multi_m)
$(call multi_depend, $(multi-obj-m), .o, -objs -y -m) $(call multi_depend, $(multi-obj-m), .o, -objs -y -m)
targets := $(filter-out $(PHONY), $(targets))
# Add intermediate targets: # Add intermediate targets:
# When building objects with specific suffix patterns, add intermediate # When building objects with specific suffix patterns, add intermediate
# targets that the final targets are derived from. # targets that the final targets are derived from.
...@@ -480,52 +478,29 @@ targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \ ...@@ -480,52 +478,29 @@ targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \
# Build # Build
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
ifdef single-build $(obj)/: $(if $(KBUILD_BUILTIN), $(targets-for-builtin)) \
$(if $(KBUILD_MODULES), $(targets-for-modules)) \
KBUILD_SINGLE_TARGETS := $(filter $(obj)/%, $(KBUILD_SINGLE_TARGETS)) $(subdir-ym) $(always-y)
curdir-single := $(sort $(foreach x, $(KBUILD_SINGLE_TARGETS), \
$(if $(filter $(x) $(basename $(x)).o, $(targets)), $(x))))
# Handle single targets without any rule: show "Nothing to be done for ..." or
# "No rule to make target ..." depending on whether the target exists.
unknown-single := $(filter-out $(addsuffix /%, $(subdir-ym)), \
$(filter-out $(curdir-single), $(KBUILD_SINGLE_TARGETS)))
single-subdirs := $(foreach d, $(subdir-ym), \
$(if $(filter $(d)/%, $(KBUILD_SINGLE_TARGETS)), $(d)))
__build: $(curdir-single) $(single-subdirs)
ifneq ($(unknown-single),)
$(Q)$(MAKE) -f /dev/null $(unknown-single)
endif
@: @:
ifeq ($(curdir-single),) # Single targets
# Nothing to do in this directory. Do not include any .*.cmd file for speed-up # ---------------------------------------------------------------------------
targets :=
else
targets += $(curdir-single)
endif
else single-subdirs := $(foreach d, $(subdir-ym), $(if $(filter $d/%, $(MAKECMDGOALS)), $d))
single-subdir-goals := $(filter $(addsuffix /%, $(single-subdirs)), $(MAKECMDGOALS))
__build: $(if $(KBUILD_BUILTIN), $(targets-for-builtin)) \ $(single-subdir-goals): $(single-subdirs)
$(if $(KBUILD_MODULES), $(targets-for-modules)) \
$(subdir-ym) $(always-y)
@: @:
endif
# Descending # Descending
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
PHONY += $(subdir-ym) PHONY += $(subdir-ym)
$(subdir-ym): $(subdir-ym):
$(Q)$(MAKE) $(build)=$@ \ $(Q)$(MAKE) $(build)=$@ \
$(if $(filter $@/, $(KBUILD_SINGLE_TARGETS)),single-build=) \
need-builtin=$(if $(filter $@/built-in.a, $(subdir-builtin)),1) \ need-builtin=$(if $(filter $@/built-in.a, $(subdir-builtin)),1) \
need-modorder=$(if $(filter $@/modules.order, $(subdir-modorder)),1) need-modorder=$(if $(filter $@/modules.order, $(subdir-modorder)),1) \
$(filter $@/%, $(single-subdir-goals))
# Add FORCE to the prequisites of a target to force it to be always rebuilt. # Add FORCE to the prequisites of a target to force it to be always rebuilt.
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
...@@ -534,6 +509,9 @@ PHONY += FORCE ...@@ -534,6 +509,9 @@ PHONY += FORCE
FORCE: FORCE:
targets += $(filter-out $(single-subdir-goals), $(MAKECMDGOALS))
targets := $(filter-out $(PHONY), $(targets))
# Read all saved command lines and dependencies for the $(targets) we # Read all saved command lines and dependencies for the $(targets) we
# may be building above, using $(if_changed{,_dep}). As an # may be building above, using $(if_changed{,_dep}). As an
# optimization, we don't need to read them if the target does not # optimization, we don't need to read them if the target does not
......
...@@ -61,9 +61,13 @@ cc-option-yn = $(call try-run,\ ...@@ -61,9 +61,13 @@ cc-option-yn = $(call try-run,\
cc-disable-warning = $(call try-run,\ cc-disable-warning = $(call try-run,\
$(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1))) $(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
# cc-ifversion # gcc-min-version
# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1) # Usage: cflags-$(call gcc-min-version, 70100) += -foo
cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4)) gcc-min-version = $(shell [ $(CONFIG_GCC_VERSION)0 -ge $(1)0 ] && echo y)
# clang-min-version
# Usage: cflags-$(call clang-min-version, 110000) += -foo
clang-min-version = $(shell [ $(CONFIG_CLANG_VERSION)0 -ge $(1)0 ] && echo y)
# ld-option # ld-option
# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y) # Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
......
...@@ -48,7 +48,7 @@ else ...@@ -48,7 +48,7 @@ else
ifdef CONFIG_CC_IS_CLANG ifdef CONFIG_CC_IS_CLANG
KBUILD_CFLAGS += -Wno-initializer-overrides KBUILD_CFLAGS += -Wno-initializer-overrides
# Clang before clang-16 would warn on default argument promotions. # Clang before clang-16 would warn on default argument promotions.
ifeq ($(shell [ $(CONFIG_CLANG_VERSION) -lt 160000 ] && echo y),y) ifneq ($(call clang-min-version, 160000),y)
# Disable -Wformat # Disable -Wformat
KBUILD_CFLAGS += -Wno-format KBUILD_CFLAGS += -Wno-format
# Then re-enable flags that were part of the -Wformat group that aren't # Then re-enable flags that were part of the -Wformat group that aren't
...@@ -56,7 +56,7 @@ KBUILD_CFLAGS += -Wno-format ...@@ -56,7 +56,7 @@ KBUILD_CFLAGS += -Wno-format
KBUILD_CFLAGS += -Wformat-extra-args -Wformat-invalid-specifier KBUILD_CFLAGS += -Wformat-extra-args -Wformat-invalid-specifier
KBUILD_CFLAGS += -Wformat-zero-length -Wnonnull KBUILD_CFLAGS += -Wformat-zero-length -Wnonnull
# Requires clang-12+. # Requires clang-12+.
ifeq ($(shell [ $(CONFIG_CLANG_VERSION) -ge 120000 ] && echo y),y) ifeq ($(call clang-min-version, 120000),y)
KBUILD_CFLAGS += -Wformat-insufficient-args KBUILD_CFLAGS += -Wformat-insufficient-args
endif endif
endif endif
......
...@@ -90,6 +90,7 @@ always-y += $(dtb-y) ...@@ -90,6 +90,7 @@ always-y += $(dtb-y)
# Add subdir path # Add subdir path
ifneq ($(obj),.)
extra-y := $(addprefix $(obj)/,$(extra-y)) extra-y := $(addprefix $(obj)/,$(extra-y))
always-y := $(addprefix $(obj)/,$(always-y)) always-y := $(addprefix $(obj)/,$(always-y))
targets := $(addprefix $(obj)/,$(targets)) targets := $(addprefix $(obj)/,$(targets))
...@@ -101,6 +102,7 @@ multi-obj-m := $(addprefix $(obj)/, $(multi-obj-m)) ...@@ -101,6 +102,7 @@ multi-obj-m := $(addprefix $(obj)/, $(multi-obj-m))
multi-dtb-y := $(addprefix $(obj)/, $(multi-dtb-y)) multi-dtb-y := $(addprefix $(obj)/, $(multi-dtb-y))
real-dtb-y := $(addprefix $(obj)/, $(real-dtb-y)) real-dtb-y := $(addprefix $(obj)/, $(real-dtb-y))
subdir-ym := $(addprefix $(obj)/,$(subdir-ym)) subdir-ym := $(addprefix $(obj)/,$(subdir-ym))
endif
# Finds the multi-part object the current object will be linked into. # Finds the multi-part object the current object will be linked into.
# If the object belongs to two or more multi-part objects, list them all. # If the object belongs to two or more multi-part objects, list them all.
...@@ -241,25 +243,26 @@ ifdef CONFIG_OBJTOOL ...@@ -241,25 +243,26 @@ ifdef CONFIG_OBJTOOL
objtool := $(objtree)/tools/objtool/objtool objtool := $(objtree)/tools/objtool/objtool
objtool_args = \ objtool-args-$(CONFIG_HAVE_JUMP_LABEL_HACK) += --hacks=jump_label
$(if $(CONFIG_HAVE_JUMP_LABEL_HACK), --hacks=jump_label) \ objtool-args-$(CONFIG_HAVE_NOINSTR_HACK) += --hacks=noinstr
$(if $(CONFIG_HAVE_NOINSTR_HACK), --hacks=noinstr) \ objtool-args-$(CONFIG_X86_KERNEL_IBT) += --ibt
$(if $(CONFIG_X86_KERNEL_IBT), --ibt) \ objtool-args-$(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL) += --mcount
$(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount) \ objtool-args-$(CONFIG_UNWINDER_ORC) += --orc
$(if $(CONFIG_UNWINDER_ORC), --orc) \ objtool-args-$(CONFIG_RETPOLINE) += --retpoline
$(if $(CONFIG_RETPOLINE), --retpoline) \ objtool-args-$(CONFIG_RETHUNK) += --rethunk
$(if $(CONFIG_RETHUNK), --rethunk) \ objtool-args-$(CONFIG_SLS) += --sls
$(if $(CONFIG_SLS), --sls) \ objtool-args-$(CONFIG_STACK_VALIDATION) += --stackval
$(if $(CONFIG_STACK_VALIDATION), --stackval) \ objtool-args-$(CONFIG_HAVE_STATIC_CALL_INLINE) += --static-call
$(if $(CONFIG_HAVE_STATIC_CALL_INLINE), --static-call) \ objtool-args-$(CONFIG_HAVE_UACCESS_VALIDATION) += --uaccess
$(if $(CONFIG_HAVE_UACCESS_VALIDATION), --uaccess) \ objtool-args-$(CONFIG_GCOV_KERNEL) += --no-unreachable
objtool-args = $(objtool-args-y) \
$(if $(delay-objtool), --link) \ $(if $(delay-objtool), --link) \
$(if $(part-of-module), --module) \ $(if $(part-of-module), --module)
$(if $(CONFIG_GCOV_KERNEL), --no-unreachable)
delay-objtool := $(or $(CONFIG_LTO_CLANG),$(CONFIG_X86_KERNEL_IBT)) delay-objtool := $(or $(CONFIG_LTO_CLANG),$(CONFIG_X86_KERNEL_IBT))
cmd_objtool = $(if $(objtool-enabled), ; $(objtool) $(objtool_args) $@) cmd_objtool = $(if $(objtool-enabled), ; $(objtool) $(objtool-args) $@)
cmd_gen_objtooldep = $(if $(objtool-enabled), { echo ; echo '$@: $$(wildcard $(objtool))' ; } >> $(dot-target).cmd) cmd_gen_objtooldep = $(if $(objtool-enabled), { echo ; echo '$@: $$(wildcard $(objtool))' ; } >> $(dot-target).cmd)
endif # CONFIG_OBJTOOL endif # CONFIG_OBJTOOL
......
...@@ -57,7 +57,7 @@ if_changed_except = $(if $(call newer_prereqs_except,$(2))$(cmd-check), \ ...@@ -57,7 +57,7 @@ if_changed_except = $(if $(call newer_prereqs_except,$(2))$(cmd-check), \
printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:) printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:)
# Re-generate module BTFs if either module's .ko or vmlinux changed # Re-generate module BTFs if either module's .ko or vmlinux changed
$(modules): %.ko: %.o %.mod.o scripts/module.lds $(if $(KBUILD_BUILTIN),vmlinux) FORCE $(modules): %.ko: %.o %.mod.o scripts/module.lds $(and $(CONFIG_DEBUG_INFO_BTF_MODULES),$(KBUILD_BUILTIN),vmlinux) FORCE
+$(call if_changed_except,ld_ko_o,vmlinux) +$(call if_changed_except,ld_ko_o,vmlinux)
ifdef CONFIG_DEBUG_INFO_BTF_MODULES ifdef CONFIG_DEBUG_INFO_BTF_MODULES
+$(if $(newer-prereqs),$(call cmd,btf_ko)) +$(if $(newer-prereqs),$(call cmd,btf_ko))
......
...@@ -32,49 +32,58 @@ ...@@ -32,49 +32,58 @@
# Step 4 is solely used to allow module versioning in external modules, # Step 4 is solely used to allow module versioning in external modules,
# where the CRC of each module is retrieved from the Module.symvers file. # where the CRC of each module is retrieved from the Module.symvers file.
# KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules.
# This is solely useful to speed up test compiles
PHONY := __modpost PHONY := __modpost
__modpost: __modpost:
include include/config/auto.conf include include/config/auto.conf
include $(srctree)/scripts/Kbuild.include include $(srctree)/scripts/Kbuild.include
MODPOST = scripts/mod/modpost \ modpost-args = \
$(if $(CONFIG_MODVERSIONS),-m) \ $(if $(CONFIG_MODVERSIONS),-m) \
$(if $(CONFIG_MODULE_SRCVERSION_ALL),-a) \ $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a) \
$(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \ $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \
$(if $(KBUILD_NSDEPS),-d $(MODULES_NSDEPS)) \
$(if $(CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS)$(KBUILD_NSDEPS),-N) \
-o $@ -o $@
ifdef MODPOST_VMLINUX # 'make -i -k' ignores compile errors, and builds as many modules as possible.
ifneq ($(findstring i,$(filter-out --%,$(MAKEFLAGS))),)
quiet_cmd_modpost = MODPOST $@ modpost-args += -n
cmd_modpost = $(MODPOST) $< endif
vmlinux.symvers: vmlinux.o
$(call cmd,modpost)
__modpost: vmlinux.symvers
else
ifeq ($(KBUILD_EXTMOD),) ifeq ($(KBUILD_EXTMOD),)
input-symdump := vmlinux.symvers # Generate the list of in-tree objects in vmlinux
output-symdump := modules-only.symvers # ---------------------------------------------------------------------------
quiet_cmd_cat = GEN $@
cmd_cat = cat $(real-prereqs) > $@
ifneq ($(wildcard vmlinux.symvers),) # This is used to retrieve symbol versions generated by genksyms.
ifdef CONFIG_MODVERSIONS
__modpost: Module.symvers vmlinux.symvers Module.symvers: .vmlinux.objs
Module.symvers: vmlinux.symvers modules-only.symvers FORCE endif
$(call if_changed,cat)
targets += Module.symvers
# Ignore libgcc.a
# Some architectures do '$(CC) --print-libgcc-file-name' to borrow libgcc.a
# from the toolchain, but there is no EXPORT_SYMBOL in it.
quiet_cmd_vmlinux_objs = GEN $@
cmd_vmlinux_objs = \
for f in $(real-prereqs); do \
case $${f} in \
*libgcc.a) ;; \
*) $(AR) t $${f} ;; \
esac \
done > $@
targets += .vmlinux.objs
.vmlinux.objs: vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
$(call if_changed,vmlinux_objs)
vmlinux.o-if-present := $(wildcard vmlinux.o)
output-symdump := vmlinux.symvers
ifdef KBUILD_MODULES
output-symdump := $(if $(vmlinux.o-if-present), Module.symvers, modules-only.symvers)
missing-input := $(filter-out $(vmlinux.o-if-present),vmlinux.o)
endif endif
else else
...@@ -86,54 +95,37 @@ src := $(obj) ...@@ -86,54 +95,37 @@ src := $(obj)
# Include the module's Makefile to find KBUILD_EXTRA_SYMBOLS # Include the module's Makefile to find KBUILD_EXTRA_SYMBOLS
include $(or $(wildcard $(src)/Kbuild), $(src)/Makefile) include $(or $(wildcard $(src)/Kbuild), $(src)/Makefile)
# modpost option for external modules module.symvers-if-present := $(wildcard Module.symvers)
MODPOST += -e
input-symdump := Module.symvers $(KBUILD_EXTRA_SYMBOLS)
output-symdump := $(KBUILD_EXTMOD)/Module.symvers output-symdump := $(KBUILD_EXTMOD)/Module.symvers
missing-input := $(filter-out $(module.symvers-if-present), Module.symvers)
endif modpost-args += -e $(addprefix -i ,$(module.symvers-if-present) $(KBUILD_EXTRA_SYMBOLS))
existing-input-symdump := $(wildcard $(input-symdump))
# modpost options for modules (both in-kernel and external) endif # ($(KBUILD_EXTMOD),)
MODPOST += \
$(addprefix -i ,$(existing-input-symdump)) \
$(if $(KBUILD_NSDEPS),-d $(MODULES_NSDEPS)) \
$(if $(CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS)$(KBUILD_NSDEPS),-N)
# 'make -i -k' ignores compile errors, and builds as many modules as possible. ifneq ($(KBUILD_MODPOST_WARN)$(missing-input),)
ifneq ($(findstring i,$(filter-out --%,$(MAKEFLAGS))),) modpost-args += -w
MODPOST += -n
endif endif
# Clear VPATH to not search for *.symvers in $(srctree). Check only $(objtree). modorder-if-needed := $(if $(KBUILD_MODULES), $(MODORDER))
VPATH :=
$(input-symdump):
@echo >&2 'WARNING: Symbol version dump "$@" is missing.'
@echo >&2 ' Modules may not have dependencies or modversions.'
@echo >&2 ' You may get many unresolved symbol warnings.'
# KBUILD_MODPOST_WARN can be set to avoid error out in case of undefined symbols MODPOST = scripts/mod/modpost
ifneq ($(KBUILD_MODPOST_WARN)$(filter-out $(existing-input-symdump), $(input-symdump)),)
MODPOST += -w
endif
# Read out modules.order to pass in modpost. # Read out modules.order to pass in modpost.
# Otherwise, allmodconfig would fail with "Argument list too long". # Otherwise, allmodconfig would fail with "Argument list too long".
quiet_cmd_modpost = MODPOST $@ quiet_cmd_modpost = MODPOST $@
cmd_modpost = sed 's/ko$$/o/' $< | $(MODPOST) -T - cmd_modpost = \
$(if $(missing-input), \
$(output-symdump): $(MODORDER) $(input-symdump) FORCE echo >&2 "WARNING: $(missing-input) is missing."; \
$(call if_changed,modpost) echo >&2 " Modules may not have dependencies or modversions."; \
echo >&2 " You may get many unresolved symbol warnings.";) \
sed 's/ko$$/o/' $(or $(modorder-if-needed), /dev/null) | $(MODPOST) $(modpost-args) $(vmlinux.o-if-present) -T -
targets += $(output-symdump) targets += $(output-symdump)
$(output-symdump): $(modorder-if-needed) $(vmlinux.o-if-present) $(moudle.symvers-if-present) $(MODPOST) FORCE
$(call if_changed,modpost)
__modpost: $(output-symdump) __modpost: $(output-symdump)
ifneq ($(KBUILD_MODPOST_NOFINAL),1)
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modfinal
endif
PHONY += FORCE PHONY += FORCE
FORCE: FORCE:
...@@ -141,6 +133,4 @@ existing-targets := $(wildcard $(sort $(targets))) ...@@ -141,6 +133,4 @@ existing-targets := $(wildcard $(sort $(targets)))
-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd) -include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
endif
.PHONY: $(PHONY) .PHONY: $(PHONY)
...@@ -29,7 +29,10 @@ KDEB_SOURCENAME ?= linux-upstream ...@@ -29,7 +29,10 @@ KDEB_SOURCENAME ?= linux-upstream
KBUILD_PKG_ROOTCMD ?="fakeroot -u" KBUILD_PKG_ROOTCMD ?="fakeroot -u"
export KDEB_SOURCENAME export KDEB_SOURCENAME
# Include only those top-level files that are needed by make, plus the GPL copy # Include only those top-level files that are needed by make, plus the GPL copy
TAR_CONTENT := $(KBUILD_ALLDIRS) .config .scmversion Makefile \ TAR_CONTENT := Documentation LICENSES arch block certs crypto drivers fs \
include init io_uring ipc kernel lib mm net samples scripts \
security sound tools usr virt \
.config .scmversion Makefile \
Kbuild Kconfig COPYING $(wildcard localversion*) Kbuild Kconfig COPYING $(wildcard localversion*)
MKSPEC := $(srctree)/scripts/package/mkspec MKSPEC := $(srctree)/scripts/package/mkspec
......
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-2.0-only
PHONY := __default
__default: vmlinux
include include/config/auto.conf include include/config/auto.conf
include $(srctree)/scripts/Kbuild.include include $(srctree)/scripts/Kbuild.include
# for c_flags # for c_flags
include $(srctree)/scripts/Makefile.lib include $(srctree)/scripts/Makefile.lib
targets :=
quiet_cmd_cc_o_c = CC $@ quiet_cmd_cc_o_c = CC $@
cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
%.o: %.c FORCE %.o: %.c FORCE
$(call if_changed_dep,cc_o_c) $(call if_changed_dep,cc_o_c)
targets := $(MAKECMDGOALS) ifdef CONFIG_MODULES
targets += .vmlinux.export.o
vmlinux: .vmlinux.export.o
endif
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
# Final link of vmlinux with optional arch pass after final link
cmd_link_vmlinux = \
$< "$(LD)" "$(KBUILD_LDFLAGS)" "$(LDFLAGS_vmlinux)"; \
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
targets += vmlinux
vmlinux: scripts/link-vmlinux.sh vmlinux.o $(KBUILD_LDS) FORCE
+$(call if_changed_dep,link_vmlinux)
# Add FORCE to the prequisites of a target to force it to be always rebuilt. # Add FORCE to the prequisites of a target to force it to be always rebuilt.
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
......
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-2.0-only
PHONY := __default PHONY := __default
__default: vmlinux.o __default: vmlinux.o modules.builtin.modinfo modules.builtin
include include/config/auto.conf include include/config/auto.conf
include $(srctree)/scripts/Kbuild.include include $(srctree)/scripts/Kbuild.include
...@@ -18,7 +18,7 @@ quiet_cmd_gen_initcalls_lds = GEN $@ ...@@ -18,7 +18,7 @@ quiet_cmd_gen_initcalls_lds = GEN $@
$(PERL) $(real-prereqs) > $@ $(PERL) $(real-prereqs) > $@
.tmp_initcalls.lds: $(srctree)/scripts/generate_initcall_order.pl \ .tmp_initcalls.lds: $(srctree)/scripts/generate_initcall_order.pl \
$(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS) FORCE vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
$(call if_changed,gen_initcalls_lds) $(call if_changed,gen_initcalls_lds)
targets := .tmp_initcalls.lds targets := .tmp_initcalls.lds
...@@ -35,18 +35,11 @@ endif ...@@ -35,18 +35,11 @@ endif
objtool-enabled := $(or $(delay-objtool),$(CONFIG_NOINSTR_VALIDATION)) objtool-enabled := $(or $(delay-objtool),$(CONFIG_NOINSTR_VALIDATION))
# Reuse objtool_args defined in scripts/Makefile.lib if LTO or IBT is enabled. vmlinux-objtool-args-$(delay-objtool) += $(objtool-args-y)
# vmlinux-objtool-args-$(CONFIG_GCOV_KERNEL) += --no-unreachable
# Add some more flags as needed. vmlinux-objtool-args-$(CONFIG_NOINSTR_VALIDATION) += --noinstr $(if $(CONFIG_CPU_UNRET_ENTRY), --unret)
# --no-unreachable and --link might be added twice, but it is fine.
#
# Expand objtool_args to a simple variable to avoid circular reference.
objtool_args := \ objtool-args = $(vmlinux-objtool-args-y) --link
$(if $(delay-objtool),$(objtool_args)) \
$(if $(CONFIG_NOINSTR_VALIDATION), --noinstr $(if $(CONFIG_CPU_UNRET_ENTRY), --unret)) \
$(if $(CONFIG_GCOV_KERNEL), --no-unreachable) \
--link
# Link of vmlinux.o used for section mismatch analysis # Link of vmlinux.o used for section mismatch analysis
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
...@@ -55,7 +48,7 @@ quiet_cmd_ld_vmlinux.o = LD $@ ...@@ -55,7 +48,7 @@ quiet_cmd_ld_vmlinux.o = LD $@
cmd_ld_vmlinux.o = \ cmd_ld_vmlinux.o = \
$(LD) ${KBUILD_LDFLAGS} -r -o $@ \ $(LD) ${KBUILD_LDFLAGS} -r -o $@ \
$(addprefix -T , $(initcalls-lds)) \ $(addprefix -T , $(initcalls-lds)) \
--whole-archive $(KBUILD_VMLINUX_OBJS) --no-whole-archive \ --whole-archive vmlinux.a --no-whole-archive \
--start-group $(KBUILD_VMLINUX_LIBS) --end-group \ --start-group $(KBUILD_VMLINUX_LIBS) --end-group \
$(cmd_objtool) $(cmd_objtool)
...@@ -64,11 +57,35 @@ define rule_ld_vmlinux.o ...@@ -64,11 +57,35 @@ define rule_ld_vmlinux.o
$(call cmd,gen_objtooldep) $(call cmd,gen_objtooldep)
endef endef
vmlinux.o: $(initcalls-lds) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS) FORCE vmlinux.o: $(initcalls-lds) vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
$(call if_changed_rule,ld_vmlinux.o) $(call if_changed_rule,ld_vmlinux.o)
targets += vmlinux.o targets += vmlinux.o
# module.builtin.modinfo
# ---------------------------------------------------------------------------
OBJCOPYFLAGS_modules.builtin.modinfo := -j .modinfo -O binary
targets += modules.builtin.modinfo
modules.builtin.modinfo: vmlinux.o FORCE
$(call if_changed,objcopy)
# module.builtin
# ---------------------------------------------------------------------------
# The second line aids cases where multiple modules share the same object.
quiet_cmd_modules_builtin = GEN $@
cmd_modules_builtin = \
tr '\0' '\n' < $< | \
sed -n 's/^[[:alnum:]:_]*\.file=//p' | \
tr ' ' '\n' | uniq | sed -e 's:^:kernel/:' -e 's/$$/.ko/' > $@
targets += modules.builtin
modules.builtin: modules.builtin.modinfo FORCE
$(call if_changed,modules_builtin)
# Add FORCE to the prequisites of a target to force it to be always rebuilt. # Add FORCE to the prequisites of a target to force it to be always rebuilt.
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
......
...@@ -832,7 +832,7 @@ static void parse(void) ...@@ -832,7 +832,7 @@ static void parse(void)
static struct element *element_list; static struct element *element_list;
static struct element *alloc_elem(struct token *type) static struct element *alloc_elem(void)
{ {
struct element *e = calloc(1, sizeof(*e)); struct element *e = calloc(1, sizeof(*e));
if (!e) { if (!e) {
...@@ -860,7 +860,7 @@ static struct element *parse_type(struct token **_cursor, struct token *end, ...@@ -860,7 +860,7 @@ static struct element *parse_type(struct token **_cursor, struct token *end,
char *p; char *p;
int labelled = 0, implicit = 0; int labelled = 0, implicit = 0;
top = element = alloc_elem(cursor); top = element = alloc_elem();
element->class = ASN1_UNIV; element->class = ASN1_UNIV;
element->method = ASN1_PRIM; element->method = ASN1_PRIM;
element->tag = token_to_tag[cursor->token_type]; element->tag = token_to_tag[cursor->token_type];
...@@ -939,7 +939,7 @@ static struct element *parse_type(struct token **_cursor, struct token *end, ...@@ -939,7 +939,7 @@ static struct element *parse_type(struct token **_cursor, struct token *end,
if (!implicit) if (!implicit)
element->method |= ASN1_CONS; element->method |= ASN1_CONS;
element->compound = implicit ? TAG_OVERRIDE : SEQUENCE; element->compound = implicit ? TAG_OVERRIDE : SEQUENCE;
element->children = alloc_elem(cursor); element->children = alloc_elem();
element = element->children; element = element->children;
element->class = ASN1_UNIV; element->class = ASN1_UNIV;
element->method = ASN1_PRIM; element->method = ASN1_PRIM;
......
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
#
# Check if atomic headers are up-to-date
ATOMICDIR=$(dirname $0)
ATOMICTBL=${ATOMICDIR}/atomics.tbl
LINUXDIR=${ATOMICDIR}/../..
echo '' | sha1sum - > /dev/null 2>&1
if [ $? -ne 0 ]; then
printf "sha1sum not available, skipping atomic header checks.\n"
exit 0
fi
cat <<EOF |
linux/atomic/atomic-instrumented.h
linux/atomic/atomic-long.h
linux/atomic/atomic-arch-fallback.h
EOF
while read header; do
OLDSUM="$(tail -n 1 ${LINUXDIR}/include/${header})"
OLDSUM="${OLDSUM#// }"
NEWSUM="$(sed '$d' ${LINUXDIR}/include/${header} | sha1sum)"
NEWSUM="${NEWSUM%% *}"
if [ "${OLDSUM}" != "${NEWSUM}" ]; then
printf "warning: generated include/${header} has been modified.\n"
fi
done
exit 0
#!/usr/bin/env bash #!/bin/sh
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-2.0-only
# #
# Copyright (C) 2022 Masahiro Yamada <masahiroy@kernel.org> # Copyright (C) 2022 Masahiro Yamada <masahiroy@kernel.org>
# Copyright (C) 2022 Owen Rafferty <owen@owenrafferty.com>
# #
# Exit with error if a local exported symbol is found. # Exit with error if a local exported symbol is found.
# EXPORT_SYMBOL should be used for global symbols. # EXPORT_SYMBOL should be used for global symbols.
set -e set -e
pid=$$
# catch errors from ${NM}
set -o pipefail
# Run the last element of a pipeline in the current shell.
# Without this, the while-loop would be executed in a subshell, and
# the changes made to 'symbol_types' and 'export_symbols' would be lost.
shopt -s lastpipe
declare -A symbol_types
declare -a export_symbols
exit_code=0
# If there is no symbol in the object, ${NM} (both GNU nm and llvm-nm) shows # If there is no symbol in the object, ${NM} (both GNU nm and llvm-nm) shows
# 'no symbols' diagnostic (but exits with 0). It is harmless and hidden by # 'no symbols' diagnostic (but exits with 0). It is harmless and hidden by
...@@ -29,43 +18,53 @@ exit_code=0 ...@@ -29,43 +18,53 @@ exit_code=0
# TODO: # TODO:
# Use --quiet instead of 2>/dev/null when we upgrade the minimum version of # Use --quiet instead of 2>/dev/null when we upgrade the minimum version of
# binutils to 2.37, llvm to 13.0.0. # binutils to 2.37, llvm to 13.0.0.
# Then, the following line will be really simple: # Then, the following line will be simpler:
# ${NM} --quiet ${1} | # { ${NM} --quiet ${1} || kill 0; } |
{ ${NM} ${1} 2>/dev/null || { echo "${0}: ${NM} failed" >&2; kill $pid; } } |
${AWK} -v "file=${1}" '
BEGIN {
i = 0
}
# Skip the line if the number of fields is less than 3.
#
# case 1)
# For undefined symbols, the first field (value) is empty.
# The outout looks like this:
# " U _printk"
# It is unneeded to record undefined symbols.
#
# case 2)
# For Clang LTO, llvm-nm outputs a line with type t but empty name:
# "---------------- t"
!length($3) {
next
}
{ ${NM} ${1} 2>/dev/null || { echo "${0}: ${NM} failed" >&2; false; } } | # save (name, type) in the associative array
while read value type name { symbol_types[$3]=$2 }
do
# Skip the line if the number of fields is less than 3.
#
# case 1)
# For undefined symbols, the first field (value) is empty.
# The outout looks like this:
# " U _printk"
# It is unneeded to record undefined symbols.
#
# case 2)
# For Clang LTO, llvm-nm outputs a line with type 't' but empty name:
# "---------------- t"
if [[ -z ${name} ]]; then
continue
fi
# save (name, type) in the associative array # append the exported symbol to the array
symbol_types[${name}]=${type} ($3 ~ /^__ksymtab_/) {
export_symbols[i] = $3
sub(/^__ksymtab_/, "", export_symbols[i])
i++
}
# append the exported symbol to the array END {
if [[ ${name} == __ksymtab_* ]]; then exit_code = 0
export_symbols+=(${name#__ksymtab_}) for (j = 0; j < i; ++j) {
fi name = export_symbols[j]
done # nm(3) says "If lowercase, the symbol is usually local"
if (symbol_types[name] ~ /[a-z]/) {
printf "%s: error: local symbol %s was exported\n",
file, name | "cat 1>&2"
exit_code = 1
}
}
for name in "${export_symbols[@]}" exit exit_code
do }'
# nm(3) says "If lowercase, the symbol is usually local"
if [[ ${symbol_types[$name]} =~ [a-z] ]]; then
echo "$@: error: local symbol '${name}' was exported" >&2
exit_code=1
fi
done
exit ${exit_code} exit $?
...@@ -109,20 +109,6 @@ def to_cmdfile(path): ...@@ -109,20 +109,6 @@ def to_cmdfile(path):
return os.path.join(dir, '.' + base + '.cmd') return os.path.join(dir, '.' + base + '.cmd')
def cmdfiles_for_o(obj):
"""Generate the iterator of .cmd files associated with the object
Yield the .cmd file used to build the given object
Args:
obj: The object path
Yields:
The path to .cmd file
"""
yield to_cmdfile(obj)
def cmdfiles_for_a(archive, ar): def cmdfiles_for_a(archive, ar):
"""Generate the iterator of .cmd files associated with the archive. """Generate the iterator of .cmd files associated with the archive.
...@@ -211,13 +197,10 @@ def main(): ...@@ -211,13 +197,10 @@ def main():
for path in paths: for path in paths:
# If 'path' is a directory, handle all .cmd files under it. # If 'path' is a directory, handle all .cmd files under it.
# Otherwise, handle .cmd files associated with the file. # Otherwise, handle .cmd files associated with the file.
# Most of built-in objects are linked via archives (built-in.a or lib.a) # built-in objects are linked via vmlinux.a
# but some objects are linked to vmlinux directly.
# Modules are listed in modules.order. # Modules are listed in modules.order.
if os.path.isdir(path): if os.path.isdir(path):
cmdfiles = cmdfiles_in_dir(path) cmdfiles = cmdfiles_in_dir(path)
elif path.endswith('.o'):
cmdfiles = cmdfiles_for_o(path)
elif path.endswith('.a'): elif path.endswith('.a'):
cmdfiles = cmdfiles_for_a(path, ar) cmdfiles = cmdfiles_for_a(path, ar)
elif path.endswith('modules.order'): elif path.endswith('modules.order'):
......
# Head objects
#
# The objects listed here are placed at the head of vmlinux. A typical use-case
# is an object that contains the entry point. This is kept for compatibility
# with head-y, which Kbuild used to support.
#
# A counter approach is to control the section placement by the linker script.
# The code marked as __HEAD goes into the ".head.text" section, which is placed
# before the normal ".text" section.
#
# If you can achieve the correct code ordering by linker script, please delete
# the entry from this file.
#
arch/alpha/kernel/head.o
arch/arc/kernel/head.o
arch/arm/kernel/head-nommu.o
arch/arm/kernel/head.o
arch/arm64/kernel/head.o
arch/csky/kernel/head.o
arch/hexagon/kernel/head.o
arch/ia64/kernel/head.o
arch/loongarch/kernel/head.o
arch/m68k/68000/head.o
arch/m68k/coldfire/head.o
arch/m68k/kernel/head.o
arch/m68k/kernel/sun3-head.o
arch/microblaze/kernel/head.o
arch/mips/kernel/head.o
arch/nios2/kernel/head.o
arch/openrisc/kernel/head.o
arch/parisc/kernel/head.o
arch/powerpc/kernel/head_40x.o
arch/powerpc/kernel/head_44x.o
arch/powerpc/kernel/head_64.o
arch/powerpc/kernel/head_8xx.o
arch/powerpc/kernel/head_85xx.o
arch/powerpc/kernel/head_book3s_32.o
arch/powerpc/kernel/entry_64.o
arch/powerpc/kernel/fpu.o
arch/powerpc/kernel/vector.o
arch/powerpc/kernel/prom_init.o
arch/riscv/kernel/head.o
arch/s390/kernel/head64.o
arch/sh/kernel/head_32.o
arch/sparc/kernel/head_32.o
arch/sparc/kernel/head_64.o
arch/x86/kernel/head_32.o
arch/x86/kernel/head_64.o
arch/x86/kernel/head32.o
arch/x86/kernel/head64.o
arch/x86/kernel/ebda.o
arch/x86/kernel/platform-quirks.o
arch/xtensa/kernel/head.o
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
* *
*/ */
#include <getopt.h>
#include <stdbool.h> #include <stdbool.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
...@@ -87,7 +88,7 @@ static unsigned char best_table_len[256]; ...@@ -87,7 +88,7 @@ static unsigned char best_table_len[256];
static void usage(void) static void usage(void)
{ {
fprintf(stderr, "Usage: kallsyms [--all-symbols] [--absolute-percpu] " fprintf(stderr, "Usage: kallsyms [--all-symbols] [--absolute-percpu] "
"[--base-relative] < in.map > out.S\n"); "[--base-relative] in.map > out.S\n");
exit(1); exit(1);
} }
...@@ -123,9 +124,6 @@ static bool is_ignored_symbol(const char *name, char type) ...@@ -123,9 +124,6 @@ static bool is_ignored_symbol(const char *name, char type)
/* Symbol names that begin with the following are ignored.*/ /* Symbol names that begin with the following are ignored.*/
static const char * const ignored_prefixes[] = { static const char * const ignored_prefixes[] = {
"$", /* local symbols for ARM, MIPS, etc. */
".L", /* local labels, .LBB,.Ltmpxxx,.L__unnamed_xx,.LASANPC, etc. */
"__crc_", /* modversions */
"__efistub_", /* arm64 EFI stub namespace */ "__efistub_", /* arm64 EFI stub namespace */
"__kvm_nvhe_$", /* arm64 local symbols in non-VHE KVM namespace */ "__kvm_nvhe_$", /* arm64 local symbols in non-VHE KVM namespace */
"__kvm_nvhe_.L", /* arm64 local symbols in non-VHE KVM namespace */ "__kvm_nvhe_.L", /* arm64 local symbols in non-VHE KVM namespace */
...@@ -330,12 +328,19 @@ static void shrink_table(void) ...@@ -330,12 +328,19 @@ static void shrink_table(void)
} }
} }
static void read_map(FILE *in) static void read_map(const char *in)
{ {
FILE *fp;
struct sym_entry *sym; struct sym_entry *sym;
while (!feof(in)) { fp = fopen(in, "r");
sym = read_symbol(in); if (!fp) {
perror(in);
exit(1);
}
while (!feof(fp)) {
sym = read_symbol(fp);
if (!sym) if (!sym)
continue; continue;
...@@ -346,12 +351,15 @@ static void read_map(FILE *in) ...@@ -346,12 +351,15 @@ static void read_map(FILE *in)
table = realloc(table, sizeof(*table) * table_size); table = realloc(table, sizeof(*table) * table_size);
if (!table) { if (!table) {
fprintf(stderr, "out of memory\n"); fprintf(stderr, "out of memory\n");
fclose(fp);
exit (1); exit (1);
} }
} }
table[table_cnt++] = sym; table[table_cnt++] = sym;
} }
fclose(fp);
} }
static void output_label(const char *label) static void output_label(const char *label)
...@@ -805,22 +813,26 @@ static void record_relative_base(void) ...@@ -805,22 +813,26 @@ static void record_relative_base(void)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
if (argc >= 2) { while (1) {
int i; static struct option long_options[] = {
for (i = 1; i < argc; i++) { {"all-symbols", no_argument, &all_symbols, 1},
if(strcmp(argv[i], "--all-symbols") == 0) {"absolute-percpu", no_argument, &absolute_percpu, 1},
all_symbols = 1; {"base-relative", no_argument, &base_relative, 1},
else if (strcmp(argv[i], "--absolute-percpu") == 0) {},
absolute_percpu = 1; };
else if (strcmp(argv[i], "--base-relative") == 0)
base_relative = 1; int c = getopt_long(argc, argv, "", long_options, NULL);
else
usage(); if (c == -1)
} break;
} else if (argc != 1) if (c != 0)
usage();
}
if (optind >= argc)
usage(); usage();
read_map(stdin); read_map(argv[optind]);
shrink_table(); shrink_table();
if (absolute_percpu) if (absolute_percpu)
make_percpus_absolute(); make_percpus_absolute();
......
...@@ -551,7 +551,7 @@ static int conf_choice(struct menu *menu) ...@@ -551,7 +551,7 @@ static int conf_choice(struct menu *menu)
print_help(child); print_help(child);
continue; continue;
} }
sym_set_choice_value(sym, child->sym); sym_set_tristate_value(child->sym, yes);
for (child = child->list; child; child = child->next) { for (child = child->list; child; child = child->next) {
indent += 2; indent += 2;
conf(child); conf(child);
......
...@@ -123,11 +123,6 @@ static inline struct symbol *sym_get_choice_value(struct symbol *sym) ...@@ -123,11 +123,6 @@ static inline struct symbol *sym_get_choice_value(struct symbol *sym)
return (struct symbol *)sym->curr.val; return (struct symbol *)sym->curr.val;
} }
static inline bool sym_set_choice_value(struct symbol *ch, struct symbol *chval)
{
return sym_set_tristate_value(chval, yes);
}
static inline bool sym_is_choice(struct symbol *sym) static inline bool sym_is_choice(struct symbol *sym)
{ {
return sym->flags & SYMBOL_CHOICE ? true : false; return sym->flags & SYMBOL_CHOICE ? true : false;
......
...@@ -3,17 +3,15 @@ ...@@ -3,17 +3,15 @@
# #
# link vmlinux # link vmlinux
# #
# vmlinux is linked from the objects selected by $(KBUILD_VMLINUX_OBJS) and # vmlinux is linked from the objects in vmlinux.a and $(KBUILD_VMLINUX_LIBS).
# $(KBUILD_VMLINUX_LIBS). Most are built-in.a files from top-level directories # vmlinux.a contains objects that are linked unconditionally.
# in the kernel tree, others are specified in arch/$(ARCH)/Makefile.
# $(KBUILD_VMLINUX_LIBS) are archives which are linked conditionally # $(KBUILD_VMLINUX_LIBS) are archives which are linked conditionally
# (not within --whole-archive), and do not require symbol indexes added. # (not within --whole-archive), and do not require symbol indexes added.
# #
# vmlinux # vmlinux
# ^ # ^
# | # |
# +--< $(KBUILD_VMLINUX_OBJS) # +--< vmlinux.a
# | +--< init/built-in.a drivers/built-in.a mm/built-in.a + more
# | # |
# +--< $(KBUILD_VMLINUX_LIBS) # +--< $(KBUILD_VMLINUX_LIBS)
# | +--< lib/lib.a + more # | +--< lib/lib.a + more
...@@ -67,7 +65,7 @@ vmlinux_link() ...@@ -67,7 +65,7 @@ vmlinux_link()
objs=vmlinux.o objs=vmlinux.o
libs= libs=
else else
objs="${KBUILD_VMLINUX_OBJS}" objs=vmlinux.a
libs="${KBUILD_VMLINUX_LIBS}" libs="${KBUILD_VMLINUX_LIBS}"
fi fi
...@@ -75,6 +73,8 @@ vmlinux_link() ...@@ -75,6 +73,8 @@ vmlinux_link()
objs="${objs} .vmlinux.export.o" objs="${objs} .vmlinux.export.o"
fi fi
objs="${objs} init/version-timestamp.o"
if [ "${SRCARCH}" = "um" ]; then if [ "${SRCARCH}" = "um" ]; then
wl=-Wl, wl=-Wl,
ld="${CC}" ld="${CC}"
...@@ -157,7 +157,7 @@ kallsyms() ...@@ -157,7 +157,7 @@ kallsyms()
fi fi
info KSYMS ${2} info KSYMS ${2}
${NM} -n ${1} | scripts/kallsyms ${kallsymopt} > ${2} scripts/kallsyms ${kallsymopt} ${1} > ${2}
} }
# Perform one step in kallsyms generation, including temporary linking of # Perform one step in kallsyms generation, including temporary linking of
...@@ -170,7 +170,8 @@ kallsyms_step() ...@@ -170,7 +170,8 @@ kallsyms_step()
kallsyms_S=${kallsyms_vmlinux}.S kallsyms_S=${kallsyms_vmlinux}.S
vmlinux_link ${kallsyms_vmlinux} "${kallsymso_prev}" ${btf_vmlinux_bin_o} vmlinux_link ${kallsyms_vmlinux} "${kallsymso_prev}" ${btf_vmlinux_bin_o}
kallsyms ${kallsyms_vmlinux} ${kallsyms_S} mksysmap ${kallsyms_vmlinux} ${kallsyms_vmlinux}.syms
kallsyms ${kallsyms_vmlinux}.syms ${kallsyms_S}
info AS ${kallsyms_S} info AS ${kallsyms_S}
${CC} ${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS} \ ${CC} ${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS} \
...@@ -182,6 +183,7 @@ kallsyms_step() ...@@ -182,6 +183,7 @@ kallsyms_step()
# See mksymap for additional details # See mksymap for additional details
mksysmap() mksysmap()
{ {
info NM ${2}
${CONFIG_SHELL} "${srctree}/scripts/mksysmap" ${1} ${2} ${CONFIG_SHELL} "${srctree}/scripts/mksysmap" ${1} ${2}
} }
...@@ -197,8 +199,6 @@ cleanup() ...@@ -197,8 +199,6 @@ cleanup()
rm -f System.map rm -f System.map
rm -f vmlinux rm -f vmlinux
rm -f vmlinux.map rm -f vmlinux.map
rm -f .vmlinux.objs
rm -f .vmlinux.export.c
} }
# Use "make V=1" to debug this script # Use "make V=1" to debug this script
...@@ -213,52 +213,7 @@ if [ "$1" = "clean" ]; then ...@@ -213,52 +213,7 @@ if [ "$1" = "clean" ]; then
exit 0 exit 0
fi fi
# Update version ${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init init/version-timestamp.o
info GEN .version
if [ -r .version ]; then
VERSION=$(expr 0$(cat .version) + 1)
echo $VERSION > .version
else
rm -f .version
echo 1 > .version
fi;
# final build of init/
${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init need-builtin=1
#link vmlinux.o
${MAKE} -f "${srctree}/scripts/Makefile.vmlinux_o"
# Generate the list of in-tree objects in vmlinux
#
# This is used to retrieve symbol versions generated by genksyms.
for f in ${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS}; do
case ${f} in
*libgcc.a)
# Some architectures do '$(CC) --print-libgcc-file-name' to
# borrow libgcc.a from the toolchain.
# There is no EXPORT_SYMBOL in external objects. Ignore this.
;;
*.a)
${AR} t ${f} ;;
*)
echo ${f} ;;
esac
done > .vmlinux.objs
# modpost vmlinux.o to check for section mismatches
${MAKE} -f "${srctree}/scripts/Makefile.modpost" MODPOST_VMLINUX=1
info MODINFO modules.builtin.modinfo
${OBJCOPY} -j .modinfo -O binary vmlinux.o modules.builtin.modinfo
info GEN modules.builtin
# The second line aids cases where multiple modules share the same object.
tr '\0' '\n' < modules.builtin.modinfo | sed -n 's/^[[:alnum:]:_]*\.file=//p' |
tr ' ' '\n' | uniq | sed -e 's:^:kernel/:' -e 's/$/.ko/' > modules.builtin
if is_enabled CONFIG_MODULES; then
${MAKE} -f "${srctree}/scripts/Makefile.vmlinux" .vmlinux.export.o
fi
btf_vmlinux_bin_o="" btf_vmlinux_bin_o=""
if is_enabled CONFIG_DEBUG_INFO_BTF; then if is_enabled CONFIG_DEBUG_INFO_BTF; then
...@@ -318,7 +273,6 @@ if is_enabled CONFIG_DEBUG_INFO_BTF && is_enabled CONFIG_BPF; then ...@@ -318,7 +273,6 @@ if is_enabled CONFIG_DEBUG_INFO_BTF && is_enabled CONFIG_BPF; then
${RESOLVE_BTFIDS} vmlinux ${RESOLVE_BTFIDS} vmlinux
fi fi
info SYSMAP System.map
mksysmap vmlinux System.map mksysmap vmlinux System.map
if is_enabled CONFIG_BUILDTIME_TABLE_SORT; then if is_enabled CONFIG_BUILDTIME_TABLE_SORT; then
...@@ -331,9 +285,7 @@ fi ...@@ -331,9 +285,7 @@ fi
# step a (see comment above) # step a (see comment above)
if is_enabled CONFIG_KALLSYMS; then if is_enabled CONFIG_KALLSYMS; then
mksysmap ${kallsyms_vmlinux} .tmp_System.map if ! cmp -s System.map ${kallsyms_vmlinux}.syms; then
if ! cmp -s System.map .tmp_System.map; then
echo >&2 Inconsistent kallsyms data echo >&2 Inconsistent kallsyms data
echo >&2 Try "make KALLSYMS_EXTRA_PASS=1" as a workaround echo >&2 Try "make KALLSYMS_EXTRA_PASS=1" as a workaround
exit 1 exit 1
......
#!/bin/sh #!/bin/sh
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
TARGET=$1 UTS_MACHINE=$1
ARCH=$2 CC_VERSION="$2"
SMP=$3 LD=$3
PREEMPT=$4
PREEMPT_DYNAMIC=$5
PREEMPT_RT=$6
CC_VERSION="$7"
LD=$8
# Do not expand names
set -f
# Fix the language to get consistent output
LC_ALL=C
export LC_ALL
if [ -z "$KBUILD_BUILD_VERSION" ]; then
VERSION=$(cat .version 2>/dev/null || echo 1)
else
VERSION=$KBUILD_BUILD_VERSION
fi
if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then
TIMESTAMP=`date`
else
TIMESTAMP=$KBUILD_BUILD_TIMESTAMP
fi
if test -z "$KBUILD_BUILD_USER"; then if test -z "$KBUILD_BUILD_USER"; then
LINUX_COMPILE_BY=$(whoami | sed 's/\\/\\\\/') LINUX_COMPILE_BY=$(whoami | sed 's/\\/\\\\/')
else else
...@@ -39,63 +16,12 @@ else ...@@ -39,63 +16,12 @@ else
LINUX_COMPILE_HOST=$KBUILD_BUILD_HOST LINUX_COMPILE_HOST=$KBUILD_BUILD_HOST
fi fi
UTS_VERSION="#$VERSION" LD_VERSION=$(LC_ALL=C $LD -v | head -n1 |
CONFIG_FLAGS="" sed -e 's/(compatible with [^)]*)//' -e 's/[[:space:]]*$//')
if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi
if [ -n "$PREEMPT_RT" ] ; then
CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT_RT"
elif [ -n "$PREEMPT_DYNAMIC" ] ; then
CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT_DYNAMIC"
elif [ -n "$PREEMPT" ] ; then
CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"
fi
# Truncate to maximum length
UTS_LEN=64
UTS_VERSION="$(echo $UTS_VERSION $CONFIG_FLAGS $TIMESTAMP | cut -b -$UTS_LEN)"
# Generate a temporary compile.h
{ echo /\* This file is auto generated, version $VERSION \*/ cat <<EOF
if [ -n "$CONFIG_FLAGS" ] ; then echo "/* $CONFIG_FLAGS */"; fi #define UTS_MACHINE "${UTS_MACHINE}"
#define LINUX_COMPILE_BY "${LINUX_COMPILE_BY}"
echo \#define UTS_MACHINE \"$ARCH\" #define LINUX_COMPILE_HOST "${LINUX_COMPILE_HOST}"
#define LINUX_COMPILER "${CC_VERSION}, ${LD_VERSION}"
echo \#define UTS_VERSION \"$UTS_VERSION\" EOF
printf '#define LINUX_COMPILE_BY "%s"\n' "$LINUX_COMPILE_BY"
echo \#define LINUX_COMPILE_HOST \"$LINUX_COMPILE_HOST\"
LD_VERSION=$($LD -v | head -n1 | sed 's/(compatible with [^)]*)//' \
| sed 's/[[:space:]]*$//')
printf '#define LINUX_COMPILER "%s"\n' "$CC_VERSION, $LD_VERSION"
} > .tmpcompile
# Only replace the real compile.h if the new one is different,
# in order to preserve the timestamp and avoid unnecessary
# recompilations.
# We don't consider the file changed if only the date/time changed,
# unless KBUILD_BUILD_TIMESTAMP was explicitly set (e.g. for
# reproducible builds with that value referring to a commit timestamp).
# A kernel config change will increase the generation number, thus
# causing compile.h to be updated (including date/time) due to the
# changed comment in the
# first line.
if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then
IGNORE_PATTERN="UTS_VERSION"
else
IGNORE_PATTERN="NOT_A_PATTERN_TO_BE_MATCHED"
fi
if [ -r $TARGET ] && \
grep -v $IGNORE_PATTERN $TARGET > .tmpver.1 && \
grep -v $IGNORE_PATTERN .tmpcompile > .tmpver.2 && \
cmp -s .tmpver.1 .tmpver.2; then
rm -f .tmpcompile
else
echo " UPD $TARGET"
mv -f .tmpcompile $TARGET
fi
rm -f .tmpver.1 .tmpver.2
...@@ -37,8 +37,24 @@ ...@@ -37,8 +37,24 @@
# readprofile starts reading symbols when _stext is found, and # readprofile starts reading symbols when _stext is found, and
# continue until it finds a symbol which is not either of 'T', 't', # continue until it finds a symbol which is not either of 'T', 't',
# 'W' or 'w'. __crc_ are 'A' and placed in the middle # 'W' or 'w'.
# so we just ignore them to let readprofile continue to work. #
# (At least sparc64 has __crc_ in the middle). # Ignored prefixes:
# $ - local symbols for ARM, MIPS, etc.
# .L - local labels, .LBB,.Ltmpxxx,.L__unnamed_xx,.LASANPC, etc.
# __crc_ - modversions
# __kstrtab_ - EXPORT_SYMBOL (symbol name)
# __kstrtabns_ - EXPORT_SYMBOL (namespace)
#
# Ignored symbols:
# L0 - for LoongArch?
$NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)\|\( \.L\)\|\( L0\)' > $2 $NM -n $1 | grep -v \
-e ' [aNUw] ' \
-e ' \$' \
-e ' \.L' \
-e ' __crc_' \
-e ' __kstrtab_' \
-e ' __kstrtabns_' \
-e ' L0$' \
> $2
...@@ -88,10 +88,10 @@ $S ...@@ -88,10 +88,10 @@ $S
mkdir -p %{buildroot}/boot mkdir -p %{buildroot}/boot
%ifarch ia64 %ifarch ia64
mkdir -p %{buildroot}/boot/efi mkdir -p %{buildroot}/boot/efi
cp \$($MAKE image_name) %{buildroot}/boot/efi/vmlinuz-$KERNELRELEASE cp \$($MAKE -s image_name) %{buildroot}/boot/efi/vmlinuz-$KERNELRELEASE
ln -s efi/vmlinuz-$KERNELRELEASE %{buildroot}/boot/ ln -s efi/vmlinuz-$KERNELRELEASE %{buildroot}/boot/
%else %else
cp \$($MAKE image_name) %{buildroot}/boot/vmlinuz-$KERNELRELEASE cp \$($MAKE -s image_name) %{buildroot}/boot/vmlinuz-$KERNELRELEASE
%endif %endif
$M $MAKE %{?_smp_mflags} INSTALL_MOD_PATH=%{buildroot} modules_install $M $MAKE %{?_smp_mflags} INSTALL_MOD_PATH=%{buildroot} modules_install
$MAKE %{?_smp_mflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install $MAKE %{?_smp_mflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment