modpost: generate vmlinux.symvers and reuse it for the second modpost
authorMasahiro Yamada <masahiroy@kernel.org>
Mon, 1 Jun 2020 05:57:11 +0000 (14:57 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Sat, 6 Jun 2020 14:38:12 +0000 (23:38 +0900)
The full build runs modpost twice, first for vmlinux.o and second for
modules.

The first pass dumps all the vmlinux symbols into Module.symvers, but
the second pass parses vmlinux again instead of reusing the dump file,
presumably because it needs to avoid accumulating stale symbols.

Loading symbol info from a dump file is faster than parsing an ELF object.
Besides, modpost deals with various issues to parse vmlinux in the second
pass.

A solution is to make the first pass dumps symbols into a separate file,
vmlinux.symvers. The second pass reads it, and parses module .o files.
The merged symbol information is dumped into Module.symvers in the same
way as before.

This makes further modpost cleanups possible.

Also, it fixes the problem of 'make vmlinux', which previously overwrote
Module.symvers, throwing away module symbols.

I slightly touched scripts/link-vmlinux.sh so that vmlinux is re-linked
when you cross this commit. Otherwise, vmlinux.symvers would not be
generated.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
.gitignore
Documentation/dontdiff
Makefile
scripts/Makefile.modpost
scripts/link-vmlinux.sh

index 2258e906f01c84f36c6cf5de2a3e76f2877b0cc0..87b9dd8a163b818bba39afd79b818da7e1a46339 100644 (file)
@@ -56,6 +56,7 @@ modules.order
 /linux
 /vmlinux
 /vmlinux.32
+/vmlinux.symvers
 /vmlinux-gdb.py
 /vmlinuz
 /System.map
index 72fc2e9e2b63cab27c98f0ffa8154374f3b9eb6b..ef9519c32c554ab3aa1edd6e729ed8347e19b604 100644 (file)
@@ -251,6 +251,7 @@ vmlinux-*
 vmlinux.aout
 vmlinux.bin.all
 vmlinux.lds
+vmlinux.symvers
 vmlinuz
 voffset.h
 vsyscall.lds
index b0bbf8453b66c9c9e268fdad8c34b50dc501a0ba..9768140f8d5ad3a2b7b87da4ddfd1876bda471a3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1416,7 +1416,7 @@ endif # CONFIG_MODULES
 # make distclean Remove editor backup files, patch leftover files and the like
 
 # Directories & files removed with 'make clean'
-CLEAN_FILES += include/ksym \
+CLEAN_FILES += include/ksym vmlinux.symvers \
               modules.builtin modules.builtin.modinfo modules.nsdeps
 
 # Directories & files removed with 'make mrproper'
index 79e850c8ce01cd6da1a2f37ba9756a8f75ad6199..896c799911c5fd54c384ace69187040d5132b56b 100644 (file)
@@ -55,10 +55,10 @@ ifdef MODPOST_VMLINUX
 quiet_cmd_modpost = MODPOST $@
       cmd_modpost = $(MODPOST) $<
 
-Module.symvers: vmlinux.o
+vmlinux.symvers: vmlinux.o
        $(call cmd,modpost)
 
-__modpost: Module.symvers
+__modpost: vmlinux.symvers
 
 else
 
@@ -66,7 +66,8 @@ MODPOST += -s \
        $(if $(KBUILD_NSDEPS),-d $(MODULES_NSDEPS))
 
 ifeq ($(KBUILD_EXTMOD),)
-MODPOST += $(wildcard vmlinux)
+
+input-symdump := vmlinux.symvers
 output-symdump := Module.symvers
 
 else
index d09ab4afbda4931a4aef8d34eb2f64bf3d8e9fd9..d5af6be50b5067dc501101871435a51b7d37c385 100755 (executable)
@@ -218,8 +218,6 @@ on_signals()
 }
 trap on_signals HUP INT QUIT TERM
 
-#
-#
 # Use "make V=1" to debug this script
 case "${KBUILD_VERBOSE}" in
 *1*)