mirror of https://github.com/torvalds/linux.git
kbuild: Check for functions with ambiguous -ffunction-sections section names
Commit 9c7dc1dd89 ("objtool: Warn on functions with ambiguous
-ffunction-sections section names") only works for drivers which are
compiled on architectures supported by objtool.
Make a script to perform the same check for all architectures.
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://patch.msgid.link/a6a49644a34964f7e02f3a8ce43af03e72817180.1763669451.git.jpoimboe@kernel.org
This commit is contained in:
parent
3186333713
commit
93863f3f85
|
|
@ -110,7 +110,7 @@
|
||||||
* .text.startup could be __attribute__((constructor)) code in a *non*
|
* .text.startup could be __attribute__((constructor)) code in a *non*
|
||||||
* ffunction-sections object, which should be placed in .init.text; or it could
|
* ffunction-sections object, which should be placed in .init.text; or it could
|
||||||
* be an actual function named startup() in an ffunction-sections object, which
|
* be an actual function named startup() in an ffunction-sections object, which
|
||||||
* should be placed in .text. Objtool will detect and complain about any such
|
* should be placed in .text. The build will detect and complain about any such
|
||||||
* ambiguously named functions.
|
* ambiguously named functions.
|
||||||
*/
|
*/
|
||||||
#define TEXT_MAIN \
|
#define TEXT_MAIN \
|
||||||
|
|
|
||||||
|
|
@ -63,11 +63,15 @@ quiet_cmd_ld_vmlinux.o = LD $@
|
||||||
--start-group $(KBUILD_VMLINUX_LIBS) --end-group \
|
--start-group $(KBUILD_VMLINUX_LIBS) --end-group \
|
||||||
$(cmd_objtool)
|
$(cmd_objtool)
|
||||||
|
|
||||||
|
cmd_check_function_names = $(srctree)/scripts/check-function-names.sh $@
|
||||||
|
|
||||||
define rule_ld_vmlinux.o
|
define rule_ld_vmlinux.o
|
||||||
$(call cmd_and_savecmd,ld_vmlinux.o)
|
$(call cmd_and_savecmd,ld_vmlinux.o)
|
||||||
$(call cmd,gen_objtooldep)
|
$(call cmd,gen_objtooldep)
|
||||||
|
$(call cmd,check_function_names)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
||||||
vmlinux.o: $(initcalls-lds) vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
|
vmlinux.o: $(initcalls-lds) vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
|
||||||
$(call if_changed_rule,ld_vmlinux.o)
|
$(call if_changed_rule,ld_vmlinux.o)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
#
|
||||||
|
# Certain function names are disallowed due to section name ambiguities
|
||||||
|
# introduced by -ffunction-sections.
|
||||||
|
#
|
||||||
|
# See the comment above TEXT_MAIN in include/asm-generic/vmlinux.lds.h.
|
||||||
|
|
||||||
|
objfile="$1"
|
||||||
|
|
||||||
|
if [ ! -f "$objfile" ]; then
|
||||||
|
echo "usage: $0 <file.o>" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
bad_symbols=$(nm "$objfile" | awk '$2 ~ /^[TtWw]$/ {print $3}' | grep -E '^(startup|exit|split|unlikely|hot|unknown)(\.|$)')
|
||||||
|
|
||||||
|
if [ -n "$bad_symbols" ]; then
|
||||||
|
echo "$bad_symbols" | while read -r sym; do
|
||||||
|
echo "$objfile: error: $sym() function name creates ambiguity with -ffunction-sections" >&2
|
||||||
|
done
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
Loading…
Reference in New Issue