mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
kbuild: Add gendwarfksyms as an alternative to genksyms
When MODVERSIONS is enabled, allow selecting gendwarfksyms as the implementation, but default to genksyms. Signed-off-by: Sami Tolvanen <samitolvanen@google.com> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
This commit is contained in:
committed by
Masahiro Yamada
parent
d7476f24c9
commit
9c3681f9b9
@@ -107,13 +107,24 @@ cmd_cpp_i_c = $(CPP) $(c_flags) -o $@ $<
|
||||
$(obj)/%.i: $(obj)/%.c FORCE
|
||||
$(call if_changed_dep,cpp_i_c)
|
||||
|
||||
getexportsymbols = $(NM) $@ | sed -n 's/.* __export_symbol_\(.*\)/$(1)/p'
|
||||
|
||||
gendwarfksyms = $(objtree)/scripts/gendwarfksyms/gendwarfksyms \
|
||||
$(if $(KBUILD_SYMTYPES), --symtypes $(@:.o=.symtypes)) \
|
||||
$(if $(KBUILD_GENDWARFKSYMS_STABLE), --stable)
|
||||
|
||||
genksyms = $(objtree)/scripts/genksyms/genksyms \
|
||||
$(if $(KBUILD_SYMTYPES), -T $(@:.o=.symtypes)) \
|
||||
$(if $(KBUILD_PRESERVE), -p) \
|
||||
$(addprefix -r , $(wildcard $(@:.o=.symref)))
|
||||
|
||||
# These mirror gensymtypes_S and co below, keep them in synch.
|
||||
ifdef CONFIG_GENDWARFKSYMS
|
||||
cmd_gensymtypes_c = $(if $(skip_gendwarfksyms),, \
|
||||
$(call getexportsymbols,\1) | $(gendwarfksyms) $@)
|
||||
else
|
||||
cmd_gensymtypes_c = $(CPP) -D__GENKSYMS__ $(c_flags) $< | $(genksyms)
|
||||
endif # CONFIG_GENDWARFKSYMS
|
||||
|
||||
# LLVM assembly
|
||||
# Generate .ll files from .c
|
||||
@@ -286,14 +297,26 @@ $(obj)/%.rs: $(obj)/%.rs.S FORCE
|
||||
# This is convoluted. The .S file must first be preprocessed to run guards and
|
||||
# expand names, then the resulting exports must be constructed into plain
|
||||
# EXPORT_SYMBOL(symbol); to build our dummy C file, and that gets preprocessed
|
||||
# to make the genksyms input.
|
||||
# to make the genksyms input or compiled into an object for gendwarfksyms.
|
||||
#
|
||||
# These mirror gensymtypes_c and co above, keep them in synch.
|
||||
cmd_gensymtypes_S = \
|
||||
{ echo "\#include <linux/kernel.h>" ; \
|
||||
echo "\#include <asm/asm-prototypes.h>" ; \
|
||||
$(NM) $@ | sed -n 's/.* __export_symbol_\(.*\)/EXPORT_SYMBOL(\1);/p' ; } | \
|
||||
$(CPP) -D__GENKSYMS__ $(c_flags) -xc - | $(genksyms)
|
||||
getasmexports = \
|
||||
{ echo "\#include <linux/kernel.h>" ; \
|
||||
echo "\#include <linux/string.h>" ; \
|
||||
echo "\#include <asm/asm-prototypes.h>" ; \
|
||||
$(call getexportsymbols,EXPORT_SYMBOL(\1);) ; }
|
||||
|
||||
ifdef CONFIG_GENDWARFKSYMS
|
||||
cmd_gensymtypes_S = \
|
||||
$(getasmexports) | \
|
||||
$(CC) $(c_flags) -c -o $(@:.o=.gendwarfksyms.o) -xc -; \
|
||||
$(call getexportsymbols,\1) | \
|
||||
$(gendwarfksyms) $(@:.o=.gendwarfksyms.o)
|
||||
else
|
||||
cmd_gensymtypes_S = \
|
||||
$(getasmexports) | \
|
||||
$(CPP) -D__GENKSYMS__ $(c_flags) -xc - | $(genksyms)
|
||||
endif # CONFIG_GENDWARFKSYMS
|
||||
|
||||
quiet_cmd_cpp_s_S = CPP $(quiet_modtag) $@
|
||||
cmd_cpp_s_S = $(CPP) $(a_flags) -o $@ $<
|
||||
|
||||
Reference in New Issue
Block a user