forked from Minki/linux
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
@ -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…
Reference in New Issue
Block a user