[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <176371906023.498.8183340055396440095.tip-bot2@tip-bot2>
Date: Fri, 21 Nov 2025 09:57:40 -0000
From: "tip-bot2 for Josh Poimboeuf" <tip-bot2@...utronix.de>
To: linux-tip-commits@...r.kernel.org
Cc: Josh Poimboeuf <jpoimboe@...nel.org>,
"Peter Zijlstra (Intel)" <peterz@...radead.org>,
"Greg Kroah-Hartman" <gregkh@...uxfoundation.org>, x86@...nel.org,
linux-kernel@...r.kernel.org
Subject: [tip: objtool/core] kbuild: Check for functions with ambiguous
-ffunction-sections section names
The following commit has been merged into the objtool/core branch of tip:
Commit-ID: 93863f3f859a626347ce2ec18947b11357b4ca14
Gitweb: https://git.kernel.org/tip/93863f3f859a626347ce2ec18947b11357b4ca14
Author: Josh Poimboeuf <jpoimboe@...nel.org>
AuthorDate: Thu, 20 Nov 2025 12:14:20 -08:00
Committer: Peter Zijlstra <peterz@...radead.org>
CommitterDate: Fri, 21 Nov 2025 10:04:10 +01:00
kbuild: Check for functions with ambiguous -ffunction-sections section names
Commit 9c7dc1dd897a ("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@...nel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@...radead.org>
Acked-by: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Link: https://patch.msgid.link/a6a49644a34964f7e02f3a8ce43af03e72817180.1763669451.git.jpoimboe@kernel.org
---
include/asm-generic/vmlinux.lds.h | 2 +-
scripts/Makefile.vmlinux_o | 4 ++++
scripts/check-function-names.sh | 25 +++++++++++++++++++++++++
3 files changed, 30 insertions(+), 1 deletion(-)
create mode 100755 scripts/check-function-names.sh
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 5efe1de..0cdae6f 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -110,7 +110,7 @@
* .text.startup could be __attribute__((constructor)) code in a *non*
* 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
- * 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.
*/
#define TEXT_MAIN \
diff --git a/scripts/Makefile.vmlinux_o b/scripts/Makefile.vmlinux_o
index 20533cc..527352c 100644
--- a/scripts/Makefile.vmlinux_o
+++ b/scripts/Makefile.vmlinux_o
@@ -63,11 +63,15 @@ quiet_cmd_ld_vmlinux.o = LD $@
--start-group $(KBUILD_VMLINUX_LIBS) --end-group \
$(cmd_objtool)
+cmd_check_function_names = $(srctree)/scripts/check-function-names.sh $@
+
define rule_ld_vmlinux.o
$(call cmd_and_savecmd,ld_vmlinux.o)
$(call cmd,gen_objtooldep)
+ $(call cmd,check_function_names)
endef
+
vmlinux.o: $(initcalls-lds) vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
$(call if_changed_rule,ld_vmlinux.o)
diff --git a/scripts/check-function-names.sh b/scripts/check-function-names.sh
new file mode 100755
index 0000000..4100425
--- /dev/null
+++ b/scripts/check-function-names.sh
@@ -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
Powered by blists - more mailing lists