Commit d7b0827f authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'kbuild-v5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild

Pull Kbuild updates from Masahiro Yamada:

 - add modpost warn exported symbols marked as 'static' because 'static'
   and EXPORT_SYMBOL is an odd combination

 - break the build early if gold linker is used

 - optimize the Bison rule to produce .c and .h files by a single
   pattern rule

 - handle PREEMPT_RT in the module vermagic and UTS_VERSION

 - warn CONFIG options leaked to the user-space except existing ones

 - make single targets work properly

 - rebuild modules when module linker scripts are updated

 - split the module final link stage into scripts/Makefile.modfinal

 - fix the missed error code in merge_config.sh

 - improve the error message displayed on the attempt of the O= build in
   unclean source tree

 - remove 'clean-dirs' syntax

 - disable -Wimplicit-fallthrough warning for Clang

 - add CONFIG_CC_OPTIMIZE_FOR_SIZE_O3 for ARC

 - remove ARCH_{CPP,A,C}FLAGS variables

 - add $(BASH) to run bash scripts

 - change *CFLAGS_<basetarget>.o to take the relative path to $(obj)
   instead of the basename

 - stop suppressing Clang's -Wunused-function warnings when W=1

 - fix linux/export.h to avoid genksyms calculating CRC of trimmed
   exported symbols

 - misc cleanups

* tag 'kbuild-v5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (63 commits)
  genksyms: convert to SPDX License Identifier for lex.l and parse.y
  modpost: use __section in the output to *.mod.c
  modpost: use MODULE_INFO() for __module_depends
  export.h, genksyms: do not make genksyms calculate CRC of trimmed symbols
  export.h: remove defined(__KERNEL__), which is no longer needed
  kbuild: allow Clang to find unused static inline functions for W=1 build
  kbuild: rename KBUILD_ENABLE_EXTRA_GCC_CHECKS to KBUILD_EXTRA_WARN
  kbuild: refactor scripts/Makefile.extrawarn
  merge_config.sh: ignore unwanted grep errors
  kbuild: change *FLAGS_<basetarget>.o to take the path relative to $(obj)
  modpost: add NOFAIL to strndup
  modpost: add guid_t type definition
  kbuild: add $(BASH) to run scripts with bash-extension
  kbuild: remove ARCH_{CPP,A,C}FLAGS
  kbuild,arc: add CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3 for ARC
  kbuild: Do not enable -Wimplicit-fallthrough for clang for now
  kbuild: clean up subdir-ymn calculation in Makefile.clean
  kbuild: remove unneeded '+' marker from cmd_clean
  kbuild: remove clean-dirs syntax
  kbuild: check clean srctree even earlier
  ...
parents 574cc453 77564a48
...@@ -34,7 +34,6 @@ ...@@ -34,7 +34,6 @@
*.mod.c *.mod.c
*.o *.o
*.o.* *.o.*
*.order
*.patch *.patch
*.s *.s
*.so *.so
...@@ -46,6 +45,7 @@ ...@@ -46,6 +45,7 @@
*.xz *.xz
Module.symvers Module.symvers
modules.builtin modules.builtin
modules.order
# #
# Top-level generic files # Top-level generic files
......
...@@ -105,6 +105,15 @@ The output directory can also be specified using "O=...". ...@@ -105,6 +105,15 @@ The output directory can also be specified using "O=...".
Setting "O=..." takes precedence over KBUILD_OUTPUT. Setting "O=..." takes precedence over KBUILD_OUTPUT.
KBUILD_EXTRA_WARN
-----------------
Specify the extra build checks. The same value can be assigned by passing
W=... from the command line.
See `make help` for the list of the supported values.
Setting "W=..." takes precedence over KBUILD_EXTRA_WARN.
KBUILD_DEBARCH KBUILD_DEBARCH
-------------- --------------
For the deb-pkg target, allows overriding the normal heuristics deployed by For the deb-pkg target, allows overriding the normal heuristics deployed by
...@@ -241,11 +250,6 @@ To get all available archs you can also specify all. E.g.:: ...@@ -241,11 +250,6 @@ To get all available archs you can also specify all. E.g.::
$ make ALLSOURCE_ARCHS=all tags $ make ALLSOURCE_ARCHS=all tags
KBUILD_ENABLE_EXTRA_GCC_CHECKS
------------------------------
If enabled over the make command line with "W=1", it turns on additional
gcc -W... options for more extensive build-time checking.
KBUILD_BUILD_TIMESTAMP KBUILD_BUILD_TIMESTAMP
---------------------- ----------------------
Setting this to a date string overrides the timestamp used in the Setting this to a date string overrides the timestamp used in the
...@@ -258,17 +262,3 @@ KBUILD_BUILD_USER, KBUILD_BUILD_HOST ...@@ -258,17 +262,3 @@ KBUILD_BUILD_USER, KBUILD_BUILD_HOST
These two variables allow to override the user@host string displayed during These two variables allow to override the user@host string displayed during
boot and in /proc/version. The default value is the output of the commands boot and in /proc/version. The default value is the output of the commands
whoami and host, respectively. whoami and host, respectively.
KBUILD_LDS
----------
The linker script with full path. Assigned by the top-level Makefile.
KBUILD_VMLINUX_OBJS
-------------------
All object files for vmlinux. They are linked to vmlinux in the same
order as listed in KBUILD_VMLINUX_OBJS.
KBUILD_VMLINUX_LIBS
-------------------
All .a "lib" files for vmlinux. KBUILD_VMLINUX_OBJS and KBUILD_VMLINUX_LIBS
together specify all the object files used to link vmlinux.
...@@ -471,21 +471,6 @@ more details, with real examples. ...@@ -471,21 +471,6 @@ more details, with real examples.
The second argument is optional, and if supplied will be used The second argument is optional, and if supplied will be used
if first argument is not supported. if first argument is not supported.
cc-ldoption
cc-ldoption is used to check if $(CC) when used to link object files
supports the given option. An optional second option may be
specified if first option are not supported.
Example::
#arch/x86/kernel/Makefile
vsyscall-flags += $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
In the above example, vsyscall-flags will be assigned the option
-Wl$(comma)--hash-style=sysv if it is supported by $(CC).
The second argument is optional, and if supplied will be used
if first argument is not supported.
as-instr as-instr
as-instr checks if the assembler reports a specific instruction as-instr checks if the assembler reports a specific instruction
and then outputs either option1 or option2 and then outputs either option1 or option2
...@@ -765,7 +750,8 @@ Files matching the patterns "*.[oas]", "*.ko", plus some additional files ...@@ -765,7 +750,8 @@ Files matching the patterns "*.[oas]", "*.ko", plus some additional files
generated by kbuild are deleted all over the kernel src tree when generated by kbuild are deleted all over the kernel src tree when
"make clean" is executed. "make clean" is executed.
Additional files can be specified in kbuild makefiles by use of $(clean-files). Additional files or directories can be specified in kbuild makefiles by use of
$(clean-files).
Example:: Example::
...@@ -776,23 +762,8 @@ When executing "make clean", the file "crc32table.h" will be deleted. ...@@ -776,23 +762,8 @@ When executing "make clean", the file "crc32table.h" will be deleted.
Kbuild will assume files to be in the same relative directory as the Kbuild will assume files to be in the same relative directory as the
Makefile, except if prefixed with $(objtree). Makefile, except if prefixed with $(objtree).
To delete a directory hierarchy use: To exclude certain files or directories from make clean, use the
$(no-clean-files) variable.
Example::
#scripts/package/Makefile
clean-dirs := $(objtree)/debian/
This will delete the directory debian in the toplevel directory, including all
subdirectories.
To exclude certain files from make clean, use the $(no-clean-files) variable.
This is only a special case used in the top level Kbuild file:
Example::
#Kbuild
no-clean-files := $(bounds-file) $(offsets-file)
Usually kbuild descends down in subdirectories due to "obj-* := dir/", Usually kbuild descends down in subdirectories due to "obj-* := dir/",
but in the architecture makefiles where the kbuild infrastructure but in the architecture makefiles where the kbuild infrastructure
...@@ -988,13 +959,25 @@ When kbuild executes, the following steps are followed (roughly): ...@@ -988,13 +959,25 @@ When kbuild executes, the following steps are followed (roughly):
$(KBUILD_ARFLAGS) set by the top level Makefile to "D" (deterministic $(KBUILD_ARFLAGS) set by the top level Makefile to "D" (deterministic
mode) if this option is supported by $(AR). mode) if this option is supported by $(AR).
ARCH_CPPFLAGS, ARCH_AFLAGS, ARCH_CFLAGS Overrides the kbuild defaults KBUILD_LDS
The linker script with full path. Assigned by the top-level Makefile.
KBUILD_LDS_MODULE
The module linker script with full path. Assigned by the top-level
Makefile and additionally by the arch Makefile.
KBUILD_VMLINUX_OBJS
All object files for vmlinux. They are linked to vmlinux in the same
order as listed in KBUILD_VMLINUX_OBJS.
These variables are appended to the KBUILD_CPPFLAGS, KBUILD_VMLINUX_LIBS
KBUILD_AFLAGS, and KBUILD_CFLAGS, respectively, after the
top-level Makefile has set any other flags. This provides a
means for an architecture to override the defaults.
All .a "lib" files for vmlinux. KBUILD_VMLINUX_OBJS and
KBUILD_VMLINUX_LIBS together specify all the object files used to
link vmlinux.
6.2 Add prerequisites to archheaders 6.2 Add prerequisites to archheaders
------------------------------------ ------------------------------------
...@@ -1139,7 +1122,7 @@ When kbuild executes, the following steps are followed (roughly): ...@@ -1139,7 +1122,7 @@ When kbuild executes, the following steps are followed (roughly):
header-test-y header-test-y
header-test-y specifies headers (*.h) in the current directory that header-test-y specifies headers (`*.h`) in the current directory that
should be compile tested to ensure they are self-contained, should be compile tested to ensure they are self-contained,
i.e. compilable as standalone units. If CONFIG_HEADER_TEST is enabled, i.e. compilable as standalone units. If CONFIG_HEADER_TEST is enabled,
this builds them as part of extra-y. this builds them as part of extra-y.
...@@ -1147,11 +1130,11 @@ When kbuild executes, the following steps are followed (roughly): ...@@ -1147,11 +1130,11 @@ When kbuild executes, the following steps are followed (roughly):
header-test-pattern-y header-test-pattern-y
This works as a weaker version of header-test-y, and accepts wildcard This works as a weaker version of header-test-y, and accepts wildcard
patterns. The typical usage is: patterns. The typical usage is::
header-test-pattern-y += *.h header-test-pattern-y += *.h
This specifies all the files that matches to '*.h' in the current This specifies all the files that matches to `*.h` in the current
directory, but the files in 'header-test-' are excluded. directory, but the files in 'header-test-' are excluded.
6.7 Commands useful for building a boot image 6.7 Commands useful for building a boot image
......
...@@ -18,8 +18,6 @@ $(bounds-file): kernel/bounds.s FORCE ...@@ -18,8 +18,6 @@ $(bounds-file): kernel/bounds.s FORCE
timeconst-file := include/generated/timeconst.h timeconst-file := include/generated/timeconst.h
targets += $(timeconst-file)
filechk_gentimeconst = echo $(CONFIG_HZ) | bc -q $< filechk_gentimeconst = echo $(CONFIG_HZ) | bc -q $<
$(timeconst-file): kernel/time/timeconst.bc FORCE $(timeconst-file): kernel/time/timeconst.bc FORCE
...@@ -42,7 +40,6 @@ $(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s FORCE ...@@ -42,7 +40,6 @@ $(offsets-file): arch/$(SRCARCH)/kernel/asm-offsets.s FORCE
# Check for missing system calls # Check for missing system calls
always += missing-syscalls always += missing-syscalls
targets += missing-syscalls
quiet_cmd_syscalls = CALL $< quiet_cmd_syscalls = CALL $<
cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) $(missing_syscalls_flags) cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) $(missing_syscalls_flags)
...@@ -54,13 +51,9 @@ missing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE ...@@ -54,13 +51,9 @@ missing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE
# Check atomic headers are up-to-date # Check atomic headers are up-to-date
always += old-atomics always += old-atomics
targets += old-atomics
quiet_cmd_atomics = CALL $< quiet_cmd_atomics = CALL $<
cmd_atomics = $(CONFIG_SHELL) $< cmd_atomics = $(CONFIG_SHELL) $<
old-atomics: scripts/atomic/check-atomics.sh FORCE old-atomics: scripts/atomic/check-atomics.sh FORCE
$(call cmd,atomics) $(call cmd,atomics)
# Keep these three files during make clean
no-clean-files := $(bounds-file) $(offsets-file) $(timeconst-file)
This diff is collapsed.
...@@ -292,6 +292,13 @@ config ARCH_32BIT_OFF_T ...@@ -292,6 +292,13 @@ config ARCH_32BIT_OFF_T
still support 32-bit off_t. This option is enabled for all such still support 32-bit off_t. This option is enabled for all such
architectures explicitly. architectures explicitly.
config HAVE_ASM_MODVERSIONS
bool
help
This symbol should be selected by an architecure if it provides
<asm/asm-prototypes.h> to support the module versioning for symbols
exported from assembly code.
config HAVE_REGS_AND_STACK_ACCESS_API config HAVE_REGS_AND_STACK_ACCESS_API
bool bool
help help
......
...@@ -11,6 +11,7 @@ config ALPHA ...@@ -11,6 +11,7 @@ config ALPHA
select PCI_DOMAINS if PCI select PCI_DOMAINS if PCI
select PCI_SYSCALL if PCI select PCI_SYSCALL if PCI
select HAVE_AOUT select HAVE_AOUT
select HAVE_ASM_MODVERSIONS
select HAVE_IDE select HAVE_IDE
select HAVE_OPROFILE select HAVE_OPROFILE
select HAVE_PCSPKR_PLATFORM select HAVE_PCSPKR_PLATFORM
......
...@@ -48,14 +48,6 @@ endif ...@@ -48,14 +48,6 @@ endif
cfi := $(call as-instr,.cfi_startproc\n.cfi_endproc,-DARC_DW2_UNWIND_AS_CFI) cfi := $(call as-instr,.cfi_startproc\n.cfi_endproc,-DARC_DW2_UNWIND_AS_CFI)
cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables $(cfi) cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables $(cfi)
ifndef CONFIG_CC_OPTIMIZE_FOR_SIZE
# Generic build system uses -O2, we want -O3
# Note: No need to add to cflags-y as that happens anyways
#
# Disable the false maybe-uninitialized warings gcc spits out at -O3
ARCH_CFLAGS += -O3 $(call cc-disable-warning,maybe-uninitialized,)
endif
# small data is default for elf32 tool-chain. If not usable, disable it # small data is default for elf32 tool-chain. If not usable, disable it
# This also allows repurposing GP as scratch reg to gcc reg allocator # This also allows repurposing GP as scratch reg to gcc reg allocator
disable_small_data := y disable_small_data := y
......
...@@ -9,6 +9,7 @@ CONFIG_NAMESPACES=y ...@@ -9,6 +9,7 @@ CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set # CONFIG_UTS_NS is not set
# CONFIG_PID_NS is not set # CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
# CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_VM_EVENT_COUNTERS is not set
......
...@@ -9,6 +9,7 @@ CONFIG_NAMESPACES=y ...@@ -9,6 +9,7 @@ CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set # CONFIG_UTS_NS is not set
# CONFIG_PID_NS is not set # CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
# CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_VM_EVENT_COUNTERS is not set
......
...@@ -9,6 +9,7 @@ CONFIG_NAMESPACES=y ...@@ -9,6 +9,7 @@ CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set # CONFIG_UTS_NS is not set
# CONFIG_PID_NS is not set # CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
# CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_VM_EVENT_COUNTERS is not set
......
...@@ -10,6 +10,7 @@ CONFIG_NAMESPACES=y ...@@ -10,6 +10,7 @@ CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set # CONFIG_UTS_NS is not set
# CONFIG_PID_NS is not set # CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_EXPERT=y CONFIG_EXPERT=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
# CONFIG_COMPAT_BRK is not set # CONFIG_COMPAT_BRK is not set
......
...@@ -10,6 +10,7 @@ CONFIG_NAMESPACES=y ...@@ -10,6 +10,7 @@ CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set # CONFIG_UTS_NS is not set
# CONFIG_PID_NS is not set # CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
# CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_VM_EVENT_COUNTERS is not set
......
...@@ -9,6 +9,7 @@ CONFIG_NAMESPACES=y ...@@ -9,6 +9,7 @@ CONFIG_NAMESPACES=y
# CONFIG_PID_NS is not set # CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
# CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_VM_EVENT_COUNTERS is not set
......
...@@ -6,6 +6,7 @@ CONFIG_HIGH_RES_TIMERS=y ...@@ -6,6 +6,7 @@ CONFIG_HIGH_RES_TIMERS=y
CONFIG_IKCONFIG=y CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_SYSCTL_SYSCALL=y CONFIG_SYSCTL_SYSCALL=y
# CONFIG_EPOLL is not set # CONFIG_EPOLL is not set
# CONFIG_SIGNALFD is not set # CONFIG_SIGNALFD is not set
......
...@@ -10,6 +10,7 @@ CONFIG_NAMESPACES=y ...@@ -10,6 +10,7 @@ CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set # CONFIG_UTS_NS is not set
# CONFIG_PID_NS is not set # CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
......
...@@ -10,6 +10,7 @@ CONFIG_NAMESPACES=y ...@@ -10,6 +10,7 @@ CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set # CONFIG_UTS_NS is not set
# CONFIG_PID_NS is not set # CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
......
...@@ -8,6 +8,7 @@ CONFIG_NAMESPACES=y ...@@ -8,6 +8,7 @@ CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set # CONFIG_UTS_NS is not set
# CONFIG_PID_NS is not set # CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
......
...@@ -10,6 +10,7 @@ CONFIG_NAMESPACES=y ...@@ -10,6 +10,7 @@ CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set # CONFIG_UTS_NS is not set
# CONFIG_PID_NS is not set # CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
......
...@@ -10,6 +10,7 @@ CONFIG_NAMESPACES=y ...@@ -10,6 +10,7 @@ CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set # CONFIG_UTS_NS is not set
# CONFIG_PID_NS is not set # CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
......
...@@ -8,6 +8,7 @@ CONFIG_IKCONFIG_PROC=y ...@@ -8,6 +8,7 @@ CONFIG_IKCONFIG_PROC=y
# CONFIG_UTS_NS is not set # CONFIG_UTS_NS is not set
# CONFIG_PID_NS is not set # CONFIG_PID_NS is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
# CONFIG_COMPAT_BRK is not set # CONFIG_COMPAT_BRK is not set
CONFIG_KPROBES=y CONFIG_KPROBES=y
......
...@@ -14,6 +14,7 @@ CONFIG_INITRAMFS_SOURCE="../tb10x-rootfs.cpio" ...@@ -14,6 +14,7 @@ CONFIG_INITRAMFS_SOURCE="../tb10x-rootfs.cpio"
CONFIG_INITRAMFS_ROOT_UID=2100 CONFIG_INITRAMFS_ROOT_UID=2100
CONFIG_INITRAMFS_ROOT_GID=501 CONFIG_INITRAMFS_ROOT_GID=501
# CONFIG_RD_GZIP is not set # CONFIG_RD_GZIP is not set
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_SYSCTL_SYSCALL=y CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
# CONFIG_AIO is not set # CONFIG_AIO is not set
......
...@@ -4,6 +4,7 @@ CONFIG_HIGH_RES_TIMERS=y ...@@ -4,6 +4,7 @@ CONFIG_HIGH_RES_TIMERS=y
CONFIG_IKCONFIG=y CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
# CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_VM_EVENT_COUNTERS is not set
......
...@@ -4,6 +4,7 @@ CONFIG_HIGH_RES_TIMERS=y ...@@ -4,6 +4,7 @@ CONFIG_HIGH_RES_TIMERS=y
CONFIG_IKCONFIG=y CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_PERF_EVENTS=y CONFIG_PERF_EVENTS=y
# CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_VM_EVENT_COUNTERS is not set
......
...@@ -17,7 +17,7 @@ KBUILD_LDFLAGS_MODULE += --be8 ...@@ -17,7 +17,7 @@ KBUILD_LDFLAGS_MODULE += --be8
endif endif
ifeq ($(CONFIG_ARM_MODULE_PLTS),y) ifeq ($(CONFIG_ARM_MODULE_PLTS),y)
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/arm/kernel/module.lds KBUILD_LDS_MODULE += $(srctree)/arch/arm/kernel/module.lds
endif endif
GZFLAGS :=-9 GZFLAGS :=-9
......
...@@ -8,13 +8,14 @@ ifeq ($(plus_virt),+virt) ...@@ -8,13 +8,14 @@ ifeq ($(plus_virt),+virt)
plus_virt_def := -DREQUIRES_VIRT=1 plus_virt_def := -DREQUIRES_VIRT=1
endif endif
KVM := ../../../virt/kvm
ccflags-y += -I $(srctree)/$(src) -I $(srctree)/virt/kvm/arm/vgic ccflags-y += -I $(srctree)/$(src) -I $(srctree)/virt/kvm/arm/vgic
CFLAGS_arm.o := $(plus_virt_def) CFLAGS_$(KVM)/arm/arm.o := $(plus_virt_def)
AFLAGS_init.o := -Wa,-march=armv7-a$(plus_virt) AFLAGS_init.o := -Wa,-march=armv7-a$(plus_virt)
AFLAGS_interrupts.o := -Wa,-march=armv7-a$(plus_virt) AFLAGS_interrupts.o := -Wa,-march=armv7-a$(plus_virt)
KVM := ../../../virt/kvm
kvm-arm-y = $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o $(KVM)/eventfd.o $(KVM)/vfio.o kvm-arm-y = $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o $(KVM)/eventfd.o $(KVM)/vfio.o
obj-$(CONFIG_KVM_ARM_HOST) += hyp/ obj-$(CONFIG_KVM_ARM_HOST) += hyp/
......
...@@ -134,6 +134,7 @@ config ARM64 ...@@ -134,6 +134,7 @@ config ARM64
select HAVE_ARCH_TRANSPARENT_HUGEPAGE select HAVE_ARCH_TRANSPARENT_HUGEPAGE
select HAVE_ARCH_VMAP_STACK select HAVE_ARCH_VMAP_STACK
select HAVE_ARM_SMCCC select HAVE_ARM_SMCCC
select HAVE_ASM_MODVERSIONS
select HAVE_EBPF_JIT select HAVE_EBPF_JIT
select HAVE_C_RECORDMCOUNT select HAVE_C_RECORDMCOUNT
select HAVE_CMPXCHG_DOUBLE select HAVE_CMPXCHG_DOUBLE
......
...@@ -108,7 +108,7 @@ endif ...@@ -108,7 +108,7 @@ endif
CHECKFLAGS += -D__aarch64__ CHECKFLAGS += -D__aarch64__
ifeq ($(CONFIG_ARM64_MODULE_PLTS),y) ifeq ($(CONFIG_ARM64_MODULE_PLTS),y)
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/arm64/kernel/module.lds KBUILD_LDS_MODULE += $(srctree)/arch/arm64/kernel/module.lds
endif endif
# Default value # Default value
......
...@@ -19,6 +19,7 @@ config IA64 ...@@ -19,6 +19,7 @@ config IA64
select PCI_DOMAINS if PCI select PCI_DOMAINS if PCI
select PCI_MSI select PCI_MSI
select PCI_SYSCALL if PCI select PCI_SYSCALL if PCI
select HAVE_ASM_MODVERSIONS
select HAVE_UNSTABLE_SCHED_CLOCK select HAVE_UNSTABLE_SCHED_CLOCK
select HAVE_EXIT_THREAD select HAVE_EXIT_THREAD
select HAVE_IDE select HAVE_IDE
......
...@@ -20,7 +20,7 @@ CHECKFLAGS += -D__ia64=1 -D__ia64__=1 -D_LP64 -D__LP64__ ...@@ -20,7 +20,7 @@ CHECKFLAGS += -D__ia64=1 -D__ia64__=1 -D_LP64 -D__LP64__
OBJCOPYFLAGS := --strip-all OBJCOPYFLAGS := --strip-all
LDFLAGS_vmlinux := -static LDFLAGS_vmlinux := -static
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/ia64/module.lds KBUILD_LDS_MODULE += $(srctree)/arch/ia64/module.lds
KBUILD_AFLAGS_KERNEL := -mconstant-gp KBUILD_AFLAGS_KERNEL := -mconstant-gp
EXTRA := EXTRA :=
......
...@@ -12,6 +12,7 @@ config M68K ...@@ -12,6 +12,7 @@ config M68K
select DMA_DIRECT_REMAP if HAS_DMA && MMU && !COLDFIRE select DMA_DIRECT_REMAP if HAS_DMA && MMU && !COLDFIRE
select HAVE_IDE select HAVE_IDE
select HAVE_AOUT if MMU select HAVE_AOUT if MMU
select HAVE_ASM_MODVERSIONS
select HAVE_DEBUG_BUGVERBOSE select HAVE_DEBUG_BUGVERBOSE
select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW
select GENERIC_ATOMIC64 select GENERIC_ATOMIC64
......
...@@ -73,7 +73,7 @@ KBUILD_AFLAGS += -D__uClinux__ ...@@ -73,7 +73,7 @@ KBUILD_AFLAGS += -D__uClinux__
endif endif
KBUILD_LDFLAGS := -m m68kelf KBUILD_LDFLAGS := -m m68kelf
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/m68k/kernel/module.lds KBUILD_LDS_MODULE += $(srctree)/arch/m68k/kernel/module.lds
ifdef CONFIG_SUN3 ifdef CONFIG_SUN3
LDFLAGS_vmlinux = -N LDFLAGS_vmlinux = -N
......
...@@ -44,6 +44,7 @@ config MIPS ...@@ -44,6 +44,7 @@ config MIPS
select HAVE_ARCH_SECCOMP_FILTER select HAVE_ARCH_SECCOMP_FILTER
select HAVE_ARCH_TRACEHOOK select HAVE_ARCH_TRACEHOOK
select HAVE_ARCH_TRANSPARENT_HUGEPAGE if CPU_SUPPORTS_HUGEPAGES && 64BIT select HAVE_ARCH_TRANSPARENT_HUGEPAGE if CPU_SUPPORTS_HUGEPAGES && 64BIT
select HAVE_ASM_MODVERSIONS
select HAVE_EBPF_JIT if (!CPU_MICROMIPS) select HAVE_EBPF_JIT if (!CPU_MICROMIPS)
select HAVE_CONTEXT_TRACKING select HAVE_CONTEXT_TRACKING
select HAVE_COPY_THREAD_TLS select HAVE_COPY_THREAD_TLS
......
...@@ -160,7 +160,7 @@ targets += vmlinux.lzo.itb ...@@ -160,7 +160,7 @@ targets += vmlinux.lzo.itb
quiet_cmd_itb-image = ITB $@ quiet_cmd_itb-image = ITB $@
cmd_itb-image = \ cmd_itb-image = \
env PATH="$(objtree)/scripts/dtc:$(PATH)" \ env PATH="$(objtree)/scripts/dtc:$(PATH)" \
$(CONFIG_SHELL) $(MKIMAGE) \ $(BASH) $(MKIMAGE) \
-D "-I dts -O dtb -p 500 \ -D "-I dts -O dtb -p 500 \
--include $(objtree)/arch/mips \ --include $(objtree)/arch/mips \
--warning no-unit_address_vs_reg" \ --warning no-unit_address_vs_reg" \
......
...@@ -60,7 +60,7 @@ KBUILD_CFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY=1 \ ...@@ -60,7 +60,7 @@ KBUILD_CFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY=1 \
-DFTRACE_PATCHABLE_FUNCTION_SIZE=$(NOP_COUNT) -DFTRACE_PATCHABLE_FUNCTION_SIZE=$(NOP_COUNT)
CC_FLAGS_FTRACE := -fpatchable-function-entry=$(NOP_COUNT),$(shell echo $$(($(NOP_COUNT)-1))) CC_FLAGS_FTRACE := -fpatchable-function-entry=$(NOP_COUNT),$(shell echo $$(($(NOP_COUNT)-1)))
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/parisc/kernel/module.lds KBUILD_LDS_MODULE += $(srctree)/arch/parisc/kernel/module.lds
endif endif
OBJCOPY_FLAGS =-O binary -R .note -R .comment -S OBJCOPY_FLAGS =-O binary -R .note -R .comment -S
......
...@@ -177,6 +177,7 @@ config PPC ...@@ -177,6 +177,7 @@ config PPC
select HAVE_ARCH_NVRAM_OPS select HAVE_ARCH_NVRAM_OPS
select HAVE_ARCH_SECCOMP_FILTER select HAVE_ARCH_SECCOMP_FILTER
select HAVE_ARCH_TRACEHOOK select HAVE_ARCH_TRACEHOOK
select HAVE_ASM_MODVERSIONS
select HAVE_C_RECORDMCOUNT select HAVE_C_RECORDMCOUNT
select HAVE_CBPF_JIT if !PPC64 select HAVE_CBPF_JIT if !PPC64
select HAVE_STACKPROTECTOR if PPC64 && $(cc-option,-mstack-protector-guard=tls -mstack-protector-guard-reg=r13) select HAVE_STACKPROTECTOR if PPC64 && $(cc-option,-mstack-protector-guard=tls -mstack-protector-guard-reg=r13)
......
...@@ -65,7 +65,7 @@ UTS_MACHINE := $(subst $(space),,$(machine-y)) ...@@ -65,7 +65,7 @@ UTS_MACHINE := $(subst $(space),,$(machine-y))
ifdef CONFIG_PPC32 ifdef CONFIG_PPC32
KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
else else
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/powerpc/kernel/module.lds KBUILD_LDS_MODULE += $(srctree)/arch/powerpc/kernel/module.lds
ifeq ($(call ld-ifversion, -ge, 225000000, y),y) ifeq ($(call ld-ifversion, -ge, 225000000, y),y)
# Have the linker provide sfpr if possible. # Have the linker provide sfpr if possible.
# There is a corresponding test in arch/powerpc/lib/Makefile # There is a corresponding test in arch/powerpc/lib/Makefile
......
...@@ -18,7 +18,7 @@ quiet_cmd_relocs_check = CHKREL $@ ...@@ -18,7 +18,7 @@ quiet_cmd_relocs_check = CHKREL $@
ifdef CONFIG_PPC_BOOK3S_64 ifdef CONFIG_PPC_BOOK3S_64
cmd_relocs_check = \ cmd_relocs_check = \
$(CONFIG_SHELL) $(srctree)/arch/powerpc/tools/relocs_check.sh "$(OBJDUMP)" "$@" ; \ $(CONFIG_SHELL) $(srctree)/arch/powerpc/tools/relocs_check.sh "$(OBJDUMP)" "$@" ; \
$(CONFIG_SHELL) $(srctree)/arch/powerpc/tools/unrel_branch_check.sh "$(OBJDUMP)" "$@" $(BASH) $(srctree)/arch/powerpc/tools/unrel_branch_check.sh "$(OBJDUMP)" "$@"
else else
cmd_relocs_check = \ cmd_relocs_check = \
$(CONFIG_SHELL) $(srctree)/arch/powerpc/tools/relocs_check.sh "$(OBJDUMP)" "$@" $(CONFIG_SHELL) $(srctree)/arch/powerpc/tools/relocs_check.sh "$(OBJDUMP)" "$@"
......
...@@ -33,7 +33,7 @@ OBJ="$2" ...@@ -33,7 +33,7 @@ OBJ="$2"
ERROR=0 ERROR=0
function check_section() check_section()
{ {
file=$1 file=$1
section=$2 section=$2
......
...@@ -31,6 +31,7 @@ config RISCV ...@@ -31,6 +31,7 @@ config RISCV
select GENERIC_SMP_IDLE_THREAD select GENERIC_SMP_IDLE_THREAD
select GENERIC_ATOMIC64 if !64BIT select GENERIC_ATOMIC64 if !64BIT
select HAVE_ARCH_AUDITSYSCALL select HAVE_ARCH_AUDITSYSCALL
select HAVE_ASM_MODVERSIONS
select HAVE_MEMBLOCK_NODE_MAP select HAVE_MEMBLOCK_NODE_MAP
select HAVE_DMA_CONTIGUOUS select HAVE_DMA_CONTIGUOUS
select HAVE_FUTEX_CMPXCHG if FUTEX select HAVE_FUTEX_CMPXCHG if FUTEX
......
...@@ -52,7 +52,7 @@ ifeq ($(CONFIG_CMODEL_MEDANY),y) ...@@ -52,7 +52,7 @@ ifeq ($(CONFIG_CMODEL_MEDANY),y)
KBUILD_CFLAGS += -mcmodel=medany KBUILD_CFLAGS += -mcmodel=medany
endif endif
ifeq ($(CONFIG_MODULE_SECTIONS),y) ifeq ($(CONFIG_MODULE_SECTIONS),y)
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/riscv/kernel/module.lds KBUILD_LDS_MODULE += $(srctree)/arch/riscv/kernel/module.lds
endif endif
ifeq ($(CONFIG_PERF_EVENTS),y) ifeq ($(CONFIG_PERF_EVENTS),y)
KBUILD_CFLAGS += -fno-omit-frame-pointer KBUILD_CFLAGS += -fno-omit-frame-pointer
......
...@@ -132,6 +132,7 @@ config S390 ...@@ -132,6 +132,7 @@ config S390
select HAVE_ARCH_TRACEHOOK select HAVE_ARCH_TRACEHOOK
select HAVE_ARCH_TRANSPARENT_HUGEPAGE select HAVE_ARCH_TRANSPARENT_HUGEPAGE
select HAVE_ARCH_VMAP_STACK select HAVE_ARCH_VMAP_STACK
select HAVE_ASM_MODVERSIONS
select HAVE_EBPF_JIT if PACK_STACK && HAVE_MARCH_Z196_FEATURES select HAVE_EBPF_JIT if PACK_STACK && HAVE_MARCH_Z196_FEATURES
select HAVE_CMPXCHG_DOUBLE select HAVE_CMPXCHG_DOUBLE
select HAVE_CMPXCHG_LOCAL select HAVE_CMPXCHG_LOCAL
......
...@@ -17,6 +17,7 @@ config SPARC ...@@ -17,6 +17,7 @@ config SPARC
select ARCH_MIGHT_HAVE_PC_SERIO select ARCH_MIGHT_HAVE_PC_SERIO
select OF select OF
select OF_PROMTREE select OF_PROMTREE
select HAVE_ASM_MODVERSIONS
select HAVE_IDE select HAVE_IDE
select HAVE_OPROFILE select HAVE_OPROFILE
select HAVE_ARCH_KGDB if !SMP || SPARC64 select HAVE_ARCH_KGDB if !SMP || SPARC64
......
...@@ -9,6 +9,7 @@ config UML ...@@ -9,6 +9,7 @@ config UML
select ARCH_NO_PREEMPT select ARCH_NO_PREEMPT
select HAVE_ARCH_AUDITSYSCALL select HAVE_ARCH_AUDITSYSCALL
select HAVE_ARCH_SECCOMP_FILTER select HAVE_ARCH_SECCOMP_FILTER
select HAVE_ASM_MODVERSIONS
select HAVE_UID16 select HAVE_UID16
select HAVE_FUTEX_CMPXCHG if FUTEX select HAVE_FUTEX_CMPXCHG if FUTEX
select HAVE_DEBUG_KMEMLEAK select HAVE_DEBUG_KMEMLEAK
......
...@@ -147,6 +147,7 @@ config X86 ...@@ -147,6 +147,7 @@ config X86
select HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD if X86_64 select HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD if X86_64
select HAVE_ARCH_VMAP_STACK if X86_64 select HAVE_ARCH_VMAP_STACK if X86_64
select HAVE_ARCH_WITHIN_STACK_FRAMES select HAVE_ARCH_WITHIN_STACK_FRAMES
select HAVE_ASM_MODVERSIONS
select HAVE_CMPXCHG_DOUBLE select HAVE_CMPXCHG_DOUBLE
select HAVE_CMPXCHG_LOCAL select HAVE_CMPXCHG_LOCAL
select HAVE_CONTEXT_TRACKING if X86_64 select HAVE_CONTEXT_TRACKING if X86_64
......
...@@ -89,6 +89,7 @@ $(vobjs): KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS) $(RETPOLINE_CFLAGS ...@@ -89,6 +89,7 @@ $(vobjs): KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS) $(RETPOLINE_CFLAGS
# #
CFLAGS_REMOVE_vdso-note.o = -pg CFLAGS_REMOVE_vdso-note.o = -pg
CFLAGS_REMOVE_vclock_gettime.o = -pg CFLAGS_REMOVE_vclock_gettime.o = -pg
CFLAGS_REMOVE_vdso32/vclock_gettime.o = -pg
CFLAGS_REMOVE_vgetcpu.o = -pg CFLAGS_REMOVE_vgetcpu.o = -pg
CFLAGS_REMOVE_vvar.o = -pg CFLAGS_REMOVE_vvar.o = -pg
...@@ -128,7 +129,7 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE ...@@ -128,7 +129,7 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE
$(obj)/vdsox32.so.dbg: $(obj)/vdsox32.lds $(vobjx32s) FORCE $(obj)/vdsox32.so.dbg: $(obj)/vdsox32.lds $(vobjx32s) FORCE
$(call if_changed,vdso_and_check) $(call if_changed,vdso_and_check)
CPPFLAGS_vdso32.lds = $(CPPFLAGS_vdso.lds) CPPFLAGS_vdso32/vdso32.lds = $(CPPFLAGS_vdso.lds)
VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -soname linux-gate.so.1 VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -soname linux-gate.so.1
targets += vdso32/vdso32.lds targets += vdso32/vdso32.lds
......
...@@ -36,9 +36,9 @@ ifdef CONFIG_CC_IS_CLANG ...@@ -36,9 +36,9 @@ ifdef CONFIG_CC_IS_CLANG
calcs_ccflags += -msse2 calcs_ccflags += -msse2
endif endif
CFLAGS_dcn_calcs.o := $(calcs_ccflags) CFLAGS_$(AMDDALPATH)/dc/calcs/dcn_calcs.o := $(calcs_ccflags)
CFLAGS_dcn_calc_auto.o := $(calcs_ccflags) CFLAGS_$(AMDDALPATH)/dc/calcs/dcn_calc_auto.o := $(calcs_ccflags)
CFLAGS_dcn_calc_math.o := $(calcs_ccflags) -Wno-tautological-compare CFLAGS_$(AMDDALPATH)/dc/calcs/dcn_calc_math.o := $(calcs_ccflags) -Wno-tautological-compare
BW_CALCS = dce_calcs.o bw_fixed.o custom_float.o BW_CALCS = dce_calcs.o bw_fixed.o custom_float.o
......
...@@ -16,10 +16,10 @@ else ifneq ($(call cc-option, -mstack-alignment=16),) ...@@ -16,10 +16,10 @@ else ifneq ($(call cc-option, -mstack-alignment=16),)
cc_stack_align := -mstack-alignment=16 cc_stack_align := -mstack-alignment=16
endif endif
CFLAGS_dcn20_resource.o := -mhard-float -msse $(cc_stack_align) CFLAGS_$(AMDDALPATH)/dc/dcn20/dcn20_resource.o := -mhard-float -msse $(cc_stack_align)
ifdef CONFIG_CC_IS_CLANG ifdef CONFIG_CC_IS_CLANG
CFLAGS_dcn20_resource.o += -msse2 CFLAGS_$(AMDDALPATH)/dc/dcn20/dcn20_resource.o += -msse2
endif endif
AMD_DAL_DCN20 = $(addprefix $(AMDDALPATH)/dc/dcn20/,$(DCN20)) AMD_DAL_DCN20 = $(addprefix $(AMDDALPATH)/dc/dcn20/,$(DCN20))
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
DCN21 = dcn21_hubp.o dcn21_hubbub.o dcn21_resource.o DCN21 = dcn21_hubp.o dcn21_hubbub.o dcn21_resource.o
CFLAGS_dcn21_resource.o := -mhard-float -msse -mpreferred-stack-boundary=4 CFLAGS_$(AMDDALPATH)/dc/dcn21/dcn21_resource.o := -mhard-float -msse -mpreferred-stack-boundary=4
AMD_DAL_DCN21 = $(addprefix $(AMDDALPATH)/dc/dcn21/,$(DCN21)) AMD_DAL_DCN21 = $(addprefix $(AMDDALPATH)/dc/dcn21/,$(DCN21))
......
...@@ -36,25 +36,22 @@ ifdef CONFIG_CC_IS_CLANG ...@@ -36,25 +36,22 @@ ifdef CONFIG_CC_IS_CLANG
dml_ccflags += -msse2 dml_ccflags += -msse2
endif endif
CFLAGS_display_mode_lib.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/display_mode_lib.o := $(dml_ccflags)
ifdef CONFIG_DRM_AMD_DC_DCN2_0 ifdef CONFIG_DRM_AMD_DC_DCN2_0
CFLAGS_display_mode_vba.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/display_mode_vba.o := $(dml_ccflags)
CFLAGS_display_mode_vba_20.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/dcn20/display_mode_vba_20.o := $(dml_ccflags)
CFLAGS_display_rq_dlg_calc_20.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/dcn20/display_rq_dlg_calc_20.o := $(dml_ccflags)
CFLAGS_display_mode_vba_20v2.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/dcn20/display_mode_vba_20v2.o := $(dml_ccflags)
CFLAGS_display_rq_dlg_calc_20v2.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/dcn20/display_rq_dlg_calc_20v2.o := $(dml_ccflags)
endif endif
ifdef CONFIG_DRM_AMD_DC_DCN2_1 ifdef CONFIG_DRM_AMD_DC_DCN2_1
CFLAGS_display_mode_vba_21.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/dcn21/display_mode_vba_21.o := $(dml_ccflags)
CFLAGS_display_rq_dlg_calc_21.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/dcn21/display_rq_dlg_calc_21.o := $(dml_ccflags)
endif endif
ifdef CONFIG_DRM_AMD_DCN3AG CFLAGS_$(AMDDALPATH)/dc/dml/dml1_display_rq_dlg_calc.o := $(dml_ccflags)
CFLAGS_display_mode_vba_3ag.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/display_rq_dlg_helpers.o := $(dml_ccflags)
endif CFLAGS_$(AMDDALPATH)/dc/dml/dml_common_defs.o := $(dml_ccflags)
CFLAGS_dml1_display_rq_dlg_calc.o := $(dml_ccflags)
CFLAGS_display_rq_dlg_helpers.o := $(dml_ccflags)
CFLAGS_dml_common_defs.o := $(dml_ccflags)
DML = display_mode_lib.o display_rq_dlg_helpers.o dml1_display_rq_dlg_calc.o \ DML = display_mode_lib.o display_rq_dlg_helpers.o dml1_display_rq_dlg_calc.o \
dml_common_defs.o dml_common_defs.o
......
...@@ -13,10 +13,9 @@ ifdef CONFIG_CC_IS_CLANG ...@@ -13,10 +13,9 @@ ifdef CONFIG_CC_IS_CLANG
dsc_ccflags += -msse2 dsc_ccflags += -msse2
endif endif
CFLAGS_rc_calc.o := $(dsc_ccflags) CFLAGS_$(AMDDALPATH)/dc/dsc/rc_calc.o := $(dsc_ccflags)
CFLAGS_rc_calc_dpi.o := $(dsc_ccflags) CFLAGS_$(AMDDALPATH)/dc/dsc/rc_calc_dpi.o := $(dsc_ccflags)
CFLAGS_codec_main_amd.o := $(dsc_ccflags) CFLAGS_$(AMDDALPATH)/dc/dsc/dc_dsc.o := $(dsc_ccflags)
CFLAGS_dc_dsc.o := $(dsc_ccflags)
DSC = dc_dsc.o rc_calc.o rc_calc_dpi.o DSC = dc_dsc.o rc_calc.o rc_calc_dpi.o
......
...@@ -26,7 +26,7 @@ subdir-ccflags-$(CONFIG_DRM_I915_WERROR) += -Werror ...@@ -26,7 +26,7 @@ subdir-ccflags-$(CONFIG_DRM_I915_WERROR) += -Werror
# Fine grained warnings disable # Fine grained warnings disable
CFLAGS_i915_pci.o = $(call cc-disable-warning, override-init) CFLAGS_i915_pci.o = $(call cc-disable-warning, override-init)
CFLAGS_intel_fbdev.o = $(call cc-disable-warning, override-init) CFLAGS_display/intel_fbdev.o = $(call cc-disable-warning, override-init)
subdir-ccflags-y += \ subdir-ccflags-y += \
$(call as-instr,movntdqa (%eax)$(comma)%xmm0,-DCONFIG_AS_MOVNTDQA) $(call as-instr,movntdqa (%eax)$(comma)%xmm0,-DCONFIG_AS_MOVNTDQA)
......
# SPDX-License-Identifier: GPL-2.0
# kbuild requires Makefile in a directory to build individual objects
# SPDX-License-Identifier: GPL-2.0-only
subdir-ccflags-y += -I$(src)/..
# SPDX-License-Identifier: GPL-2.0-only
subdir-ccflags-y += -I$(src)/..
# SPDX-License-Identifier: GPL-2.0-only
subdir-ccflags-y += -I$(src)/..
# SPDX-License-Identifier: GPL-2.0-only
subdir-ccflags-y += -I$(src)/..
# SPDX-License-Identifier: GPL-2.0-only
subdir-ccflags-y += -I$(src)/..
# SPDX-License-Identifier: GPL-2.0-only
subdir-ccflags-y += -I$(src)/..
# SPDX-License-Identifier: GPL-2.0-only
subdir-ccflags-y += -I$(src)/..
# SPDX-License-Identifier: GPL-2.0
# kbuild requires Makefile in a directory to build individual objects
# SPDX-License-Identifier: GPL-2.0
# kbuild requires Makefile in a directory to build individual objects
# SPDX-License-Identifier: GPL-2.0
# kbuild requires Makefile in a directory to build individual objects
# SPDX-License-Identifier: GPL-2.0
# kbuild requires Makefile in a directory to build individual objects
# SPDX-License-Identifier: GPL-2.0
# kbuild requires Makefile in a directory to build individual objects
...@@ -130,10 +130,6 @@ struct ftrace_likely_data { ...@@ -130,10 +130,6 @@ struct ftrace_likely_data {
/* /*
* Force always-inline if the user requests it so via the .config. * Force always-inline if the user requests it so via the .config.
* GCC does not warn about unused static inline functions for
* -Wunused-function. This turns out to avoid the need for complex #ifdef
* directives. Suppress the warning in clang as well by using "unused"
* function attribute, which is redundant but not harmful for gcc.
* Prefer gnu_inline, so that extern inline functions do not emit an * Prefer gnu_inline, so that extern inline functions do not emit an
* externally visible function. This makes extern inline behave as per gnu89 * externally visible function. This makes extern inline behave as per gnu89
* semantics rather than c99. This prevents multiple symbol definition errors * semantics rather than c99. This prevents multiple symbol definition errors
...@@ -144,15 +140,27 @@ struct ftrace_likely_data { ...@@ -144,15 +140,27 @@ struct ftrace_likely_data {
*/ */
#if !defined(CONFIG_OPTIMIZE_INLINING) #if !defined(CONFIG_OPTIMIZE_INLINING)
#define inline inline __attribute__((__always_inline__)) __gnu_inline \ #define inline inline __attribute__((__always_inline__)) __gnu_inline \
__maybe_unused notrace __inline_maybe_unused notrace
#else #else
#define inline inline __gnu_inline \ #define inline inline __gnu_inline \
__maybe_unused notrace __inline_maybe_unused notrace
#endif #endif
#define __inline__ inline #define __inline__ inline
#define __inline inline #define __inline inline
/*
* GCC does not warn about unused static inline functions for -Wunused-function.
* Suppress the warning in clang as well by using __maybe_unused, but enable it
* for W=1 build. This will allow clang to find unused functions. Remove the
* __inline_maybe_unused entirely after fixing most of -Wunused-function warnings.
*/
#ifdef KBUILD_EXTRA_WARN1
#define __inline_maybe_unused
#else
#define __inline_maybe_unused __maybe_unused
#endif
/* /*
* Rather then using noinline to prevent stack consumption, use * Rather then using noinline to prevent stack consumption, use
* noinline_for_stack instead. For documentation reasons. * noinline_for_stack instead. For documentation reasons.
......
...@@ -18,9 +18,6 @@ extern struct module __this_module; ...@@ -18,9 +18,6 @@ extern struct module __this_module;
#define THIS_MODULE ((struct module *)0) #define THIS_MODULE ((struct module *)0)
#endif #endif
#ifdef CONFIG_MODULES
#if defined(__KERNEL__) && !defined(__GENKSYMS__)
#ifdef CONFIG_MODVERSIONS #ifdef CONFIG_MODVERSIONS
/* Mark the CRC weak since genksyms apparently decides not to /* Mark the CRC weak since genksyms apparently decides not to
* generate a checksums for some symbols */ * generate a checksums for some symbols */
...@@ -74,6 +71,12 @@ struct kernel_symbol { ...@@ -74,6 +71,12 @@ struct kernel_symbol {
}; };
#endif #endif
#ifdef __GENKSYMS__
#define ___EXPORT_SYMBOL(sym, sec) __GENKSYMS_EXPORT_SYMBOL(sym)
#else
/* For every exported symbol, place a struct in the __ksymtab section */ /* For every exported symbol, place a struct in the __ksymtab section */
#define ___EXPORT_SYMBOL(sym, sec) \ #define ___EXPORT_SYMBOL(sym, sec) \
extern typeof(sym) sym; \ extern typeof(sym) sym; \
...@@ -83,7 +86,9 @@ struct kernel_symbol { ...@@ -83,7 +86,9 @@ struct kernel_symbol {
= #sym; \ = #sym; \
__KSYMTAB_ENTRY(sym, sec) __KSYMTAB_ENTRY(sym, sec)
#if defined(__DISABLE_EXPORTS) #endif
#if !defined(CONFIG_MODULES) || defined(__DISABLE_EXPORTS)
/* /*
* Allow symbol exports to be disabled completely so that C code may * Allow symbol exports to be disabled completely so that C code may
...@@ -117,37 +122,22 @@ struct kernel_symbol { ...@@ -117,37 +122,22 @@ struct kernel_symbol {
#define __cond_export_sym_0(sym, sec) /* nothing */ #define __cond_export_sym_0(sym, sec) /* nothing */
#else #else
#define __EXPORT_SYMBOL ___EXPORT_SYMBOL
#endif
#define EXPORT_SYMBOL(sym) \ #define __EXPORT_SYMBOL(sym, sec) ___EXPORT_SYMBOL(sym, sec)
__EXPORT_SYMBOL(sym, "")
#define EXPORT_SYMBOL_GPL(sym) \ #endif /* CONFIG_MODULES */
__EXPORT_SYMBOL(sym, "_gpl")
#define EXPORT_SYMBOL_GPL_FUTURE(sym) \
__EXPORT_SYMBOL(sym, "_gpl_future")
#define EXPORT_SYMBOL(sym) __EXPORT_SYMBOL(sym, "")
#define EXPORT_SYMBOL_GPL(sym) __EXPORT_SYMBOL(sym, "_gpl")
#define EXPORT_SYMBOL_GPL_FUTURE(sym) __EXPORT_SYMBOL(sym, "_gpl_future")
#ifdef CONFIG_UNUSED_SYMBOLS #ifdef CONFIG_UNUSED_SYMBOLS
#define EXPORT_UNUSED_SYMBOL(sym) __EXPORT_SYMBOL(sym, "_unused") #define EXPORT_UNUSED_SYMBOL(sym) __EXPORT_SYMBOL(sym, "_unused")
#define EXPORT_UNUSED_SYMBOL_GPL(sym) __EXPORT_SYMBOL(sym, "_unused_gpl") #define EXPORT_UNUSED_SYMBOL_GPL(sym) __EXPORT_SYMBOL(sym, "_unused_gpl")
#else #else
#define EXPORT_UNUSED_SYMBOL(sym) #define EXPORT_UNUSED_SYMBOL(sym)
#define EXPORT_UNUSED_SYMBOL_GPL(sym) #define EXPORT_UNUSED_SYMBOL_GPL(sym)
#endif #endif
#endif /* __GENKSYMS__ */
#else /* !CONFIG_MODULES... */
#define EXPORT_SYMBOL(sym)
#define EXPORT_SYMBOL_GPL(sym)
#define EXPORT_SYMBOL_GPL_FUTURE(sym)
#define EXPORT_UNUSED_SYMBOL(sym)
#define EXPORT_UNUSED_SYMBOL_GPL(sym)
#endif /* CONFIG_MODULES */
#endif /* !__ASSEMBLY__ */ #endif /* !__ASSEMBLY__ */
#endif /* _LINUX_EXPORT_H */ #endif /* _LINUX_EXPORT_H */
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#endif #endif
#ifdef CONFIG_PREEMPT #ifdef CONFIG_PREEMPT
#define MODULE_VERMAGIC_PREEMPT "preempt " #define MODULE_VERMAGIC_PREEMPT "preempt "
#elif defined(CONFIG_PREEMPT_RT)
#define MODULE_VERMAGIC_PREEMPT "preempt_rt "
#else #else
#define MODULE_VERMAGIC_PREEMPT "" #define MODULE_VERMAGIC_PREEMPT ""
#endif #endif
......
...@@ -1234,20 +1234,26 @@ choice ...@@ -1234,20 +1234,26 @@ choice
default CC_OPTIMIZE_FOR_PERFORMANCE default CC_OPTIMIZE_FOR_PERFORMANCE
config CC_OPTIMIZE_FOR_PERFORMANCE config CC_OPTIMIZE_FOR_PERFORMANCE
bool "Optimize for performance" bool "Optimize for performance (-O2)"
help help
This is the default optimization level for the kernel, building This is the default optimization level for the kernel, building
with the "-O2" compiler flag for best performance and most with the "-O2" compiler flag for best performance and most
helpful compile-time warnings. helpful compile-time warnings.
config CC_OPTIMIZE_FOR_SIZE config CC_OPTIMIZE_FOR_PERFORMANCE_O3
bool "Optimize for size" bool "Optimize more for performance (-O3)"
depends on ARC
imply CC_DISABLE_WARN_MAYBE_UNINITIALIZED # avoid false positives imply CC_DISABLE_WARN_MAYBE_UNINITIALIZED # avoid false positives
help help
Enabling this option will pass "-Os" instead of "-O2" to Choosing this option will pass "-O3" to your compiler to optimize
your compiler resulting in a smaller kernel. the kernel yet more for performance.
If unsure, say N. config CC_OPTIMIZE_FOR_SIZE
bool "Optimize for size (-Os)"
imply CC_DISABLE_WARN_MAYBE_UNINITIALIZED # avoid false positives
help
Choosing this option will pass "-Os" to your compiler resulting
in a smaller kernel.
endchoice endchoice
...@@ -2014,6 +2020,14 @@ config MODVERSIONS ...@@ -2014,6 +2020,14 @@ config MODVERSIONS
make them incompatible with the kernel you are running. If make them incompatible with the kernel you are running. If
unsure, say N. unsure, say N.
config ASM_MODVERSIONS
bool
default HAVE_ASM_MODVERSIONS && MODVERSIONS
help
This enables module versioning for exported symbols also from
assembly. This can be enabled only when the target architecture
supports it.
config MODULE_REL_CRCS config MODULE_REL_CRCS
bool bool
depends on MODVERSIONS depends on MODVERSIONS
......
...@@ -33,5 +33,6 @@ $(obj)/version.o: include/generated/compile.h ...@@ -33,5 +33,6 @@ $(obj)/version.o: include/generated/compile.h
silent_chk_compile.h = : silent_chk_compile.h = :
include/generated/compile.h: FORCE include/generated/compile.h: FORCE
@$($(quiet)chk_compile.h) @$($(quiet)chk_compile.h)
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \ $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \
"$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CC) $(KBUILD_CFLAGS)" "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" \
"$(CONFIG_PREEMPT_RT)" "$(CC) $(KBUILD_CFLAGS)"
...@@ -127,7 +127,7 @@ $(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCE ...@@ -127,7 +127,7 @@ $(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCE
$(obj)/kheaders.o: $(obj)/kheaders_data.tar.xz $(obj)/kheaders.o: $(obj)/kheaders_data.tar.xz
quiet_cmd_genikh = CHK $(obj)/kheaders_data.tar.xz quiet_cmd_genikh = CHK $(obj)/kheaders_data.tar.xz
cmd_genikh = $(CONFIG_SHELL) $(srctree)/kernel/gen_kheaders.sh $@ cmd_genikh = $(BASH) $(srctree)/kernel/gen_kheaders.sh $@
$(obj)/kheaders_data.tar.xz: FORCE $(obj)/kheaders_data.tar.xz: FORCE
$(call cmd,genikh) $(call cmd,genikh)
......
...@@ -35,5 +35,8 @@ ld-option = $(success,$(LD) -v $(1)) ...@@ -35,5 +35,8 @@ ld-option = $(success,$(LD) -v $(1))
$(error-if,$(failure,command -v $(CC)),compiler '$(CC)' not found) $(error-if,$(failure,command -v $(CC)),compiler '$(CC)' not found)
$(error-if,$(failure,command -v $(LD)),linker '$(LD)' not found) $(error-if,$(failure,command -v $(LD)),linker '$(LD)' not found)
# Fail if the linker is gold as it's not capable of linking the kernel proper
$(error-if,$(success, $(LD) -v | grep -q gold), gold linker '$(LD)' not supported)
# gcc version including patch level # gcc version including patch level
gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh $(CC)) gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh $(CC))
...@@ -36,4 +36,4 @@ subdir-$(CONFIG_MODVERSIONS) += genksyms ...@@ -36,4 +36,4 @@ subdir-$(CONFIG_MODVERSIONS) += genksyms
subdir-$(CONFIG_SECURITY_SELINUX) += selinux subdir-$(CONFIG_SECURITY_SELINUX) += selinux
# Let clean descend into subdirs # Let clean descend into subdirs
subdir- += basic dtc gdb kconfig mod package subdir- += basic dtc gdb kconfig mod
...@@ -52,7 +52,7 @@ ifndef obj ...@@ -52,7 +52,7 @@ ifndef obj
$(warning kbuild: Makefile.build is included improperly) $(warning kbuild: Makefile.build is included improperly)
endif endif
ifeq ($(MAKECMDGOALS)$(need-modorder),) ifeq ($(need-modorder),)
ifneq ($(obj-m),) ifneq ($(obj-m),)
$(warning $(patsubst %.o,'%.ko',$(obj-m)) will not be built even though obj-m is specified.) $(warning $(patsubst %.o,'%.ko',$(obj-m)) will not be built even though obj-m is specified.)
$(warning You cannot use subdir-y/m to visit a module Makefile. Use obj-y/m instead.) $(warning You cannot use subdir-y/m to visit a module Makefile. Use obj-y/m instead.)
...@@ -76,11 +76,6 @@ endif ...@@ -76,11 +76,6 @@ endif
mod-targets := $(patsubst %.o, %.mod, $(obj-m)) mod-targets := $(patsubst %.o, %.mod, $(obj-m))
__build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \
$(if $(KBUILD_MODULES),$(obj-m) $(mod-targets) $(modorder-target)) \
$(subdir-ym) $(always)
@:
# Linus' kernel sanity checking tool # Linus' kernel sanity checking tool
ifeq ($(KBUILD_CHECKSRC),1) ifeq ($(KBUILD_CHECKSRC),1)
quiet_cmd_checksrc = CHECK $< quiet_cmd_checksrc = CHECK $<
...@@ -90,23 +85,13 @@ else ifeq ($(KBUILD_CHECKSRC),2) ...@@ -90,23 +85,13 @@ else ifeq ($(KBUILD_CHECKSRC),2)
cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $<
endif endif
ifneq ($(KBUILD_ENABLE_EXTRA_GCC_CHECKS),) ifneq ($(KBUILD_EXTRA_WARN),)
cmd_checkdoc = $(srctree)/scripts/kernel-doc -none $< cmd_checkdoc = $(srctree)/scripts/kernel-doc -none $<
endif endif
# Compile C sources (.c) # Compile C sources (.c)
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Default is built-in, unless we know otherwise
$(foreach x, i ll lst o s symtypes, $(patsubst %.o,%.$(x),$(real-obj-m))): \
part-of-module := y
modkern_cflags = \
$(if $(part-of-module), \
$(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE), \
$(KBUILD_CFLAGS_KERNEL) $(CFLAGS_KERNEL))
quiet_modtag = $(if $(part-of-module),[M], )
quiet_cmd_cc_s_c = CC $(quiet_modtag) $@ quiet_cmd_cc_s_c = CC $(quiet_modtag) $@
cmd_cc_s_c = $(CC) $(filter-out $(DEBUG_CFLAGS), $(c_flags)) $(DISABLE_LTO) -fverbose-asm -S -o $@ $< cmd_cc_s_c = $(CC) $(filter-out $(DEBUG_CFLAGS), $(c_flags)) $(DISABLE_LTO) -fverbose-asm -S -o $@ $<
...@@ -310,11 +295,6 @@ $(obj)/%.h.s: $(src)/%.h FORCE ...@@ -310,11 +295,6 @@ $(obj)/%.h.s: $(src)/%.h FORCE
# Compile assembler sources (.S) # Compile assembler sources (.S)
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
modkern_aflags := $(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL)
$(real-obj-m) : modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE)
$(real-obj-m:.o=.s): modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE)
# .S file exports must have their C prototypes defined in asm/asm-prototypes.h # .S file exports must have their C prototypes defined in asm/asm-prototypes.h
# or a file that it includes, in order to get versioned symbols. We build a # or a file that it includes, in order to get versioned symbols. We build a
# dummy C file that includes asm-prototypes and the EXPORT_SYMBOL lines from # dummy C file that includes asm-prototypes and the EXPORT_SYMBOL lines from
...@@ -356,11 +336,7 @@ $(obj)/%.s: $(src)/%.S FORCE ...@@ -356,11 +336,7 @@ $(obj)/%.s: $(src)/%.S FORCE
quiet_cmd_as_o_S = AS $(quiet_modtag) $@ quiet_cmd_as_o_S = AS $(quiet_modtag) $@
cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
ifdef CONFIG_MODVERSIONS ifdef CONFIG_ASM_MODVERSIONS
ASM_PROTOTYPES := $(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/asm-prototypes.h)
ifneq ($(ASM_PROTOTYPES),)
# versioning matches the C process described above, with difference that # versioning matches the C process described above, with difference that
# we parse asm-prototypes.h C header to get function definitions. # we parse asm-prototypes.h C header to get function definitions.
...@@ -376,7 +352,6 @@ cmd_modversions_S = \ ...@@ -376,7 +352,6 @@ cmd_modversions_S = \
rm -f $(@D)/.tmp_$(@F:.o=.ver); \ rm -f $(@D)/.tmp_$(@F:.o=.ver); \
fi fi
endif endif
endif
$(obj)/%.o: $(src)/%.S $(objtool_dep) FORCE $(obj)/%.o: $(src)/%.S $(objtool_dep) FORCE
$(call if_changed_rule,as_o_S) $(call if_changed_rule,as_o_S)
...@@ -395,9 +370,9 @@ $(obj)/%.lds: $(src)/%.lds.S FORCE ...@@ -395,9 +370,9 @@ $(obj)/%.lds: $(src)/%.lds.S FORCE
# ASN.1 grammar # ASN.1 grammar
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
quiet_cmd_asn1_compiler = ASN.1 $@ quiet_cmd_asn1_compiler = ASN.1 $(basename $@).[ch]
cmd_asn1_compiler = $(objtree)/scripts/asn1_compiler $< \ cmd_asn1_compiler = $(objtree)/scripts/asn1_compiler $< \
$(subst .h,.c,$@) $(subst .c,.h,$@) $(basename $@).c $(basename $@).h
$(obj)/%.asn1.c $(obj)/%.asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler $(obj)/%.asn1.c $(obj)/%.asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler
$(call cmd,asn1_compiler) $(call cmd,asn1_compiler)
...@@ -489,12 +464,50 @@ targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \ ...@@ -489,12 +464,50 @@ targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \
$(call intermediate_targets, .lex.o, .lex.c) \ $(call intermediate_targets, .lex.o, .lex.c) \
$(call intermediate_targets, .tab.o, .tab.c .tab.h) $(call intermediate_targets, .tab.o, .tab.c .tab.h)
# Build
# ---------------------------------------------------------------------------
ifdef single-build
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 $(obj)/%, \
$(filter-out $(curdir-single), \
$(KBUILD_SINGLE_TARGETS))))
__build: $(curdir-single) $(subdir-ym)
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),$(builtin-target) $(lib-target) $(extra-y)) \
$(if $(KBUILD_MODULES),$(obj-m) $(mod-targets) $(modorder-target)) \
$(subdir-ym) $(always)
@:
endif
# Descending # Descending
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
PHONY += $(subdir-ym) PHONY += $(subdir-ym)
$(subdir-ym): $(subdir-ym):
$(Q)$(MAKE) $(build)=$@ \ $(Q)$(MAKE) $(build)=$@ \
$(if $(filter $@/, $(KBUILD_SINGLE_TARGETS)),single-build=) \
need-builtin=$(if $(filter $@/built-in.a, $(subdir-obj-y)),1) \ need-builtin=$(if $(filter $@/built-in.a, $(subdir-obj-y)),1) \
need-modorder=$(if $(need-modorder),$(if $(filter $@/modules.order, $(modorder)),1)) need-modorder=$(if $(need-modorder),$(if $(filter $@/modules.order, $(modorder)),1))
......
...@@ -17,17 +17,8 @@ include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-di ...@@ -17,17 +17,8 @@ include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-di
# Figure out what we need to build from the various variables # Figure out what we need to build from the various variables
# ========================================================================== # ==========================================================================
__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y))) subdir-ymn := $(sort $(subdir-y) $(subdir-m) $(subdir-) \
subdir-y += $(__subdir-y) $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-m) $(obj-))))
__subdir-m := $(patsubst %/,%,$(filter %/, $(obj-m)))
subdir-m += $(__subdir-m)
__subdir- := $(patsubst %/,%,$(filter %/, $(obj-)))
subdir- += $(__subdir-)
# Subdirectories we need to descend into
subdir-ym := $(sort $(subdir-y) $(subdir-m))
subdir-ymn := $(sort $(subdir-ym) $(subdir-))
# Add subdir path # Add subdir path
...@@ -52,26 +43,14 @@ __clean-files := $(wildcard \ ...@@ -52,26 +43,14 @@ __clean-files := $(wildcard \
$(addprefix $(obj)/, $(filter-out $(objtree)/%, $(__clean-files))) \ $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(__clean-files))) \
$(filter $(objtree)/%, $(__clean-files))) $(filter $(objtree)/%, $(__clean-files)))
# same as clean-files
__clean-dirs := $(wildcard \
$(addprefix $(obj)/, $(filter-out $(objtree)/%, $(clean-dirs))) \
$(filter $(objtree)/%, $(clean-dirs)))
# ========================================================================== # ==========================================================================
quiet_cmd_clean = CLEAN $(obj) quiet_cmd_clean = CLEAN $(obj)
cmd_clean = rm -f $(__clean-files) cmd_clean = rm -rf $(__clean-files)
quiet_cmd_cleandir = CLEAN $(__clean-dirs)
cmd_cleandir = rm -rf $(__clean-dirs)
__clean: $(subdir-ymn) __clean: $(subdir-ymn)
ifneq ($(strip $(__clean-files)),) ifneq ($(strip $(__clean-files)),)
+$(call cmd,clean) $(call cmd,clean)
endif
ifneq ($(strip $(__clean-dirs)),)
+$(call cmd,cleandir)
endif endif
@: @:
......
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
# ========================================================================== # ==========================================================================
#
# make W=... settings # make W=... settings
# #
# W=1 - warnings that may be relevant and does not occur too often # There are three warning groups enabled by W=1, W=2, W=3.
# W=2 - warnings that occur quite often but may still be relevant # They are independent, and can be combined like W=12 or W=123.
# W=3 - the more obscure warnings, can most likely be ignored
#
# $(call cc-option, -W...) handles gcc -W.. options which
# are not supported by all versions of the compiler
# ========================================================================== # ==========================================================================
KBUILD_CFLAGS += $(call cc-disable-warning, packed-not-aligned) KBUILD_CFLAGS += $(call cc-disable-warning, packed-not-aligned)
# backward compatibility
KBUILD_EXTRA_WARN ?= $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)
ifeq ("$(origin W)", "command line") ifeq ("$(origin W)", "command line")
export KBUILD_ENABLE_EXTRA_GCC_CHECKS := $(W) KBUILD_EXTRA_WARN := $(W)
endif endif
ifdef KBUILD_ENABLE_EXTRA_GCC_CHECKS export KBUILD_EXTRA_WARN
warning- := $(empty)
#
warning-1 := -Wextra -Wunused -Wno-unused-parameter # W=1 - warnings which may be relevant and do not occur too often
warning-1 += -Wmissing-declarations #
warning-1 += -Wmissing-format-attribute ifneq ($(findstring 1, $(KBUILD_EXTRA_WARN)),)
warning-1 += -Wmissing-prototypes
warning-1 += -Wold-style-definition KBUILD_CFLAGS += -Wextra -Wunused -Wno-unused-parameter
warning-1 += -Wmissing-include-dirs KBUILD_CFLAGS += -Wmissing-declarations
warning-1 += $(call cc-option, -Wunused-but-set-variable) KBUILD_CFLAGS += -Wmissing-format-attribute
warning-1 += $(call cc-option, -Wunused-const-variable) KBUILD_CFLAGS += -Wmissing-prototypes
warning-1 += $(call cc-option, -Wpacked-not-aligned) KBUILD_CFLAGS += -Wold-style-definition
warning-1 += $(call cc-option, -Wstringop-truncation) KBUILD_CFLAGS += -Wmissing-include-dirs
KBUILD_CFLAGS += $(call cc-option, -Wunused-but-set-variable)
KBUILD_CFLAGS += $(call cc-option, -Wunused-const-variable)
KBUILD_CFLAGS += $(call cc-option, -Wpacked-not-aligned)
KBUILD_CFLAGS += $(call cc-option, -Wstringop-truncation)
# The following turn off the warnings enabled by -Wextra # The following turn off the warnings enabled by -Wextra
warning-1 += -Wno-missing-field-initializers KBUILD_CFLAGS += -Wno-missing-field-initializers
warning-1 += -Wno-sign-compare KBUILD_CFLAGS += -Wno-sign-compare
warning-2 += -Wcast-align KBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN1
warning-2 += -Wdisabled-optimization
warning-2 += -Wnested-externs
warning-2 += -Wshadow
warning-2 += $(call cc-option, -Wlogical-op)
warning-2 += -Wmissing-field-initializers
warning-2 += -Wsign-compare
warning-2 += $(call cc-option, -Wmaybe-uninitialized)
warning-2 += $(call cc-option, -Wunused-macros)
warning-3 := -Wbad-function-cast
warning-3 += -Wcast-qual
warning-3 += -Wconversion
warning-3 += -Wpacked
warning-3 += -Wpadded
warning-3 += -Wpointer-arith
warning-3 += -Wredundant-decls
warning-3 += -Wswitch-default
warning-3 += $(call cc-option, -Wpacked-bitfield-compat)
warning := $(warning-$(findstring 1, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
warning += $(warning-$(findstring 2, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
warning += $(warning-$(findstring 3, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
ifeq ("$(strip $(warning))","")
$(error W=$(KBUILD_ENABLE_EXTRA_GCC_CHECKS) is unknown)
endif
KBUILD_CFLAGS += $(warning)
else else
# Some diagnostics enabled by default are noisy.
# Suppress them by using -Wno... except for W=1.
ifdef CONFIG_CC_IS_CLANG ifdef CONFIG_CC_IS_CLANG
KBUILD_CFLAGS += -Wno-initializer-overrides KBUILD_CFLAGS += -Wno-initializer-overrides
KBUILD_CFLAGS += -Wno-format KBUILD_CFLAGS += -Wno-format
KBUILD_CFLAGS += -Wno-sign-compare KBUILD_CFLAGS += -Wno-sign-compare
KBUILD_CFLAGS += -Wno-format-zero-length KBUILD_CFLAGS += -Wno-format-zero-length
endif endif
endif
#
# W=2 - warnings which occur quite often but may still be relevant
#
ifneq ($(findstring 2, $(KBUILD_EXTRA_WARN)),)
KBUILD_CFLAGS += -Wcast-align
KBUILD_CFLAGS += -Wdisabled-optimization
KBUILD_CFLAGS += -Wnested-externs
KBUILD_CFLAGS += -Wshadow
KBUILD_CFLAGS += $(call cc-option, -Wlogical-op)
KBUILD_CFLAGS += -Wmissing-field-initializers
KBUILD_CFLAGS += -Wsign-compare
KBUILD_CFLAGS += $(call cc-option, -Wmaybe-uninitialized)
KBUILD_CFLAGS += $(call cc-option, -Wunused-macros)
KBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN2
endif
#
# W=3 - more obscure warnings, can most likely be ignored
#
ifneq ($(findstring 3, $(KBUILD_EXTRA_WARN)),)
KBUILD_CFLAGS += -Wbad-function-cast
KBUILD_CFLAGS += -Wcast-qual
KBUILD_CFLAGS += -Wconversion
KBUILD_CFLAGS += -Wpacked
KBUILD_CFLAGS += -Wpadded
KBUILD_CFLAGS += -Wpointer-arith
KBUILD_CFLAGS += -Wredundant-decls
KBUILD_CFLAGS += -Wswitch-default
KBUILD_CFLAGS += $(call cc-option, -Wpacked-bitfield-compat)
KBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN3
endif endif
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
# LEX
# ---------------------------------------------------------------------------
quiet_cmd_flex = LEX $@
cmd_flex = $(LEX) -o$@ -L $<
$(obj)/%.lex.c: $(src)/%.l FORCE
$(call if_changed,flex)
# YACC
# ---------------------------------------------------------------------------
quiet_cmd_bison = YACC $(basename $@).[ch]
cmd_bison = $(YACC) -o $(basename $@).c --defines=$(basename $@).h -t -l $<
$(obj)/%.tab.c $(obj)/%.tab.h: $(src)/%.y FORCE
$(call if_changed,bison)
# ========================================================================== # ==========================================================================
# Building binaries on the host system # Building binaries on the host system
# Binaries are used during the compilation of the kernel, for example # Binaries are used during the compilation of the kernel, for example
...@@ -63,9 +80,9 @@ host-cxxshobjs := $(addprefix $(obj)/,$(host-cxxshobjs)) ...@@ -63,9 +80,9 @@ host-cxxshobjs := $(addprefix $(obj)/,$(host-cxxshobjs))
# Handle options to gcc. Support building with separate output directory # Handle options to gcc. Support building with separate output directory
_hostc_flags = $(KBUILD_HOSTCFLAGS) $(HOST_EXTRACFLAGS) \ _hostc_flags = $(KBUILD_HOSTCFLAGS) $(HOST_EXTRACFLAGS) \
$(HOSTCFLAGS_$(basetarget).o) $(HOSTCFLAGS_$(target-stem).o)
_hostcxx_flags = $(KBUILD_HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \ _hostcxx_flags = $(KBUILD_HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \
$(HOSTCXXFLAGS_$(basetarget).o) $(HOSTCXXFLAGS_$(target-stem).o)
# $(objtree)/$(obj) for including generated headers from checkin source files # $(objtree)/$(obj) for including generated headers from checkin source files
ifeq ($(KBUILD_EXTMOD),) ifeq ($(KBUILD_EXTMOD),)
...@@ -85,7 +102,7 @@ hostcxx_flags = -Wp,-MD,$(depfile) $(_hostcxx_flags) ...@@ -85,7 +102,7 @@ hostcxx_flags = -Wp,-MD,$(depfile) $(_hostcxx_flags)
# host-csingle -> Executable # host-csingle -> Executable
quiet_cmd_host-csingle = HOSTCC $@ quiet_cmd_host-csingle = HOSTCC $@
cmd_host-csingle = $(HOSTCC) $(hostc_flags) $(KBUILD_HOSTLDFLAGS) -o $@ $< \ cmd_host-csingle = $(HOSTCC) $(hostc_flags) $(KBUILD_HOSTLDFLAGS) -o $@ $< \
$(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(@F)) $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem))
$(host-csingle): $(obj)/%: $(src)/%.c FORCE $(host-csingle): $(obj)/%: $(src)/%.c FORCE
$(call if_changed_dep,host-csingle) $(call if_changed_dep,host-csingle)
...@@ -93,8 +110,8 @@ $(host-csingle): $(obj)/%: $(src)/%.c FORCE ...@@ -93,8 +110,8 @@ $(host-csingle): $(obj)/%: $(src)/%.c FORCE
# host-cmulti -> executable # host-cmulti -> executable
quiet_cmd_host-cmulti = HOSTLD $@ quiet_cmd_host-cmulti = HOSTLD $@
cmd_host-cmulti = $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -o $@ \ cmd_host-cmulti = $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -o $@ \
$(addprefix $(obj)/,$($(@F)-objs)) \ $(addprefix $(obj)/, $($(target-stem)-objs)) \
$(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(@F)) $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem))
$(host-cmulti): FORCE $(host-cmulti): FORCE
$(call if_changed,host-cmulti) $(call if_changed,host-cmulti)
$(call multi_depend, $(host-cmulti), , -objs) $(call multi_depend, $(host-cmulti), , -objs)
...@@ -111,8 +128,8 @@ $(host-cobjs): $(obj)/%.o: $(src)/%.c FORCE ...@@ -111,8 +128,8 @@ $(host-cobjs): $(obj)/%.o: $(src)/%.c FORCE
quiet_cmd_host-cxxmulti = HOSTLD $@ quiet_cmd_host-cxxmulti = HOSTLD $@
cmd_host-cxxmulti = $(HOSTCXX) $(KBUILD_HOSTLDFLAGS) -o $@ \ cmd_host-cxxmulti = $(HOSTCXX) $(KBUILD_HOSTLDFLAGS) -o $@ \
$(foreach o,objs cxxobjs,\ $(foreach o,objs cxxobjs,\
$(addprefix $(obj)/,$($(@F)-$(o)))) \ $(addprefix $(obj)/, $($(target-stem)-$(o)))) \
$(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(@F)) $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem))
$(host-cxxmulti): FORCE $(host-cxxmulti): FORCE
$(call if_changed,host-cxxmulti) $(call if_changed,host-cxxmulti)
$(call multi_depend, $(host-cxxmulti), , -objs -cxxobjs) $(call multi_depend, $(host-cxxmulti), , -objs -cxxobjs)
...@@ -144,8 +161,8 @@ $(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE ...@@ -144,8 +161,8 @@ $(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE
# *.o -> .so shared library (host-cshlib) # *.o -> .so shared library (host-cshlib)
quiet_cmd_host-cshlib = HOSTLLD -shared $@ quiet_cmd_host-cshlib = HOSTLLD -shared $@
cmd_host-cshlib = $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -shared -o $@ \ cmd_host-cshlib = $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -shared -o $@ \
$(addprefix $(obj)/,$($(@F:.so=-objs))) \ $(addprefix $(obj)/, $($(target-stem)-objs)) \
$(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(@F)) $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem).so)
$(host-cshlib): FORCE $(host-cshlib): FORCE
$(call if_changed,host-cshlib) $(call if_changed,host-cshlib)
$(call multi_depend, $(host-cshlib), .so, -objs) $(call multi_depend, $(host-cshlib), .so, -objs)
...@@ -154,8 +171,8 @@ $(call multi_depend, $(host-cshlib), .so, -objs) ...@@ -154,8 +171,8 @@ $(call multi_depend, $(host-cshlib), .so, -objs)
# *.o -> .so shared library (host-cxxshlib) # *.o -> .so shared library (host-cxxshlib)
quiet_cmd_host-cxxshlib = HOSTLLD -shared $@ quiet_cmd_host-cxxshlib = HOSTLLD -shared $@
cmd_host-cxxshlib = $(HOSTCXX) $(KBUILD_HOSTLDFLAGS) -shared -o $@ \ cmd_host-cxxshlib = $(HOSTCXX) $(KBUILD_HOSTLDFLAGS) -shared -o $@ \
$(addprefix $(obj)/,$($(@F:.so=-objs))) \ $(addprefix $(obj)/, $($(target-stem)-objs)) \
$(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(@F)) $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem).so)
$(host-cxxshlib): FORCE $(host-cxxshlib): FORCE
$(call if_changed,host-cxxshlib) $(call if_changed,host-cxxshlib)
$(call multi_depend, $(host-cxxshlib), .so, -objs) $(call multi_depend, $(host-cxxshlib), .so, -objs)
......
...@@ -41,9 +41,9 @@ obj-m := $(filter-out %/, $(obj-m)) ...@@ -41,9 +41,9 @@ obj-m := $(filter-out %/, $(obj-m))
# Subdirectories we need to descend into # Subdirectories we need to descend into
subdir-ym := $(sort $(subdir-y) $(subdir-m)) subdir-ym := $(sort $(subdir-y) $(subdir-m))
# if $(foo-objs), $(foo-y), or $(foo-m) exists, foo.o is a composite object # If $(foo-objs), $(foo-y), $(foo-m), or $(foo-) exists, foo.o is a composite object
multi-used-y := $(sort $(foreach m,$(obj-y), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))), $(m)))) multi-used-y := $(sort $(foreach m,$(obj-y), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y)) $($(m:.o=-))), $(m))))
multi-used-m := $(sort $(foreach m,$(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y)) $($(m:.o=-m))), $(m)))) multi-used-m := $(sort $(foreach m,$(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y)) $($(m:.o=-m)) $($(m:.o=-))), $(m))))
multi-used := $(multi-used-y) $(multi-used-m) multi-used := $(multi-used-y) $(multi-used-m)
# $(subdir-obj-y) is the list of objects in $(obj-y) which uses dir/ to # $(subdir-obj-y) is the list of objects in $(obj-y) which uses dir/ to
...@@ -52,8 +52,8 @@ subdir-obj-y := $(filter %/built-in.a, $(obj-y)) ...@@ -52,8 +52,8 @@ subdir-obj-y := $(filter %/built-in.a, $(obj-y))
# Replace multi-part objects by their individual parts, # Replace multi-part objects by their individual parts,
# including built-in.a from subdirectories # including built-in.a from subdirectories
real-obj-y := $(foreach m, $(obj-y), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m))) real-obj-y := $(foreach m, $(obj-y), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y)) $($(m:.o=-))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m)))
real-obj-m := $(foreach m, $(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y)) $($(m:.o=-m))),$($(m:.o=-objs)) $($(m:.o=-y)) $($(m:.o=-m)),$(m))) real-obj-m := $(foreach m, $(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y)) $($(m:.o=-m)) $($(m:.o=-))),$($(m:.o=-objs)) $($(m:.o=-y)) $($(m:.o=-m)),$(m)))
# DTB # DTB
# If CONFIG_OF_ALL_DTBS is enabled, all DT blobs are built # If CONFIG_OF_ALL_DTBS is enabled, all DT blobs are built
...@@ -101,6 +101,9 @@ modname-multi = $(subst $(space),:,$(sort $(foreach m,$(multi-used),\ ...@@ -101,6 +101,9 @@ modname-multi = $(subst $(space),:,$(sort $(foreach m,$(multi-used),\
modname = $(if $(modname-multi),$(modname-multi),$(basetarget)) modname = $(if $(modname-multi),$(modname-multi),$(basetarget))
# target with $(obj)/ and its suffix stripped
target-stem = $(basename $(patsubst $(obj)/%,%,$@))
# These flags are needed for modversions and compiling, so we define them here # These flags are needed for modversions and compiling, so we define them here
# $(modname_flags) defines KBUILD_MODNAME as the name of the module it will # $(modname_flags) defines KBUILD_MODNAME as the name of the module it will
# end up in (or would, if it gets compiled in) # end up in (or would, if it gets compiled in)
...@@ -109,12 +112,12 @@ basename_flags = -DKBUILD_BASENAME=$(call name-fix,$(basetarget)) ...@@ -109,12 +112,12 @@ basename_flags = -DKBUILD_BASENAME=$(call name-fix,$(basetarget))
modname_flags = -DKBUILD_MODNAME=$(call name-fix,$(modname)) modname_flags = -DKBUILD_MODNAME=$(call name-fix,$(modname))
orig_c_flags = $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) \ orig_c_flags = $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) \
$(ccflags-y) $(CFLAGS_$(basetarget).o) $(ccflags-y) $(CFLAGS_$(target-stem).o)
_c_flags = $(filter-out $(CFLAGS_REMOVE_$(basetarget).o), $(orig_c_flags)) _c_flags = $(filter-out $(CFLAGS_REMOVE_$(target-stem).o), $(orig_c_flags))
orig_a_flags = $(KBUILD_CPPFLAGS) $(KBUILD_AFLAGS) \ orig_a_flags = $(KBUILD_CPPFLAGS) $(KBUILD_AFLAGS) \
$(asflags-y) $(AFLAGS_$(basetarget).o) $(asflags-y) $(AFLAGS_$(target-stem).o)
_a_flags = $(filter-out $(AFLAGS_REMOVE_$(basetarget).o), $(orig_a_flags)) _a_flags = $(filter-out $(AFLAGS_REMOVE_$(target-stem).o), $(orig_a_flags))
_cpp_flags = $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(@F)) _cpp_flags = $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(target-stem).lds)
# #
# Enable gcov profiling flags for a file, directory or for all files depending # Enable gcov profiling flags for a file, directory or for all files depending
...@@ -159,6 +162,18 @@ _cpp_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj) ...@@ -159,6 +162,18 @@ _cpp_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj)
endif endif
endif endif
part-of-module = $(if $(filter $(basename $@).o, $(real-obj-m)),y)
quiet_modtag = $(if $(part-of-module),[M], )
modkern_cflags = \
$(if $(part-of-module), \
$(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE), \
$(KBUILD_CFLAGS_KERNEL) $(CFLAGS_KERNEL))
modkern_aflags = $(if $(part-of-module), \
$(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE), \
$(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL))
c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
-include $(srctree)/include/linux/compiler_types.h \ -include $(srctree)/include/linux/compiler_types.h \
$(_c_flags) $(modkern_cflags) \ $(_c_flags) $(modkern_cflags) \
...@@ -187,28 +202,6 @@ $(foreach m, $(notdir $1), \ ...@@ -187,28 +202,6 @@ $(foreach m, $(notdir $1), \
$(addprefix $(obj)/, $(foreach s, $3, $($(m:%$(strip $2)=%$(s))))))) $(addprefix $(obj)/, $(foreach s, $3, $($(m:%$(strip $2)=%$(s)))))))
endef endef
# LEX
# ---------------------------------------------------------------------------
quiet_cmd_flex = LEX $@
cmd_flex = $(LEX) -o$@ -L $<
$(obj)/%.lex.c: $(src)/%.l FORCE
$(call if_changed,flex)
# YACC
# ---------------------------------------------------------------------------
quiet_cmd_bison = YACC $@
cmd_bison = $(YACC) -o$@ -t -l $<
$(obj)/%.tab.c: $(src)/%.y FORCE
$(call if_changed,bison)
quiet_cmd_bison_h = YACC $@
cmd_bison_h = $(YACC) -o/dev/null --defines=$@ -t -l $<
$(obj)/%.tab.h: $(src)/%.y FORCE
$(call if_changed,bison_h)
# Shipped files # Shipped files
# =========================================================================== # ===========================================================================
...@@ -258,7 +251,7 @@ quiet_cmd_gzip = GZIP $@ ...@@ -258,7 +251,7 @@ quiet_cmd_gzip = GZIP $@
DTC ?= $(objtree)/scripts/dtc/dtc DTC ?= $(objtree)/scripts/dtc/dtc
# Disable noisy checks by default # Disable noisy checks by default
ifeq ($(findstring 1,$(KBUILD_ENABLE_EXTRA_GCC_CHECKS)),) ifeq ($(findstring 1,$(KBUILD_EXTRA_WARN)),)
DTC_FLAGS += -Wno-unit_address_vs_reg \ DTC_FLAGS += -Wno-unit_address_vs_reg \
-Wno-unit_address_format \ -Wno-unit_address_format \
-Wno-avoid_unnecessary_addr_size \ -Wno-avoid_unnecessary_addr_size \
...@@ -269,7 +262,7 @@ DTC_FLAGS += -Wno-unit_address_vs_reg \ ...@@ -269,7 +262,7 @@ DTC_FLAGS += -Wno-unit_address_vs_reg \
-Wno-pci_device_reg -Wno-pci_device_reg
endif endif
ifneq ($(findstring 2,$(KBUILD_ENABLE_EXTRA_GCC_CHECKS)),) ifneq ($(findstring 2,$(KBUILD_EXTRA_WARN)),)
DTC_FLAGS += -Wnode_name_chars_strict \ DTC_FLAGS += -Wnode_name_chars_strict \
-Wproperty_name_chars_strict -Wproperty_name_chars_strict
endif endif
...@@ -374,7 +367,7 @@ UIMAGE_ENTRYADDR ?= $(UIMAGE_LOADADDR) ...@@ -374,7 +367,7 @@ UIMAGE_ENTRYADDR ?= $(UIMAGE_LOADADDR)
UIMAGE_NAME ?= 'Linux-$(KERNELRELEASE)' UIMAGE_NAME ?= 'Linux-$(KERNELRELEASE)'
quiet_cmd_uimage = UIMAGE $@ quiet_cmd_uimage = UIMAGE $@
cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A $(UIMAGE_ARCH) -O linux \ cmd_uimage = $(BASH) $(MKIMAGE) -A $(UIMAGE_ARCH) -O linux \
-C $(UIMAGE_COMPRESSION) $(UIMAGE_OPTS-y) \ -C $(UIMAGE_COMPRESSION) $(UIMAGE_OPTS-y) \
-T $(UIMAGE_TYPE) \ -T $(UIMAGE_TYPE) \
-a $(UIMAGE_LOADADDR) -e $(UIMAGE_ENTRYADDR) \ -a $(UIMAGE_LOADADDR) -e $(UIMAGE_ENTRYADDR) \
......
# SPDX-License-Identifier: GPL-2.0-only
# ===========================================================================
# Module final link
# ===========================================================================
PHONY := __modfinal
__modfinal:
include $(srctree)/scripts/Kbuild.include
# for c_flags
include $(srctree)/scripts/Makefile.lib
# find all modules listed in modules.order
modules := $(sort $(shell cat $(MODORDER)))
__modfinal: $(modules)
@:
# modname and part-of-module are set to make c_flags define proper module flags
modname = $(notdir $(@:.mod.o=))
part-of-module = y
quiet_cmd_cc_o_c = CC [M] $@
cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
%.mod.o: %.mod.c FORCE
$(call if_changed_dep,cc_o_c)
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
quiet_cmd_ld_ko_o = LD [M] $@
cmd_ld_ko_o = \
$(LD) -r $(KBUILD_LDFLAGS) \
$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \
$(addprefix -T , $(KBUILD_LDS_MODULE)) \
-o $@ $(filter %.o, $^); \
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
$(modules): %.ko: %.o %.mod.o $(KBUILD_LDS_MODULE) FORCE
+$(call if_changed,ld_ko_o)
targets += $(modules) $(modules:.ko=.mod.o)
# Add FORCE to the prequisites of a target to force it to be always rebuilt.
# ---------------------------------------------------------------------------
PHONY += FORCE
FORCE:
# 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
# exist, we will rebuild anyway in that case.
existing-targets := $(wildcard $(sort $(targets)))
-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
.PHONY: $(PHONY)
...@@ -15,15 +15,13 @@ ...@@ -15,15 +15,13 @@
# 2) modpost is then used to # 2) modpost is then used to
# 3) create one <module>.mod.c file pr. module # 3) create one <module>.mod.c file pr. module
# 4) create one Module.symvers file with CRC for all exported symbols # 4) create one Module.symvers file with CRC for all exported symbols
# 5) compile all <module>.mod.c files
# 6) final link of the module to a <module.ko> file
# Step 3 is used to place certain information in the module's ELF # Step 3 is used to place certain information in the module's ELF
# section, including information such as: # section, including information such as:
# Version magic (see include/linux/vermagic.h for full details) # Version magic (see include/linux/vermagic.h for full details)
# - Kernel release # - Kernel release
# - SMP is CONFIG_SMP # - SMP is CONFIG_SMP
# - PREEMPT is CONFIG_PREEMPT # - PREEMPT is CONFIG_PREEMPT[_RT]
# - GCC Version # - GCC Version
# Module info # Module info
# - Module version (MODULE_VERSION) # - Module version (MODULE_VERSION)
...@@ -60,13 +58,10 @@ MODPOST = scripts/mod/modpost \ ...@@ -60,13 +58,10 @@ MODPOST = scripts/mod/modpost \
ifdef MODPOST_VMLINUX ifdef MODPOST_VMLINUX
__modpost: vmlinux.o quiet_cmd_modpost = MODPOST vmlinux.o
cmd_modpost = $(MODPOST) vmlinux.o
quiet_cmd_modpost = MODPOST $@ __modpost:
cmd_modpost = $(MODPOST) $@
PHONY += vmlinux.o
vmlinux.o:
$(call cmd,modpost) $(call cmd,modpost)
else else
...@@ -83,73 +78,22 @@ include $(if $(wildcard $(KBUILD_EXTMOD)/Kbuild), \ ...@@ -83,73 +78,22 @@ include $(if $(wildcard $(KBUILD_EXTMOD)/Kbuild), \
$(KBUILD_EXTMOD)/Kbuild, $(KBUILD_EXTMOD)/Makefile) $(KBUILD_EXTMOD)/Kbuild, $(KBUILD_EXTMOD)/Makefile)
endif endif
include scripts/Makefile.lib MODPOST += $(subst -i,-n,$(filter -i,$(MAKEFLAGS))) -s -T - $(wildcard vmlinux)
# find all modules listed in modules.order # find all modules listed in modules.order
modules := $(sort $(shell cat $(MODORDER))) modules := $(sort $(shell cat $(MODORDER)))
# Stop after building .o files if NOFINAL is set. Makes compile tests quicker # Read out modules.order instead of expanding $(modules) to pass in modpost.
__modpost: $(if $(KBUILD_MODPOST_NOFINAL), $(modules:.ko:.o),$(modules)) # Otherwise, allmodconfig would fail with "Argument list too long".
@:
MODPOST += $(subst -i,-n,$(filter -i,$(MAKEFLAGS))) -s -T - $(wildcard vmlinux)
# We can go over command line length here, so be careful.
quiet_cmd_modpost = MODPOST $(words $(modules)) modules quiet_cmd_modpost = MODPOST $(words $(modules)) modules
cmd_modpost = sed 's/ko$$/o/' $(MODORDER) | $(MODPOST) cmd_modpost = sed 's/ko$$/o/' $(MODORDER) | $(MODPOST)
PHONY += modules-modpost __modpost:
modules-modpost: @$(kecho) ' Building modules, stage 2.'
$(call cmd,modpost) $(call cmd,modpost)
ifneq ($(KBUILD_MODPOST_NOFINAL),1)
# Declare generated files as targets for modpost $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modfinal
$(modules:.ko=.mod.c): modules-modpost endif
# Step 5), compile all *.mod.c files
# modname is set to make c_flags define KBUILD_MODNAME
modname = $(notdir $(@:.mod.o=))
quiet_cmd_cc_o_c = CC $@
cmd_cc_o_c = $(CC) $(c_flags) $(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE) \
-c -o $@ $<
$(modules:.ko=.mod.o): %.mod.o: %.mod.c FORCE
$(call if_changed_dep,cc_o_c)
targets += $(modules:.ko=.mod.o)
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
# Step 6), final link of the modules with optional arch pass after final link
quiet_cmd_ld_ko_o = LD [M] $@
cmd_ld_ko_o = \
$(LD) -r $(KBUILD_LDFLAGS) \
$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \
-o $@ $(real-prereqs) ; \
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
$(modules): %.ko :%.o %.mod.o FORCE
+$(call if_changed,ld_ko_o)
targets += $(modules)
# Add FORCE to the prequisites of a target to force it to be always rebuilt.
# ---------------------------------------------------------------------------
PHONY += FORCE
FORCE:
# 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
# exist, we will rebuild anyway in that case.
existing-targets := $(wildcard $(sort $(targets)))
-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
endif endif
......
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-2.0-only
# Makefile for the different targets used to generate full packages of a kernel # Makefile for the different targets used to generate full packages of a kernel
# It uses the generic clean infrastructure of kbuild
include $(srctree)/scripts/Kbuild.include
# RPM target # RPM target
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
...@@ -50,7 +51,8 @@ rm -f $(objtree)/.scmversion ...@@ -50,7 +51,8 @@ rm -f $(objtree)/.scmversion
# rpm-pkg # rpm-pkg
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
rpm-pkg: FORCE PHONY += rpm-pkg
rpm-pkg:
$(MAKE) clean $(MAKE) clean
$(CONFIG_SHELL) $(MKSPEC) >$(objtree)/kernel.spec $(CONFIG_SHELL) $(MKSPEC) >$(objtree)/kernel.spec
$(call cmd,src_tar,$(KERNELPATH),kernel.spec) $(call cmd,src_tar,$(KERNELPATH),kernel.spec)
...@@ -59,15 +61,15 @@ rpm-pkg: FORCE ...@@ -59,15 +61,15 @@ rpm-pkg: FORCE
# binrpm-pkg # binrpm-pkg
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
binrpm-pkg: FORCE PHONY += binrpm-pkg
binrpm-pkg:
$(MAKE) -f $(srctree)/Makefile $(MAKE) -f $(srctree)/Makefile
$(CONFIG_SHELL) $(MKSPEC) prebuilt > $(objtree)/binkernel.spec $(CONFIG_SHELL) $(MKSPEC) prebuilt > $(objtree)/binkernel.spec
+rpmbuild $(RPMOPTS) --define "_builddir $(objtree)" --target \ +rpmbuild $(RPMOPTS) --define "_builddir $(objtree)" --target \
$(UTS_MACHINE) -bb $(objtree)/binkernel.spec $(UTS_MACHINE) -bb $(objtree)/binkernel.spec
clean-files += $(objtree)/*.spec PHONY += deb-pkg
deb-pkg:
deb-pkg: FORCE
$(MAKE) clean $(MAKE) clean
$(CONFIG_SHELL) $(srctree)/scripts/package/mkdebian $(CONFIG_SHELL) $(srctree)/scripts/package/mkdebian
$(call cmd,src_tar,$(KDEB_SOURCENAME)) $(call cmd,src_tar,$(KDEB_SOURCENAME))
...@@ -75,18 +77,19 @@ deb-pkg: FORCE ...@@ -75,18 +77,19 @@ deb-pkg: FORCE
mv $(KDEB_SOURCENAME).tar.gz ../$(KDEB_SOURCENAME)_$${origversion}.orig.tar.gz mv $(KDEB_SOURCENAME).tar.gz ../$(KDEB_SOURCENAME)_$${origversion}.orig.tar.gz
+dpkg-buildpackage -r$(KBUILD_PKG_ROOTCMD) -a$$(cat debian/arch) $(DPKG_FLAGS) -i.git -us -uc +dpkg-buildpackage -r$(KBUILD_PKG_ROOTCMD) -a$$(cat debian/arch) $(DPKG_FLAGS) -i.git -us -uc
bindeb-pkg: FORCE PHONY += bindeb-pkg
bindeb-pkg:
$(CONFIG_SHELL) $(srctree)/scripts/package/mkdebian $(CONFIG_SHELL) $(srctree)/scripts/package/mkdebian
+dpkg-buildpackage -r$(KBUILD_PKG_ROOTCMD) -a$$(cat debian/arch) $(DPKG_FLAGS) -b -nc -uc +dpkg-buildpackage -r$(KBUILD_PKG_ROOTCMD) -a$$(cat debian/arch) $(DPKG_FLAGS) -b -nc -uc
intdeb-pkg: FORCE PHONY += intdeb-pkg
intdeb-pkg:
+$(CONFIG_SHELL) $(srctree)/scripts/package/builddeb +$(CONFIG_SHELL) $(srctree)/scripts/package/builddeb
clean-dirs += $(objtree)/debian/
# snap-pkg # snap-pkg
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
snap-pkg: FORCE PHONY += snap-pkg
snap-pkg:
rm -rf $(objtree)/snap rm -rf $(objtree)/snap
mkdir $(objtree)/snap mkdir $(objtree)/snap
$(MAKE) clean $(MAKE) clean
...@@ -98,17 +101,14 @@ snap-pkg: FORCE ...@@ -98,17 +101,14 @@ snap-pkg: FORCE
cd $(objtree)/snap && \ cd $(objtree)/snap && \
snapcraft --target-arch=$(UTS_MACHINE) snapcraft --target-arch=$(UTS_MACHINE)
clean-dirs += $(objtree)/snap/
# tarball targets # tarball targets
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
tar%pkg: FORCE tar-pkgs := tar-pkg targz-pkg tarbz2-pkg tarxz-pkg
PHONY += $(tar-pkgs)
$(tar-pkgs):
$(MAKE) -f $(srctree)/Makefile $(MAKE) -f $(srctree)/Makefile
+$(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@ +$(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@
clean-dirs += $(objtree)/tar-install/
# perf-pkg - generate a source tarball with perf source # perf-pkg - generate a source tarball with perf source
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
...@@ -133,12 +133,15 @@ $(if $(findstring xz,$@),xz, \ ...@@ -133,12 +133,15 @@ $(if $(findstring xz,$@),xz, \
$(error unknown target $@)))) \ $(error unknown target $@)))) \
-f -9 $(perf-tar).tar) -f -9 $(perf-tar).tar)
perf-%pkg: FORCE perf-tar-pkgs := perf-tar-src-pkg perf-targz-src-pkg perf-tarbz2-src-pkg perf-tarxz-src-pkg
PHONY += $(perf-tar-pkgs)
$(perf-tar-pkgs):
$(call cmd,perf_tar) $(call cmd,perf_tar)
# Help text displayed when executing 'make help' # Help text displayed when executing 'make help'
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
help: FORCE PHONY += help
help:
@echo ' rpm-pkg - Build both source and binary RPM kernel packages' @echo ' rpm-pkg - Build both source and binary RPM kernel packages'
@echo ' binrpm-pkg - Build only the binary kernel RPM package' @echo ' binrpm-pkg - Build only the binary kernel RPM package'
@echo ' deb-pkg - Build both source and binary deb kernel packages' @echo ' deb-pkg - Build both source and binary deb kernel packages'
...@@ -152,3 +155,5 @@ help: FORCE ...@@ -152,3 +155,5 @@ help: FORCE
@echo ' perf-targz-src-pkg - Build $(perf-tar).tar.gz source tarball' @echo ' perf-targz-src-pkg - Build $(perf-tar).tar.gz source tarball'
@echo ' perf-tarbz2-src-pkg - Build $(perf-tar).tar.bz2 source tarball' @echo ' perf-tarbz2-src-pkg - Build $(perf-tar).tar.bz2 source tarball'
@echo ' perf-tarxz-src-pkg - Build $(perf-tar).tar.xz source tarball' @echo ' perf-tarxz-src-pkg - Build $(perf-tar).tar.xz source tarball'
.PHONY: $(PHONY)
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-2.0-only
### #
# This Makefile lists the most basic programs used during the build process. # fixdep: used to generate dependency information during build process
# The programs listed herein are what are needed to do the basic stuff,
# such as fix file dependencies.
# This initial step is needed to avoid files to be recompiled
# when kernel configuration changes (which is what happens when
# .config is included by main Makefile.
# ---------------------------------------------------------------------------
# fixdep: Used to generate dependency information during build process
hostprogs-y := fixdep hostprogs-y := fixdep
always := $(hostprogs-y) always := $(hostprogs-y)
# fixdep is needed to compile other host programs
$(addprefix $(obj)/,$(filter-out fixdep,$(always))): $(obj)/fixdep
...@@ -12,22 +12,15 @@ genksyms-objs := genksyms.o parse.tab.o lex.lex.o ...@@ -12,22 +12,15 @@ genksyms-objs := genksyms.o parse.tab.o lex.lex.o
# #
# Just in case, run "$(YACC) --version" without suppressing stderr # Just in case, run "$(YACC) --version" without suppressing stderr
# so that 'bison: not found' will be displayed if it is missing. # so that 'bison: not found' will be displayed if it is missing.
ifeq ($(findstring 1,$(KBUILD_ENABLE_EXTRA_GCC_CHECKS)),) ifeq ($(findstring 1,$(KBUILD_EXTRA_WARN)),)
quiet_cmd_bison_no_warn = $(quiet_cmd_bison) quiet_cmd_bison_no_warn = $(quiet_cmd_bison)
cmd_bison_no_warn = $(YACC) --version >/dev/null; \ cmd_bison_no_warn = $(YACC) --version >/dev/null; \
$(cmd_bison) 2>/dev/null $(cmd_bison) 2>/dev/null
$(obj)/parse.tab.c: $(src)/parse.y FORCE $(obj)/pars%.tab.c $(obj)/pars%.tab.h: $(src)/pars%.y FORCE
$(call if_changed,bison_no_warn) $(call if_changed,bison_no_warn)
quiet_cmd_bison_h_no_warn = $(quiet_cmd_bison_h)
cmd_bison_h_no_warn = $(YACC) --version >/dev/null; \
$(cmd_bison_h) 2>/dev/null
$(obj)/parse.tab.h: $(src)/parse.y FORCE
$(call if_changed,bison_h_no_warn)
endif endif
# -I needed for generated C source (shipped source) # -I needed for generated C source (shipped source)
......
...@@ -3,11 +3,7 @@ static struct resword { ...@@ -3,11 +3,7 @@ static struct resword {
const char *name; const char *name;
int token; int token;
} keywords[] = { } keywords[] = {
{ "EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW }, { "__GENKSYMS_EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW },
{ "EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW },
{ "EXPORT_SYMBOL_GPL_FUTURE", EXPORT_SYMBOL_KEYW },
{ "EXPORT_UNUSED_SYMBOL", EXPORT_SYMBOL_KEYW },
{ "EXPORT_UNUSED_SYMBOL_GPL", EXPORT_SYMBOL_KEYW },
{ "__asm", ASM_KEYW }, { "__asm", ASM_KEYW },
{ "__asm__", ASM_KEYW }, { "__asm__", ASM_KEYW },
{ "__attribute", ATTRIBUTE_KEYW }, { "__attribute", ATTRIBUTE_KEYW },
......
/* Lexical analysis for genksyms. /* SPDX-License-Identifier: GPL-2.0-or-later */
Copyright 1996, 1997 Linux International. /*
* Lexical analysis for genksyms.
New implementation contributed by Richard Henderson <rth@tamu.edu> * Copyright 1996, 1997 Linux International.
Based on original work by Bjorn Ekwall <bj0rn@blox.se> *
* New implementation contributed by Richard Henderson <rth@tamu.edu>
Taken from Linux modutils 2.4.22. * Based on original work by Bjorn Ekwall <bj0rn@blox.se>
*
This program is free software; you can redistribute it and/or modify it * Taken from Linux modutils 2.4.22.
under the terms of the GNU General Public License as published by the */
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
%{ %{
......
/* C global declaration parser for genksyms. /* SPDX-License-Identifier: GPL-2.0-or-later */
Copyright 1996, 1997 Linux International. /*
* C global declaration parser for genksyms.
New implementation contributed by Richard Henderson <rth@tamu.edu> * Copyright 1996, 1997 Linux International.
Based on original work by Bjorn Ekwall <bj0rn@blox.se> *
* New implementation contributed by Richard Henderson <rth@tamu.edu>
This file is part of the Linux modutils. * Based on original work by Bjorn Ekwall <bj0rn@blox.se>
*
This program is free software; you can redistribute it and/or modify it * This file is part of the Linux modutils.
under the terms of the GNU General Public License as published by the */
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
%{ %{
......
...@@ -41,5 +41,77 @@ sed -E -e ' ...@@ -41,5 +41,77 @@ sed -E -e '
scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ $TMPFILE > $OUTFILE scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ $TMPFILE > $OUTFILE
[ $? -gt 1 ] && exit 1 [ $? -gt 1 ] && exit 1
# Remove /* ... */ style comments, and find CONFIG_ references in code
configs=$(sed -e '
:comment
s:/\*[^*][^*]*:/*:
s:/\*\*\**\([^/]\):/*\1:
t comment
s:/\*\*/: :
t comment
/\/\*/! b check
N
b comment
:print
P
D
:check
s:^\(CONFIG_[[:alnum:]_]*\):\1\n:
t print
s:^[[:alnum:]_][[:alnum:]_]*::
s:^[^[:alnum:]_][^[:alnum:]_]*::
t check
d
' $OUTFILE)
# The entries in the following list are not warned.
# Please do not add a new entry. This list is only for existing ones.
# The list will be reduced gradually, and deleted eventually. (hopefully)
#
# The format is <file-name>:<CONFIG-option> in each line.
config_leak_ignores="
arch/alpha/include/uapi/asm/setup.h:CONFIG_ALPHA_LEGACY_START_ADDRESS
arch/arc/include/uapi/asm/page.h:CONFIG_ARC_PAGE_SIZE_16K
arch/arc/include/uapi/asm/page.h:CONFIG_ARC_PAGE_SIZE_4K
arch/arc/include/uapi/asm/swab.h:CONFIG_ARC_HAS_SWAPE
arch/arm/include/uapi/asm/ptrace.h:CONFIG_CPU_ENDIAN_BE8
arch/hexagon/include/uapi/asm/ptrace.h:CONFIG_HEXAGON_ARCH_VERSION
arch/hexagon/include/uapi/asm/user.h:CONFIG_HEXAGON_ARCH_VERSION
arch/ia64/include/uapi/asm/cmpxchg.h:CONFIG_IA64_DEBUG_CMPXCHG
arch/m68k/include/uapi/asm/ptrace.h:CONFIG_COLDFIRE
arch/nios2/include/uapi/asm/swab.h:CONFIG_NIOS2_CI_SWAB_NO
arch/nios2/include/uapi/asm/swab.h:CONFIG_NIOS2_CI_SWAB_SUPPORT
arch/sh/include/uapi/asm/ptrace.h:CONFIG_CPU_SH5
arch/sh/include/uapi/asm/sigcontext.h:CONFIG_CPU_SH5
arch/sh/include/uapi/asm/stat.h:CONFIG_CPU_SH5
arch/x86/include/uapi/asm/auxvec.h:CONFIG_IA32_EMULATION
arch/x86/include/uapi/asm/auxvec.h:CONFIG_X86_64
arch/x86/include/uapi/asm/mman.h:CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
include/uapi/asm-generic/fcntl.h:CONFIG_64BIT
include/uapi/linux/atmdev.h:CONFIG_COMPAT
include/uapi/linux/elfcore.h:CONFIG_BINFMT_ELF_FDPIC
include/uapi/linux/eventpoll.h:CONFIG_PM_SLEEP
include/uapi/linux/hw_breakpoint.h:CONFIG_HAVE_MIXED_BREAKPOINTS_REGS
include/uapi/linux/pktcdvd.h:CONFIG_CDROM_PKTCDVD_WCACHE
include/uapi/linux/raw.h:CONFIG_MAX_RAW_DEVS
"
for c in $configs
do
warn=1
for ignore in $config_leak_ignores
do
if echo "$INFILE:$c" | grep -q "$ignore$"; then
warn=
break
fi
done
if [ "$warn" = 1 ]; then
echo "warning: $INFILE: leak $c to user-space" >&2
fi
done
rm -f $TMPFILE rm -f $TMPFILE
trap - EXIT trap - EXIT
...@@ -114,7 +114,7 @@ testconfig: $(obj)/conf ...@@ -114,7 +114,7 @@ testconfig: $(obj)/conf
$(PYTHON3) -B -m pytest $(srctree)/$(src)/tests \ $(PYTHON3) -B -m pytest $(srctree)/$(src)/tests \
-o cache_dir=$(abspath $(obj)/tests/.cache) \ -o cache_dir=$(abspath $(obj)/tests/.cache) \
$(if $(findstring 1,$(KBUILD_VERBOSE)),--capture=no) $(if $(findstring 1,$(KBUILD_VERBOSE)),--capture=no)
clean-dirs += tests/.cache clean-files += tests/.cache
# Help text used by make help # Help text used by make help
help: help:
...@@ -166,15 +166,15 @@ $(obj)/nconf.o $(obj)/nconf.gui.o: $(obj)/nconf-cfg ...@@ -166,15 +166,15 @@ $(obj)/nconf.o $(obj)/nconf.gui.o: $(obj)/nconf-cfg
# mconf: Used for the menuconfig target based on lxdialog # mconf: Used for the menuconfig target based on lxdialog
hostprogs-y += mconf hostprogs-y += mconf
lxdialog := checklist.o inputbox.o menubox.o textbox.o util.o yesno.o lxdialog := $(addprefix lxdialog/, \
mconf-objs := mconf.o $(addprefix lxdialog/, $(lxdialog)) $(common-objs) checklist.o inputbox.o menubox.o textbox.o util.o yesno.o)
mconf-objs := mconf.o $(lxdialog) $(common-objs)
HOSTLDLIBS_mconf = $(shell . $(obj)/mconf-cfg && echo $$libs) HOSTLDLIBS_mconf = $(shell . $(obj)/mconf-cfg && echo $$libs)
$(foreach f, mconf.o $(lxdialog), \ $(foreach f, mconf.o $(lxdialog), \
$(eval HOSTCFLAGS_$f = $$(shell . $(obj)/mconf-cfg && echo $$$$cflags))) $(eval HOSTCFLAGS_$f = $$(shell . $(obj)/mconf-cfg && echo $$$$cflags)))
$(obj)/mconf.o: $(obj)/mconf-cfg $(addprefix $(obj)/, mconf.o $(lxdialog)): $(obj)/mconf-cfg
$(addprefix $(obj)/lxdialog/, $(lxdialog)): $(obj)/mconf-cfg
# qconf: Used for the xconfig target based on Qt # qconf: Used for the xconfig target based on Qt
hostprogs-y += qconf hostprogs-y += qconf
......
...@@ -13,12 +13,12 @@ ...@@ -13,12 +13,12 @@
# Copyright (c) 2009-2010 Wind River Systems, Inc. # Copyright (c) 2009-2010 Wind River Systems, Inc.
# Copyright 2011 Linaro # Copyright 2011 Linaro
set -e
clean_up() { clean_up() {
rm -f $TMP_FILE rm -f $TMP_FILE
rm -f $MERGE_FILE rm -f $MERGE_FILE
exit
} }
trap clean_up HUP INT TERM
usage() { usage() {
echo "Usage: $0 [OPTIONS] [CONFIG [...]]" echo "Usage: $0 [OPTIONS] [CONFIG [...]]"
...@@ -110,6 +110,9 @@ TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX) ...@@ -110,6 +110,9 @@ TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
MERGE_FILE=$(mktemp ./.merge_tmp.config.XXXXXXXXXX) MERGE_FILE=$(mktemp ./.merge_tmp.config.XXXXXXXXXX)
echo "Using $INITFILE as base" echo "Using $INITFILE as base"
trap clean_up EXIT
cat $INITFILE > $TMP_FILE cat $INITFILE > $TMP_FILE
# Merge files, printing warnings on overridden values # Merge files, printing warnings on overridden values
...@@ -155,7 +158,6 @@ if [ "$RUNMAKE" = "false" ]; then ...@@ -155,7 +158,6 @@ if [ "$RUNMAKE" = "false" ]; then
echo "#" echo "#"
echo "# merged configuration written to $KCONFIG_CONFIG (needs make)" echo "# merged configuration written to $KCONFIG_CONFIG (needs make)"
echo "#" echo "#"
clean_up
exit exit
fi fi
...@@ -177,7 +179,7 @@ make KCONFIG_ALLCONFIG=$TMP_FILE $OUTPUT_ARG $ALLTARGET ...@@ -177,7 +179,7 @@ make KCONFIG_ALLCONFIG=$TMP_FILE $OUTPUT_ARG $ALLTARGET
for CFG in $(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $TMP_FILE); do for CFG in $(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $TMP_FILE); do
REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE) REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
ACTUAL_VAL=$(grep -w -e "$CFG" "$KCONFIG_CONFIG") ACTUAL_VAL=$(grep -w -e "$CFG" "$KCONFIG_CONFIG" || true)
if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
echo "Value requested for $CFG not in final .config" echo "Value requested for $CFG not in final .config"
echo "Requested value: $REQUESTED_VAL" echo "Requested value: $REQUESTED_VAL"
...@@ -185,5 +187,3 @@ for CFG in $(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $TMP_FILE); do ...@@ -185,5 +187,3 @@ for CFG in $(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $TMP_FILE); do
echo "" echo ""
fi fi
done done
clean_up
...@@ -64,6 +64,8 @@ vmlinux_link() ...@@ -64,6 +64,8 @@ vmlinux_link()
local output=${1} local output=${1}
local objects local objects
info LD ${output}
# skip output file argument # skip output file argument
shift shift
...@@ -157,6 +159,18 @@ kallsyms() ...@@ -157,6 +159,18 @@ kallsyms()
${CC} ${aflags} -c -o ${2} ${afile} ${CC} ${aflags} -c -o ${2} ${afile}
} }
# Perform one step in kallsyms generation, including temporary linking of
# vmlinux.
kallsyms_step()
{
kallsymso_prev=${kallsymso}
kallsymso=.tmp_kallsyms${1}.o
kallsyms_vmlinux=.tmp_vmlinux${1}
vmlinux_link ${kallsyms_vmlinux} "${kallsymso_prev}" ${btf_vmlinux_bin_o}
kallsyms ${kallsyms_vmlinux} ${kallsymso}
}
# Create map file with all symbols from ${1} # Create map file with all symbols from ${1}
# See mksymap for additional details # See mksymap for additional details
mksysmap() mksysmap()
...@@ -243,6 +257,7 @@ if [ -n "${CONFIG_DEBUG_INFO_BTF}" ]; then ...@@ -243,6 +257,7 @@ if [ -n "${CONFIG_DEBUG_INFO_BTF}" ]; then
fi fi
kallsymso="" kallsymso=""
kallsymso_prev=""
kallsyms_vmlinux="" kallsyms_vmlinux=""
if [ -n "${CONFIG_KALLSYMS}" ]; then if [ -n "${CONFIG_KALLSYMS}" ]; then
...@@ -269,32 +284,19 @@ if [ -n "${CONFIG_KALLSYMS}" ]; then ...@@ -269,32 +284,19 @@ if [ -n "${CONFIG_KALLSYMS}" ]; then
# a) Verify that the System.map from vmlinux matches the map from # a) Verify that the System.map from vmlinux matches the map from
# ${kallsymso}. # ${kallsymso}.
kallsymso=.tmp_kallsyms2.o kallsyms_step 1
kallsyms_vmlinux=.tmp_vmlinux2 kallsyms_step 2
# step 1
vmlinux_link .tmp_vmlinux1 ${btf_vmlinux_bin_o}
kallsyms .tmp_vmlinux1 .tmp_kallsyms1.o
# step 2
vmlinux_link .tmp_vmlinux2 .tmp_kallsyms1.o ${btf_vmlinux_bin_o}
kallsyms .tmp_vmlinux2 .tmp_kallsyms2.o
# step 3 # step 3
size1=$(${CONFIG_SHELL} "${srctree}/scripts/file-size.sh" .tmp_kallsyms1.o) size1=$(${CONFIG_SHELL} "${srctree}/scripts/file-size.sh" ${kallsymso_prev})
size2=$(${CONFIG_SHELL} "${srctree}/scripts/file-size.sh" .tmp_kallsyms2.o) size2=$(${CONFIG_SHELL} "${srctree}/scripts/file-size.sh" ${kallsymso})
if [ $size1 -ne $size2 ] || [ -n "${KALLSYMS_EXTRA_PASS}" ]; then if [ $size1 -ne $size2 ] || [ -n "${KALLSYMS_EXTRA_PASS}" ]; then
kallsymso=.tmp_kallsyms3.o kallsyms_step 3
kallsyms_vmlinux=.tmp_vmlinux3
vmlinux_link .tmp_vmlinux3 .tmp_kallsyms2.o ${btf_vmlinux_bin_o}
kallsyms .tmp_vmlinux3 .tmp_kallsyms3.o
fi fi
fi fi
info LD vmlinux vmlinux_link vmlinux "${kallsymso}" ${btf_vmlinux_bin_o}
vmlinux_link vmlinux "${kallsymso}" "${btf_vmlinux_bin_o}"
if [ -n "${CONFIG_BUILDTIME_EXTABLE_SORT}" ]; then if [ -n "${CONFIG_BUILDTIME_EXTABLE_SORT}" ]; then
info SORTEX vmlinux info SORTEX vmlinux
......
...@@ -5,7 +5,8 @@ TARGET=$1 ...@@ -5,7 +5,8 @@ TARGET=$1
ARCH=$2 ARCH=$2
SMP=$3 SMP=$3
PREEMPT=$4 PREEMPT=$4
CC=$5 PREEMPT_RT=$5
CC=$6
vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; } vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; }
...@@ -53,6 +54,7 @@ UTS_VERSION="#$VERSION" ...@@ -53,6 +54,7 @@ UTS_VERSION="#$VERSION"
CONFIG_FLAGS="" CONFIG_FLAGS=""
if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi
if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi
if [ -n "$PREEMPT_RT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT_RT"; fi
UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS $TIMESTAMP" UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS $TIMESTAMP"
# Truncate to maximum length # Truncate to maximum length
......
...@@ -12,6 +12,6 @@ if [ "${quiet}" != "silent_" ]; then ...@@ -12,6 +12,6 @@ if [ "${quiet}" != "silent_" ]; then
fi fi
cat << EOF > Makefile cat << EOF > Makefile
# Automatically generated by $(realpath $0): don't edit # Automatically generated by $0: don't edit
include $(realpath $1/Makefile) include $1/Makefile
EOF EOF
...@@ -34,6 +34,11 @@ typedef Elf64_Addr kernel_ulong_t; ...@@ -34,6 +34,11 @@ typedef Elf64_Addr kernel_ulong_t;
typedef uint32_t __u32; typedef uint32_t __u32;
typedef uint16_t __u16; typedef uint16_t __u16;
typedef unsigned char __u8; typedef unsigned char __u8;
typedef struct {
__u8 b[16];
} guid_t;
/* backwards compatibility, don't use in new code */
typedef struct { typedef struct {
__u8 b[16]; __u8 b[16];
} uuid_le; } uuid_le;
......
...@@ -169,6 +169,7 @@ struct symbol { ...@@ -169,6 +169,7 @@ struct symbol {
unsigned int kernel:1; /* 1 if symbol is from kernel unsigned int kernel:1; /* 1 if symbol is from kernel
* (only for external modules) **/ * (only for external modules) **/
unsigned int preloaded:1; /* 1 if symbol from Module.symvers, or crc */ unsigned int preloaded:1; /* 1 if symbol from Module.symvers, or crc */
unsigned int is_static:1; /* 1 if symbol is not global */
enum export export; /* Type of export */ enum export export; /* Type of export */
char name[0]; char name[0];
}; };
...@@ -201,6 +202,7 @@ static struct symbol *alloc_symbol(const char *name, unsigned int weak, ...@@ -201,6 +202,7 @@ static struct symbol *alloc_symbol(const char *name, unsigned int weak,
strcpy(s->name, name); strcpy(s->name, name);
s->weak = weak; s->weak = weak;
s->next = next; s->next = next;
s->is_static = 1;
return s; return s;
} }
...@@ -795,9 +797,9 @@ static int match(const char *sym, const char * const pat[]) ...@@ -795,9 +797,9 @@ static int match(const char *sym, const char * const pat[])
/* "*foo*" */ /* "*foo*" */
if (*p == '*' && *endp == '*') { if (*p == '*' && *endp == '*') {
char *here, *bare = strndup(p + 1, strlen(p) - 2); char *bare = NOFAIL(strndup(p + 1, strlen(p) - 2));
char *here = strstr(sym, bare);
here = strstr(sym, bare);
free(bare); free(bare);
if (here != NULL) if (here != NULL)
return 1; return 1;
...@@ -1980,6 +1982,21 @@ static void read_symbols(const char *modname) ...@@ -1980,6 +1982,21 @@ static void read_symbols(const char *modname)
handle_modversions(mod, &info, sym, symname); handle_modversions(mod, &info, sym, symname);
handle_moddevtable(mod, &info, sym, symname); handle_moddevtable(mod, &info, sym, symname);
} }
// check for static EXPORT_SYMBOL_* functions && global vars
for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
unsigned char bind = ELF_ST_BIND(sym->st_info);
if (bind == STB_GLOBAL || bind == STB_WEAK) {
struct symbol *s =
find_symbol(remove_dot(info.strtab +
sym->st_name));
if (s)
s->is_static = 0;
}
}
if (!is_vmlinux(modname) || vmlinux_section_warnings) if (!is_vmlinux(modname) || vmlinux_section_warnings)
check_sec_ref(mod, modname, &info); check_sec_ref(mod, modname, &info);
...@@ -2159,7 +2176,7 @@ static void add_header(struct buffer *b, struct module *mod) ...@@ -2159,7 +2176,7 @@ static void add_header(struct buffer *b, struct module *mod)
buf_printf(b, "MODULE_INFO(name, KBUILD_MODNAME);\n"); buf_printf(b, "MODULE_INFO(name, KBUILD_MODNAME);\n");
buf_printf(b, "\n"); buf_printf(b, "\n");
buf_printf(b, "__visible struct module __this_module\n"); buf_printf(b, "__visible struct module __this_module\n");
buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n"); buf_printf(b, "__section(.gnu.linkonce.this_module) = {\n");
buf_printf(b, "\t.name = KBUILD_MODNAME,\n"); buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
if (mod->has_init) if (mod->has_init)
buf_printf(b, "\t.init = init_module,\n"); buf_printf(b, "\t.init = init_module,\n");
...@@ -2213,8 +2230,7 @@ static int add_versions(struct buffer *b, struct module *mod) ...@@ -2213,8 +2230,7 @@ static int add_versions(struct buffer *b, struct module *mod)
buf_printf(b, "\n"); buf_printf(b, "\n");
buf_printf(b, "static const struct modversion_info ____versions[]\n"); buf_printf(b, "static const struct modversion_info ____versions[]\n");
buf_printf(b, "__used\n"); buf_printf(b, "__used __section(__versions) = {\n");
buf_printf(b, "__attribute__((section(\"__versions\"))) = {\n");
for (s = mod->unres; s; s = s->next) { for (s = mod->unres; s; s = s->next) {
if (!s->module) if (!s->module)
...@@ -2250,10 +2266,7 @@ static void add_depends(struct buffer *b, struct module *mod) ...@@ -2250,10 +2266,7 @@ static void add_depends(struct buffer *b, struct module *mod)
s->module->seen = is_vmlinux(s->module->name); s->module->seen = is_vmlinux(s->module->name);
buf_printf(b, "\n"); buf_printf(b, "\n");
buf_printf(b, "static const char __module_depends[]\n"); buf_printf(b, "MODULE_INFO(depends, \"");
buf_printf(b, "__used\n");
buf_printf(b, "__attribute__((section(\".modinfo\"))) =\n");
buf_printf(b, "\"depends=");
for (s = mod->unres; s; s = s->next) { for (s = mod->unres; s; s = s->next) {
const char *p; const char *p;
if (!s->module) if (!s->module)
...@@ -2271,7 +2284,7 @@ static void add_depends(struct buffer *b, struct module *mod) ...@@ -2271,7 +2284,7 @@ static void add_depends(struct buffer *b, struct module *mod)
buf_printf(b, "%s%s", first ? "" : ",", p); buf_printf(b, "%s%s", first ? "" : ",", p);
first = 0; first = 0;
} }
buf_printf(b, "\";\n"); buf_printf(b, "\");\n");
} }
static void add_srcversion(struct buffer *b, struct module *mod) static void add_srcversion(struct buffer *b, struct module *mod)
...@@ -2369,6 +2382,7 @@ static void read_dump(const char *fname, unsigned int kernel) ...@@ -2369,6 +2382,7 @@ static void read_dump(const char *fname, unsigned int kernel)
s = sym_add_exported(symname, mod, export_no(export)); s = sym_add_exported(symname, mod, export_no(export));
s->kernel = kernel; s->kernel = kernel;
s->preloaded = 1; s->preloaded = 1;
s->is_static = 0;
sym_update_crc(symname, mod, crc, export_no(export)); sym_update_crc(symname, mod, crc, export_no(export));
} }
release_file(file, size); release_file(file, size);
...@@ -2425,6 +2439,7 @@ int main(int argc, char **argv) ...@@ -2425,6 +2439,7 @@ int main(int argc, char **argv)
char *dump_write = NULL, *files_source = NULL; char *dump_write = NULL, *files_source = NULL;
int opt; int opt;
int err; int err;
int n;
struct ext_sym_list *extsym_iter; struct ext_sym_list *extsym_iter;
struct ext_sym_list *extsym_start = NULL; struct ext_sym_list *extsym_start = NULL;
...@@ -2520,6 +2535,19 @@ int main(int argc, char **argv) ...@@ -2520,6 +2535,19 @@ int main(int argc, char **argv)
if (sec_mismatch_count && sec_mismatch_fatal) if (sec_mismatch_count && sec_mismatch_fatal)
fatal("modpost: Section mismatches detected.\n" fatal("modpost: Section mismatches detected.\n"
"Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n"); "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
for (n = 0; n < SYMBOL_HASH_SIZE; n++) {
struct symbol *s = symbolhash[n];
while (s) {
if (s->is_static)
warn("\"%s\" [%s] is a static %s\n",
s->name, s->module->name,
export_str(s->export));
s = s->next;
}
}
free(buf.p); free(buf.p);
return err; return err;
......
...@@ -115,6 +115,4 @@ header-test-y += $(filter-out $(header-test-), \ ...@@ -115,6 +115,4 @@ header-test-y += $(filter-out $(header-test-), \
$(patsubst $(obj)/%,%, $(wildcard \ $(patsubst $(obj)/%,%, $(wildcard \
$(addprefix $(obj)/, *.h */*.h */*/*.h */*/*/*.h)))) $(addprefix $(obj)/, *.h */*.h */*/*.h */*/*/*.h))))
# For GNU Make <= 4.2.1, $(wildcard $(obj)/*/) matches to not only directories clean-files += $(filter-out Makefile, $(notdir $(wildcard $(obj)/*)))
# but also regular files. Use $(filter %/, ...) just in case.
clean-dirs += $(patsubst $(obj)/%/,%,$(filter %/, $(wildcard $(obj)/*/)))
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment