Kbuild updates for v6.1
- 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. -----BEGIN PGP SIGNATURE----- iQJJBAABCgAzFiEEbmPs18K1szRHjPqEPYsBB53g2wYFAmM+4vcVHG1hc2FoaXJv eUBrZXJuZWwub3JnAAoJED2LAQed4NsGY2IQAInr0JUNnkkxwUSXtOcQuA3IK8RJ FbU9HXJRoV9H+7+l3SMlN7mIbrs5eE5fTY3iwQ3CVe139d1+1q7nvTMRv8owywJx GBgzswncuu1lk7iQQ//CxiqMwSCG8GJdYn1uDVy4I5jg3o+DtFZJtyq2Wb7pqsMm ZhZ4PozRN+idYQJSF6Vx/zEVLHI7quMBwfe4CME8/0Kg2+hnYzbXV/aUf0ED2emq zdCMDQgIOK5AhY+8qgMXKYnBUJMTqBp6LoR4p3ApfUkwRFY0sGa0/LK3U/B22OE7 uWyR4fCUExGyerlcHEVev+9eBfmsLLPyqlchNwpSDOPf5OSdnKmgqJEBR/Cvx0eh URerPk7EHxyH3G8yi+cU2GtofNTGc5RHPRgJE2ADsQEi5TAUKGmbXMlsFRL/51Vn lTANZObBNa1d4enljF6TfTL5nuccOa+DKvXnH9fQ49t0QdtSikv6J/lGwilwm1Sr BctmCsySPuURZfkpI9OQnLuouloMXl9f7Q/+S39haS/tSgvPpyITyO71nxDnXn/s BbFObZJUk9QkqOACjBP1hNErTLt83uBxQ9z+rDCw/SbLIe4nw0wyneuygfHI5rI8 3RZB2DbGauuJHX2Zs6YGS14SLSY33IsLqKR1/Vy3LrPvOHuEvNiOR8LITq5E0YCK OffK2Y5cIlXR0QWf =DHiN -----END PGP SIGNATURE----- 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 ...
This commit is contained in:
commit
8afc66e8d4
87 changed files with 723 additions and 757 deletions
Documentation
KbuildMakefilearch
alpha
arc
arm
arm64
csky
hexagon
ia64
loongarch
m68k
microblaze
mips
nios2
openrisc
parisc
powerpc
riscv
s390
sh
sparc
x86
xtensa
drivers/gpu/drm/amd/display/dc/dml
include/linux
init
kernel
lib
scripts
|
@ -341,19 +341,7 @@ more details, with real examples.
|
|||
|
||||
Examples are:
|
||||
|
||||
1) head objects
|
||||
|
||||
Some objects must be placed at the head of vmlinux. They are
|
||||
directly linked to vmlinux without going through built-in.a
|
||||
A typical use-case is an object that contains the entry point.
|
||||
|
||||
arch/$(SRCARCH)/Makefile should specify such objects as head-y.
|
||||
|
||||
Discussion:
|
||||
Given that we can control the section order in the linker script,
|
||||
why do we need head-y?
|
||||
|
||||
2) vmlinux linker script
|
||||
1) vmlinux linker script
|
||||
|
||||
The linker script for vmlinux is located at
|
||||
arch/$(SRCARCH)/kernel/vmlinux.lds
|
||||
|
@ -361,10 +349,6 @@ more details, with real examples.
|
|||
Example::
|
||||
|
||||
# arch/x86/kernel/Makefile
|
||||
extra-y := head_$(BITS).o
|
||||
extra-y += head$(BITS).o
|
||||
extra-y += ebda.o
|
||||
extra-y += platform-quirks.o
|
||||
extra-y += vmlinux.lds
|
||||
|
||||
$(extra-y) should only contain targets needed for vmlinux.
|
||||
|
@ -683,22 +667,27 @@ more details, with real examples.
|
|||
In the above example, -Wno-unused-but-set-variable will be added to
|
||||
KBUILD_CFLAGS only if gcc really accepts it.
|
||||
|
||||
cc-ifversion
|
||||
cc-ifversion tests the version of $(CC) and equals the fourth parameter
|
||||
if version expression is true, or the fifth (if given) if the version
|
||||
expression is false.
|
||||
gcc-min-version
|
||||
gcc-min-version tests if the value of $(CONFIG_GCC_VERSION) is greater than
|
||||
or equal to the provided value and evaluates to y if so.
|
||||
|
||||
Example::
|
||||
|
||||
#fs/reiserfs/Makefile
|
||||
ccflags-y := $(call cc-ifversion, -lt, 0402, -O1)
|
||||
cflags-$(call gcc-min-version, 70100) := -foo
|
||||
|
||||
In this example, ccflags-y will be assigned the value -O1 if the
|
||||
$(CC) version is less than 4.2.
|
||||
cc-ifversion takes all the shell operators:
|
||||
-eq, -ne, -lt, -le, -gt, and -ge
|
||||
The third parameter may be a text as in this example, but it may also
|
||||
be an expanded variable or a macro.
|
||||
In this example, cflags-y will be assigned the value -foo if $(CC) is 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::
|
||||
|
||||
cflags-$(call clang-min-version, 110000) := -foo
|
||||
|
||||
In this example, cflags-y will be assigned the value -foo if $(CC) is clang
|
||||
and $(CONFIG_CLANG_VERSION) is >= 11.0.0.
|
||||
|
||||
cc-cross-prefix
|
||||
cc-cross-prefix is used to check if there exists a $(CC) in path with
|
||||
|
@ -1099,8 +1088,7 @@ When kbuild executes, the following steps are followed (roughly):
|
|||
- The values of the above variables are expanded in arch/$(SRCARCH)/Makefile.
|
||||
5) All object files are then linked and the resulting file vmlinux is
|
||||
located at the root of the obj tree.
|
||||
The very first objects linked are listed in head-y, assigned by
|
||||
arch/$(SRCARCH)/Makefile.
|
||||
The very first objects linked are listed in scripts/head-object-list.txt.
|
||||
6) Finally, the architecture-specific part does any required post processing
|
||||
and builds the final bootimage.
|
||||
- This includes building boot records
|
||||
|
@ -1272,6 +1260,9 @@ When kbuild executes, the following steps are followed (roughly):
|
|||
All object files for vmlinux. They are linked to vmlinux in the same
|
||||
order as listed in KBUILD_VMLINUX_OBJS.
|
||||
|
||||
The objects listed in scripts/head-object-list.txt are exceptions;
|
||||
they are placed before the other objects.
|
||||
|
||||
KBUILD_VMLINUX_LIBS
|
||||
|
||||
All .a "lib" files for vmlinux. KBUILD_VMLINUX_OBJS and
|
||||
|
@ -1315,8 +1306,7 @@ When kbuild executes, the following steps are followed (roughly):
|
|||
machinery is all architecture-independent.
|
||||
|
||||
|
||||
head-y, core-y, libs-y, drivers-y
|
||||
$(head-y) lists objects to be linked first in vmlinux.
|
||||
core-y, libs-y, drivers-y
|
||||
|
||||
$(libs-y) lists directories where a lib.a archive can be located.
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ GNU C 5.1 gcc --version
|
|||
Clang/LLVM (optional) 11.0.0 clang --version
|
||||
Rust (optional) 1.62.0 rustc --version
|
||||
bindgen (optional) 0.56.0 bindgen --version
|
||||
GNU make 3.81 make --version
|
||||
GNU make 3.82 make --version
|
||||
bash 4.2 bash --version
|
||||
binutils 2.23 ld -v
|
||||
flex 2.5.35 flex --version
|
||||
|
@ -108,7 +108,7 @@ It depends on ``libclang``.
|
|||
Make
|
||||
----
|
||||
|
||||
You will need GNU make 3.81 or later to build the kernel.
|
||||
You will need GNU make 3.82 or later to build the kernel.
|
||||
|
||||
Bash
|
||||
----
|
||||
|
|
72
Kbuild
72
Kbuild
|
@ -2,18 +2,18 @@
|
|||
#
|
||||
# Kbuild for top-level directory of the kernel
|
||||
|
||||
#####
|
||||
# Prepare global headers and check sanity before descending into sub-directories
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Generate bounds.h
|
||||
|
||||
bounds-file := include/generated/bounds.h
|
||||
|
||||
always-y := $(bounds-file)
|
||||
targets := kernel/bounds.s
|
||||
|
||||
$(bounds-file): kernel/bounds.s FORCE
|
||||
$(call filechk,offsets,__LINUX_BOUNDS_H__)
|
||||
|
||||
#####
|
||||
# Generate timeconst.h
|
||||
|
||||
timeconst-file := include/generated/timeconst.h
|
||||
|
@ -23,12 +23,10 @@ filechk_gentimeconst = echo $(CONFIG_HZ) | bc -q $<
|
|||
$(timeconst-file): kernel/time/timeconst.bc FORCE
|
||||
$(call filechk,gentimeconst)
|
||||
|
||||
#####
|
||||
# Generate asm-offsets.h
|
||||
|
||||
offsets-file := include/generated/asm-offsets.h
|
||||
|
||||
always-y += $(offsets-file)
|
||||
targets += arch/$(SRCARCH)/kernel/asm-offsets.s
|
||||
|
||||
arch/$(SRCARCH)/kernel/asm-offsets.s: $(timeconst-file) $(bounds-file)
|
||||
|
@ -36,24 +34,66 @@ arch/$(SRCARCH)/kernel/asm-offsets.s: $(timeconst-file) $(bounds-file)
|
|||
$(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s FORCE
|
||||
$(call filechk,offsets,__ASM_OFFSETS_H__)
|
||||
|
||||
#####
|
||||
# Check for missing system calls
|
||||
|
||||
always-y += missing-syscalls
|
||||
|
||||
quiet_cmd_syscalls = CALL $<
|
||||
cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) $(missing_syscalls_flags)
|
||||
|
||||
missing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE
|
||||
PHONY += missing-syscalls
|
||||
missing-syscalls: scripts/checksyscalls.sh $(offsets-file)
|
||||
$(call cmd,syscalls)
|
||||
|
||||
#####
|
||||
# Check atomic headers are up-to-date
|
||||
# Check the manual modification of atomic headers
|
||||
|
||||
always-y += old-atomics
|
||||
quiet_cmd_check_sha1 = CHKSHA1 $<
|
||||
cmd_check_sha1 = \
|
||||
if ! command -v sha1sum >/dev/null; then \
|
||||
echo "warning: cannot check the header due to sha1sum missing"; \
|
||||
exit 0; \
|
||||
fi; \
|
||||
if [ "$$(sed -n '$$s:// ::p' $<)" != \
|
||||
"$$(sed '$$d' $< | sha1sum | sed 's/ .*//')" ]; then \
|
||||
echo "error: $< has been modified." >&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
touch $@
|
||||
|
||||
quiet_cmd_atomics = CALL $<
|
||||
cmd_atomics = $(CONFIG_SHELL) $<
|
||||
atomic-checks += $(addprefix $(obj)/.checked-, \
|
||||
atomic-arch-fallback.h \
|
||||
atomic-instrumented.h \
|
||||
atomic-long.h)
|
||||
|
||||
old-atomics: scripts/atomic/check-atomics.sh FORCE
|
||||
$(call cmd,atomics)
|
||||
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)
|
||||
|
|
184
Makefile
184
Makefile
|
@ -538,7 +538,7 @@ LDFLAGS_MODULE =
|
|||
CFLAGS_KERNEL =
|
||||
RUSTFLAGS_KERNEL =
|
||||
AFLAGS_KERNEL =
|
||||
LDFLAGS_vmlinux =
|
||||
export LDFLAGS_vmlinux =
|
||||
|
||||
# Use USERINCLUDE when you must reference the UAPI directories only.
|
||||
USERINCLUDE := \
|
||||
|
@ -648,7 +648,7 @@ quiet_cmd_makefile = GEN Makefile
|
|||
} > Makefile
|
||||
|
||||
outputmakefile:
|
||||
$(Q)if [ -f $(srctree)/.config -o \
|
||||
@if [ -f $(srctree)/.config -o \
|
||||
-d $(srctree)/include/config -o \
|
||||
-d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
|
||||
echo >&2 "***"; \
|
||||
|
@ -710,6 +710,8 @@ else
|
|||
__all: modules
|
||||
endif
|
||||
|
||||
targets :=
|
||||
|
||||
# Decide whether to build built-in, modular, or both.
|
||||
# Normally, just do built-in.
|
||||
|
||||
|
@ -741,11 +743,8 @@ endif
|
|||
|
||||
ifeq ($(KBUILD_EXTMOD),)
|
||||
# Objects we will link into vmlinux / subdirs we need to visit
|
||||
core-y := init/ usr/ arch/$(SRCARCH)/
|
||||
drivers-y := drivers/ sound/
|
||||
drivers-$(CONFIG_SAMPLES) += samples/
|
||||
drivers-$(CONFIG_NET) += net/
|
||||
drivers-y += virt/
|
||||
core-y :=
|
||||
drivers-y :=
|
||||
libs-y := lib/
|
||||
endif # KBUILD_EXTMOD
|
||||
|
||||
|
@ -804,7 +803,7 @@ else # !may-sync-config
|
|||
PHONY += include/config/auto.conf
|
||||
|
||||
include/config/auto.conf:
|
||||
$(Q)test -e include/generated/autoconf.h -a -e $@ || ( \
|
||||
@test -e include/generated/autoconf.h -a -e $@ || ( \
|
||||
echo >&2; \
|
||||
echo >&2 " ERROR: Kernel configuration is invalid."; \
|
||||
echo >&2 " include/generated/autoconf.h or $@ are missing.";\
|
||||
|
@ -862,7 +861,6 @@ KBUILD_CFLAGS += $(stackp-flags-y)
|
|||
|
||||
KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror
|
||||
KBUILD_CFLAGS-$(CONFIG_CC_NO_ARRAY_BOUNDS) += -Wno-array-bounds
|
||||
KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
|
||||
|
||||
KBUILD_RUSTFLAGS-$(CONFIG_WERROR) += -Dwarnings
|
||||
KBUILD_RUSTFLAGS += $(KBUILD_RUSTFLAGS-y)
|
||||
|
@ -1041,7 +1039,6 @@ ifdef CONFIG_CC_IS_GCC
|
|||
KBUILD_CFLAGS += -Wno-maybe-uninitialized
|
||||
endif
|
||||
|
||||
ifdef CONFIG_CC_IS_GCC
|
||||
# The allocators already balk at large sizes, so silence the compiler
|
||||
# warnings for bounds checks involving those possible values. While
|
||||
# -Wno-alloc-size-larger-than would normally be used here, earlier versions
|
||||
|
@ -1053,8 +1050,8 @@ ifdef CONFIG_CC_IS_GCC
|
|||
# ignored, continuing to default to PTRDIFF_MAX. So, left with no other
|
||||
# choice, we must perform a versioned check to disable this warning.
|
||||
# https://lore.kernel.org/lkml/20210824115859.187f272f@canb.auug.org.au
|
||||
KBUILD_CFLAGS += $(call cc-ifversion, -ge, 0901, -Wno-alloc-size-larger-than)
|
||||
endif
|
||||
KBUILD_CFLAGS-$(call gcc-min-version, 90100) += -Wno-alloc-size-larger-than
|
||||
KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
|
||||
|
||||
# disable invalid "can't wrap" optimizations for signed / pointers
|
||||
KBUILD_CFLAGS += -fno-strict-overflow
|
||||
|
@ -1110,7 +1107,7 @@ KBUILD_LDFLAGS += $(call ld-option,--no-warn-rwx-segments)
|
|||
endif
|
||||
|
||||
ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
|
||||
LDFLAGS_vmlinux += $(call ld-option, -X,)
|
||||
LDFLAGS_vmlinux += -X
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_RELR),y)
|
||||
|
@ -1171,41 +1168,27 @@ export MODORDER := $(extmod_prefix)modules.order
|
|||
export MODULES_NSDEPS := $(extmod_prefix)modules.nsdeps
|
||||
|
||||
ifeq ($(KBUILD_EXTMOD),)
|
||||
core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/
|
||||
core-$(CONFIG_BLOCK) += block/
|
||||
core-$(CONFIG_IO_URING) += io_uring/
|
||||
core-$(CONFIG_RUST) += rust/
|
||||
|
||||
vmlinux-dirs := $(patsubst %/,%,$(filter %/, \
|
||||
$(core-y) $(core-m) $(drivers-y) $(drivers-m) \
|
||||
$(libs-y) $(libs-m)))
|
||||
|
||||
vmlinux-alldirs := $(sort $(vmlinux-dirs) Documentation \
|
||||
build-dir := .
|
||||
clean-dirs := $(sort . Documentation \
|
||||
$(patsubst %/,%,$(filter %/, $(core-) \
|
||||
$(drivers-) $(libs-))))
|
||||
|
||||
build-dirs := $(vmlinux-dirs)
|
||||
clean-dirs := $(vmlinux-alldirs)
|
||||
|
||||
subdir-modorder := $(addsuffix /modules.order, $(build-dirs))
|
||||
|
||||
export ARCH_CORE := $(core-y)
|
||||
export ARCH_LIB := $(filter %/, $(libs-y))
|
||||
export ARCH_DRIVERS := $(drivers-y) $(drivers-m)
|
||||
# Externally visible symbols (used by link-vmlinux.sh)
|
||||
KBUILD_VMLINUX_OBJS := $(head-y) $(patsubst %/,%/built-in.a, $(core-y))
|
||||
KBUILD_VMLINUX_OBJS += $(addsuffix built-in.a, $(filter %/, $(libs-y)))
|
||||
|
||||
KBUILD_VMLINUX_OBJS := ./built-in.a
|
||||
ifdef CONFIG_MODULES
|
||||
KBUILD_VMLINUX_OBJS += $(patsubst %/, %/lib.a, $(filter %/, $(libs-y)))
|
||||
KBUILD_VMLINUX_LIBS := $(filter-out %/, $(libs-y))
|
||||
else
|
||||
KBUILD_VMLINUX_LIBS := $(patsubst %/,%/lib.a, $(libs-y))
|
||||
endif
|
||||
KBUILD_VMLINUX_OBJS += $(patsubst %/,%/built-in.a, $(drivers-y))
|
||||
|
||||
export KBUILD_VMLINUX_OBJS KBUILD_VMLINUX_LIBS
|
||||
export KBUILD_VMLINUX_LIBS
|
||||
export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds
|
||||
# used by scripts/Makefile.package
|
||||
export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
|
||||
|
||||
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
|
||||
|
||||
# Recurse until adjust_autoksyms.sh is satisfied
|
||||
PHONY += autoksyms_recursive
|
||||
|
@ -1215,7 +1198,7 @@ ifdef CONFIG_TRIM_UNUSED_KSYMS
|
|||
# (this can be evaluated only once include/config/auto.conf has been included)
|
||||
KBUILD_MODULES := 1
|
||||
|
||||
autoksyms_recursive: descend modules.order
|
||||
autoksyms_recursive: $(build-dir) modules.order
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
|
||||
"$(MAKE) -f $(srctree)/Makefile autoksyms_recursive"
|
||||
endif
|
||||
|
@ -1229,21 +1212,31 @@ quiet_cmd_autoksyms_h = GEN $@
|
|||
$(autoksyms_h):
|
||||
$(call cmd,autoksyms_h)
|
||||
|
||||
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
|
||||
# '$(AR) mPi' needs 'T' to workaround the bug of llvm-ar <= 14
|
||||
quiet_cmd_ar_vmlinux.a = AR $@
|
||||
cmd_ar_vmlinux.a = \
|
||||
rm -f $@; \
|
||||
$(AR) cDPrST $@ $(KBUILD_VMLINUX_OBJS); \
|
||||
$(AR) mPiT $$($(AR) t $@ | head -n1) $@ $$($(AR) t $@ | grep -F --file=$(srctree)/scripts/head-object-list.txt)
|
||||
|
||||
# Final link of vmlinux with optional arch pass after final link
|
||||
cmd_link-vmlinux = \
|
||||
$(CONFIG_SHELL) $< "$(LD)" "$(KBUILD_LDFLAGS)" "$(LDFLAGS_vmlinux)"; \
|
||||
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
|
||||
targets += vmlinux.a
|
||||
vmlinux.a: $(KBUILD_VMLINUX_OBJS) scripts/head-object-list.txt autoksyms_recursive FORCE
|
||||
$(call if_changed,ar_vmlinux.a)
|
||||
|
||||
vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
|
||||
+$(call if_changed_dep,link-vmlinux)
|
||||
PHONY += vmlinux_o
|
||||
vmlinux_o: vmlinux.a $(KBUILD_VMLINUX_LIBS)
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.vmlinux_o
|
||||
|
||||
targets := vmlinux
|
||||
vmlinux.o modules.builtin.modinfo modules.builtin: vmlinux_o
|
||||
@:
|
||||
|
||||
PHONY += vmlinux
|
||||
vmlinux: vmlinux.o $(KBUILD_LDS) modpost
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.vmlinux
|
||||
|
||||
# The actual objects are generated when descending,
|
||||
# make sure no implicit rule kicks in
|
||||
$(sort $(vmlinux-deps) $(subdir-modorder)): descend ;
|
||||
$(sort $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)): . ;
|
||||
|
||||
filechk_kernel.release = \
|
||||
echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
|
||||
|
@ -1269,11 +1262,11 @@ PHONY += prepare archprepare
|
|||
|
||||
archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
|
||||
asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h \
|
||||
include/generated/autoconf.h remove-stale-files
|
||||
include/generated/compile.h include/generated/autoconf.h remove-stale-files
|
||||
|
||||
prepare0: archprepare
|
||||
$(Q)$(MAKE) $(build)=scripts/mod
|
||||
$(Q)$(MAKE) $(build)=.
|
||||
$(Q)$(MAKE) $(build)=. prepare
|
||||
|
||||
# All the preparing..
|
||||
prepare: prepare0
|
||||
|
@ -1335,6 +1328,12 @@ $(version_h): FORCE
|
|||
include/generated/utsrelease.h: include/config/kernel.release FORCE
|
||||
$(call filechk,utsrelease.h)
|
||||
|
||||
filechk_compile.h = $(srctree)/scripts/mkcompile_h \
|
||||
"$(UTS_MACHINE)" "$(CONFIG_CC_VERSION_TEXT)" "$(LD)"
|
||||
|
||||
include/generated/compile.h: FORCE
|
||||
$(call filechk,compile.h)
|
||||
|
||||
PHONY += headerdep
|
||||
headerdep:
|
||||
$(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \
|
||||
|
@ -1509,22 +1508,16 @@ endif
|
|||
|
||||
# Build modules
|
||||
#
|
||||
# A module can be listed more than once in obj-m resulting in
|
||||
# duplicate lines in modules.order files. Those are removed
|
||||
# using awk while concatenating to the final file.
|
||||
|
||||
PHONY += modules
|
||||
modules: $(if $(KBUILD_BUILTIN),vmlinux) modules_check modules_prepare
|
||||
# *.ko are usually independent of vmlinux, but CONFIG_DEBUG_INFOBTF_MODULES
|
||||
# is an exception.
|
||||
ifdef CONFIG_DEBUG_INFO_BTF_MODULES
|
||||
modules: vmlinux
|
||||
endif
|
||||
|
||||
cmd_modules_order = $(AWK) '!x[$$0]++' $(real-prereqs) > $@
|
||||
|
||||
modules.order: $(subdir-modorder) FORCE
|
||||
$(call if_changed,modules_order)
|
||||
|
||||
targets += modules.order
|
||||
modules: modules_prepare
|
||||
|
||||
# Target to prepare building external modules
|
||||
PHONY += modules_prepare
|
||||
modules_prepare: prepare
|
||||
$(Q)$(MAKE) $(build)=scripts scripts/module.lds
|
||||
|
||||
|
@ -1574,7 +1567,8 @@ endif # CONFIG_MODULES
|
|||
# Directories & files removed with 'make clean'
|
||||
CLEAN_FILES += include/ksym vmlinux.symvers modules-only.symvers \
|
||||
modules.builtin modules.builtin.modinfo modules.nsdeps \
|
||||
compile_commands.json .thinlto-cache rust/test rust/doc
|
||||
compile_commands.json .thinlto-cache rust/test rust/doc \
|
||||
.vmlinux.objs .vmlinux.export.c
|
||||
|
||||
# Directories & files removed with 'make mrproper'
|
||||
MRPROPER_FILES += include/config include/generated \
|
||||
|
@ -1862,9 +1856,7 @@ else # KBUILD_EXTMOD
|
|||
KBUILD_BUILTIN :=
|
||||
KBUILD_MODULES := 1
|
||||
|
||||
build-dirs := $(KBUILD_EXTMOD)
|
||||
$(MODORDER): descend
|
||||
@:
|
||||
build-dir := $(KBUILD_EXTMOD)
|
||||
|
||||
compile_commands.json: $(extmod_prefix)compile_commands.json
|
||||
PHONY += compile_commands.json
|
||||
|
@ -1893,20 +1885,24 @@ help:
|
|||
@echo ' clean - remove generated files in module directory only'
|
||||
@echo ''
|
||||
|
||||
# no-op for external module builds
|
||||
PHONY += modules_prepare
|
||||
|
||||
endif # KBUILD_EXTMOD
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Modules
|
||||
|
||||
PHONY += modules modules_install
|
||||
PHONY += modules modules_install modules_prepare
|
||||
|
||||
ifdef CONFIG_MODULES
|
||||
|
||||
modules: modules_check
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
||||
$(MODORDER): $(build-dir)
|
||||
@:
|
||||
|
||||
# KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules.
|
||||
# This is solely useful to speed up test compiles.
|
||||
modules: modpost
|
||||
ifneq ($(KBUILD_MODPOST_NOFINAL),1)
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modfinal
|
||||
endif
|
||||
|
||||
PHONY += modules_check
|
||||
modules_check: $(MODORDER)
|
||||
|
@ -1933,8 +1929,15 @@ modules modules_install:
|
|||
@echo >&2 '***'
|
||||
@exit 1
|
||||
|
||||
KBUILD_MODULES :=
|
||||
|
||||
endif # CONFIG_MODULES
|
||||
|
||||
PHONY += modpost
|
||||
modpost: $(if $(single-build),, $(if $(KBUILD_BUILTIN), vmlinux.o)) \
|
||||
$(if $(KBUILD_MODULES), modules_check)
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
||||
|
||||
# Single targets
|
||||
# ---------------------------------------------------------------------------
|
||||
# To build individual files in subdirectories, you can do like this:
|
||||
|
@ -1954,47 +1957,32 @@ single-ko := $(sort $(filter %.ko, $(MAKECMDGOALS)))
|
|||
single-no-ko := $(filter-out $(single-ko), $(MAKECMDGOALS)) \
|
||||
$(foreach x, o mod, $(patsubst %.ko, %.$x, $(single-ko)))
|
||||
|
||||
$(single-ko): single_modpost
|
||||
$(single-ko): single_modules
|
||||
@:
|
||||
$(single-no-ko): descend
|
||||
$(single-no-ko): $(build-dir)
|
||||
@:
|
||||
|
||||
ifeq ($(KBUILD_EXTMOD),)
|
||||
# For the single build of in-tree modules, use a temporary file to avoid
|
||||
# the situation of modules_install installing an invalid modules.order.
|
||||
MODORDER := .modules.tmp
|
||||
endif
|
||||
|
||||
PHONY += single_modpost
|
||||
single_modpost: $(single-no-ko) modules_prepare
|
||||
# Remove MODORDER when done because it is not the real one.
|
||||
PHONY += single_modules
|
||||
single_modules: $(single-no-ko) modules_prepare
|
||||
$(Q){ $(foreach m, $(single-ko), echo $(extmod_prefix)$m;) } > $(MODORDER)
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
||||
ifneq ($(KBUILD_MODPOST_NOFINAL),1)
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modfinal
|
||||
endif
|
||||
$(Q)rm -f $(MODORDER)
|
||||
|
||||
KBUILD_MODULES := 1
|
||||
|
||||
export KBUILD_SINGLE_TARGETS := $(addprefix $(extmod_prefix), $(single-no-ko))
|
||||
|
||||
# trim unrelated directories
|
||||
build-dirs := $(foreach d, $(build-dirs), \
|
||||
$(if $(filter $(d)/%, $(KBUILD_SINGLE_TARGETS)), $(d)))
|
||||
single-goals := $(addprefix $(build-dir)/, $(single-no-ko))
|
||||
|
||||
endif
|
||||
|
||||
ifndef CONFIG_MODULES
|
||||
KBUILD_MODULES :=
|
||||
endif
|
||||
|
||||
# Handle descending into subdirectories listed in $(build-dirs)
|
||||
# Preset locale variables to speed up the build process. Limit locale
|
||||
# tweaks to this spot to avoid wrong language settings when running
|
||||
# make menuconfig etc.
|
||||
# Error messages still appears in the original language
|
||||
PHONY += descend $(build-dirs)
|
||||
descend: $(build-dirs)
|
||||
$(build-dirs): prepare
|
||||
$(Q)$(MAKE) $(build)=$@ \
|
||||
single-build=$(if $(filter-out $@/, $(filter $@/%, $(KBUILD_SINGLE_TARGETS))),1) \
|
||||
need-builtin=1 need-modorder=1
|
||||
PHONY += $(build-dir)
|
||||
$(build-dir): prepare
|
||||
$(Q)$(MAKE) $(build)=$@ need-builtin=1 need-modorder=1 $(single-goals)
|
||||
|
||||
clean-dirs := $(addprefix _clean_, $(clean-dirs))
|
||||
PHONY += $(clean-dirs) clean
|
||||
|
@ -2042,7 +2030,7 @@ quiet_cmd_gen_compile_commands = GEN $@
|
|||
cmd_gen_compile_commands = $(PYTHON3) $< -a $(AR) -o $@ $(filter-out $<, $(real-prereqs))
|
||||
|
||||
$(extmod_prefix)compile_commands.json: scripts/clang-tools/gen_compile_commands.py \
|
||||
$(if $(KBUILD_EXTMOD),,$(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)) \
|
||||
$(if $(KBUILD_EXTMOD),, vmlinux.a $(KBUILD_VMLINUX_LIBS)) \
|
||||
$(if $(CONFIG_MODULES), $(MODORDER)) FORCE
|
||||
$(call if_changed,gen_compile_commands)
|
||||
|
||||
|
|
|
@ -36,8 +36,6 @@ cflags-y += $(cpuflags-y)
|
|||
# BWX is most important, but we don't really want any emulation ever.
|
||||
KBUILD_CFLAGS += $(cflags-y) -Wa,-mev6
|
||||
|
||||
head-y := arch/alpha/kernel/head.o
|
||||
|
||||
libs-y += arch/alpha/lib/
|
||||
|
||||
# export what is needed by arch/alpha/boot/Makefile
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
# Makefile for the linux kernel.
|
||||
#
|
||||
|
||||
extra-y := head.o vmlinux.lds
|
||||
extra-y := vmlinux.lds
|
||||
asflags-y := $(KBUILD_CFLAGS)
|
||||
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 \
|
||||
systbls.o err_common.o io.o bugs.o termios.o
|
||||
|
||||
|
|
|
@ -82,8 +82,6 @@ KBUILD_CFLAGS += $(cflags-y)
|
|||
KBUILD_AFLAGS += $(KBUILD_CFLAGS)
|
||||
KBUILD_LDFLAGS += $(ldflags-y)
|
||||
|
||||
head-y := arch/arc/kernel/head.o
|
||||
|
||||
# w/o this dtb won't embed into kernel binary
|
||||
core-y += arch/arc/boot/dts/
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# 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-$(CONFIG_ISA_ARCOMPACT) += entry-compact.o intc-compact.o
|
||||
obj-$(CONFIG_ISA_ARCV2) += entry-arcv2.o intc-arcv2.o
|
||||
|
@ -31,4 +31,4 @@ else
|
|||
obj-y += ctx_sw_asm.o
|
||||
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
|
|||
|
||||
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
|
||||
# provide a means to avoid/resolve conflicts in multi-arch kernels.
|
||||
# Note: the 32kB below this value is reserved for use by the kernel
|
||||
|
|
|
@ -88,7 +88,7 @@ obj-$(CONFIG_VDSO) += vdso.o
|
|||
obj-$(CONFIG_EFI) += efi.o
|
||||
obj-$(CONFIG_PARAVIRT) += paravirt.o
|
||||
|
||||
head-y := head$(MMUEXT).o
|
||||
obj-y += head$(MMUEXT).o
|
||||
obj-$(CONFIG_DEBUG_LL) += debug.o
|
||||
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
|
||||
obj-$(CONFIG_ARM_PATCH_PHYS_VIRT) += phys2virt.o
|
||||
|
@ -108,4 +108,4 @@ obj-$(CONFIG_HAVE_ARM_SMCCC) += smccc-call.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)
|
|||
CC_FLAGS_FTRACE := -fpatchable-function-entry=2
|
||||
endif
|
||||
|
||||
# Default value
|
||||
head-y := arch/arm64/kernel/head.o
|
||||
|
||||
ifeq ($(CONFIG_KASAN_SW_TAGS), y)
|
||||
KASAN_SHADOW_SCALE_SHIFT := 4
|
||||
else ifeq ($(CONFIG_KASAN_GENERIC), y)
|
||||
|
|
|
@ -86,8 +86,8 @@ $(obj)/vdso-wrap.o: $(obj)/vdso/vdso.so
|
|||
$(obj)/vdso32-wrap.o: $(obj)/vdso32/vdso.so
|
||||
|
||||
obj-y += probes/
|
||||
head-y := head.o
|
||||
extra-y += $(head-y) vmlinux.lds
|
||||
obj-y += head.o
|
||||
extra-y += vmlinux.lds
|
||||
|
||||
ifeq ($(CONFIG_DEBUG_EFI),y)
|
||||
AFLAGS_head.o += -DVMLINUX_PATH="\"$(realpath $(objtree)/vmlinux)\""
|
||||
|
|
|
@ -59,8 +59,6 @@ LDFLAGS += -EL
|
|||
|
||||
KBUILD_AFLAGS += $(KBUILD_CFLAGS)
|
||||
|
||||
head-y := arch/csky/kernel/head.o
|
||||
|
||||
core-y += arch/csky/$(CSKYABI)/
|
||||
|
||||
libs-y += arch/csky/lib/ \
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# 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 += process.o cpu-probe.o ptrace.o stacktrace.o
|
||||
obj-y += probes/
|
||||
|
|
|
@ -32,5 +32,3 @@ KBUILD_LDFLAGS += $(ldflags-y)
|
|||
TIR_NAME := r19
|
||||
KBUILD_CFLAGS += -ffixed-$(TIR_NAME) -DTHREADINFO_REG=$(TIR_NAME) -D__linux__
|
||||
KBUILD_AFLAGS += -DTHREADINFO_REG=$(TIR_NAME)
|
||||
|
||||
head-y := arch/hexagon/kernel/head.o
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# 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-y += setup.o irq_cpu.o traps.o syscalltab.o signal.o time.o
|
||||
|
|
|
@ -44,7 +44,6 @@ quiet_cmd_objcopy = OBJCOPY $@
|
|||
cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
|
||||
|
||||
KBUILD_CFLAGS += $(cflags-y)
|
||||
head-y := arch/ia64/kernel/head.o
|
||||
|
||||
libs-y += arch/ia64/lib/
|
||||
|
||||
|
|
|
@ -7,9 +7,9 @@ ifdef CONFIG_DYNAMIC_FTRACE
|
|||
CFLAGS_REMOVE_ftrace.o = -pg
|
||||
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 \
|
||||
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 \
|
||||
|
@ -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_STACKTRACE) += stacktrace.o
|
||||
|
||||
obj-$(CONFIG_IA64_ESI) += esi.o
|
||||
ifneq ($(CONFIG_IA64_ESI),)
|
||||
obj-y += esi_stub.o # must be in kernel proper
|
||||
endif
|
||||
obj-$(CONFIG_IA64_ESI) += esi.o esi_stub.o # must be in kernel proper
|
||||
obj-$(CONFIG_INTEL_IOMMU) += pci-dma.o
|
||||
|
||||
obj-$(CONFIG_ELF_CORE) += elfcore.o
|
||||
|
|
|
@ -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')
|
||||
endif
|
||||
|
||||
head-y := arch/loongarch/kernel/head.o
|
||||
|
||||
libs-y += arch/loongarch/lib/
|
||||
libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
|
||||
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
# 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 \
|
||||
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
|
|||
obj-$(CONFIG_UCSIMM) += ucsimm.o
|
||||
obj-$(CONFIG_UCDIMM) += ucsimm.o
|
||||
|
||||
extra-y := head.o
|
||||
obj-y += head.o
|
||||
|
|
|
@ -86,15 +86,6 @@ ifdef CONFIG_KGDB
|
|||
KBUILD_CFLAGS := $(subst -fomit-frame-pointer,,$(KBUILD_CFLAGS)) -g
|
||||
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/
|
||||
|
||||
|
||||
|
|
|
@ -45,4 +45,4 @@ obj-$(CONFIG_STMARK2) += stmark2.o
|
|||
obj-$(CONFIG_PCI) += pci.o
|
||||
|
||||
obj-y += gpio.o
|
||||
extra-y := head.o
|
||||
obj-y += head.o
|
||||
|
|
|
@ -3,19 +3,20 @@
|
|||
# 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
|
||||
|
||||
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-$(CONFIG_MMU_MOTOROLA) += ints.o vectors.o
|
||||
|
|
|
@ -48,7 +48,6 @@ CPUFLAGS-1 += $(call cc-option,-mcpu=v$(CPU_VER))
|
|||
# r31 holds current when in kernel mode
|
||||
KBUILD_CFLAGS += -ffixed-r31 $(CPUFLAGS-y) $(CPUFLAGS-1) $(CPUFLAGS-2)
|
||||
|
||||
head-y := arch/microblaze/kernel/head.o
|
||||
libs-y += arch/microblaze/lib/
|
||||
|
||||
boot := arch/microblaze/boot
|
||||
|
|
|
@ -12,9 +12,9 @@ CFLAGS_REMOVE_ftrace.o = -pg
|
|||
CFLAGS_REMOVE_process.o = -pg
|
||||
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 \
|
||||
process.o prom.o ptrace.o \
|
||||
reset.o setup.o signal.o sys_microblaze.o timer.o traps.o unwind.o
|
||||
|
|
|
@ -324,8 +324,6 @@ endif
|
|||
|
||||
OBJCOPYFLAGS += --remove-section=.reginfo
|
||||
|
||||
head-y := arch/mips/kernel/head.o
|
||||
|
||||
libs-y += arch/mips/lib/
|
||||
libs-$(CONFIG_MIPS_FP_SUPPORT) += arch/mips/math-emu/
|
||||
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
# 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 \
|
||||
syscall.o time.o topology.o traps.o unaligned.o watch.o \
|
||||
vdso.o cacheinfo.o
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
obj-y += kernel/ mm/ platform/ boot/dts/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
|
|
@ -37,10 +37,7 @@ KBUILD_CFLAGS += -DUTS_SYSNAME=\"$(UTS_SYSNAME)\"
|
|||
KBUILD_CFLAGS += -fno-builtin
|
||||
KBUILD_CFLAGS += -G 0
|
||||
|
||||
head-y := arch/nios2/kernel/head.o
|
||||
libs-y += arch/nios2/lib/ $(LIBGCC)
|
||||
core-y += arch/nios2/kernel/ arch/nios2/mm/
|
||||
core-y += arch/nios2/platform/
|
||||
|
||||
INSTALL_PATH ?= /tftpboot
|
||||
nios2-boot := arch/$(ARCH)/boot
|
||||
|
@ -48,8 +45,6 @@ BOOT_TARGETS = vmImage zImage
|
|||
PHONY += $(BOOT_TARGETS) install
|
||||
KBUILD_IMAGE := $(nios2-boot)/vmImage
|
||||
|
||||
core-y += $(nios2-boot)/dts/
|
||||
|
||||
all: vmImage
|
||||
|
||||
$(BOOT_TARGETS): vmlinux
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
# Makefile for the nios2 linux kernel.
|
||||
#
|
||||
|
||||
extra-y += head.o
|
||||
extra-y += vmlinux.lds
|
||||
|
||||
obj-y += head.o
|
||||
obj-y += cpuinfo.o
|
||||
obj-y += entry.o
|
||||
obj-y += insnemu.o
|
||||
|
|
|
@ -55,8 +55,6 @@ ifeq ($(CONFIG_OPENRISC_HAVE_INST_SEXT),y)
|
|||
KBUILD_CFLAGS += $(call cc-option,-msext)
|
||||
endif
|
||||
|
||||
head-y := arch/openrisc/kernel/head.o
|
||||
|
||||
libs-y += $(LIBGCC)
|
||||
|
||||
PHONY += vmlinux.bin
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
# 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 \
|
||||
sys_call_table.o unwinder.o
|
||||
|
||||
|
|
|
@ -113,8 +113,6 @@ cflags-$(CONFIG_PA7100LC) += -march=1.1 -mschedule=7100LC
|
|||
cflags-$(CONFIG_PA7300LC) += -march=1.1 -mschedule=7300
|
||||
cflags-$(CONFIG_PA8X00) += -march=2.0 -mschedule=8000
|
||||
|
||||
head-y := arch/parisc/kernel/head.o
|
||||
|
||||
KBUILD_CFLAGS += $(cflags-y)
|
||||
LIBGCC := $(shell $(CC) -print-libgcc-file-name)
|
||||
export LIBGCC
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
# 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 \
|
||||
ptrace.o hardware.o inventory.o drivers.o alternative.o \
|
||||
signal.o hpmc.o real2.o parisc_ksyms.o unaligned.o \
|
||||
|
|
|
@ -232,18 +232,6 @@ KBUILD_CFLAGS += $(cpu-as-y)
|
|||
KBUILD_AFLAGS += $(aflags-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
|
||||
all: zImage
|
||||
|
||||
|
|
|
@ -433,7 +433,7 @@ fi
|
|||
# Extract kernel version information, some platforms want to include
|
||||
# it in the image header
|
||||
version=`${CROSS}strings "$kernel" | grep '^Linux version [-0-9.]' | \
|
||||
cut -d' ' -f3`
|
||||
head -n1 | cut -d' ' -f3`
|
||||
if [ -n "$version" ]; then
|
||||
uboot_version="-n Linux-$version"
|
||||
fi
|
||||
|
|
|
@ -116,12 +116,12 @@ obj-$(CONFIG_PPC_E500) += cpu_setup_e500.o
|
|||
obj-$(CONFIG_PPC_DOORBELL) += dbell.o
|
||||
obj-$(CONFIG_JUMP_LABEL) += jump_label.o
|
||||
|
||||
extra-$(CONFIG_PPC64) := head_64.o
|
||||
extra-$(CONFIG_PPC_BOOK3S_32) := head_book3s_32.o
|
||||
extra-$(CONFIG_40x) := head_40x.o
|
||||
extra-$(CONFIG_44x) := head_44x.o
|
||||
extra-$(CONFIG_PPC_85xx) := head_85xx.o
|
||||
extra-$(CONFIG_PPC_8xx) := head_8xx.o
|
||||
obj-$(CONFIG_PPC64) += head_64.o
|
||||
obj-$(CONFIG_PPC_BOOK3S_32) += head_book3s_32.o
|
||||
obj-$(CONFIG_40x) += head_40x.o
|
||||
obj-$(CONFIG_44x) += head_44x.o
|
||||
obj-$(CONFIG_PPC_8xx) += head_8xx.o
|
||||
obj-$(CONFIG_FSL_BOOKE) += head_85xx.o
|
||||
extra-y += vmlinux.lds
|
||||
|
||||
obj-$(CONFIG_RELOCATABLE) += reloc_$(BITS).o
|
||||
|
@ -196,10 +196,10 @@ KCOV_INSTRUMENT_paca.o := n
|
|||
CFLAGS_setup_64.o += -fno-stack-protector
|
||||
CFLAGS_paca.o += -fno-stack-protector
|
||||
|
||||
extra-$(CONFIG_PPC_FPU) += fpu.o
|
||||
extra-$(CONFIG_ALTIVEC) += vector.o
|
||||
extra-$(CONFIG_PPC64) += entry_64.o
|
||||
extra-$(CONFIG_PPC_OF_BOOT_TRAMPOLINE) += prom_init.o
|
||||
obj-$(CONFIG_PPC_FPU) += fpu.o
|
||||
obj-$(CONFIG_ALTIVEC) += vector.o
|
||||
obj-$(CONFIG_PPC64) += entry_64.o
|
||||
obj-$(CONFIG_PPC_OF_BOOT_TRAMPOLINE) += prom_init.o
|
||||
|
||||
extra-$(CONFIG_PPC_OF_BOOT_TRAMPOLINE) += prom_init_check
|
||||
|
||||
|
|
|
@ -110,8 +110,6 @@ else
|
|||
KBUILD_IMAGE := $(boot)/Image.gz
|
||||
endif
|
||||
|
||||
head-y := arch/riscv/kernel/head.o
|
||||
|
||||
libs-y += arch/riscv/lib/
|
||||
libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
|
||||
|
||||
|
|
|
@ -28,9 +28,9 @@ KASAN_SANITIZE_cpufeature.o := n
|
|||
endif
|
||||
endif
|
||||
|
||||
extra-y += head.o
|
||||
extra-y += vmlinux.lds
|
||||
|
||||
obj-y += head.o
|
||||
obj-y += soc.o
|
||||
obj-$(CONFIG_RISCV_ALTERNATIVE) += alternative.o
|
||||
obj-y += cpu.o
|
||||
|
|
|
@ -119,8 +119,6 @@ export KBUILD_CFLAGS_DECOMPRESSOR
|
|||
|
||||
OBJCOPYFLAGS := -O binary
|
||||
|
||||
head-y := arch/s390/kernel/head64.o
|
||||
|
||||
libs-y += arch/s390/lib/
|
||||
drivers-y += drivers/s390/
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <generated/utsversion.h>
|
||||
#include <generated/utsrelease.h>
|
||||
#include <generated/compile.h>
|
||||
#include "boot.h"
|
||||
|
|
|
@ -33,7 +33,7 @@ CFLAGS_stacktrace.o += -fno-optimize-sibling-calls
|
|||
CFLAGS_dumpstack.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 += 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
|
||||
|
@ -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 += 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
|
||||
CFLAGS_REMOVE_nospec-branch.o += $(CC_FLAGS_EXPOLINE)
|
||||
|
|
|
@ -114,8 +114,6 @@ endif
|
|||
|
||||
export ld-bfd
|
||||
|
||||
head-y := arch/sh/kernel/head_32.o
|
||||
|
||||
# Mach groups
|
||||
machdir-$(CONFIG_SOLUTION_ENGINE) += mach-se
|
||||
machdir-$(CONFIG_SH_HP6XX) += mach-hp6xx
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# Makefile for the Linux/SuperH kernel.
|
||||
#
|
||||
|
||||
extra-y := head_32.o vmlinux.lds
|
||||
extra-y := vmlinux.lds
|
||||
|
||||
ifdef CONFIG_FUNCTION_TRACER
|
||||
# Do not profile debug and lowlevel utilities
|
||||
|
@ -12,7 +12,7 @@ endif
|
|||
|
||||
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 \
|
||||
machvec.o nmi_debug.o process.o \
|
||||
process_32.o ptrace.o ptrace_32.o \
|
||||
|
|
|
@ -56,8 +56,6 @@ endif
|
|||
|
||||
endif
|
||||
|
||||
head-y := arch/sparc/kernel/head_$(BITS).o
|
||||
|
||||
libs-y += arch/sparc/prom/
|
||||
libs-y += arch/sparc/lib/
|
||||
|
||||
|
|
|
@ -7,8 +7,6 @@
|
|||
asflags-y := -ansi
|
||||
ccflags-y := -Werror
|
||||
|
||||
extra-y := head_$(BITS).o
|
||||
|
||||
# Undefine sparc when processing vmlinux.lds - it is used
|
||||
# And teach CPP we are doing $(BITS) builds (for this case)
|
||||
CPPFLAGS_vmlinux.lds := -Usparc -m$(BITS)
|
||||
|
@ -22,6 +20,7 @@ CFLAGS_REMOVE_perf_event.o := -pg
|
|||
CFLAGS_REMOVE_pcr.o := -pg
|
||||
endif
|
||||
|
||||
obj-y := head_$(BITS).o
|
||||
obj-$(CONFIG_SPARC64) += urtt_fill.o
|
||||
obj-$(CONFIG_SPARC32) += entry.o wof.o wuf.o
|
||||
obj-$(CONFIG_SPARC32) += etrap_32.o
|
||||
|
|
|
@ -244,11 +244,6 @@ archheaders:
|
|||
###
|
||||
# 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/
|
||||
|
||||
# drivers-y are linked after core-y
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include <linux/uts.h>
|
||||
#include <linux/utsname.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <generated/utsversion.h>
|
||||
#include <generated/utsrelease.h>
|
||||
|
||||
#define _SETUP
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
*/
|
||||
|
||||
#include "boot.h"
|
||||
#include <generated/utsversion.h>
|
||||
#include <generated/utsrelease.h>
|
||||
#include <generated/compile.h>
|
||||
|
||||
|
|
|
@ -3,10 +3,6 @@
|
|||
# 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
|
||||
|
||||
CPPFLAGS_vmlinux.lds += -U$(UTS_MACHINE)
|
||||
|
@ -42,7 +38,11 @@ KCOV_INSTRUMENT := n
|
|||
|
||||
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-y += traps.o idt.o irq.o irq_$(BITS).o dumpstack_$(BITS).o
|
||||
obj-y += time.o ioport.o dumpstack.o nmi.o
|
||||
|
|
|
@ -55,8 +55,6 @@ KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(vardirs) $(plfdirs))
|
|||
|
||||
KBUILD_DEFCONFIG := iss_defconfig
|
||||
|
||||
head-y := arch/xtensa/kernel/head.o
|
||||
|
||||
libs-y += arch/xtensa/lib/
|
||||
|
||||
boot := arch/xtensa/boot
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
# 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 \
|
||||
vectors.o
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ dml_ccflags := -mhard-float -maltivec
|
|||
endif
|
||||
|
||||
ifdef CONFIG_CC_IS_GCC
|
||||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||
ifneq ($(call gcc-min-version, 70100),y)
|
||||
IS_OLD_GCC = 1
|
||||
endif
|
||||
endif
|
||||
|
|
|
@ -10,8 +10,10 @@
|
|||
#include <linux/compiler.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
/* __used is needed to keep __crc_* for LTO */
|
||||
#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__ */
|
||||
|
|
2
init/.gitignore
vendored
Normal file
2
init/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
/utsversion-tmp.h
|
|
@ -19,20 +19,43 @@ mounts-y := do_mounts.o
|
|||
mounts-$(CONFIG_BLK_DEV_RAM) += do_mounts_rd.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.
|
||||
# mkcompile_h will make sure to only update the
|
||||
# actual file if its content has changed.
|
||||
smp-flag-$(CONFIG_SMP) := SMP
|
||||
preempt-flag-$(CONFIG_PREEMPT_BUILD) := PREEMPT
|
||||
preempt-flag-$(CONFIG_PREEMPT_DYNAMIC) := PREEMPT_DYNAMIC
|
||||
preempt-flag-$(CONFIG_PREEMPT_RT) := PREEMPT_RT
|
||||
|
||||
quiet_cmd_compile.h = CHK $@
|
||||
cmd_compile.h = \
|
||||
$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \
|
||||
"$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT_BUILD)" \
|
||||
"$(CONFIG_PREEMPT_DYNAMIC)" "$(CONFIG_PREEMPT_RT)" \
|
||||
"$(CONFIG_CC_VERSION_TEXT)" "$(LD)"
|
||||
build-version = $(or $(KBUILD_BUILD_VERSION), $(build-version-auto))
|
||||
build-timestamp = $(or $(KBUILD_BUILD_TIMESTAMP), $(build-timestamp-auto))
|
||||
|
||||
include/generated/compile.h: FORCE
|
||||
$(call cmd,compile.h)
|
||||
# Maximum length of UTS_VERSION is 64 chars
|
||||
filechk_uts_version = \
|
||||
utsver=$$(echo '$(pound)'"$(build-version)" $(smp-flag-y) $(preempt-flag-y) "$(build-timestamp)" | cut -b -64); \
|
||||
echo '$(pound)'define UTS_VERSION \""$${utsver}"\"
|
||||
|
||||
#
|
||||
# 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
|
||||
|
|
10
init/build-version
Executable file
10
init/build-version
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/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}
|
31
init/version-timestamp.c
Normal file
31
init/version-timestamp.c
Normal file
|
@ -0,0 +1,31 @@
|
|||
// 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 @@
|
|||
#include <linux/uts.h>
|
||||
#include <linux/utsname.h>
|
||||
#include <generated/utsrelease.h>
|
||||
#include <linux/version.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)
|
||||
{
|
||||
size_t bufsize = sizeof(init_uts_ns.name.nodename);
|
||||
|
@ -52,11 +33,6 @@ static int __init early_hostname(char *arg)
|
|||
}
|
||||
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[] =
|
||||
"%s version %s"
|
||||
" (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")"
|
||||
|
@ -64,3 +40,16 @@ const char linux_proc_banner[] =
|
|||
|
||||
BUILD_SALT;
|
||||
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
|
|||
fi
|
||||
all_dirs="$all_dirs $dir_list"
|
||||
|
||||
# include/generated/compile.h is ignored because it is touched even when none
|
||||
# of the source files changed.
|
||||
# include/generated/utsversion.h is ignored because it is generated after this
|
||||
# script is executed. (utsversion.h is unneeded for kheaders)
|
||||
#
|
||||
# When Kconfig regenerates include/generated/autoconf.h, its timestamp 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"
|
|||
#
|
||||
# Ignore them for md5 calculation to avoid pointless regeneration.
|
||||
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" |
|
||||
xargs ls -l | md5sum | cut -d ' ' -f1)"
|
||||
|
||||
|
|
|
@ -343,12 +343,16 @@ config LZ4HC_COMPRESS
|
|||
config LZ4_DECOMPRESS
|
||||
tristate
|
||||
|
||||
config ZSTD_COMPRESS
|
||||
config ZSTD_COMMON
|
||||
select XXHASH
|
||||
tristate
|
||||
|
||||
config ZSTD_COMPRESS
|
||||
select ZSTD_COMMON
|
||||
tristate
|
||||
|
||||
config ZSTD_DECOMPRESS
|
||||
select XXHASH
|
||||
select ZSTD_COMMON
|
||||
tristate
|
||||
|
||||
source "lib/xz/Kconfig"
|
||||
|
|
|
@ -10,14 +10,10 @@
|
|||
# ################################################################
|
||||
obj-$(CONFIG_ZSTD_COMPRESS) += zstd_compress.o
|
||||
obj-$(CONFIG_ZSTD_DECOMPRESS) += zstd_decompress.o
|
||||
obj-$(CONFIG_ZSTD_COMMON) += zstd_common.o
|
||||
|
||||
zstd_compress-y := \
|
||||
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/hist.o \
|
||||
compress/huf_compress.o \
|
||||
|
@ -33,12 +29,14 @@ zstd_compress-y := \
|
|||
|
||||
zstd_decompress-y := \
|
||||
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/entropy_common.o \
|
||||
common/error_private.o \
|
||||
common/fse_decompress.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 @@
|
|||
/* *************************************
|
||||
* Dependencies
|
||||
***************************************/
|
||||
#include <linux/module.h>
|
||||
#include "mem.h"
|
||||
#include "error_private.h" /* ERR_*, ERROR */
|
||||
#define FSE_STATIC_LINKING_ONLY /* FSE_MIN_TABLELOG */
|
||||
|
@ -239,7 +240,7 @@ size_t FSE_readNCount(
|
|||
{
|
||||
return FSE_readNCount_bmi2(normalizedCounter, maxSVPtr, tableLogPtr, headerBuffer, hbSize, /* bmi2 */ 0);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(FSE_readNCount);
|
||||
|
||||
/*! HUF_readStats() :
|
||||
Read compact Huffman tree, saved by HUF_writeCTable().
|
||||
|
@ -255,6 +256,7 @@ size_t HUF_readStats(BYTE* huffWeight, size_t hwSize, U32* rankStats,
|
|||
U32 wksp[HUF_READ_STATS_WORKSPACE_SIZE_U32];
|
||||
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
|
||||
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,
|
|||
(void)bmi2;
|
||||
return HUF_readStats_body_default(huffWeight, hwSize, rankStats, nbSymbolsPtr, tableLogPtr, src, srcSize, workSpace, wkspSize);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(HUF_readStats_wksp);
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
/*-*************************************
|
||||
* Dependencies
|
||||
***************************************/
|
||||
#include <linux/module.h>
|
||||
#define ZSTD_DEPS_NEED_MALLOC
|
||||
#include "zstd_deps.h" /* ZSTD_malloc, ZSTD_calloc, ZSTD_free, ZSTD_memset */
|
||||
#include "error_private.h"
|
||||
|
@ -35,14 +36,17 @@ const char* ZSTD_versionString(void) { return ZSTD_VERSION_STRING; }
|
|||
* tells if a return value is an error code
|
||||
* symbol is required for external callers */
|
||||
unsigned ZSTD_isError(size_t code) { return ERR_isError(code); }
|
||||
EXPORT_SYMBOL_GPL(ZSTD_isError);
|
||||
|
||||
/*! ZSTD_getErrorName() :
|
||||
* provides error code string from function result (useful for debugging) */
|
||||
const char* ZSTD_getErrorName(size_t code) { return ERR_getErrorName(code); }
|
||||
EXPORT_SYMBOL_GPL(ZSTD_getErrorName);
|
||||
|
||||
/*! ZSTD_getError() :
|
||||
* convert a `size_t` function result into a proper ZSTD_errorCode enum */
|
||||
ZSTD_ErrorCode ZSTD_getErrorCode(size_t code) { return ERR_getErrorCode(code); }
|
||||
EXPORT_SYMBOL_GPL(ZSTD_getErrorCode);
|
||||
|
||||
/*! ZSTD_getErrorString() :
|
||||
* provides error code string from enum */
|
||||
|
@ -59,6 +63,7 @@ void* ZSTD_customMalloc(size_t size, ZSTD_customMem customMem)
|
|||
return customMem.customAlloc(customMem.opaque, size);
|
||||
return ZSTD_malloc(size);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ZSTD_customMalloc);
|
||||
|
||||
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);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ZSTD_customCalloc);
|
||||
|
||||
void ZSTD_customFree(void* ptr, ZSTD_customMem customMem)
|
||||
{
|
||||
|
@ -81,3 +87,7 @@ void ZSTD_customFree(void* ptr, ZSTD_customMem customMem)
|
|||
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)),\
|
|||
quiet_redirect :=
|
||||
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
|
||||
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
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
|
||||
src := $(obj)
|
||||
|
||||
PHONY := __build
|
||||
__build:
|
||||
PHONY := $(obj)/
|
||||
$(obj)/:
|
||||
|
||||
# Init all relevant variables used in kbuild files so
|
||||
# 1) they have correct type
|
||||
|
@ -383,7 +383,7 @@ $(obj)/%.o: $(src)/%.S FORCE
|
|||
|
||||
targets += $(filter-out $(subdir-builtin), $(real-obj-y))
|
||||
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)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -434,7 +434,7 @@ $(obj)/built-in.a: $(real-obj-y) FORCE
|
|||
|
||||
cmd_modules_order = { $(foreach m, $(real-prereqs), \
|
||||
$(if $(filter %/modules.order, $m), cat $m, echo $(patsubst %.o,%.ko,$m));) :; } \
|
||||
| $(AWK) '!x[$$0]++' - > $@
|
||||
> $@
|
||||
|
||||
$(obj)/modules.order: $(obj-m) FORCE
|
||||
$(call if_changed,modules_order)
|
||||
|
@ -460,8 +460,6 @@ $(multi-obj-m): %.o: %.mod FORCE
|
|||
$(call if_changed_rule,ld_multi_m)
|
||||
$(call multi_depend, $(multi-obj-m), .o, -objs -y -m)
|
||||
|
||||
targets := $(filter-out $(PHONY), $(targets))
|
||||
|
||||
# Add intermediate targets:
|
||||
# When building objects with specific suffix patterns, add intermediate
|
||||
# targets that the final targets are derived from.
|
||||
|
@ -480,42 +478,19 @@ targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \
|
|||
# Build
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
ifdef single-build
|
||||
|
||||
KBUILD_SINGLE_TARGETS := $(filter $(obj)/%, $(KBUILD_SINGLE_TARGETS))
|
||||
|
||||
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),)
|
||||
# Nothing to do in this directory. Do not include any .*.cmd file for speed-up
|
||||
targets :=
|
||||
else
|
||||
targets += $(curdir-single)
|
||||
endif
|
||||
|
||||
else
|
||||
|
||||
__build: $(if $(KBUILD_BUILTIN), $(targets-for-builtin)) \
|
||||
$(obj)/: $(if $(KBUILD_BUILTIN), $(targets-for-builtin)) \
|
||||
$(if $(KBUILD_MODULES), $(targets-for-modules)) \
|
||||
$(subdir-ym) $(always-y)
|
||||
@:
|
||||
|
||||
endif
|
||||
# Single targets
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
single-subdirs := $(foreach d, $(subdir-ym), $(if $(filter $d/%, $(MAKECMDGOALS)), $d))
|
||||
single-subdir-goals := $(filter $(addsuffix /%, $(single-subdirs)), $(MAKECMDGOALS))
|
||||
|
||||
$(single-subdir-goals): $(single-subdirs)
|
||||
@:
|
||||
|
||||
# Descending
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -523,9 +498,9 @@ endif
|
|||
PHONY += $(subdir-ym)
|
||||
$(subdir-ym):
|
||||
$(Q)$(MAKE) $(build)=$@ \
|
||||
$(if $(filter $@/, $(KBUILD_SINGLE_TARGETS)),single-build=) \
|
||||
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.
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -534,6 +509,9 @@ PHONY += 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
|
||||
# may be building above, using $(if_changed{,_dep}). As an
|
||||
# optimization, we don't need to read them if the target does not
|
||||
|
|
|
@ -61,9 +61,13 @@ cc-option-yn = $(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-ifversion
|
||||
# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
|
||||
cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4))
|
||||
# gcc-min-version
|
||||
# Usage: cflags-$(call gcc-min-version, 70100) += -foo
|
||||
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
|
||||
# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
|
||||
|
|
|
@ -48,7 +48,7 @@ else
|
|||
ifdef CONFIG_CC_IS_CLANG
|
||||
KBUILD_CFLAGS += -Wno-initializer-overrides
|
||||
# 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
|
||||
KBUILD_CFLAGS += -Wno-format
|
||||
# Then re-enable flags that were part of the -Wformat group that aren't
|
||||
|
@ -56,7 +56,7 @@ KBUILD_CFLAGS += -Wno-format
|
|||
KBUILD_CFLAGS += -Wformat-extra-args -Wformat-invalid-specifier
|
||||
KBUILD_CFLAGS += -Wformat-zero-length -Wnonnull
|
||||
# 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
|
||||
endif
|
||||
endif
|
||||
|
|
|
@ -90,6 +90,7 @@ always-y += $(dtb-y)
|
|||
|
||||
# Add subdir path
|
||||
|
||||
ifneq ($(obj),.)
|
||||
extra-y := $(addprefix $(obj)/,$(extra-y))
|
||||
always-y := $(addprefix $(obj)/,$(always-y))
|
||||
targets := $(addprefix $(obj)/,$(targets))
|
||||
|
@ -101,6 +102,7 @@ multi-obj-m := $(addprefix $(obj)/, $(multi-obj-m))
|
|||
multi-dtb-y := $(addprefix $(obj)/, $(multi-dtb-y))
|
||||
real-dtb-y := $(addprefix $(obj)/, $(real-dtb-y))
|
||||
subdir-ym := $(addprefix $(obj)/,$(subdir-ym))
|
||||
endif
|
||||
|
||||
# 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.
|
||||
|
@ -241,25 +243,26 @@ ifdef CONFIG_OBJTOOL
|
|||
|
||||
objtool := $(objtree)/tools/objtool/objtool
|
||||
|
||||
objtool_args = \
|
||||
$(if $(CONFIG_HAVE_JUMP_LABEL_HACK), --hacks=jump_label) \
|
||||
$(if $(CONFIG_HAVE_NOINSTR_HACK), --hacks=noinstr) \
|
||||
$(if $(CONFIG_X86_KERNEL_IBT), --ibt) \
|
||||
$(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount) \
|
||||
$(if $(CONFIG_UNWINDER_ORC), --orc) \
|
||||
$(if $(CONFIG_RETPOLINE), --retpoline) \
|
||||
$(if $(CONFIG_RETHUNK), --rethunk) \
|
||||
$(if $(CONFIG_SLS), --sls) \
|
||||
$(if $(CONFIG_STACK_VALIDATION), --stackval) \
|
||||
$(if $(CONFIG_HAVE_STATIC_CALL_INLINE), --static-call) \
|
||||
$(if $(CONFIG_HAVE_UACCESS_VALIDATION), --uaccess) \
|
||||
objtool-args-$(CONFIG_HAVE_JUMP_LABEL_HACK) += --hacks=jump_label
|
||||
objtool-args-$(CONFIG_HAVE_NOINSTR_HACK) += --hacks=noinstr
|
||||
objtool-args-$(CONFIG_X86_KERNEL_IBT) += --ibt
|
||||
objtool-args-$(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL) += --mcount
|
||||
objtool-args-$(CONFIG_UNWINDER_ORC) += --orc
|
||||
objtool-args-$(CONFIG_RETPOLINE) += --retpoline
|
||||
objtool-args-$(CONFIG_RETHUNK) += --rethunk
|
||||
objtool-args-$(CONFIG_SLS) += --sls
|
||||
objtool-args-$(CONFIG_STACK_VALIDATION) += --stackval
|
||||
objtool-args-$(CONFIG_HAVE_STATIC_CALL_INLINE) += --static-call
|
||||
objtool-args-$(CONFIG_HAVE_UACCESS_VALIDATION) += --uaccess
|
||||
objtool-args-$(CONFIG_GCOV_KERNEL) += --no-unreachable
|
||||
|
||||
objtool-args = $(objtool-args-y) \
|
||||
$(if $(delay-objtool), --link) \
|
||||
$(if $(part-of-module), --module) \
|
||||
$(if $(CONFIG_GCOV_KERNEL), --no-unreachable)
|
||||
$(if $(part-of-module), --module)
|
||||
|
||||
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)
|
||||
|
||||
endif # CONFIG_OBJTOOL
|
||||
|
|
|
@ -57,7 +57,7 @@ if_changed_except = $(if $(call newer_prereqs_except,$(2))$(cmd-check), \
|
|||
printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:)
|
||||
|
||||
# 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)
|
||||
ifdef CONFIG_DEBUG_INFO_BTF_MODULES
|
||||
+$(if $(newer-prereqs),$(call cmd,btf_ko))
|
||||
|
|
|
@ -32,49 +32,58 @@
|
|||
# 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.
|
||||
|
||||
# KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules.
|
||||
# This is solely useful to speed up test compiles
|
||||
|
||||
PHONY := __modpost
|
||||
__modpost:
|
||||
|
||||
include include/config/auto.conf
|
||||
include $(srctree)/scripts/Kbuild.include
|
||||
|
||||
MODPOST = scripts/mod/modpost \
|
||||
modpost-args = \
|
||||
$(if $(CONFIG_MODVERSIONS),-m) \
|
||||
$(if $(CONFIG_MODULE_SRCVERSION_ALL),-a) \
|
||||
$(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \
|
||||
$(if $(KBUILD_NSDEPS),-d $(MODULES_NSDEPS)) \
|
||||
$(if $(CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS)$(KBUILD_NSDEPS),-N) \
|
||||
-o $@
|
||||
|
||||
ifdef MODPOST_VMLINUX
|
||||
|
||||
quiet_cmd_modpost = MODPOST $@
|
||||
cmd_modpost = $(MODPOST) $<
|
||||
|
||||
vmlinux.symvers: vmlinux.o
|
||||
$(call cmd,modpost)
|
||||
|
||||
__modpost: vmlinux.symvers
|
||||
|
||||
else
|
||||
# 'make -i -k' ignores compile errors, and builds as many modules as possible.
|
||||
ifneq ($(findstring i,$(filter-out --%,$(MAKEFLAGS))),)
|
||||
modpost-args += -n
|
||||
endif
|
||||
|
||||
ifeq ($(KBUILD_EXTMOD),)
|
||||
|
||||
input-symdump := vmlinux.symvers
|
||||
output-symdump := modules-only.symvers
|
||||
# Generate the list of in-tree objects in vmlinux
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
quiet_cmd_cat = GEN $@
|
||||
cmd_cat = cat $(real-prereqs) > $@
|
||||
# This is used to retrieve symbol versions generated by genksyms.
|
||||
ifdef CONFIG_MODVERSIONS
|
||||
vmlinux.symvers Module.symvers: .vmlinux.objs
|
||||
endif
|
||||
|
||||
ifneq ($(wildcard vmlinux.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.
|
||||
|
||||
__modpost: Module.symvers
|
||||
Module.symvers: vmlinux.symvers modules-only.symvers FORCE
|
||||
$(call if_changed,cat)
|
||||
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 += Module.symvers
|
||||
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
|
||||
|
||||
else
|
||||
|
@ -86,54 +95,37 @@ src := $(obj)
|
|||
# Include the module's Makefile to find KBUILD_EXTRA_SYMBOLS
|
||||
include $(or $(wildcard $(src)/Kbuild), $(src)/Makefile)
|
||||
|
||||
# modpost option for external modules
|
||||
MODPOST += -e
|
||||
|
||||
input-symdump := Module.symvers $(KBUILD_EXTRA_SYMBOLS)
|
||||
module.symvers-if-present := $(wildcard Module.symvers)
|
||||
output-symdump := $(KBUILD_EXTMOD)/Module.symvers
|
||||
missing-input := $(filter-out $(module.symvers-if-present), Module.symvers)
|
||||
|
||||
modpost-args += -e $(addprefix -i ,$(module.symvers-if-present) $(KBUILD_EXTRA_SYMBOLS))
|
||||
|
||||
endif # ($(KBUILD_EXTMOD),)
|
||||
|
||||
ifneq ($(KBUILD_MODPOST_WARN)$(missing-input),)
|
||||
modpost-args += -w
|
||||
endif
|
||||
|
||||
existing-input-symdump := $(wildcard $(input-symdump))
|
||||
modorder-if-needed := $(if $(KBUILD_MODULES), $(MODORDER))
|
||||
|
||||
# modpost options for modules (both in-kernel and external)
|
||||
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 ($(findstring i,$(filter-out --%,$(MAKEFLAGS))),)
|
||||
MODPOST += -n
|
||||
endif
|
||||
|
||||
# Clear VPATH to not search for *.symvers in $(srctree). Check only $(objtree).
|
||||
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
|
||||
ifneq ($(KBUILD_MODPOST_WARN)$(filter-out $(existing-input-symdump), $(input-symdump)),)
|
||||
MODPOST += -w
|
||||
endif
|
||||
MODPOST = scripts/mod/modpost
|
||||
|
||||
# Read out modules.order to pass in modpost.
|
||||
# Otherwise, allmodconfig would fail with "Argument list too long".
|
||||
quiet_cmd_modpost = MODPOST $@
|
||||
cmd_modpost = sed 's/ko$$/o/' $< | $(MODPOST) -T -
|
||||
|
||||
$(output-symdump): $(MODORDER) $(input-symdump) FORCE
|
||||
$(call if_changed,modpost)
|
||||
cmd_modpost = \
|
||||
$(if $(missing-input), \
|
||||
echo >&2 "WARNING: $(missing-input) is missing."; \
|
||||
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)
|
||||
$(output-symdump): $(modorder-if-needed) $(vmlinux.o-if-present) $(moudle.symvers-if-present) $(MODPOST) FORCE
|
||||
$(call if_changed,modpost)
|
||||
|
||||
__modpost: $(output-symdump)
|
||||
ifneq ($(KBUILD_MODPOST_NOFINAL),1)
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modfinal
|
||||
endif
|
||||
|
||||
PHONY += FORCE
|
||||
FORCE:
|
||||
|
||||
|
@ -141,6 +133,4 @@ existing-targets := $(wildcard $(sort $(targets)))
|
|||
|
||||
-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
|
||||
|
||||
endif
|
||||
|
||||
.PHONY: $(PHONY)
|
||||
|
|
|
@ -29,7 +29,10 @@ KDEB_SOURCENAME ?= linux-upstream
|
|||
KBUILD_PKG_ROOTCMD ?="fakeroot -u"
|
||||
export KDEB_SOURCENAME
|
||||
# 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*)
|
||||
MKSPEC := $(srctree)/scripts/package/mkspec
|
||||
|
||||
|
|
|
@ -1,18 +1,37 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
PHONY := __default
|
||||
__default: vmlinux
|
||||
|
||||
include include/config/auto.conf
|
||||
include $(srctree)/scripts/Kbuild.include
|
||||
|
||||
# for c_flags
|
||||
include $(srctree)/scripts/Makefile.lib
|
||||
|
||||
targets :=
|
||||
|
||||
quiet_cmd_cc_o_c = CC $@
|
||||
cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
|
||||
|
||||
%.o: %.c FORCE
|
||||
$(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.
|
||||
# ---------------------------------------------------------------------------
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
PHONY := __default
|
||||
__default: vmlinux.o
|
||||
__default: vmlinux.o modules.builtin.modinfo modules.builtin
|
||||
|
||||
include include/config/auto.conf
|
||||
include $(srctree)/scripts/Kbuild.include
|
||||
|
@ -18,7 +18,7 @@ quiet_cmd_gen_initcalls_lds = GEN $@
|
|||
$(PERL) $(real-prereqs) > $@
|
||||
|
||||
.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)
|
||||
|
||||
targets := .tmp_initcalls.lds
|
||||
|
@ -35,18 +35,11 @@ endif
|
|||
|
||||
objtool-enabled := $(or $(delay-objtool),$(CONFIG_NOINSTR_VALIDATION))
|
||||
|
||||
# Reuse objtool_args defined in scripts/Makefile.lib if LTO or IBT is enabled.
|
||||
#
|
||||
# Add some more flags as needed.
|
||||
# --no-unreachable and --link might be added twice, but it is fine.
|
||||
#
|
||||
# Expand objtool_args to a simple variable to avoid circular reference.
|
||||
vmlinux-objtool-args-$(delay-objtool) += $(objtool-args-y)
|
||||
vmlinux-objtool-args-$(CONFIG_GCOV_KERNEL) += --no-unreachable
|
||||
vmlinux-objtool-args-$(CONFIG_NOINSTR_VALIDATION) += --noinstr $(if $(CONFIG_CPU_UNRET_ENTRY), --unret)
|
||||
|
||||
objtool_args := \
|
||||
$(if $(delay-objtool),$(objtool_args)) \
|
||||
$(if $(CONFIG_NOINSTR_VALIDATION), --noinstr $(if $(CONFIG_CPU_UNRET_ENTRY), --unret)) \
|
||||
$(if $(CONFIG_GCOV_KERNEL), --no-unreachable) \
|
||||
--link
|
||||
objtool-args = $(vmlinux-objtool-args-y) --link
|
||||
|
||||
# Link of vmlinux.o used for section mismatch analysis
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -55,7 +48,7 @@ quiet_cmd_ld_vmlinux.o = LD $@
|
|||
cmd_ld_vmlinux.o = \
|
||||
$(LD) ${KBUILD_LDFLAGS} -r -o $@ \
|
||||
$(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 \
|
||||
$(cmd_objtool)
|
||||
|
||||
|
@ -64,11 +57,35 @@ define rule_ld_vmlinux.o
|
|||
$(call cmd,gen_objtooldep)
|
||||
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)
|
||||
|
||||
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.
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -832,7 +832,7 @@ static void parse(void)
|
|||
|
||||
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));
|
||||
if (!e) {
|
||||
|
@ -860,7 +860,7 @@ static struct element *parse_type(struct token **_cursor, struct token *end,
|
|||
char *p;
|
||||
int labelled = 0, implicit = 0;
|
||||
|
||||
top = element = alloc_elem(cursor);
|
||||
top = element = alloc_elem();
|
||||
element->class = ASN1_UNIV;
|
||||
element->method = ASN1_PRIM;
|
||||
element->tag = token_to_tag[cursor->token_type];
|
||||
|
@ -939,7 +939,7 @@ static struct element *parse_type(struct token **_cursor, struct token *end,
|
|||
if (!implicit)
|
||||
element->method |= ASN1_CONS;
|
||||
element->compound = implicit ? TAG_OVERRIDE : SEQUENCE;
|
||||
element->children = alloc_elem(cursor);
|
||||
element->children = alloc_elem();
|
||||
element = element->children;
|
||||
element->class = ASN1_UNIV;
|
||||
element->method = ASN1_PRIM;
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
#!/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
|
|
@ -1,25 +1,14 @@
|
|||
#!/usr/bin/env bash
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# 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.
|
||||
# EXPORT_SYMBOL should be used for global symbols.
|
||||
|
||||
set -e
|
||||
|
||||
# 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
|
||||
pid=$$
|
||||
|
||||
# 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
|
||||
|
@ -29,43 +18,53 @@ exit_code=0
|
|||
# TODO:
|
||||
# Use --quiet instead of 2>/dev/null when we upgrade the minimum version of
|
||||
# binutils to 2.37, llvm to 13.0.0.
|
||||
# Then, the following line will be really simple:
|
||||
# ${NM} --quiet ${1} |
|
||||
# Then, the following line will be simpler:
|
||||
# { ${NM} --quiet ${1} || kill 0; } |
|
||||
|
||||
{ ${NM} ${1} 2>/dev/null || { echo "${0}: ${NM} failed" >&2; false; } } |
|
||||
while read value type name
|
||||
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
|
||||
{ ${NM} ${1} 2>/dev/null || { echo "${0}: ${NM} failed" >&2; kill $pid; } } |
|
||||
${AWK} -v "file=${1}" '
|
||||
BEGIN {
|
||||
i = 0
|
||||
}
|
||||
|
||||
# save (name, type) in the associative array
|
||||
symbol_types[${name}]=${type}
|
||||
# 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
|
||||
}
|
||||
|
||||
# append the exported symbol to the array
|
||||
if [[ ${name} == __ksymtab_* ]]; then
|
||||
export_symbols+=(${name#__ksymtab_})
|
||||
fi
|
||||
done
|
||||
# save (name, type) in the associative array
|
||||
{ symbol_types[$3]=$2 }
|
||||
|
||||
for name in "${export_symbols[@]}"
|
||||
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
|
||||
# append the exported symbol to the array
|
||||
($3 ~ /^__ksymtab_/) {
|
||||
export_symbols[i] = $3
|
||||
sub(/^__ksymtab_/, "", export_symbols[i])
|
||||
i++
|
||||
}
|
||||
|
||||
exit ${exit_code}
|
||||
END {
|
||||
exit_code = 0
|
||||
for (j = 0; j < i; ++j) {
|
||||
name = export_symbols[j]
|
||||
# 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
|
||||
}
|
||||
}
|
||||
|
||||
exit exit_code
|
||||
}'
|
||||
|
||||
exit $?
|
||||
|
|
|
@ -109,20 +109,6 @@ def to_cmdfile(path):
|
|||
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):
|
||||
"""Generate the iterator of .cmd files associated with the archive.
|
||||
|
||||
|
@ -211,13 +197,10 @@ def main():
|
|||
for path in paths:
|
||||
# If 'path' is a directory, handle all .cmd files under it.
|
||||
# Otherwise, handle .cmd files associated with the file.
|
||||
# Most of built-in objects are linked via archives (built-in.a or lib.a)
|
||||
# but some objects are linked to vmlinux directly.
|
||||
# built-in objects are linked via vmlinux.a
|
||||
# Modules are listed in modules.order.
|
||||
if os.path.isdir(path):
|
||||
cmdfiles = cmdfiles_in_dir(path)
|
||||
elif path.endswith('.o'):
|
||||
cmdfiles = cmdfiles_for_o(path)
|
||||
elif path.endswith('.a'):
|
||||
cmdfiles = cmdfiles_for_a(path, ar)
|
||||
elif path.endswith('modules.order'):
|
||||
|
|
53
scripts/head-object-list.txt
Normal file
53
scripts/head-object-list.txt
Normal file
|
@ -0,0 +1,53 @@
|
|||
# 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 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <getopt.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -87,7 +88,7 @@ static unsigned char best_table_len[256];
|
|||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: kallsyms [--all-symbols] [--absolute-percpu] "
|
||||
"[--base-relative] < in.map > out.S\n");
|
||||
"[--base-relative] in.map > out.S\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
@ -123,9 +124,6 @@ static bool is_ignored_symbol(const char *name, char type)
|
|||
|
||||
/* Symbol names that begin with the following are ignored.*/
|
||||
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 */
|
||||
"__kvm_nvhe_$", /* 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)
|
|||
}
|
||||
}
|
||||
|
||||
static void read_map(FILE *in)
|
||||
static void read_map(const char *in)
|
||||
{
|
||||
FILE *fp;
|
||||
struct sym_entry *sym;
|
||||
|
||||
while (!feof(in)) {
|
||||
sym = read_symbol(in);
|
||||
fp = fopen(in, "r");
|
||||
if (!fp) {
|
||||
perror(in);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
while (!feof(fp)) {
|
||||
sym = read_symbol(fp);
|
||||
if (!sym)
|
||||
continue;
|
||||
|
||||
|
@ -346,12 +351,15 @@ static void read_map(FILE *in)
|
|||
table = realloc(table, sizeof(*table) * table_size);
|
||||
if (!table) {
|
||||
fprintf(stderr, "out of memory\n");
|
||||
fclose(fp);
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
|
||||
table[table_cnt++] = sym;
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
static void output_label(const char *label)
|
||||
|
@ -805,22 +813,26 @@ static void record_relative_base(void)
|
|||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if (argc >= 2) {
|
||||
int i;
|
||||
for (i = 1; i < argc; i++) {
|
||||
if(strcmp(argv[i], "--all-symbols") == 0)
|
||||
all_symbols = 1;
|
||||
else if (strcmp(argv[i], "--absolute-percpu") == 0)
|
||||
absolute_percpu = 1;
|
||||
else if (strcmp(argv[i], "--base-relative") == 0)
|
||||
base_relative = 1;
|
||||
else
|
||||
usage();
|
||||
}
|
||||
} else if (argc != 1)
|
||||
while (1) {
|
||||
static struct option long_options[] = {
|
||||
{"all-symbols", no_argument, &all_symbols, 1},
|
||||
{"absolute-percpu", no_argument, &absolute_percpu, 1},
|
||||
{"base-relative", no_argument, &base_relative, 1},
|
||||
{},
|
||||
};
|
||||
|
||||
int c = getopt_long(argc, argv, "", long_options, NULL);
|
||||
|
||||
if (c == -1)
|
||||
break;
|
||||
if (c != 0)
|
||||
usage();
|
||||
}
|
||||
|
||||
if (optind >= argc)
|
||||
usage();
|
||||
|
||||
read_map(stdin);
|
||||
read_map(argv[optind]);
|
||||
shrink_table();
|
||||
if (absolute_percpu)
|
||||
make_percpus_absolute();
|
||||
|
|
|
@ -551,7 +551,7 @@ static int conf_choice(struct menu *menu)
|
|||
print_help(child);
|
||||
continue;
|
||||
}
|
||||
sym_set_choice_value(sym, child->sym);
|
||||
sym_set_tristate_value(child->sym, yes);
|
||||
for (child = child->list; child; child = child->next) {
|
||||
indent += 2;
|
||||
conf(child);
|
||||
|
|
|
@ -123,11 +123,6 @@ static inline struct symbol *sym_get_choice_value(struct symbol *sym)
|
|||
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)
|
||||
{
|
||||
return sym->flags & SYMBOL_CHOICE ? true : false;
|
||||
|
|
|
@ -3,17 +3,15 @@
|
|||
#
|
||||
# link vmlinux
|
||||
#
|
||||
# vmlinux is linked from the objects selected by $(KBUILD_VMLINUX_OBJS) and
|
||||
# $(KBUILD_VMLINUX_LIBS). Most are built-in.a files from top-level directories
|
||||
# in the kernel tree, others are specified in arch/$(ARCH)/Makefile.
|
||||
# vmlinux is linked from the objects in vmlinux.a and $(KBUILD_VMLINUX_LIBS).
|
||||
# vmlinux.a contains objects that are linked unconditionally.
|
||||
# $(KBUILD_VMLINUX_LIBS) are archives which are linked conditionally
|
||||
# (not within --whole-archive), and do not require symbol indexes added.
|
||||
#
|
||||
# vmlinux
|
||||
# ^
|
||||
# |
|
||||
# +--< $(KBUILD_VMLINUX_OBJS)
|
||||
# | +--< init/built-in.a drivers/built-in.a mm/built-in.a + more
|
||||
# +--< vmlinux.a
|
||||
# |
|
||||
# +--< $(KBUILD_VMLINUX_LIBS)
|
||||
# | +--< lib/lib.a + more
|
||||
|
@ -67,7 +65,7 @@ vmlinux_link()
|
|||
objs=vmlinux.o
|
||||
libs=
|
||||
else
|
||||
objs="${KBUILD_VMLINUX_OBJS}"
|
||||
objs=vmlinux.a
|
||||
libs="${KBUILD_VMLINUX_LIBS}"
|
||||
fi
|
||||
|
||||
|
@ -75,6 +73,8 @@ vmlinux_link()
|
|||
objs="${objs} .vmlinux.export.o"
|
||||
fi
|
||||
|
||||
objs="${objs} init/version-timestamp.o"
|
||||
|
||||
if [ "${SRCARCH}" = "um" ]; then
|
||||
wl=-Wl,
|
||||
ld="${CC}"
|
||||
|
@ -157,7 +157,7 @@ kallsyms()
|
|||
fi
|
||||
|
||||
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
|
||||
|
@ -170,7 +170,8 @@ kallsyms_step()
|
|||
kallsyms_S=${kallsyms_vmlinux}.S
|
||||
|
||||
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}
|
||||
${CC} ${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS} \
|
||||
|
@ -182,6 +183,7 @@ kallsyms_step()
|
|||
# See mksymap for additional details
|
||||
mksysmap()
|
||||
{
|
||||
info NM ${2}
|
||||
${CONFIG_SHELL} "${srctree}/scripts/mksysmap" ${1} ${2}
|
||||
}
|
||||
|
||||
|
@ -197,8 +199,6 @@ cleanup()
|
|||
rm -f System.map
|
||||
rm -f vmlinux
|
||||
rm -f vmlinux.map
|
||||
rm -f .vmlinux.objs
|
||||
rm -f .vmlinux.export.c
|
||||
}
|
||||
|
||||
# Use "make V=1" to debug this script
|
||||
|
@ -213,52 +213,7 @@ if [ "$1" = "clean" ]; then
|
|||
exit 0
|
||||
fi
|
||||
|
||||
# Update version
|
||||
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
|
||||
${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init init/version-timestamp.o
|
||||
|
||||
btf_vmlinux_bin_o=""
|
||||
if is_enabled CONFIG_DEBUG_INFO_BTF; then
|
||||
|
@ -318,7 +273,6 @@ if is_enabled CONFIG_DEBUG_INFO_BTF && is_enabled CONFIG_BPF; then
|
|||
${RESOLVE_BTFIDS} vmlinux
|
||||
fi
|
||||
|
||||
info SYSMAP System.map
|
||||
mksysmap vmlinux System.map
|
||||
|
||||
if is_enabled CONFIG_BUILDTIME_TABLE_SORT; then
|
||||
|
@ -331,9 +285,7 @@ fi
|
|||
|
||||
# step a (see comment above)
|
||||
if is_enabled CONFIG_KALLSYMS; then
|
||||
mksysmap ${kallsyms_vmlinux} .tmp_System.map
|
||||
|
||||
if ! cmp -s System.map .tmp_System.map; then
|
||||
if ! cmp -s System.map ${kallsyms_vmlinux}.syms; then
|
||||
echo >&2 Inconsistent kallsyms data
|
||||
echo >&2 Try "make KALLSYMS_EXTRA_PASS=1" as a workaround
|
||||
exit 1
|
||||
|
|
|
@ -1,33 +1,10 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
TARGET=$1
|
||||
ARCH=$2
|
||||
SMP=$3
|
||||
PREEMPT=$4
|
||||
PREEMPT_DYNAMIC=$5
|
||||
PREEMPT_RT=$6
|
||||
CC_VERSION="$7"
|
||||
LD=$8
|
||||
UTS_MACHINE=$1
|
||||
CC_VERSION="$2"
|
||||
LD=$3
|
||||
|
||||
# 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
|
||||
LINUX_COMPILE_BY=$(whoami | sed 's/\\/\\\\/')
|
||||
else
|
||||
|
@ -39,63 +16,12 @@ else
|
|||
LINUX_COMPILE_HOST=$KBUILD_BUILD_HOST
|
||||
fi
|
||||
|
||||
UTS_VERSION="#$VERSION"
|
||||
CONFIG_FLAGS=""
|
||||
if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi
|
||||
LD_VERSION=$(LC_ALL=C $LD -v | head -n1 |
|
||||
sed -e 's/(compatible with [^)]*)//' -e 's/[[:space:]]*$//')
|
||||
|
||||
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 \*/
|
||||
if [ -n "$CONFIG_FLAGS" ] ; then echo "/* $CONFIG_FLAGS */"; fi
|
||||
|
||||
echo \#define UTS_MACHINE \"$ARCH\"
|
||||
|
||||
echo \#define UTS_VERSION \"$UTS_VERSION\"
|
||||
|
||||
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
|
||||
cat <<EOF
|
||||
#define UTS_MACHINE "${UTS_MACHINE}"
|
||||
#define LINUX_COMPILE_BY "${LINUX_COMPILE_BY}"
|
||||
#define LINUX_COMPILE_HOST "${LINUX_COMPILE_HOST}"
|
||||
#define LINUX_COMPILER "${CC_VERSION}, ${LD_VERSION}"
|
||||
EOF
|
||||
|
|
|
@ -37,8 +37,24 @@
|
|||
|
||||
# readprofile starts reading symbols when _stext is found, and
|
||||
# continue until it finds a symbol which is not either of 'T', 't',
|
||||
# 'W' or 'w'. __crc_ are 'A' and placed in the middle
|
||||
# so we just ignore them to let readprofile continue to work.
|
||||
# (At least sparc64 has __crc_ in the middle).
|
||||
# 'W' or 'w'.
|
||||
#
|
||||
# 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
|
|||
mkdir -p %{buildroot}/boot
|
||||
%ifarch ia64
|
||||
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/
|
||||
%else
|
||||
cp \$($MAKE image_name) %{buildroot}/boot/vmlinuz-$KERNELRELEASE
|
||||
cp \$($MAKE -s image_name) %{buildroot}/boot/vmlinuz-$KERNELRELEASE
|
||||
%endif
|
||||
$M $MAKE %{?_smp_mflags} INSTALL_MOD_PATH=%{buildroot} modules_install
|
||||
$MAKE %{?_smp_mflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
|
||||
|
|
Loading…
Add table
Reference in a new issue