Skip to content

Commit 93863f3

Browse files
jpoimboePeter Zijlstra
authored andcommitted
kbuild: Check for functions with ambiguous -ffunction-sections section names
Commit 9c7dc1d ("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
1 parent 3186333 commit 93863f3

3 files changed

Lines changed: 30 additions & 1 deletion

File tree

include/asm-generic/vmlinux.lds.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@
110110
* .text.startup could be __attribute__((constructor)) code in a *non*
111111
* ffunction-sections object, which should be placed in .init.text; or it could
112112
* be an actual function named startup() in an ffunction-sections object, which
113-
* should be placed in .text. Objtool will detect and complain about any such
113+
* should be placed in .text. The build will detect and complain about any such
114114
* ambiguously named functions.
115115
*/
116116
#define TEXT_MAIN \

scripts/Makefile.vmlinux_o

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,15 @@ quiet_cmd_ld_vmlinux.o = LD $@
6363
--start-group $(KBUILD_VMLINUX_LIBS) --end-group \
6464
$(cmd_objtool)
6565

66+
cmd_check_function_names = $(srctree)/scripts/check-function-names.sh $@
67+
6668
define rule_ld_vmlinux.o
6769
$(call cmd_and_savecmd,ld_vmlinux.o)
6870
$(call cmd,gen_objtooldep)
71+
$(call cmd,check_function_names)
6972
endef
7073

74+
7175
vmlinux.o: $(initcalls-lds) vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
7276
$(call if_changed_rule,ld_vmlinux.o)
7377

scripts/check-function-names.sh

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/bin/sh
2+
# SPDX-License-Identifier: GPL-2.0
3+
#
4+
# Certain function names are disallowed due to section name ambiguities
5+
# introduced by -ffunction-sections.
6+
#
7+
# See the comment above TEXT_MAIN in include/asm-generic/vmlinux.lds.h.
8+
9+
objfile="$1"
10+
11+
if [ ! -f "$objfile" ]; then
12+
echo "usage: $0 <file.o>" >&2
13+
exit 1
14+
fi
15+
16+
bad_symbols=$(nm "$objfile" | awk '$2 ~ /^[TtWw]$/ {print $3}' | grep -E '^(startup|exit|split|unlikely|hot|unknown)(\.|$)')
17+
18+
if [ -n "$bad_symbols" ]; then
19+
echo "$bad_symbols" | while read -r sym; do
20+
echo "$objfile: error: $sym() function name creates ambiguity with -ffunction-sections" >&2
21+
done
22+
exit 1
23+
fi
24+
25+
exit 0

0 commit comments

Comments
 (0)