mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 06:01:57 +00:00
Kbuild updates for v6.5
- Remove the deprecated rule to build *.dtbo from *.dts - Refactor section mismatch detection in modpost - Fix bogus ARM section mismatch detections - Fix error of 'make gtags' with O= option - Add Clang's target triple to KBUILD_CPPFLAGS to fix a build error with the latest LLVM version - Rebuild the built-in initrd when KBUILD_BUILD_TIMESTAMP is changed - Ignore more compiler-generated symbols for kallsyms - Fix 'make local*config' to handle the ${CONFIG_FOO} form in Makefiles - Enable more kernel-doc warnings with W=2 - Refactor <linux/export.h> by generating KSYMTAB data by modpost - Deprecate <asm/export.h> and <asm-generic/export.h> - Remove the EXPORT_DATA_SYMBOL macro - Move the check for static EXPORT_SYMBOL back to modpost, which makes the build faster - Re-implement CONFIG_TRIM_UNUSED_KSYMS with one-pass algorithm - Warn missing MODULE_DESCRIPTION when building modules with W=1 - Make 'make clean' robust against too long argument error - Exclude more objects from GCOV to fix CFI failures with GCOV - Allow 'make modules_install' to install modules.builtin and modules.builtin.modinfo even when CONFIG_MODULES is disabled - Include modules.builtin and modules.builtin.modinfo in the linux-image Debian package even when CONFIG_MODULES is disabled - Revive "Entering directory" logging for the latest Make version -----BEGIN PGP SIGNATURE----- iQJJBAABCgAzFiEEbmPs18K1szRHjPqEPYsBB53g2wYFAmSf6B0VHG1hc2FoaXJv eUBrZXJuZWwub3JnAAoJED2LAQed4NsGS2wP/1izzNJ/64XmQoyBDhZCbuOl7ODF n4wgVJnsJmRnD/RxXR/AZ0JZwQHhzpGISWQM61rVIf/RVFOB7Apx1HpmomKUUjrL Yc53wLfhTEizGgwttP6tusLM3RO6jkuMKhjC4rllc0tDLJ3zCcwAjSyiOQQ9PBcH txwAb8r4/TZUzDDCJ0d98WdhIsNDca/ISeRXKHMiIkfvHe+6yizDKu25Y4B6BL5g 0VPJ9nVJZ+XVwRqdVR+UQoPYGZzZ/O2NqAtU7n4PpBKvFfLACILJW+aBDAz9SqN7 RSxn1ahxwq0vrhlB9bSrQRj3N0g8zsi7/xShEZSnGLCbyxYilr5Gq8C59+QxOIJf 5lGBwZlEgn5aWH+D9abwjEI/QOQbTI9kX09sVzweulGCN9iJlJqyIGsB0Ri0/S2R c/n7c8nLwnWnGF/+LXYvkrak8L9YRKori//YYf9zdvh4h1c2/0SS0nDoC29DhDru Am7YmhBAkJXXX3NUB2gLvtdp94GSumqefHeSJ5Sp9v/+f2Ft7ruY2ouJC81xDa4p nNpvolAq2txlZ9t5OU7x7DQiuCWYSws0W7PJ9FBhyHJchf21UHbcm97/HfDoU8rN ioLQGm+h+g6oZt8pArk45wccjkR3ydpEFDWenYbTEr2o3zLfeKigZps5uhCK3DW2 gnVk50VNagkzrzvA =Rc1z -----END PGP SIGNATURE----- Merge tag 'kbuild-v6.5' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild Pull Kbuild updates from Masahiro Yamada: - Remove the deprecated rule to build *.dtbo from *.dts - Refactor section mismatch detection in modpost - Fix bogus ARM section mismatch detections - Fix error of 'make gtags' with O= option - Add Clang's target triple to KBUILD_CPPFLAGS to fix a build error with the latest LLVM version - Rebuild the built-in initrd when KBUILD_BUILD_TIMESTAMP is changed - Ignore more compiler-generated symbols for kallsyms - Fix 'make local*config' to handle the ${CONFIG_FOO} form in Makefiles - Enable more kernel-doc warnings with W=2 - Refactor <linux/export.h> by generating KSYMTAB data by modpost - Deprecate <asm/export.h> and <asm-generic/export.h> - Remove the EXPORT_DATA_SYMBOL macro - Move the check for static EXPORT_SYMBOL back to modpost, which makes the build faster - Re-implement CONFIG_TRIM_UNUSED_KSYMS with one-pass algorithm - Warn missing MODULE_DESCRIPTION when building modules with W=1 - Make 'make clean' robust against too long argument error - Exclude more objects from GCOV to fix CFI failures with GCOV - Allow 'make modules_install' to install modules.builtin and modules.builtin.modinfo even when CONFIG_MODULES is disabled - Include modules.builtin and modules.builtin.modinfo in the linux-image Debian package even when CONFIG_MODULES is disabled - Revive "Entering directory" logging for the latest Make version * tag 'kbuild-v6.5' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (72 commits) modpost: define more R_ARM_* for old distributions kbuild: revive "Entering directory" for Make >= 4.4.1 kbuild: set correct abs_srctree and abs_objtree for package builds scripts/mksysmap: Ignore prefixed KCFI symbols kbuild: deb-pkg: remove the CONFIG_MODULES check in buildeb kbuild: builddeb: always make modules_install, to install modules.builtin* modpost: continue even with unknown relocation type modpost: factor out Elf_Sym pointer calculation to section_rel() modpost: factor out inst location calculation to section_rel() kbuild: Disable GCOV for *.mod.o kbuild: Fix CFI failures with GCOV kbuild: make clean rule robust against too long argument error script: modpost: emit a warning when the description is missing kbuild: make modules_install copy modules.builtin(.modinfo) linux/export.h: rename 'sec' argument to 'license' modpost: show offset from symbol for section mismatch warnings modpost: merge two similar section mismatch warnings kbuild: implement CONFIG_TRIM_UNUSED_KSYMS without recursion modpost: use null string instead of NULL pointer for default namespace modpost: squash sym_update_namespace() into sym_add_exported() ...
This commit is contained in:
commit
ad2885979e
2
.gitignore
vendored
2
.gitignore
vendored
@ -51,7 +51,6 @@
|
|||||||
*.symversions
|
*.symversions
|
||||||
*.tab.[ch]
|
*.tab.[ch]
|
||||||
*.tar
|
*.tar
|
||||||
*.usyms
|
|
||||||
*.xz
|
*.xz
|
||||||
*.zst
|
*.zst
|
||||||
Module.symvers
|
Module.symvers
|
||||||
@ -112,7 +111,6 @@ modules.order
|
|||||||
#
|
#
|
||||||
/include/config/
|
/include/config/
|
||||||
/include/generated/
|
/include/generated/
|
||||||
/include/ksym/
|
|
||||||
/arch/*/include/generated/
|
/arch/*/include/generated/
|
||||||
|
|
||||||
# stgit generated dirs
|
# stgit generated dirs
|
||||||
|
@ -150,6 +150,12 @@ the UTS_MACHINE variable, and on some architectures also the kernel config.
|
|||||||
The value of KBUILD_DEBARCH is assumed (not checked) to be a valid Debian
|
The value of KBUILD_DEBARCH is assumed (not checked) to be a valid Debian
|
||||||
architecture.
|
architecture.
|
||||||
|
|
||||||
|
KDOCFLAGS
|
||||||
|
---------
|
||||||
|
Specify extra (warning/error) flags for kernel-doc checks during the build,
|
||||||
|
see scripts/kernel-doc for which flags are supported. Note that this doesn't
|
||||||
|
(currently) apply to documentation builds.
|
||||||
|
|
||||||
ARCH
|
ARCH
|
||||||
----
|
----
|
||||||
Set ARCH to the architecture to be built.
|
Set ARCH to the architecture to be built.
|
||||||
|
@ -60,6 +60,8 @@ openssl & libcrypto 1.0.0 openssl version
|
|||||||
bc 1.06.95 bc --version
|
bc 1.06.95 bc --version
|
||||||
Sphinx\ [#f1]_ 1.7 sphinx-build --version
|
Sphinx\ [#f1]_ 1.7 sphinx-build --version
|
||||||
cpio any cpio --version
|
cpio any cpio --version
|
||||||
|
GNU tar 1.28 tar --version
|
||||||
|
gtags (optional) 6.6.5 gtags --version
|
||||||
====================== =============== ========================================
|
====================== =============== ========================================
|
||||||
|
|
||||||
.. [#f1] Sphinx is needed only to build the Kernel documentation
|
.. [#f1] Sphinx is needed only to build the Kernel documentation
|
||||||
@ -174,6 +176,18 @@ You will need openssl to build kernels 3.7 and higher if module signing is
|
|||||||
enabled. You will also need openssl development packages to build kernels 4.3
|
enabled. You will also need openssl development packages to build kernels 4.3
|
||||||
and higher.
|
and higher.
|
||||||
|
|
||||||
|
Tar
|
||||||
|
---
|
||||||
|
|
||||||
|
GNU tar is needed if you want to enable access to the kernel headers via sysfs
|
||||||
|
(CONFIG_IKHEADERS).
|
||||||
|
|
||||||
|
gtags / GNU GLOBAL (optional)
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
The kernel build requires GNU GLOBAL version 6.6.5 or later to generate
|
||||||
|
tag files through ``make gtags``. This is due to its use of the gtags
|
||||||
|
``-C (--directory)`` flag.
|
||||||
|
|
||||||
System utilities
|
System utilities
|
||||||
****************
|
****************
|
||||||
|
94
Makefile
94
Makefile
@ -38,6 +38,10 @@ __all:
|
|||||||
# descending is started. They are now explicitly listed as the
|
# descending is started. They are now explicitly listed as the
|
||||||
# prepare rule.
|
# prepare rule.
|
||||||
|
|
||||||
|
this-makefile := $(lastword $(MAKEFILE_LIST))
|
||||||
|
export abs_srctree := $(realpath $(dir $(this-makefile)))
|
||||||
|
export abs_objtree := $(CURDIR)
|
||||||
|
|
||||||
ifneq ($(sub_make_done),1)
|
ifneq ($(sub_make_done),1)
|
||||||
|
|
||||||
# Do not use make's built-in rules and variables
|
# Do not use make's built-in rules and variables
|
||||||
@ -185,20 +189,8 @@ $(if $(abs_objtree),, \
|
|||||||
|
|
||||||
# $(realpath ...) resolves symlinks
|
# $(realpath ...) resolves symlinks
|
||||||
abs_objtree := $(realpath $(abs_objtree))
|
abs_objtree := $(realpath $(abs_objtree))
|
||||||
else
|
|
||||||
abs_objtree := $(CURDIR)
|
|
||||||
endif # ifneq ($(KBUILD_OUTPUT),)
|
endif # ifneq ($(KBUILD_OUTPUT),)
|
||||||
|
|
||||||
ifeq ($(abs_objtree),$(CURDIR))
|
|
||||||
# Suppress "Entering directory ..." unless we are changing the work directory.
|
|
||||||
MAKEFLAGS += --no-print-directory
|
|
||||||
else
|
|
||||||
need-sub-make := 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
this-makefile := $(lastword $(MAKEFILE_LIST))
|
|
||||||
abs_srctree := $(realpath $(dir $(this-makefile)))
|
|
||||||
|
|
||||||
ifneq ($(words $(subst :, ,$(abs_srctree))), 1)
|
ifneq ($(words $(subst :, ,$(abs_srctree))), 1)
|
||||||
$(error source directory cannot contain spaces or colons)
|
$(error source directory cannot contain spaces or colons)
|
||||||
endif
|
endif
|
||||||
@ -211,9 +203,25 @@ need-sub-make := 1
|
|||||||
$(this-makefile): ;
|
$(this-makefile): ;
|
||||||
endif
|
endif
|
||||||
|
|
||||||
export abs_srctree abs_objtree
|
|
||||||
export sub_make_done := 1
|
export sub_make_done := 1
|
||||||
|
|
||||||
|
endif # sub_make_done
|
||||||
|
|
||||||
|
ifeq ($(abs_objtree),$(CURDIR))
|
||||||
|
# Suppress "Entering directory ..." if we are at the final work directory.
|
||||||
|
no-print-directory := --no-print-directory
|
||||||
|
else
|
||||||
|
# Recursion to show "Entering directory ..."
|
||||||
|
need-sub-make := 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(filter --no-print-directory, $(MAKEFLAGS)),)
|
||||||
|
# If --no-print-directory is unset, recurse once again to set it.
|
||||||
|
# You may end up recursing into __sub-make twice. This is needed due to the
|
||||||
|
# behavior change in GNU Make 4.4.1.
|
||||||
|
need-sub-make := 1
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(need-sub-make),1)
|
ifeq ($(need-sub-make),1)
|
||||||
|
|
||||||
PHONY += $(MAKECMDGOALS) __sub-make
|
PHONY += $(MAKECMDGOALS) __sub-make
|
||||||
@ -223,18 +231,12 @@ $(filter-out $(this-makefile), $(MAKECMDGOALS)) __all: __sub-make
|
|||||||
|
|
||||||
# Invoke a second make in the output directory, passing relevant variables
|
# Invoke a second make in the output directory, passing relevant variables
|
||||||
__sub-make:
|
__sub-make:
|
||||||
$(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS)
|
$(Q)$(MAKE) $(no-print-directory) -C $(abs_objtree) \
|
||||||
|
-f $(abs_srctree)/Makefile $(MAKECMDGOALS)
|
||||||
|
|
||||||
endif # need-sub-make
|
else # need-sub-make
|
||||||
endif # sub_make_done
|
|
||||||
|
|
||||||
# We process the rest of the Makefile if this is the final invocation of make
|
# We process the rest of the Makefile if this is the final invocation of make
|
||||||
ifeq ($(need-sub-make),)
|
|
||||||
|
|
||||||
# Do not print "Entering directory ...",
|
|
||||||
# but we want to display it when entering to the output directory
|
|
||||||
# so that IDEs/editors are able to understand relative filenames.
|
|
||||||
MAKEFLAGS += --no-print-directory
|
|
||||||
|
|
||||||
ifeq ($(abs_srctree),$(abs_objtree))
|
ifeq ($(abs_srctree),$(abs_objtree))
|
||||||
# building in the source tree
|
# building in the source tree
|
||||||
@ -1199,28 +1201,12 @@ endif
|
|||||||
export KBUILD_VMLINUX_LIBS
|
export KBUILD_VMLINUX_LIBS
|
||||||
export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds
|
export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds
|
||||||
|
|
||||||
# Recurse until adjust_autoksyms.sh is satisfied
|
|
||||||
PHONY += autoksyms_recursive
|
|
||||||
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
||||||
# For the kernel to actually contain only the needed exported symbols,
|
# For the kernel to actually contain only the needed exported symbols,
|
||||||
# we have to build modules as well to determine what those symbols are.
|
# we have to build modules as well to determine what those symbols are.
|
||||||
# (this can be evaluated only once include/config/auto.conf has been included)
|
|
||||||
KBUILD_MODULES := 1
|
KBUILD_MODULES := 1
|
||||||
|
|
||||||
autoksyms_recursive: $(build-dir) modules.order
|
|
||||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
|
|
||||||
"$(MAKE) -f $(srctree)/Makefile autoksyms_recursive"
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
autoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h)
|
|
||||||
|
|
||||||
quiet_cmd_autoksyms_h = GEN $@
|
|
||||||
cmd_autoksyms_h = mkdir -p $(dir $@); \
|
|
||||||
$(CONFIG_SHELL) $(srctree)/scripts/gen_autoksyms.sh $@
|
|
||||||
|
|
||||||
$(autoksyms_h):
|
|
||||||
$(call cmd,autoksyms_h)
|
|
||||||
|
|
||||||
# '$(AR) mPi' needs 'T' to workaround the bug of llvm-ar <= 14
|
# '$(AR) mPi' needs 'T' to workaround the bug of llvm-ar <= 14
|
||||||
quiet_cmd_ar_vmlinux.a = AR $@
|
quiet_cmd_ar_vmlinux.a = AR $@
|
||||||
cmd_ar_vmlinux.a = \
|
cmd_ar_vmlinux.a = \
|
||||||
@ -1229,7 +1215,7 @@ quiet_cmd_ar_vmlinux.a = AR $@
|
|||||||
$(AR) mPiT $$($(AR) t $@ | sed -n 1p) $@ $$($(AR) t $@ | grep -F -f $(srctree)/scripts/head-object-list.txt)
|
$(AR) mPiT $$($(AR) t $@ | sed -n 1p) $@ $$($(AR) t $@ | grep -F -f $(srctree)/scripts/head-object-list.txt)
|
||||||
|
|
||||||
targets += vmlinux.a
|
targets += vmlinux.a
|
||||||
vmlinux.a: $(KBUILD_VMLINUX_OBJS) scripts/head-object-list.txt autoksyms_recursive FORCE
|
vmlinux.a: $(KBUILD_VMLINUX_OBJS) scripts/head-object-list.txt FORCE
|
||||||
$(call if_changed,ar_vmlinux.a)
|
$(call if_changed,ar_vmlinux.a)
|
||||||
|
|
||||||
PHONY += vmlinux_o
|
PHONY += vmlinux_o
|
||||||
@ -1285,7 +1271,7 @@ scripts: scripts_basic scripts_dtc
|
|||||||
PHONY += prepare archprepare
|
PHONY += prepare archprepare
|
||||||
|
|
||||||
archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
|
archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
|
||||||
asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h \
|
asm-generic $(version_h) include/generated/utsrelease.h \
|
||||||
include/generated/compile.h include/generated/autoconf.h remove-stale-files
|
include/generated/compile.h include/generated/autoconf.h remove-stale-files
|
||||||
|
|
||||||
prepare0: archprepare
|
prepare0: archprepare
|
||||||
@ -1567,6 +1553,8 @@ modules_sign_only := y
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
endif # CONFIG_MODULES
|
||||||
|
|
||||||
modinst_pre :=
|
modinst_pre :=
|
||||||
ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
|
ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
|
||||||
modinst_pre := __modinst_pre
|
modinst_pre := __modinst_pre
|
||||||
@ -1577,18 +1565,18 @@ PHONY += __modinst_pre
|
|||||||
__modinst_pre:
|
__modinst_pre:
|
||||||
@rm -rf $(MODLIB)/kernel
|
@rm -rf $(MODLIB)/kernel
|
||||||
@rm -f $(MODLIB)/source
|
@rm -f $(MODLIB)/source
|
||||||
@mkdir -p $(MODLIB)/kernel
|
@mkdir -p $(MODLIB)
|
||||||
|
ifdef CONFIG_MODULES
|
||||||
@ln -s $(abspath $(srctree)) $(MODLIB)/source
|
@ln -s $(abspath $(srctree)) $(MODLIB)/source
|
||||||
@if [ ! $(objtree) -ef $(MODLIB)/build ]; then \
|
@if [ ! $(objtree) -ef $(MODLIB)/build ]; then \
|
||||||
rm -f $(MODLIB)/build ; \
|
rm -f $(MODLIB)/build ; \
|
||||||
ln -s $(CURDIR) $(MODLIB)/build ; \
|
ln -s $(CURDIR) $(MODLIB)/build ; \
|
||||||
fi
|
fi
|
||||||
@sed 's:^\(.*\)\.o$$:kernel/\1.ko:' modules.order > $(MODLIB)/modules.order
|
@sed 's:^\(.*\)\.o$$:kernel/\1.ko:' modules.order > $(MODLIB)/modules.order
|
||||||
|
endif
|
||||||
@cp -f modules.builtin $(MODLIB)/
|
@cp -f modules.builtin $(MODLIB)/
|
||||||
@cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
|
@cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
|
||||||
|
|
||||||
endif # CONFIG_MODULES
|
|
||||||
|
|
||||||
###
|
###
|
||||||
# Cleaning is done on three levels.
|
# Cleaning is done on three levels.
|
||||||
# make clean Delete most generated files
|
# make clean Delete most generated files
|
||||||
@ -1930,6 +1918,13 @@ help:
|
|||||||
@echo ' clean - remove generated files in module directory only'
|
@echo ' clean - remove generated files in module directory only'
|
||||||
@echo ''
|
@echo ''
|
||||||
|
|
||||||
|
__external_modules_error:
|
||||||
|
@echo >&2 '***'
|
||||||
|
@echo >&2 '*** The present kernel disabled CONFIG_MODULES.'
|
||||||
|
@echo >&2 '*** You cannot build or install external modules.'
|
||||||
|
@echo >&2 '***'
|
||||||
|
@false
|
||||||
|
|
||||||
endif # KBUILD_EXTMOD
|
endif # KBUILD_EXTMOD
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
@ -1966,13 +1961,10 @@ else # CONFIG_MODULES
|
|||||||
# Modules not configured
|
# Modules not configured
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
modules modules_install:
|
PHONY += __external_modules_error
|
||||||
@echo >&2 '***'
|
|
||||||
@echo >&2 '*** The present kernel configuration has modules disabled.'
|
modules modules_install: __external_modules_error
|
||||||
@echo >&2 '*** To use the module feature, please run "make menuconfig" etc.'
|
@:
|
||||||
@echo >&2 '*** to enable CONFIG_MODULES.'
|
|
||||||
@echo >&2 '***'
|
|
||||||
@exit 1
|
|
||||||
|
|
||||||
KBUILD_MODULES :=
|
KBUILD_MODULES :=
|
||||||
|
|
||||||
@ -2045,7 +2037,7 @@ clean: $(clean-dirs)
|
|||||||
-o -name '*.dtb.S' -o -name '*.dtbo.S' \
|
-o -name '*.dtb.S' -o -name '*.dtbo.S' \
|
||||||
-o -name '*.dt.yaml' \
|
-o -name '*.dt.yaml' \
|
||||||
-o -name '*.dwo' -o -name '*.lst' \
|
-o -name '*.dwo' -o -name '*.lst' \
|
||||||
-o -name '*.su' -o -name '*.mod' -o -name '*.usyms' \
|
-o -name '*.su' -o -name '*.mod' \
|
||||||
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
|
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
|
||||||
-o -name '*.lex.c' -o -name '*.tab.[ch]' \
|
-o -name '*.lex.c' -o -name '*.tab.[ch]' \
|
||||||
-o -name '*.asn1.[ch]' \
|
-o -name '*.asn1.[ch]' \
|
||||||
|
@ -8,6 +8,10 @@
|
|||||||
|
|
||||||
#include <asm/dwarf.h>
|
#include <asm/dwarf.h>
|
||||||
|
|
||||||
|
#define ASM_NL ` /* use '`' to mark new line in macro */
|
||||||
|
#define __ALIGN .align 4
|
||||||
|
#define __ALIGN_STR __stringify(__ALIGN)
|
||||||
|
|
||||||
#ifdef __ASSEMBLY__
|
#ifdef __ASSEMBLY__
|
||||||
|
|
||||||
.macro ST2 e, o, off
|
.macro ST2 e, o, off
|
||||||
@ -28,10 +32,6 @@
|
|||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#define ASM_NL ` /* use '`' to mark new line in macro */
|
|
||||||
#define __ALIGN .align 4
|
|
||||||
#define __ALIGN_STR __stringify(__ALIGN)
|
|
||||||
|
|
||||||
/* annotation for data we want in DCCM - if enabled in .config */
|
/* annotation for data we want in DCCM - if enabled in .config */
|
||||||
.macro ARCFP_DATA nm
|
.macro ARCFP_DATA nm
|
||||||
#ifdef CONFIG_ARC_HAS_DCCM
|
#ifdef CONFIG_ARC_HAS_DCCM
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
generated-y += syscall_table.h
|
generated-y += syscall_table.h
|
||||||
generic-y += agp.h
|
generic-y += agp.h
|
||||||
|
generic-y += export.h
|
||||||
generic-y += kvm_para.h
|
generic-y += kvm_para.h
|
||||||
generic-y += mcs_spinlock.h
|
generic-y += mcs_spinlock.h
|
||||||
generic-y += vtime.h
|
generic-y += vtime.h
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
/* EXPORT_DATA_SYMBOL != EXPORT_SYMBOL here */
|
|
||||||
#define KSYM_FUNC(name) @fptr(name)
|
|
||||||
#include <asm-generic/export.h>
|
|
@ -170,7 +170,7 @@ RestRR: \
|
|||||||
__PAGE_ALIGNED_DATA
|
__PAGE_ALIGNED_DATA
|
||||||
|
|
||||||
.global empty_zero_page
|
.global empty_zero_page
|
||||||
EXPORT_DATA_SYMBOL_GPL(empty_zero_page)
|
EXPORT_SYMBOL_GPL(empty_zero_page)
|
||||||
empty_zero_page:
|
empty_zero_page:
|
||||||
.skip PAGE_SIZE
|
.skip PAGE_SIZE
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@
|
|||||||
|
|
||||||
.align 32768 // align on 32KB boundary
|
.align 32768 // align on 32KB boundary
|
||||||
.global ia64_ivt
|
.global ia64_ivt
|
||||||
EXPORT_DATA_SYMBOL(ia64_ivt)
|
EXPORT_SYMBOL(ia64_ivt)
|
||||||
ia64_ivt:
|
ia64_ivt:
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// 0x0000 Entry 0 (size 64 bundles) VHPT Translation (8,20,47)
|
// 0x0000 Entry 0 (size 64 bundles) VHPT Translation (8,20,47)
|
||||||
|
@ -346,7 +346,7 @@ KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
|
|||||||
KBUILD_LDFLAGS += -m $(ld-emul)
|
KBUILD_LDFLAGS += -m $(ld-emul)
|
||||||
|
|
||||||
ifdef CONFIG_MIPS
|
ifdef CONFIG_MIPS
|
||||||
CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \
|
CHECKFLAGS += $(shell $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \
|
||||||
grep -E -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \
|
grep -E -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \
|
||||||
sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g')
|
sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g')
|
||||||
endif
|
endif
|
||||||
|
@ -54,7 +54,7 @@ KASAN_SANITIZE := n
|
|||||||
KCSAN_SANITIZE := n
|
KCSAN_SANITIZE := n
|
||||||
|
|
||||||
ccflags-y := -fno-common -fno-builtin
|
ccflags-y := -fno-common -fno-builtin
|
||||||
ldflags-y := -Wl,--hash-style=both -nostdlib -shared -z noexecstack
|
ldflags-y := -Wl,--hash-style=both -nostdlib -shared -z noexecstack $(CLANG_FLAGS)
|
||||||
ldflags-$(CONFIG_LD_IS_LLD) += $(call cc-option,--ld-path=$(LD),-fuse-ld=lld)
|
ldflags-$(CONFIG_LD_IS_LLD) += $(call cc-option,--ld-path=$(LD),-fuse-ld=lld)
|
||||||
ldflags-$(CONFIG_LD_ORPHAN_WARN) += -Wl,--orphan-handling=$(CONFIG_LD_ORPHAN_WARN_LEVEL)
|
ldflags-$(CONFIG_LD_ORPHAN_WARN) += -Wl,--orphan-handling=$(CONFIG_LD_ORPHAN_WARN_LEVEL)
|
||||||
|
|
||||||
|
@ -37,13 +37,6 @@ EXPORT_SYMBOL(vsyscall_ehdr);
|
|||||||
EXPORT_SYMBOL(vsyscall_end);
|
EXPORT_SYMBOL(vsyscall_end);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Export symbols used by GCC for the stack protector. */
|
|
||||||
extern void __stack_smash_handler(void *) __attribute__((weak));
|
|
||||||
EXPORT_SYMBOL(__stack_smash_handler);
|
|
||||||
|
|
||||||
extern long __guard __attribute__((weak));
|
|
||||||
EXPORT_SYMBOL(__guard);
|
|
||||||
|
|
||||||
#ifdef _FORTIFY_SOURCE
|
#ifdef _FORTIFY_SOURCE
|
||||||
extern int __sprintf_chk(char *str, int flag, size_t len, const char *format);
|
extern int __sprintf_chk(char *str, int flag, size_t len, const char *format);
|
||||||
EXPORT_SYMBOL(__sprintf_chk);
|
EXPORT_SYMBOL(__sprintf_chk);
|
||||||
|
@ -3,86 +3,9 @@
|
|||||||
#define __ASM_GENERIC_EXPORT_H
|
#define __ASM_GENERIC_EXPORT_H
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This comment block is used by fixdep. Please do not remove.
|
* <asm/export.h> and <asm-generic/export.h> are deprecated.
|
||||||
*
|
* Please include <linux/export.h> directly.
|
||||||
* When CONFIG_MODVERSIONS is changed from n to y, all source files having
|
|
||||||
* EXPORT_SYMBOL variants must be re-compiled because genksyms is run as a
|
|
||||||
* side effect of the *.o build rule.
|
|
||||||
*/
|
*/
|
||||||
|
#include <linux/export.h>
|
||||||
#ifndef KSYM_FUNC
|
|
||||||
#define KSYM_FUNC(x) x
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
|
|
||||||
#define KSYM_ALIGN 4
|
|
||||||
#elif defined(CONFIG_64BIT)
|
|
||||||
#define KSYM_ALIGN 8
|
|
||||||
#else
|
|
||||||
#define KSYM_ALIGN 4
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.macro __put, val, name
|
|
||||||
#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
|
|
||||||
.long \val - ., \name - ., 0
|
|
||||||
#elif defined(CONFIG_64BIT)
|
|
||||||
.quad \val, \name, 0
|
|
||||||
#else
|
|
||||||
.long \val, \name, 0
|
|
||||||
#endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
/*
|
|
||||||
* note on .section use: we specify progbits since usage of the "M" (SHF_MERGE)
|
|
||||||
* section flag requires it. Use '%progbits' instead of '@progbits' since the
|
|
||||||
* former apparently works on all arches according to the binutils source.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.macro ___EXPORT_SYMBOL name,val,sec
|
|
||||||
#if defined(CONFIG_MODULES) && !defined(__DISABLE_EXPORTS)
|
|
||||||
.section ___ksymtab\sec+\name,"a"
|
|
||||||
.balign KSYM_ALIGN
|
|
||||||
__ksymtab_\name:
|
|
||||||
__put \val, __kstrtab_\name
|
|
||||||
.previous
|
|
||||||
.section __ksymtab_strings,"aMS",%progbits,1
|
|
||||||
__kstrtab_\name:
|
|
||||||
.asciz "\name"
|
|
||||||
.previous
|
|
||||||
#endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
#if defined(CONFIG_TRIM_UNUSED_KSYMS)
|
|
||||||
|
|
||||||
#include <linux/kconfig.h>
|
|
||||||
#include <generated/autoksyms.h>
|
|
||||||
|
|
||||||
.macro __ksym_marker sym
|
|
||||||
.section ".discard.ksym","a"
|
|
||||||
__ksym_marker_\sym:
|
|
||||||
.previous
|
|
||||||
.endm
|
|
||||||
|
|
||||||
#define __EXPORT_SYMBOL(sym, val, sec) \
|
|
||||||
__ksym_marker sym; \
|
|
||||||
__cond_export_sym(sym, val, sec, __is_defined(__KSYM_##sym))
|
|
||||||
#define __cond_export_sym(sym, val, sec, conf) \
|
|
||||||
___cond_export_sym(sym, val, sec, conf)
|
|
||||||
#define ___cond_export_sym(sym, val, sec, enabled) \
|
|
||||||
__cond_export_sym_##enabled(sym, val, sec)
|
|
||||||
#define __cond_export_sym_1(sym, val, sec) ___EXPORT_SYMBOL sym, val, sec
|
|
||||||
#define __cond_export_sym_0(sym, val, sec) /* nothing */
|
|
||||||
|
|
||||||
#else
|
|
||||||
#define __EXPORT_SYMBOL(sym, val, sec) ___EXPORT_SYMBOL sym, val, sec
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define EXPORT_SYMBOL(name) \
|
|
||||||
__EXPORT_SYMBOL(name, KSYM_FUNC(name),)
|
|
||||||
#define EXPORT_SYMBOL_GPL(name) \
|
|
||||||
__EXPORT_SYMBOL(name, KSYM_FUNC(name), _gpl)
|
|
||||||
#define EXPORT_DATA_SYMBOL(name) \
|
|
||||||
__EXPORT_SYMBOL(name, name,)
|
|
||||||
#define EXPORT_DATA_SYMBOL_GPL(name) \
|
|
||||||
__EXPORT_SYMBOL(name, name,_gpl)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1016,6 +1016,7 @@
|
|||||||
PATCHABLE_DISCARDS \
|
PATCHABLE_DISCARDS \
|
||||||
*(.discard) \
|
*(.discard) \
|
||||||
*(.discard.*) \
|
*(.discard.*) \
|
||||||
|
*(.export_symbol) \
|
||||||
*(.modinfo) \
|
*(.modinfo) \
|
||||||
/* ld.bfd warns about .gnu.version* even when not emitted */ \
|
/* ld.bfd warns about .gnu.version* even when not emitted */ \
|
||||||
*(.gnu.version*) \
|
*(.gnu.version*) \
|
||||||
|
@ -10,6 +10,55 @@
|
|||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
#if defined(CONFIG_HAVE_ARCH_PREL32_RELOCATIONS)
|
||||||
|
/*
|
||||||
|
* relative reference: this reduces the size by half on 64-bit architectures,
|
||||||
|
* and eliminates the need for absolute relocations that require runtime
|
||||||
|
* processing on relocatable kernels.
|
||||||
|
*/
|
||||||
|
#define __KSYM_REF(sym) ".long " #sym "- ."
|
||||||
|
#elif defined(CONFIG_64BIT)
|
||||||
|
#define __KSYM_REF(sym) ".quad " #sym
|
||||||
|
#else
|
||||||
|
#define __KSYM_REF(sym) ".long " #sym
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For every exported symbol, do the following:
|
||||||
|
*
|
||||||
|
* - Put the name of the symbol and namespace (empty string "" for none) in
|
||||||
|
* __ksymtab_strings.
|
||||||
|
* - Place a struct kernel_symbol entry in the __ksymtab section.
|
||||||
|
*
|
||||||
|
* Note on .section use: we specify progbits since usage of the "M" (SHF_MERGE)
|
||||||
|
* section flag requires it. Use '%progbits' instead of '@progbits' since the
|
||||||
|
* former apparently works on all arches according to the binutils source.
|
||||||
|
*/
|
||||||
|
#define __KSYMTAB(name, sym, sec, ns) \
|
||||||
|
asm(" .section \"__ksymtab_strings\",\"aMS\",%progbits,1" "\n" \
|
||||||
|
"__kstrtab_" #name ":" "\n" \
|
||||||
|
" .asciz \"" #name "\"" "\n" \
|
||||||
|
"__kstrtabns_" #name ":" "\n" \
|
||||||
|
" .asciz \"" ns "\"" "\n" \
|
||||||
|
" .previous" "\n" \
|
||||||
|
" .section \"___ksymtab" sec "+" #name "\", \"a\"" "\n" \
|
||||||
|
" .balign 4" "\n" \
|
||||||
|
"__ksymtab_" #name ":" "\n" \
|
||||||
|
__KSYM_REF(sym) "\n" \
|
||||||
|
__KSYM_REF(__kstrtab_ ##name) "\n" \
|
||||||
|
__KSYM_REF(__kstrtabns_ ##name) "\n" \
|
||||||
|
" .previous" "\n" \
|
||||||
|
)
|
||||||
|
|
||||||
|
#ifdef CONFIG_IA64
|
||||||
|
#define KSYM_FUNC(name) @fptr(name)
|
||||||
|
#else
|
||||||
|
#define KSYM_FUNC(name) name
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define KSYMTAB_FUNC(name, sec, ns) __KSYMTAB(name, KSYM_FUNC(name), sec, ns)
|
||||||
|
#define KSYMTAB_DATA(name, sec, ns) __KSYMTAB(name, name, sec, ns)
|
||||||
|
|
||||||
#define SYMBOL_CRC(sym, crc, sec) \
|
#define SYMBOL_CRC(sym, crc, sec) \
|
||||||
asm(".section \"___kcrctab" sec "+" #sym "\",\"a\"" "\n" \
|
asm(".section \"___kcrctab" sec "+" #sym "\",\"a\"" "\n" \
|
||||||
"__crc_" #sym ":" "\n" \
|
"__crc_" #sym ":" "\n" \
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
#ifndef _LINUX_EXPORT_H
|
#ifndef _LINUX_EXPORT_H
|
||||||
#define _LINUX_EXPORT_H
|
#define _LINUX_EXPORT_H
|
||||||
|
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
#include <linux/linkage.h>
|
||||||
#include <linux/stringify.h>
|
#include <linux/stringify.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -28,74 +30,25 @@ extern struct module __this_module;
|
|||||||
#else
|
#else
|
||||||
#define THIS_MODULE ((struct module *)0)
|
#define THIS_MODULE ((struct module *)0)
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
|
#ifdef CONFIG_64BIT
|
||||||
#include <linux/compiler.h>
|
#define __EXPORT_SYMBOL_REF(sym) \
|
||||||
/*
|
.balign 8 ASM_NL \
|
||||||
* Emit the ksymtab entry as a pair of relative references: this reduces
|
.quad sym
|
||||||
* the size by half on 64-bit architectures, and eliminates the need for
|
|
||||||
* absolute relocations that require runtime processing on relocatable
|
|
||||||
* kernels.
|
|
||||||
*/
|
|
||||||
#define __KSYMTAB_ENTRY(sym, sec) \
|
|
||||||
__ADDRESSABLE(sym) \
|
|
||||||
asm(" .section \"___ksymtab" sec "+" #sym "\", \"a\" \n" \
|
|
||||||
" .balign 4 \n" \
|
|
||||||
"__ksymtab_" #sym ": \n" \
|
|
||||||
" .long " #sym "- . \n" \
|
|
||||||
" .long __kstrtab_" #sym "- . \n" \
|
|
||||||
" .long __kstrtabns_" #sym "- . \n" \
|
|
||||||
" .previous \n")
|
|
||||||
|
|
||||||
struct kernel_symbol {
|
|
||||||
int value_offset;
|
|
||||||
int name_offset;
|
|
||||||
int namespace_offset;
|
|
||||||
};
|
|
||||||
#else
|
#else
|
||||||
#define __KSYMTAB_ENTRY(sym, sec) \
|
#define __EXPORT_SYMBOL_REF(sym) \
|
||||||
static const struct kernel_symbol __ksymtab_##sym \
|
.balign 4 ASM_NL \
|
||||||
__attribute__((section("___ksymtab" sec "+" #sym), used)) \
|
.long sym
|
||||||
__aligned(sizeof(void *)) \
|
|
||||||
= { (unsigned long)&sym, __kstrtab_##sym, __kstrtabns_##sym }
|
|
||||||
|
|
||||||
struct kernel_symbol {
|
|
||||||
unsigned long value;
|
|
||||||
const char *name;
|
|
||||||
const char *namespace;
|
|
||||||
};
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __GENKSYMS__
|
#define ___EXPORT_SYMBOL(sym, license, ns) \
|
||||||
|
.section ".export_symbol","a" ASM_NL \
|
||||||
#define ___EXPORT_SYMBOL(sym, sec, ns) __GENKSYMS_EXPORT_SYMBOL(sym)
|
__export_symbol_##sym: ASM_NL \
|
||||||
|
.asciz license ASM_NL \
|
||||||
#else
|
.asciz ns ASM_NL \
|
||||||
|
__EXPORT_SYMBOL_REF(sym) ASM_NL \
|
||||||
/*
|
.previous
|
||||||
* For every exported symbol, do the following:
|
|
||||||
*
|
|
||||||
* - Put the name of the symbol and namespace (empty string "" for none) in
|
|
||||||
* __ksymtab_strings.
|
|
||||||
* - Place a struct kernel_symbol entry in the __ksymtab section.
|
|
||||||
*
|
|
||||||
* note on .section use: we specify progbits since usage of the "M" (SHF_MERGE)
|
|
||||||
* section flag requires it. Use '%progbits' instead of '@progbits' since the
|
|
||||||
* former apparently works on all arches according to the binutils source.
|
|
||||||
*/
|
|
||||||
#define ___EXPORT_SYMBOL(sym, sec, ns) \
|
|
||||||
extern typeof(sym) sym; \
|
|
||||||
extern const char __kstrtab_##sym[]; \
|
|
||||||
extern const char __kstrtabns_##sym[]; \
|
|
||||||
asm(" .section \"__ksymtab_strings\",\"aMS\",%progbits,1 \n" \
|
|
||||||
"__kstrtab_" #sym ": \n" \
|
|
||||||
" .asciz \"" #sym "\" \n" \
|
|
||||||
"__kstrtabns_" #sym ": \n" \
|
|
||||||
" .asciz \"" ns "\" \n" \
|
|
||||||
" .previous \n"); \
|
|
||||||
__KSYMTAB_ENTRY(sym, sec)
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(CONFIG_MODULES) || defined(__DISABLE_EXPORTS)
|
#if !defined(CONFIG_MODULES) || defined(__DISABLE_EXPORTS)
|
||||||
|
|
||||||
@ -104,54 +57,35 @@ struct kernel_symbol {
|
|||||||
* be reused in other execution contexts such as the UEFI stub or the
|
* be reused in other execution contexts such as the UEFI stub or the
|
||||||
* decompressor.
|
* decompressor.
|
||||||
*/
|
*/
|
||||||
#define __EXPORT_SYMBOL(sym, sec, ns)
|
#define __EXPORT_SYMBOL(sym, license, ns)
|
||||||
|
|
||||||
#elif defined(CONFIG_TRIM_UNUSED_KSYMS)
|
#elif defined(__GENKSYMS__)
|
||||||
|
|
||||||
#include <generated/autoksyms.h>
|
#define __EXPORT_SYMBOL(sym, license, ns) __GENKSYMS_EXPORT_SYMBOL(sym)
|
||||||
|
|
||||||
/*
|
#elif defined(__ASSEMBLY__)
|
||||||
* For fine grained build dependencies, we want to tell the build system
|
|
||||||
* about each possible exported symbol even if they're not actually exported.
|
|
||||||
* We use a symbol pattern __ksym_marker_<symbol> that the build system filters
|
|
||||||
* from the $(NM) output (see scripts/gen_ksymdeps.sh). These symbols are
|
|
||||||
* discarded in the final link stage.
|
|
||||||
*/
|
|
||||||
#define __ksym_marker(sym) \
|
|
||||||
static int __ksym_marker_##sym[0] __section(".discard.ksym") __used
|
|
||||||
|
|
||||||
#define __EXPORT_SYMBOL(sym, sec, ns) \
|
#define __EXPORT_SYMBOL(sym, license, ns) \
|
||||||
__ksym_marker(sym); \
|
___EXPORT_SYMBOL(sym, license, ns)
|
||||||
__cond_export_sym(sym, sec, ns, __is_defined(__KSYM_##sym))
|
|
||||||
#define __cond_export_sym(sym, sec, ns, conf) \
|
|
||||||
___cond_export_sym(sym, sec, ns, conf)
|
|
||||||
#define ___cond_export_sym(sym, sec, ns, enabled) \
|
|
||||||
__cond_export_sym_##enabled(sym, sec, ns)
|
|
||||||
#define __cond_export_sym_1(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
|
|
||||||
|
|
||||||
#ifdef __GENKSYMS__
|
|
||||||
#define __cond_export_sym_0(sym, sec, ns) __GENKSYMS_EXPORT_SYMBOL(sym)
|
|
||||||
#else
|
|
||||||
#define __cond_export_sym_0(sym, sec, ns) /* nothing */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
|
#define __EXPORT_SYMBOL(sym, license, ns) \
|
||||||
|
extern typeof(sym) sym; \
|
||||||
|
__ADDRESSABLE(sym) \
|
||||||
|
asm(__stringify(___EXPORT_SYMBOL(sym, license, ns)))
|
||||||
|
|
||||||
#endif /* CONFIG_MODULES */
|
#endif /* CONFIG_MODULES */
|
||||||
|
|
||||||
#ifdef DEFAULT_SYMBOL_NAMESPACE
|
#ifdef DEFAULT_SYMBOL_NAMESPACE
|
||||||
#define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, __stringify(DEFAULT_SYMBOL_NAMESPACE))
|
#define _EXPORT_SYMBOL(sym, license) __EXPORT_SYMBOL(sym, license, __stringify(DEFAULT_SYMBOL_NAMESPACE))
|
||||||
#else
|
#else
|
||||||
#define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
|
#define _EXPORT_SYMBOL(sym, license) __EXPORT_SYMBOL(sym, license, "")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "")
|
#define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, "")
|
||||||
#define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "_gpl")
|
#define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "GPL")
|
||||||
#define EXPORT_SYMBOL_NS(sym, ns) __EXPORT_SYMBOL(sym, "", __stringify(ns))
|
#define EXPORT_SYMBOL_NS(sym, ns) __EXPORT_SYMBOL(sym, "", __stringify(ns))
|
||||||
#define EXPORT_SYMBOL_NS_GPL(sym, ns) __EXPORT_SYMBOL(sym, "_gpl", __stringify(ns))
|
#define EXPORT_SYMBOL_NS_GPL(sym, ns) __EXPORT_SYMBOL(sym, "GPL", __stringify(ns))
|
||||||
|
|
||||||
#endif /* !__ASSEMBLY__ */
|
|
||||||
|
|
||||||
#endif /* _LINUX_EXPORT_H */
|
#endif /* _LINUX_EXPORT_H */
|
||||||
|
@ -375,23 +375,23 @@ const struct dev_pm_ops name = { \
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
#define _EXPORT_DEV_PM_OPS(name, sec, ns) \
|
#define _EXPORT_DEV_PM_OPS(name, license, ns) \
|
||||||
const struct dev_pm_ops name; \
|
const struct dev_pm_ops name; \
|
||||||
__EXPORT_SYMBOL(name, sec, ns); \
|
__EXPORT_SYMBOL(name, license, ns); \
|
||||||
const struct dev_pm_ops name
|
const struct dev_pm_ops name
|
||||||
#define EXPORT_PM_FN_GPL(name) EXPORT_SYMBOL_GPL(name)
|
#define EXPORT_PM_FN_GPL(name) EXPORT_SYMBOL_GPL(name)
|
||||||
#define EXPORT_PM_FN_NS_GPL(name, ns) EXPORT_SYMBOL_NS_GPL(name, ns)
|
#define EXPORT_PM_FN_NS_GPL(name, ns) EXPORT_SYMBOL_NS_GPL(name, ns)
|
||||||
#else
|
#else
|
||||||
#define _EXPORT_DEV_PM_OPS(name, sec, ns) \
|
#define _EXPORT_DEV_PM_OPS(name, license, ns) \
|
||||||
static __maybe_unused const struct dev_pm_ops __static_##name
|
static __maybe_unused const struct dev_pm_ops __static_##name
|
||||||
#define EXPORT_PM_FN_GPL(name)
|
#define EXPORT_PM_FN_GPL(name)
|
||||||
#define EXPORT_PM_FN_NS_GPL(name, ns)
|
#define EXPORT_PM_FN_NS_GPL(name, ns)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define EXPORT_DEV_PM_OPS(name) _EXPORT_DEV_PM_OPS(name, "", "")
|
#define EXPORT_DEV_PM_OPS(name) _EXPORT_DEV_PM_OPS(name, "", "")
|
||||||
#define EXPORT_GPL_DEV_PM_OPS(name) _EXPORT_DEV_PM_OPS(name, "_gpl", "")
|
#define EXPORT_GPL_DEV_PM_OPS(name) _EXPORT_DEV_PM_OPS(name, "GPL", "")
|
||||||
#define EXPORT_NS_DEV_PM_OPS(name, ns) _EXPORT_DEV_PM_OPS(name, "", #ns)
|
#define EXPORT_NS_DEV_PM_OPS(name, ns) _EXPORT_DEV_PM_OPS(name, "", #ns)
|
||||||
#define EXPORT_NS_GPL_DEV_PM_OPS(name, ns) _EXPORT_DEV_PM_OPS(name, "_gpl", #ns)
|
#define EXPORT_NS_GPL_DEV_PM_OPS(name, ns) _EXPORT_DEV_PM_OPS(name, "GPL", #ns)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use this if you want to use the same suspend and resume callbacks for suspend
|
* Use this if you want to use the same suspend and resume callbacks for suspend
|
||||||
|
@ -60,3 +60,4 @@ include/generated/utsversion.h: FORCE
|
|||||||
$(obj)/version-timestamp.o: include/generated/utsversion.h
|
$(obj)/version-timestamp.o: include/generated/utsversion.h
|
||||||
CFLAGS_version-timestamp.o := -include include/generated/utsversion.h
|
CFLAGS_version-timestamp.o := -include include/generated/utsversion.h
|
||||||
KASAN_SANITIZE_version-timestamp.o := n
|
KASAN_SANITIZE_version-timestamp.o := n
|
||||||
|
GCOV_PROFILE_version-timestamp.o := n
|
||||||
|
@ -83,12 +83,9 @@ find $cpio_dir -type f -print0 |
|
|||||||
xargs -0 -P8 -n1 perl -pi -e 'BEGIN {undef $/;}; s/\/\*((?!SPDX).)*?\*\///smg;'
|
xargs -0 -P8 -n1 perl -pi -e 'BEGIN {undef $/;}; s/\/\*((?!SPDX).)*?\*\///smg;'
|
||||||
|
|
||||||
# Create archive and try to normalize metadata for reproducibility.
|
# Create archive and try to normalize metadata for reproducibility.
|
||||||
# For compatibility with older versions of tar, files are fed to tar
|
tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \
|
||||||
# pre-sorted, as --sort=name might not be available.
|
--owner=0 --group=0 --sort=name --numeric-owner \
|
||||||
find $cpio_dir -printf "./%P\n" | LC_ALL=C sort | \
|
-I $XZ -cf $tarfile -C $cpio_dir/ . > /dev/null
|
||||||
tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \
|
|
||||||
--owner=0 --group=0 --numeric-owner --no-recursion \
|
|
||||||
-I $XZ -cf $tarfile -C $cpio_dir/ -T - > /dev/null
|
|
||||||
|
|
||||||
echo $headers_md5 > kernel/kheaders.md5
|
echo $headers_md5 > kernel/kheaders.md5
|
||||||
echo "$this_file_md5" >> kernel/kheaders.md5
|
echo "$this_file_md5" >> kernel/kheaders.md5
|
||||||
|
@ -32,6 +32,18 @@
|
|||||||
/* Maximum number of characters written by module_flags() */
|
/* Maximum number of characters written by module_flags() */
|
||||||
#define MODULE_FLAGS_BUF_SIZE (TAINT_FLAGS_COUNT + 4)
|
#define MODULE_FLAGS_BUF_SIZE (TAINT_FLAGS_COUNT + 4)
|
||||||
|
|
||||||
|
struct kernel_symbol {
|
||||||
|
#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
|
||||||
|
int value_offset;
|
||||||
|
int name_offset;
|
||||||
|
int namespace_offset;
|
||||||
|
#else
|
||||||
|
unsigned long value;
|
||||||
|
const char *name;
|
||||||
|
const char *namespace;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
extern struct mutex module_mutex;
|
extern struct mutex module_mutex;
|
||||||
extern struct list_head modules;
|
extern struct list_head modules;
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ ifdef need-builtin
|
|||||||
targets-for-builtin += $(obj)/built-in.a
|
targets-for-builtin += $(obj)/built-in.a
|
||||||
endif
|
endif
|
||||||
|
|
||||||
targets-for-modules := $(foreach x, o mod $(if $(CONFIG_TRIM_UNUSED_KSYMS), usyms), \
|
targets-for-modules := $(foreach x, o mod, \
|
||||||
$(patsubst %.o, %.$x, $(filter %.o, $(obj-m))))
|
$(patsubst %.o, %.$x, $(filter %.o, $(obj-m))))
|
||||||
|
|
||||||
ifdef need-modorder
|
ifdef need-modorder
|
||||||
@ -101,7 +101,9 @@ else ifeq ($(KBUILD_CHECKSRC),2)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(KBUILD_EXTRA_WARN),)
|
ifneq ($(KBUILD_EXTRA_WARN),)
|
||||||
cmd_checkdoc = $(srctree)/scripts/kernel-doc -none $<
|
cmd_checkdoc = $(srctree)/scripts/kernel-doc -none $(KDOCFLAGS) \
|
||||||
|
$(if $(findstring 2, $(KBUILD_EXTRA_WARN)), -Wall) \
|
||||||
|
$<
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Compile C sources (.c)
|
# Compile C sources (.c)
|
||||||
@ -161,7 +163,7 @@ quiet_cmd_cc_o_c = CC $(quiet_modtag) $@
|
|||||||
ifdef CONFIG_MODVERSIONS
|
ifdef CONFIG_MODVERSIONS
|
||||||
# When module versioning is enabled the following steps are executed:
|
# When module versioning is enabled the following steps are executed:
|
||||||
# o compile a <file>.o from <file>.c
|
# o compile a <file>.o from <file>.c
|
||||||
# o if <file>.o doesn't contain a __ksymtab version, i.e. does
|
# o if <file>.o doesn't contain a __export_symbol_*, i.e. does
|
||||||
# not export symbols, it's done.
|
# not export symbols, it's done.
|
||||||
# o otherwise, we calculate symbol versions using the good old
|
# o otherwise, we calculate symbol versions using the good old
|
||||||
# genksyms on the preprocessed source and dump them into the .cmd file.
|
# genksyms on the preprocessed source and dump them into the .cmd file.
|
||||||
@ -169,7 +171,7 @@ ifdef CONFIG_MODVERSIONS
|
|||||||
# be compiled and linked to the kernel and/or modules.
|
# be compiled and linked to the kernel and/or modules.
|
||||||
|
|
||||||
gen_symversions = \
|
gen_symversions = \
|
||||||
if $(NM) $@ 2>/dev/null | grep -q __ksymtab; then \
|
if $(NM) $@ 2>/dev/null | grep -q ' __export_symbol_'; then \
|
||||||
$(call cmd_gensymtypes_$(1),$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \
|
$(call cmd_gensymtypes_$(1),$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \
|
||||||
>> $(dot-target).cmd; \
|
>> $(dot-target).cmd; \
|
||||||
fi
|
fi
|
||||||
@ -215,21 +217,12 @@ is-standard-object = $(if $(filter-out y%, $(OBJECT_FILES_NON_STANDARD_$(basetar
|
|||||||
|
|
||||||
$(obj)/%.o: objtool-enabled = $(if $(is-standard-object),$(if $(delay-objtool),$(is-single-obj-m),y))
|
$(obj)/%.o: objtool-enabled = $(if $(is-standard-object),$(if $(delay-objtool),$(is-single-obj-m),y))
|
||||||
|
|
||||||
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
|
||||||
cmd_gen_ksymdeps = \
|
|
||||||
$(CONFIG_SHELL) $(srctree)/scripts/gen_ksymdeps.sh $@ >> $(dot-target).cmd
|
|
||||||
endif
|
|
||||||
|
|
||||||
cmd_check_local_export = $(srctree)/scripts/check-local-export $@
|
|
||||||
|
|
||||||
ifneq ($(findstring 1, $(KBUILD_EXTRA_WARN)),)
|
ifneq ($(findstring 1, $(KBUILD_EXTRA_WARN)),)
|
||||||
cmd_warn_shared_object = $(if $(word 2, $(modname-multi)),$(warning $(kbuild-file): $*.o is added to multiple modules: $(modname-multi)))
|
cmd_warn_shared_object = $(if $(word 2, $(modname-multi)),$(warning $(kbuild-file): $*.o is added to multiple modules: $(modname-multi)))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
define rule_cc_o_c
|
define rule_cc_o_c
|
||||||
$(call cmd_and_fixdep,cc_o_c)
|
$(call cmd_and_fixdep,cc_o_c)
|
||||||
$(call cmd,gen_ksymdeps)
|
|
||||||
$(call cmd,check_local_export)
|
|
||||||
$(call cmd,checksrc)
|
$(call cmd,checksrc)
|
||||||
$(call cmd,checkdoc)
|
$(call cmd,checkdoc)
|
||||||
$(call cmd,gen_objtooldep)
|
$(call cmd,gen_objtooldep)
|
||||||
@ -240,8 +233,6 @@ endef
|
|||||||
|
|
||||||
define rule_as_o_S
|
define rule_as_o_S
|
||||||
$(call cmd_and_fixdep,as_o_S)
|
$(call cmd_and_fixdep,as_o_S)
|
||||||
$(call cmd,gen_ksymdeps)
|
|
||||||
$(call cmd,check_local_export)
|
|
||||||
$(call cmd,gen_objtooldep)
|
$(call cmd,gen_objtooldep)
|
||||||
$(call cmd,gen_symversions_S)
|
$(call cmd,gen_symversions_S)
|
||||||
$(call cmd,warn_shared_object)
|
$(call cmd,warn_shared_object)
|
||||||
@ -260,12 +251,6 @@ cmd_mod = printf '%s\n' $(call real-search, $*.o, .o, -objs -y -m) | \
|
|||||||
$(obj)/%.mod: FORCE
|
$(obj)/%.mod: FORCE
|
||||||
$(call if_changed,mod)
|
$(call if_changed,mod)
|
||||||
|
|
||||||
# List module undefined symbols
|
|
||||||
cmd_undefined_syms = $(NM) $< | sed -n 's/^ *U //p' > $@
|
|
||||||
|
|
||||||
$(obj)/%.usyms: $(obj)/%.o FORCE
|
|
||||||
$(call if_changed,undefined_syms)
|
|
||||||
|
|
||||||
quiet_cmd_cc_lst_c = MKLST $@
|
quiet_cmd_cc_lst_c = MKLST $@
|
||||||
cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \
|
cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \
|
||||||
$(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \
|
$(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \
|
||||||
@ -340,9 +325,7 @@ $(obj)/%.ll: $(src)/%.rs FORCE
|
|||||||
cmd_gensymtypes_S = \
|
cmd_gensymtypes_S = \
|
||||||
{ echo "\#include <linux/kernel.h>" ; \
|
{ echo "\#include <linux/kernel.h>" ; \
|
||||||
echo "\#include <asm/asm-prototypes.h>" ; \
|
echo "\#include <asm/asm-prototypes.h>" ; \
|
||||||
$(CPP) $(a_flags) $< | \
|
$(NM) $@ | sed -n 's/.* __export_symbol_\(.*\)/EXPORT_SYMBOL(\1);/p' ; } | \
|
||||||
grep "\<___EXPORT_SYMBOL\>" | \
|
|
||||||
sed 's/.*___EXPORT_SYMBOL[[:space:]]*\([a-zA-Z0-9_]*\)[[:space:]]*,.*/EXPORT_SYMBOL(\1);/' ; } | \
|
|
||||||
$(CPP) -D__GENKSYMS__ $(c_flags) -xc - | $(genksyms)
|
$(CPP) -D__GENKSYMS__ $(c_flags) -xc - | $(genksyms)
|
||||||
|
|
||||||
quiet_cmd_cc_symtypes_S = SYM $(quiet_modtag) $@
|
quiet_cmd_cc_symtypes_S = SYM $(quiet_modtag) $@
|
||||||
|
@ -35,6 +35,5 @@ CLANG_FLAGS += -Werror=unknown-warning-option
|
|||||||
CLANG_FLAGS += -Werror=ignored-optimization-argument
|
CLANG_FLAGS += -Werror=ignored-optimization-argument
|
||||||
CLANG_FLAGS += -Werror=option-ignored
|
CLANG_FLAGS += -Werror=option-ignored
|
||||||
CLANG_FLAGS += -Werror=unused-command-line-argument
|
CLANG_FLAGS += -Werror=unused-command-line-argument
|
||||||
KBUILD_CFLAGS += $(CLANG_FLAGS)
|
KBUILD_CPPFLAGS += $(CLANG_FLAGS)
|
||||||
KBUILD_AFLAGS += $(CLANG_FLAGS)
|
|
||||||
export CLANG_FLAGS
|
export CLANG_FLAGS
|
||||||
|
@ -37,8 +37,10 @@ __clean-files := $(wildcard $(addprefix $(obj)/, $(__clean-files)))
|
|||||||
|
|
||||||
# ==========================================================================
|
# ==========================================================================
|
||||||
|
|
||||||
|
# To make this rule robust against "Argument list too long" error,
|
||||||
|
# remove $(obj)/ prefix, and restore it by a shell command.
|
||||||
quiet_cmd_clean = CLEAN $(obj)
|
quiet_cmd_clean = CLEAN $(obj)
|
||||||
cmd_clean = rm -rf $(__clean-files)
|
cmd_clean = printf '$(obj)/%s ' $(patsubst $(obj)/%,%,$(__clean-files)) | xargs rm -rf
|
||||||
|
|
||||||
__clean: $(subdir-ymn)
|
__clean: $(subdir-ymn)
|
||||||
ifneq ($(strip $(__clean-files)),)
|
ifneq ($(strip $(__clean-files)),)
|
||||||
|
@ -32,13 +32,13 @@ try-run = $(shell set -e; \
|
|||||||
# Usage: aflags-y += $(call as-option,-Wa$(comma)-isa=foo,)
|
# Usage: aflags-y += $(call as-option,-Wa$(comma)-isa=foo,)
|
||||||
|
|
||||||
as-option = $(call try-run,\
|
as-option = $(call try-run,\
|
||||||
$(CC) -Werror $(KBUILD_AFLAGS) $(1) -c -x assembler-with-cpp /dev/null -o "$$TMP",$(1),$(2))
|
$(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_AFLAGS) $(1) -c -x assembler-with-cpp /dev/null -o "$$TMP",$(1),$(2))
|
||||||
|
|
||||||
# as-instr
|
# as-instr
|
||||||
# Usage: aflags-y += $(call as-instr,instr,option1,option2)
|
# Usage: aflags-y += $(call as-instr,instr,option1,option2)
|
||||||
|
|
||||||
as-instr = $(call try-run,\
|
as-instr = $(call try-run,\
|
||||||
printf "%b\n" "$(1)" | $(CC) -Werror $(KBUILD_AFLAGS) -c -x assembler-with-cpp -o "$$TMP" -,$(2),$(3))
|
printf "%b\n" "$(1)" | $(CC) -Werror $(CLANG_FLAGS) $(KBUILD_AFLAGS) -c -x assembler-with-cpp -o "$$TMP" -,$(2),$(3))
|
||||||
|
|
||||||
# __cc-option
|
# __cc-option
|
||||||
# Usage: MY_CFLAGS += $(call __cc-option,$(CC),$(MY_CFLAGS),-march=winchip-c6,-march=i586)
|
# Usage: MY_CFLAGS += $(call __cc-option,$(CC),$(MY_CFLAGS),-march=winchip-c6,-march=i586)
|
||||||
|
@ -418,9 +418,6 @@ endif
|
|||||||
$(obj)/%.dtb: $(src)/%.dts $(DTC) $(DT_TMP_SCHEMA) FORCE
|
$(obj)/%.dtb: $(src)/%.dts $(DTC) $(DT_TMP_SCHEMA) FORCE
|
||||||
$(call if_changed_dep,dtb)
|
$(call if_changed_dep,dtb)
|
||||||
|
|
||||||
$(obj)/%.dtbo: $(src)/%.dts $(DTC) FORCE
|
|
||||||
$(call if_changed_dep,dtc)
|
|
||||||
|
|
||||||
$(obj)/%.dtbo: $(src)/%.dtso $(DTC) FORCE
|
$(obj)/%.dtbo: $(src)/%.dtso $(DTC) FORCE
|
||||||
$(call if_changed_dep,dtc)
|
$(call if_changed_dep,dtc)
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ modname = $(notdir $(@:.mod.o=))
|
|||||||
part-of-module = y
|
part-of-module = y
|
||||||
|
|
||||||
quiet_cmd_cc_o_c = CC [M] $@
|
quiet_cmd_cc_o_c = CC [M] $@
|
||||||
cmd_cc_o_c = $(CC) $(filter-out $(CC_FLAGS_CFI), $(c_flags)) -c -o $@ $<
|
cmd_cc_o_c = $(CC) $(filter-out $(CC_FLAGS_CFI) $(CFLAGS_GCOV), $(c_flags)) -c -o $@ $<
|
||||||
|
|
||||||
%.mod.o: %.mod.c FORCE
|
%.mod.o: %.mod.c FORCE
|
||||||
$(call if_changed_dep,cc_o_c)
|
$(call if_changed_dep,cc_o_c)
|
||||||
|
@ -47,6 +47,7 @@ modpost-args = \
|
|||||||
$(if $(KBUILD_MODPOST_WARN),-w) \
|
$(if $(KBUILD_MODPOST_WARN),-w) \
|
||||||
$(if $(KBUILD_NSDEPS),-d $(MODULES_NSDEPS)) \
|
$(if $(KBUILD_NSDEPS),-d $(MODULES_NSDEPS)) \
|
||||||
$(if $(CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS)$(KBUILD_NSDEPS),-N) \
|
$(if $(CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS)$(KBUILD_NSDEPS),-N) \
|
||||||
|
$(if $(findstring 1, $(KBUILD_EXTRA_WARN)),-W) \
|
||||||
-o $@
|
-o $@
|
||||||
|
|
||||||
modpost-deps := $(MODPOST)
|
modpost-deps := $(MODPOST)
|
||||||
@ -90,6 +91,13 @@ targets += .vmlinux.objs
|
|||||||
.vmlinux.objs: vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
|
.vmlinux.objs: vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
|
||||||
$(call if_changed,vmlinux_objs)
|
$(call if_changed,vmlinux_objs)
|
||||||
|
|
||||||
|
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
||||||
|
ksym-wl := $(CONFIG_UNUSED_KSYMS_WHITELIST)
|
||||||
|
ksym-wl := $(if $(filter-out /%, $(ksym-wl)),$(srctree)/)$(ksym-wl)
|
||||||
|
modpost-args += -t $(addprefix -u , $(ksym-wl))
|
||||||
|
modpost-deps += $(ksym-wl)
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(wildcard vmlinux.o),)
|
ifeq ($(wildcard vmlinux.o),)
|
||||||
missing-input := vmlinux.o
|
missing-input := vmlinux.o
|
||||||
output-symdump := modules-only.symvers
|
output-symdump := modules-only.symvers
|
||||||
|
@ -19,6 +19,7 @@ quiet_cmd_cc_o_c = CC $@
|
|||||||
|
|
||||||
ifdef CONFIG_MODULES
|
ifdef CONFIG_MODULES
|
||||||
KASAN_SANITIZE_.vmlinux.export.o := n
|
KASAN_SANITIZE_.vmlinux.export.o := n
|
||||||
|
GCOV_PROFILE_.vmlinux.export.o := n
|
||||||
targets += .vmlinux.export.o
|
targets += .vmlinux.export.o
|
||||||
vmlinux: .vmlinux.export.o
|
vmlinux: .vmlinux.export.o
|
||||||
endif
|
endif
|
||||||
|
@ -1,73 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
|
||||||
|
|
||||||
# Script to update include/generated/autoksyms.h and dependency files
|
|
||||||
#
|
|
||||||
# Copyright: (C) 2016 Linaro Limited
|
|
||||||
# Created by: Nicolas Pitre, January 2016
|
|
||||||
#
|
|
||||||
|
|
||||||
# Update the include/generated/autoksyms.h file.
|
|
||||||
#
|
|
||||||
# For each symbol being added or removed, the corresponding dependency
|
|
||||||
# file's timestamp is updated to force a rebuild of the affected source
|
|
||||||
# file. All arguments passed to this script are assumed to be a command
|
|
||||||
# to be exec'd to trigger a rebuild of those files.
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
cur_ksyms_file="include/generated/autoksyms.h"
|
|
||||||
new_ksyms_file="include/generated/autoksyms.h.tmpnew"
|
|
||||||
|
|
||||||
info() {
|
|
||||||
if [ "$quiet" != "silent_" ]; then
|
|
||||||
printf " %-7s %s\n" "$1" "$2"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
info "CHK" "$cur_ksyms_file"
|
|
||||||
|
|
||||||
# Use "make V=1" to debug this script.
|
|
||||||
case "$KBUILD_VERBOSE" in
|
|
||||||
*1*)
|
|
||||||
set -x
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Generate a new symbol list file
|
|
||||||
$CONFIG_SHELL $srctree/scripts/gen_autoksyms.sh --modorder "$new_ksyms_file"
|
|
||||||
|
|
||||||
# Extract changes between old and new list and touch corresponding
|
|
||||||
# dependency files.
|
|
||||||
changed=$(
|
|
||||||
count=0
|
|
||||||
sort "$cur_ksyms_file" "$new_ksyms_file" | uniq -u |
|
|
||||||
sed -n 's/^#define __KSYM_\(.*\) 1/\1/p' |
|
|
||||||
while read sympath; do
|
|
||||||
if [ -z "$sympath" ]; then continue; fi
|
|
||||||
depfile="include/ksym/${sympath}"
|
|
||||||
mkdir -p "$(dirname "$depfile")"
|
|
||||||
touch "$depfile"
|
|
||||||
# Filesystems with coarse time precision may create timestamps
|
|
||||||
# equal to the one from a file that was very recently built and that
|
|
||||||
# needs to be rebuild. Let's guard against that by making sure our
|
|
||||||
# dep files are always newer than the first file we created here.
|
|
||||||
while [ ! "$depfile" -nt "$new_ksyms_file" ]; do
|
|
||||||
touch "$depfile"
|
|
||||||
done
|
|
||||||
echo $((count += 1))
|
|
||||||
done | tail -1 )
|
|
||||||
changed=${changed:-0}
|
|
||||||
|
|
||||||
if [ $changed -gt 0 ]; then
|
|
||||||
# Replace the old list with tne new one
|
|
||||||
old=$(grep -c "^#define __KSYM_" "$cur_ksyms_file" || true)
|
|
||||||
new=$(grep -c "^#define __KSYM_" "$new_ksyms_file" || true)
|
|
||||||
info "KSYMS" "symbols: before=$old, after=$new, changed=$changed"
|
|
||||||
info "UPD" "$cur_ksyms_file"
|
|
||||||
mv -f "$new_ksyms_file" "$cur_ksyms_file"
|
|
||||||
# Then trigger a rebuild of affected source files
|
|
||||||
exec $@
|
|
||||||
else
|
|
||||||
rm -f "$new_ksyms_file"
|
|
||||||
fi
|
|
@ -246,8 +246,7 @@ static void *read_file(const char *filename)
|
|||||||
/* Ignore certain dependencies */
|
/* Ignore certain dependencies */
|
||||||
static int is_ignored_file(const char *s, int len)
|
static int is_ignored_file(const char *s, int len)
|
||||||
{
|
{
|
||||||
return str_ends_with(s, len, "include/generated/autoconf.h") ||
|
return str_ends_with(s, len, "include/generated/autoconf.h");
|
||||||
str_ends_with(s, len, "include/generated/autoksyms.h");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do not parse these files */
|
/* Do not parse these files */
|
||||||
|
@ -1,70 +0,0 @@
|
|||||||
#!/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
|
|
||||||
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
|
|
||||||
# '2>/dev/null'. However, it suppresses real error messages as well. Add a
|
|
||||||
# hand-crafted error message here.
|
|
||||||
#
|
|
||||||
# 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 simpler:
|
|
||||||
# { ${NM} --quiet ${1} || kill 0; } |
|
|
||||||
|
|
||||||
{ ${NM} ${1} 2>/dev/null || { echo "${0}: ${NM} failed" >&2; kill $pid; } } |
|
|
||||||
${AWK} -v "file=${1}" '
|
|
||||||
BEGIN {
|
|
||||||
i = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# Skip the line if the number of fields is less than 3.
|
|
||||||
#
|
|
||||||
# case 1)
|
|
||||||
# For undefined symbols, the first field (value) is empty.
|
|
||||||
# The outout looks like this:
|
|
||||||
# " U _printk"
|
|
||||||
# It is unneeded to record undefined symbols.
|
|
||||||
#
|
|
||||||
# case 2)
|
|
||||||
# For Clang LTO, llvm-nm outputs a line with type t but empty name:
|
|
||||||
# "---------------- t"
|
|
||||||
!length($3) {
|
|
||||||
next
|
|
||||||
}
|
|
||||||
|
|
||||||
# save (name, type) in the associative array
|
|
||||||
{ symbol_types[$3]=$2 }
|
|
||||||
|
|
||||||
# append the exported symbol to the array
|
|
||||||
($3 ~ /^__ksymtab_/) {
|
|
||||||
export_symbols[i] = $3
|
|
||||||
sub(/^__ksymtab_/, "", export_symbols[i])
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
|
|
||||||
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 $?
|
|
@ -1,62 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
|
||||||
|
|
||||||
# Create an autoksyms.h header file from the list of all module's needed symbols
|
|
||||||
# as recorded in *.usyms files and the user-provided symbol whitelist.
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Use "make V=1" to debug this script.
|
|
||||||
case "$KBUILD_VERBOSE" in
|
|
||||||
*1*)
|
|
||||||
set -x
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
read_modorder=
|
|
||||||
|
|
||||||
if [ "$1" = --modorder ]; then
|
|
||||||
shift
|
|
||||||
read_modorder=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
output_file="$1"
|
|
||||||
|
|
||||||
needed_symbols=
|
|
||||||
|
|
||||||
# Special case for modversions (see modpost.c)
|
|
||||||
if grep -q "^CONFIG_MODVERSIONS=y$" include/config/auto.conf; then
|
|
||||||
needed_symbols="$needed_symbols module_layout"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ksym_wl=$(sed -n 's/^CONFIG_UNUSED_KSYMS_WHITELIST=\(.*\)$/\1/p' include/config/auto.conf)
|
|
||||||
if [ -n "$ksym_wl" ]; then
|
|
||||||
[ "${ksym_wl}" != "${ksym_wl#/}" ] || ksym_wl="$abs_srctree/$ksym_wl"
|
|
||||||
if [ ! -f "$ksym_wl" ] || [ ! -r "$ksym_wl" ]; then
|
|
||||||
echo "ERROR: '$ksym_wl' whitelist file not found" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Generate a new ksym list file with symbols needed by the current
|
|
||||||
# set of modules.
|
|
||||||
cat > "$output_file" << EOT
|
|
||||||
/*
|
|
||||||
* Automatically generated file; DO NOT EDIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
EOT
|
|
||||||
|
|
||||||
{
|
|
||||||
[ -n "${read_modorder}" ] && sed 's/o$/usyms/' modules.order | xargs cat
|
|
||||||
echo "$needed_symbols"
|
|
||||||
[ -n "$ksym_wl" ] && cat "$ksym_wl"
|
|
||||||
} | sed -e 's/ /\n/g' | sed -n -e '/^$/!p' |
|
|
||||||
# Remove the dot prefix for ppc64; symbol names with a dot (.) hold entry
|
|
||||||
# point addresses.
|
|
||||||
sed -e 's/^\.//' |
|
|
||||||
sort -u |
|
|
||||||
# Ignore __this_module. It's not an exported symbol, and will be resolved
|
|
||||||
# when the final .ko's are linked.
|
|
||||||
grep -v '^__this_module$' |
|
|
||||||
sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$output_file"
|
|
@ -1,30 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# List of exported symbols
|
|
||||||
#
|
|
||||||
# If the object has no symbol, $NM warns 'no symbols'.
|
|
||||||
# Suppress the stderr.
|
|
||||||
# TODO:
|
|
||||||
# Use -q instead of 2>/dev/null when we upgrade the minimum version of
|
|
||||||
# binutils to 2.37, llvm to 13.0.0.
|
|
||||||
ksyms=$($NM $1 2>/dev/null | sed -n 's/.*__ksym_marker_\(.*\)/\1/p')
|
|
||||||
|
|
||||||
if [ -z "$ksyms" ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "ksymdeps_$1 := \\"
|
|
||||||
|
|
||||||
for s in $ksyms
|
|
||||||
do
|
|
||||||
printf ' $(wildcard include/ksym/%s) \\\n' "$s"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "$1: \$(ksymdeps_$1)"
|
|
||||||
echo
|
|
||||||
echo "\$(ksymdeps_$1):"
|
|
@ -19,6 +19,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -29,24 +30,8 @@
|
|||||||
|
|
||||||
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
|
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
|
||||||
|
|
||||||
#define _stringify_1(x) #x
|
|
||||||
#define _stringify(x) _stringify_1(x)
|
|
||||||
|
|
||||||
#define KSYM_NAME_LEN 512
|
#define KSYM_NAME_LEN 512
|
||||||
|
|
||||||
/*
|
|
||||||
* A substantially bigger size than the current maximum.
|
|
||||||
*
|
|
||||||
* It cannot be defined as an expression because it gets stringified
|
|
||||||
* for the fscanf() format string. Therefore, a _Static_assert() is
|
|
||||||
* used instead to maintain the relationship with KSYM_NAME_LEN.
|
|
||||||
*/
|
|
||||||
#define KSYM_NAME_LEN_BUFFER 2048
|
|
||||||
_Static_assert(
|
|
||||||
KSYM_NAME_LEN_BUFFER == KSYM_NAME_LEN * 4,
|
|
||||||
"Please keep KSYM_NAME_LEN_BUFFER in sync with KSYM_NAME_LEN"
|
|
||||||
);
|
|
||||||
|
|
||||||
struct sym_entry {
|
struct sym_entry {
|
||||||
unsigned long long addr;
|
unsigned long long addr;
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
@ -136,24 +121,40 @@ static void check_symbol_range(const char *sym, unsigned long long addr,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct sym_entry *read_symbol(FILE *in)
|
static struct sym_entry *read_symbol(FILE *in, char **buf, size_t *buf_len)
|
||||||
{
|
{
|
||||||
char name[KSYM_NAME_LEN_BUFFER+1], type;
|
char *name, type, *p;
|
||||||
unsigned long long addr;
|
unsigned long long addr;
|
||||||
unsigned int len;
|
size_t len;
|
||||||
|
ssize_t readlen;
|
||||||
struct sym_entry *sym;
|
struct sym_entry *sym;
|
||||||
int rc;
|
|
||||||
|
|
||||||
rc = fscanf(in, "%llx %c %" _stringify(KSYM_NAME_LEN_BUFFER) "s\n", &addr, &type, name);
|
readlen = getline(buf, buf_len, in);
|
||||||
if (rc != 3) {
|
if (readlen < 0) {
|
||||||
if (rc != EOF && fgets(name, ARRAY_SIZE(name), in) == NULL)
|
if (errno) {
|
||||||
fprintf(stderr, "Read error or end of file.\n");
|
perror("read_symbol");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (strlen(name) >= KSYM_NAME_LEN) {
|
|
||||||
|
if ((*buf)[readlen - 1] == '\n')
|
||||||
|
(*buf)[readlen - 1] = 0;
|
||||||
|
|
||||||
|
addr = strtoull(*buf, &p, 16);
|
||||||
|
|
||||||
|
if (*buf == p || *p++ != ' ' || !isascii((type = *p++)) || *p++ != ' ') {
|
||||||
|
fprintf(stderr, "line format error\n");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
name = p;
|
||||||
|
len = strlen(name);
|
||||||
|
|
||||||
|
if (len >= KSYM_NAME_LEN) {
|
||||||
fprintf(stderr, "Symbol %s too long for kallsyms (%zu >= %d).\n"
|
fprintf(stderr, "Symbol %s too long for kallsyms (%zu >= %d).\n"
|
||||||
"Please increase KSYM_NAME_LEN both in kernel and kallsyms.c\n",
|
"Please increase KSYM_NAME_LEN both in kernel and kallsyms.c\n",
|
||||||
name, strlen(name), KSYM_NAME_LEN);
|
name, len, KSYM_NAME_LEN);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,8 +170,7 @@ static struct sym_entry *read_symbol(FILE *in)
|
|||||||
|
|
||||||
/* include the type field in the symbol name, so that it gets
|
/* include the type field in the symbol name, so that it gets
|
||||||
* compressed together */
|
* compressed together */
|
||||||
|
len++;
|
||||||
len = strlen(name) + 1;
|
|
||||||
|
|
||||||
sym = malloc(sizeof(*sym) + len + 1);
|
sym = malloc(sizeof(*sym) + len + 1);
|
||||||
if (!sym) {
|
if (!sym) {
|
||||||
@ -257,6 +257,8 @@ static void read_map(const char *in)
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
struct sym_entry *sym;
|
struct sym_entry *sym;
|
||||||
|
char *buf = NULL;
|
||||||
|
size_t buflen = 0;
|
||||||
|
|
||||||
fp = fopen(in, "r");
|
fp = fopen(in, "r");
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
@ -265,7 +267,7 @@ static void read_map(const char *in)
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (!feof(fp)) {
|
while (!feof(fp)) {
|
||||||
sym = read_symbol(fp);
|
sym = read_symbol(fp, &buf, &buflen);
|
||||||
if (!sym)
|
if (!sym)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -284,6 +286,7 @@ static void read_map(const char *in)
|
|||||||
table[table_cnt++] = sym;
|
table[table_cnt++] = sym;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(buf);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -806,7 +809,7 @@ static void record_relative_base(void)
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
while (1) {
|
while (1) {
|
||||||
static struct option long_options[] = {
|
static const struct option long_options[] = {
|
||||||
{"all-symbols", no_argument, &all_symbols, 1},
|
{"all-symbols", no_argument, &all_symbols, 1},
|
||||||
{"absolute-percpu", no_argument, &absolute_percpu, 1},
|
{"absolute-percpu", no_argument, &absolute_percpu, 1},
|
||||||
{"base-relative", no_argument, &base_relative, 1},
|
{"base-relative", no_argument, &base_relative, 1},
|
||||||
|
@ -317,7 +317,7 @@ foreach my $makefile (@makefiles) {
|
|||||||
$_ = convert_vars($_, %make_vars);
|
$_ = convert_vars($_, %make_vars);
|
||||||
|
|
||||||
# collect objects after obj-$(CONFIG_FOO_BAR)
|
# collect objects after obj-$(CONFIG_FOO_BAR)
|
||||||
if (/obj-\$\((CONFIG_[^\)]*)\)\s*[+:]?=\s*(.*)/) {
|
if (/obj-\$[({](CONFIG_[^})]*)[)}]\s*[+:]?=\s*(.*)/) {
|
||||||
$var = $1;
|
$var = $1;
|
||||||
$objs = $2;
|
$objs = $2;
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ kernel-doc - Print formatted kernel documentation to stdout
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
kernel-doc [-h] [-v] [-Werror]
|
kernel-doc [-h] [-v] [-Werror] [-Wall] [-Wreturn] [-Wshort-description] [-Wcontents-before-sections]
|
||||||
[ -man |
|
[ -man |
|
||||||
-rst [-sphinx-version VERSION] [-enable-lineno] |
|
-rst [-sphinx-version VERSION] [-enable-lineno] |
|
||||||
-none
|
-none
|
||||||
@ -133,6 +133,9 @@ my $dohighlight = "";
|
|||||||
|
|
||||||
my $verbose = 0;
|
my $verbose = 0;
|
||||||
my $Werror = 0;
|
my $Werror = 0;
|
||||||
|
my $Wreturn = 0;
|
||||||
|
my $Wshort_desc = 0;
|
||||||
|
my $Wcontents_before_sections = 0;
|
||||||
my $output_mode = "rst";
|
my $output_mode = "rst";
|
||||||
my $output_preformatted = 0;
|
my $output_preformatted = 0;
|
||||||
my $no_doc_sections = 0;
|
my $no_doc_sections = 0;
|
||||||
@ -187,9 +190,14 @@ if (defined($ENV{'KCFLAGS'})) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# reading this variable is for backwards compat just in case
|
||||||
|
# someone was calling it with the variable from outside the
|
||||||
|
# kernel's build system
|
||||||
if (defined($ENV{'KDOC_WERROR'})) {
|
if (defined($ENV{'KDOC_WERROR'})) {
|
||||||
$Werror = "$ENV{'KDOC_WERROR'}";
|
$Werror = "$ENV{'KDOC_WERROR'}";
|
||||||
}
|
}
|
||||||
|
# other environment variables are converted to command-line
|
||||||
|
# arguments in cmd_checkdoc in the build system
|
||||||
|
|
||||||
# Generated docbook code is inserted in a template at a point where
|
# Generated docbook code is inserted in a template at a point where
|
||||||
# docbook v3.1 requires a non-zero sequence of RefEntry's; see:
|
# docbook v3.1 requires a non-zero sequence of RefEntry's; see:
|
||||||
@ -318,6 +326,16 @@ while ($ARGV[0] =~ m/^--?(.*)/) {
|
|||||||
$verbose = 1;
|
$verbose = 1;
|
||||||
} elsif ($cmd eq "Werror") {
|
} elsif ($cmd eq "Werror") {
|
||||||
$Werror = 1;
|
$Werror = 1;
|
||||||
|
} elsif ($cmd eq "Wreturn") {
|
||||||
|
$Wreturn = 1;
|
||||||
|
} elsif ($cmd eq "Wshort-desc") {
|
||||||
|
$Wshort_desc = 1;
|
||||||
|
} elsif ($cmd eq "Wcontents-before-sections") {
|
||||||
|
$Wcontents_before_sections = 1;
|
||||||
|
} elsif ($cmd eq "Wall") {
|
||||||
|
$Wreturn = 1;
|
||||||
|
$Wshort_desc = 1;
|
||||||
|
$Wcontents_before_sections = 1;
|
||||||
} elsif (($cmd eq "h") || ($cmd eq "help")) {
|
} elsif (($cmd eq "h") || ($cmd eq "help")) {
|
||||||
pod2usage(-exitval => 0, -verbose => 2);
|
pod2usage(-exitval => 0, -verbose => 2);
|
||||||
} elsif ($cmd eq 'no-doc-sections') {
|
} elsif ($cmd eq 'no-doc-sections') {
|
||||||
@ -1748,9 +1766,9 @@ sub dump_function($$) {
|
|||||||
# This check emits a lot of warnings at the moment, because many
|
# This check emits a lot of warnings at the moment, because many
|
||||||
# functions don't have a 'Return' doc section. So until the number
|
# functions don't have a 'Return' doc section. So until the number
|
||||||
# of warnings goes sufficiently down, the check is only performed in
|
# of warnings goes sufficiently down, the check is only performed in
|
||||||
# verbose mode.
|
# -Wreturn mode.
|
||||||
# TODO: always perform the check.
|
# TODO: always perform the check.
|
||||||
if ($verbose && !$noret) {
|
if ($Wreturn && !$noret) {
|
||||||
check_return_section($file, $declaration_name, $return_type);
|
check_return_section($file, $declaration_name, $return_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2054,7 +2072,7 @@ sub process_name($$) {
|
|||||||
$state = STATE_NORMAL;
|
$state = STATE_NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($declaration_purpose eq "") && $verbose) {
|
if (($declaration_purpose eq "") && $Wshort_desc) {
|
||||||
emit_warning("${file}:$.", "missing initial short description on line:\n$_");
|
emit_warning("${file}:$.", "missing initial short description on line:\n$_");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2103,7 +2121,7 @@ sub process_body($$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (($contents ne "") && ($contents ne "\n")) {
|
if (($contents ne "") && ($contents ne "\n")) {
|
||||||
if (!$in_doc_sect && $verbose) {
|
if (!$in_doc_sect && $Wcontents_before_sections) {
|
||||||
emit_warning("${file}:$.", "contents before sections\n");
|
emit_warning("${file}:$.", "contents before sections\n");
|
||||||
}
|
}
|
||||||
dump_section($file, $section, $contents);
|
dump_section($file, $section, $contents);
|
||||||
|
@ -32,7 +32,7 @@ ${NM} -n ${1} | sed >${2} -e "
|
|||||||
# (do not forget a space before each pattern)
|
# (do not forget a space before each pattern)
|
||||||
|
|
||||||
# local symbols for ARM, MIPS, etc.
|
# local symbols for ARM, MIPS, etc.
|
||||||
/ \$/d
|
/ \\$/d
|
||||||
|
|
||||||
# local labels, .LBB, .Ltmpxxx, .L__unnamed_xx, .LASANPC, etc.
|
# local labels, .LBB, .Ltmpxxx, .L__unnamed_xx, .LASANPC, etc.
|
||||||
/ \.L/d
|
/ \.L/d
|
||||||
@ -40,8 +40,12 @@ ${NM} -n ${1} | sed >${2} -e "
|
|||||||
# arm64 EFI stub namespace
|
# arm64 EFI stub namespace
|
||||||
/ __efistub_/d
|
/ __efistub_/d
|
||||||
|
|
||||||
|
# arm64 local symbols in PIE namespace
|
||||||
|
/ __pi_\\$/d
|
||||||
|
/ __pi_\.L/d
|
||||||
|
|
||||||
# arm64 local symbols in non-VHE KVM namespace
|
# arm64 local symbols in non-VHE KVM namespace
|
||||||
/ __kvm_nvhe_\$/d
|
/ __kvm_nvhe_\\$/d
|
||||||
/ __kvm_nvhe_\.L/d
|
/ __kvm_nvhe_\.L/d
|
||||||
|
|
||||||
# arm64 lld
|
# arm64 lld
|
||||||
@ -58,6 +62,8 @@ ${NM} -n ${1} | sed >${2} -e "
|
|||||||
|
|
||||||
# CFI type identifiers
|
# CFI type identifiers
|
||||||
/ __kcfi_typeid_/d
|
/ __kcfi_typeid_/d
|
||||||
|
/ __kvm_nvhe___kcfi_typeid_/d
|
||||||
|
/ __pi___kcfi_typeid_/d
|
||||||
|
|
||||||
# CRC from modversions
|
# CRC from modversions
|
||||||
/ __crc_/d
|
/ __crc_/d
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -137,6 +137,7 @@ struct elf_info {
|
|||||||
Elf_Shdr *sechdrs;
|
Elf_Shdr *sechdrs;
|
||||||
Elf_Sym *symtab_start;
|
Elf_Sym *symtab_start;
|
||||||
Elf_Sym *symtab_stop;
|
Elf_Sym *symtab_stop;
|
||||||
|
unsigned int export_symbol_secndx; /* .export_symbol section */
|
||||||
char *strtab;
|
char *strtab;
|
||||||
char *modinfo;
|
char *modinfo;
|
||||||
unsigned int modinfo_len;
|
unsigned int modinfo_len;
|
||||||
@ -151,11 +152,6 @@ struct elf_info {
|
|||||||
Elf32_Word *symtab_shndx_stop;
|
Elf32_Word *symtab_shndx_stop;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline int is_shndx_special(unsigned int i)
|
|
||||||
{
|
|
||||||
return i != SHN_XINDEX && i >= SHN_LORESERVE && i <= SHN_HIRESERVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Accessor for sym->st_shndx, hides ugliness of "64k sections" */
|
/* Accessor for sym->st_shndx, hides ugliness of "64k sections" */
|
||||||
static inline unsigned int get_secindex(const struct elf_info *info,
|
static inline unsigned int get_secindex(const struct elf_info *info,
|
||||||
const Elf_Sym *sym)
|
const Elf_Sym *sym)
|
||||||
|
@ -62,18 +62,14 @@ install_linux_image () {
|
|||||||
${MAKE} -f ${srctree}/Makefile INSTALL_DTBS_PATH="${pdir}/usr/lib/linux-image-${KERNELRELEASE}" dtbs_install
|
${MAKE} -f ${srctree}/Makefile INSTALL_DTBS_PATH="${pdir}/usr/lib/linux-image-${KERNELRELEASE}" dtbs_install
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if is_enabled CONFIG_MODULES; then
|
${MAKE} -f ${srctree}/Makefile INSTALL_MOD_PATH="${pdir}" modules_install
|
||||||
${MAKE} -f ${srctree}/Makefile INSTALL_MOD_PATH="${pdir}" modules_install
|
rm -f "${pdir}/lib/modules/${KERNELRELEASE}/build"
|
||||||
rm -f "${pdir}/lib/modules/${KERNELRELEASE}/build"
|
rm -f "${pdir}/lib/modules/${KERNELRELEASE}/source"
|
||||||
rm -f "${pdir}/lib/modules/${KERNELRELEASE}/source"
|
|
||||||
if [ "${SRCARCH}" = um ] ; then
|
|
||||||
mkdir -p "${pdir}/usr/lib/uml/modules"
|
|
||||||
mv "${pdir}/lib/modules/${KERNELRELEASE}" "${pdir}/usr/lib/uml/modules/${KERNELRELEASE}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install the kernel
|
# Install the kernel
|
||||||
if [ "${ARCH}" = um ] ; then
|
if [ "${ARCH}" = um ] ; then
|
||||||
|
mkdir -p "${pdir}/usr/lib/uml/modules"
|
||||||
|
mv "${pdir}/lib/modules/${KERNELRELEASE}" "${pdir}/usr/lib/uml/modules/${KERNELRELEASE}"
|
||||||
mkdir -p "${pdir}/usr/bin" "${pdir}/usr/share/doc/${pname}"
|
mkdir -p "${pdir}/usr/bin" "${pdir}/usr/share/doc/${pname}"
|
||||||
cp System.map "${pdir}/usr/lib/uml/modules/${KERNELRELEASE}/System.map"
|
cp System.map "${pdir}/usr/lib/uml/modules/${KERNELRELEASE}/System.map"
|
||||||
cp ${KCONFIG_CONFIG} "${pdir}/usr/share/doc/${pname}/config"
|
cp ${KCONFIG_CONFIG} "${pdir}/usr/share/doc/${pname}/config"
|
||||||
|
@ -33,3 +33,7 @@ rm -f rust/target.json
|
|||||||
rm -f scripts/bin2c
|
rm -f scripts/bin2c
|
||||||
|
|
||||||
rm -f .scmversion
|
rm -f .scmversion
|
||||||
|
|
||||||
|
rm -rf include/ksym
|
||||||
|
|
||||||
|
find . -name '*.usyms' | xargs rm -f
|
||||||
|
@ -32,6 +32,13 @@ else
|
|||||||
tree=${srctree}/
|
tree=${srctree}/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# gtags(1) refuses to index any file outside of its current working dir.
|
||||||
|
# If gtags indexing is requested and the build output directory is not
|
||||||
|
# the kernel source tree, index all files in absolute-path form.
|
||||||
|
if [[ "$1" == "gtags" && -n "${tree}" ]]; then
|
||||||
|
tree=$(realpath "$tree")/
|
||||||
|
fi
|
||||||
|
|
||||||
# Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH
|
# Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH
|
||||||
if [ "${ALLSOURCE_ARCHS}" = "" ]; then
|
if [ "${ALLSOURCE_ARCHS}" = "" ]; then
|
||||||
ALLSOURCE_ARCHS=${SRCARCH}
|
ALLSOURCE_ARCHS=${SRCARCH}
|
||||||
@ -131,7 +138,7 @@ docscope()
|
|||||||
|
|
||||||
dogtags()
|
dogtags()
|
||||||
{
|
{
|
||||||
all_target_sources | gtags -i -f -
|
all_target_sources | gtags -i -C "${tree:-.}" -f - "$PWD"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Basic regular expressions with an optional /kind-spec/ for ctags and
|
# Basic regular expressions with an optional /kind-spec/ for ctags and
|
||||||
|
@ -64,6 +64,7 @@ quiet_cmd_initfs = GEN $@
|
|||||||
$(CONFIG_SHELL) $< -o $@ -l $(obj)/.initramfs_data.cpio.d \
|
$(CONFIG_SHELL) $< -o $@ -l $(obj)/.initramfs_data.cpio.d \
|
||||||
$(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \
|
$(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \
|
||||||
$(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID)) \
|
$(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID)) \
|
||||||
|
$(if $(KBUILD_BUILD_TIMESTAMP), -d "$(KBUILD_BUILD_TIMESTAMP)") \
|
||||||
$(ramfs-input)
|
$(ramfs-input)
|
||||||
|
|
||||||
# We rebuild initramfs_data.cpio if:
|
# We rebuild initramfs_data.cpio if:
|
||||||
|
@ -23,6 +23,7 @@ $0 [-o <file>] [-l <dep_list>] [-u <uid>] [-g <gid>] {-d | <cpio_source>} ...
|
|||||||
-g <gid> Group ID to map to group ID 0 (root).
|
-g <gid> Group ID to map to group ID 0 (root).
|
||||||
<gid> is only meaningful if <cpio_source> is a
|
<gid> is only meaningful if <cpio_source> is a
|
||||||
directory. "squash" forces all files to gid 0.
|
directory. "squash" forces all files to gid 0.
|
||||||
|
-d <date> Use date for all file mtime values
|
||||||
<cpio_source> File list or directory for cpio archive.
|
<cpio_source> File list or directory for cpio archive.
|
||||||
If <cpio_source> is a .cpio file it will be used
|
If <cpio_source> is a .cpio file it will be used
|
||||||
as direct input to initramfs.
|
as direct input to initramfs.
|
||||||
@ -190,6 +191,7 @@ prog=$0
|
|||||||
root_uid=0
|
root_uid=0
|
||||||
root_gid=0
|
root_gid=0
|
||||||
dep_list=
|
dep_list=
|
||||||
|
timestamp=
|
||||||
cpio_list=$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)
|
cpio_list=$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)
|
||||||
output="/dev/stdout"
|
output="/dev/stdout"
|
||||||
|
|
||||||
@ -218,6 +220,13 @@ while [ $# -gt 0 ]; do
|
|||||||
[ "$root_gid" = "-1" ] && root_gid=$(id -g || echo 0)
|
[ "$root_gid" = "-1" ] && root_gid=$(id -g || echo 0)
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
"-d") # date for file mtimes
|
||||||
|
timestamp="$(date -d"$1" +%s || :)"
|
||||||
|
if test -n "$timestamp"; then
|
||||||
|
timestamp="-t $timestamp"
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
;;
|
||||||
"-h")
|
"-h")
|
||||||
usage
|
usage
|
||||||
exit 0
|
exit 0
|
||||||
@ -237,11 +246,4 @@ done
|
|||||||
|
|
||||||
# If output_file is set we will generate cpio archive
|
# If output_file is set we will generate cpio archive
|
||||||
# we are careful to delete tmp files
|
# we are careful to delete tmp files
|
||||||
timestamp=
|
|
||||||
if test -n "$KBUILD_BUILD_TIMESTAMP"; then
|
|
||||||
timestamp="$(date -d"$KBUILD_BUILD_TIMESTAMP" +%s || :)"
|
|
||||||
if test -n "$timestamp"; then
|
|
||||||
timestamp="-t $timestamp"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
usr/gen_init_cpio $timestamp $cpio_list > $output
|
usr/gen_init_cpio $timestamp $cpio_list > $output
|
||||||
|
Loading…
Reference in New Issue
Block a user