All of lore.kernel.org
 help / color / mirror / Atom feed
From: Song Liu <song@kernel.org>
To: live-patching@vger.kernel.org
Cc: jpoimboe@kernel.org, peterz@infradead.org, jikos@kernel.org,
	mbenes@suse.cz, pmladek@suse.com, joe.lawrence@redhat.com,
	puranjay@kernel.org, kernel-team@meta.com,
	Song Liu <song@kernel.org>
Subject: [PATCH v5 03/58] objtool/klp: Group the klp tests by architecture
Date: Wed, 16 Sep 2026 11:42:56 -0700	[thread overview]
Message-ID: <20260916184351.2720310-4-song@kernel.org> (raw)
In-Reply-To: <20260916184351.2720310-1-song@kernel.org>

Which architecture a test is for is expressed by where it lives: tests are
in generic/ or in a directory named for their architecture, each carrying
its own fixtures, and the runner executes generic/ plus the one that
matches.  A test which cannot apply here is then not run at all, rather
than running in order to announce that it did not.

Layout does this better than a declaration would.  There is no x86_only(),
and no lookup letting a fixtures/<arch>/ file shadow a generic one of the
same name -- an arch-specific test simply carries its own fixtures.

Compilers cannot work the same way: CI varies CC over the same tree, so a
compiler requirement stays a declaration in the test.

What a run leaves out is reported once:

  # not run: 5 tests in x86/ (this run is arm64)

Silence would have been cheaper and wrong.  A run covering less than the
tree holds must not look like a run that covered all of it.

Assisted-by: Claude:claude-opus-5
Signed-off-by: Song Liu <song@kernel.org>
---
 .../tests/{ => generic}/fixtures/basic.c      |  0
 .../objtool/tests/{ => generic}/test-basic.sh |  2 +-
 tools/objtool/tests/lib.sh                    | 27 ++++++++++++--
 tools/objtool/tests/run-tests.sh              | 36 ++++++++++++++++---
 4 files changed, 56 insertions(+), 9 deletions(-)
 rename tools/objtool/tests/{ => generic}/fixtures/basic.c (100%)
 rename tools/objtool/tests/{ => generic}/test-basic.sh (91%)

diff --git a/tools/objtool/tests/fixtures/basic.c b/tools/objtool/tests/generic/fixtures/basic.c
similarity index 100%
rename from tools/objtool/tests/fixtures/basic.c
rename to tools/objtool/tests/generic/fixtures/basic.c
diff --git a/tools/objtool/tests/test-basic.sh b/tools/objtool/tests/generic/test-basic.sh
similarity index 91%
rename from tools/objtool/tests/test-basic.sh
rename to tools/objtool/tests/generic/test-basic.sh
index 6b769962399a..562edfbc8646 100755
--- a/tools/objtool/tests/test-basic.sh
+++ b/tools/objtool/tests/generic/test-basic.sh
@@ -3,7 +3,7 @@
 #
 # Only functions whose code changed get cloned into the patch.
 
-. "$(dirname "$0")/lib.sh"
+. "$(dirname "$0")/../lib.sh"
 
 setup
 build_pair basic.c
diff --git a/tools/objtool/tests/lib.sh b/tools/objtool/tests/lib.sh
index 46bdb985765e..fdea9b790c4d 100644
--- a/tools/objtool/tests/lib.sh
+++ b/tools/objtool/tests/lib.sh
@@ -9,7 +9,10 @@
 # of regressions.
 
 TESTS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-FIXTURES_DIR="$TESTS_DIR/fixtures"
+
+# Tests live in generic/ or in an architecture directory beside it, and each
+# carries its own fixtures.
+FIXTURES_DIR="$(cd "$(dirname "$0")/fixtures" 2>/dev/null && pwd)"
 
 # The kernel's convention: CROSS_COMPILE is the one knob, with per-tool
 # overrides for what it does not cover.  objtool itself is always a host binary
@@ -36,7 +39,7 @@ OBJTOOL="${OBJTOOL:-$TESTS_DIR/../objtool}"
 #
 klp_preflight()
 {
-	local tmp tool cc_version host cc_arch
+	local tmp tool cc_version arch host cc_arch
 
 	bail() { echo "Bail out! $*" >&2; exit 1; }
 
@@ -96,8 +99,26 @@ klp_preflight()
 	esac
 	rm -rf "$tmp"
 
+	# Normalize to the kernel's SRCARCH.
+	case "${ARCH:-$(uname -m)}" in
+	x86_64|i?86)	arch=x86 ;;
+	aarch64*)	arch=arm64 ;;
+	*)		arch="${ARCH:-$(uname -m)}" ;;
+	esac
+
+	case "$(uname -m)" in
+	x86_64|i?86)	host=x86 ;;
+	aarch64*)	host=arm64 ;;
+	*)		host="$(uname -m)" ;;
+	esac
+
+	[ -z "$cc_arch" ] || [ "$cc_arch" = "$arch" ] ||
+		bail "ARCH says $arch but '$CC' builds $cc_arch objects;" \
+		     "the $arch tests would run against the wrong architecture"
+
+	KLP_TEST_ARCH="$arch"
 	KLP_TEST_PREFLIGHT=done
-	export OBJTOOL CC KLP_TEST_PREFLIGHT
+	export OBJTOOL CC KLP_TEST_ARCH KLP_TEST_PREFLIGHT
 
 	cc_version="$($CC --version 2>/dev/null | head -1)"
 	cat <<EOF
diff --git a/tools/objtool/tests/run-tests.sh b/tools/objtool/tests/run-tests.sh
index f6a3e1b7677e..48728a98d995 100755
--- a/tools/objtool/tests/run-tests.sh
+++ b/tools/objtool/tests/run-tests.sh
@@ -3,6 +3,11 @@
 #
 # Run the objtool klp tests.  Each test-*.sh prints one TAP result line.
 #
+# Tests live in generic/ and in a directory per architecture.  A run executes
+# generic/ plus the one matching this architecture, so a test which cannot
+# apply here is not run rather than reporting a skip; what was left out is
+# reported once, as a comment, so differing coverage is still visible.
+#
 # The harness checks the environment once up front and fails the run if the
 # suite cannot execute, rather than letting every test skip and exit 0.
 
@@ -10,13 +15,34 @@ set -u
 
 cd "$(dirname "$0")" || exit 1
 
-tests=( test-*.sh )
-[ "${tests[0]}" = "test-*.sh" ] && { echo "1..0 # SKIP no tests found"; exit 0; }
-
-# Sourcing the harness runs its preflight, and exports what it found so the
-# tests inherit it rather than working it out again.
+# Sourcing the harness runs its preflight, which decides which architecture
+# this run is for -- so the test list cannot be built before it has, and the
+# tests inherit the answers rather than working them out again.
 . ./lib.sh
 
+dirs=( generic )
+[ -d "$KLP_TEST_ARCH" ] && dirs+=( "$KLP_TEST_ARCH" )
+
+tests=()
+for d in "${dirs[@]}"; do
+	for t in "$d"/test-*.sh; do
+		[ -f "$t" ] && tests+=( "$t" )
+	done
+done
+[ "${#tests[@]}" -gt 0 ] || { echo "1..0 # SKIP no tests found"; exit 0; }
+
+# Tests for another architecture are absent from this run entirely.  Say how
+# many, so a run which covers less than the tree holds does not look like one
+# that covers all of it.
+for d in */; do
+	d="${d%/}"
+	case "$d" in generic|"$KLP_TEST_ARCH") continue ;; esac
+	n=$(ls "$d"/test-*.sh 2>/dev/null | wc -l)
+	[ "$n" -gt 0 ] || continue
+	echo "# not run: $n test$( [ "$n" = 1 ] || echo s ) in $d/" \
+	     "(this run is $KLP_TEST_ARCH)"
+done
+
 echo "1..${#tests[@]}"
 
 rc=0
-- 
2.53.0-Meta


  parent reply	other threads:[~2026-09-16 18:44 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-16 18:42 [PATCH v5 00/58] Unit test framework for klp-build toolchain Song Liu
2026-09-16 18:42 ` [PATCH v5 01/58] objtool: Add test harness for the klp subcommands Song Liu
2026-09-16 18:42 ` [PATCH v5 02/58] objtool/klp: Check the klp test environment once, before any test Song Liu
2026-09-16 18:42 ` Song Liu [this message]
2026-09-16 18:42 ` [PATCH v5 04/58] objtool/klp: Classify klp test outcomes Song Liu
2026-09-16 18:42 ` [PATCH v5 05/58] objtool/klp: Build klp test fixtures through the harness Song Liu
2026-09-16 18:42 ` [PATCH v5 06/58] objtool/klp: Grow the klp test harness vocabulary Song Liu
2026-09-16 18:43 ` [PATCH v5 07/58] objtool/klp: Give each run one working directory, one per test inside it Song Liu
2026-09-16 18:43 ` [PATCH v5 08/58] objtool/klp: Run the klp tests under set -u Song Liu
2026-09-16 18:43 ` [PATCH v5 09/58] objtool/klp: Document the klp test harness Song Liu
2026-09-16 18:43 ` [PATCH v5 10/58] objtool: Keep failing test workdirs by default Song Liu
2026-09-16 18:43 ` [PATCH v5 11/58] objtool: Forward toolchain variables to the klp test runner Song Liu
2026-09-16 18:43 ` [PATCH v5 12/58] objtool/klp: Add test for rejecting changed data Song Liu
2026-09-16 18:43 ` [PATCH v5 13/58] objtool/klp: Add test for newly introduced data Song Liu
2026-09-16 18:43 ` [PATCH v5 14/58] objtool/klp: Add test for newly introduced functions Song Liu
2026-09-16 18:43 ` [PATCH v5 15/58] objtool/klp: Add test for static local correlation Song Liu
2026-09-16 18:43 ` [PATCH v5 16/58] objtool/klp: Add test for cold function halves Song Liu
2026-09-16 18:43 ` [PATCH v5 17/58] objtool/klp: Add test for special section extraction Song Liu
2026-09-16 18:43 ` [PATCH v5 18/58] objtool/klp: Add test for selective " Song Liu
2026-09-16 18:43 ` [PATCH v5 19/58] objtool/klp: Add test for jump table key relocations Song Liu
2026-09-16 18:43 ` [PATCH v5 20/58] objtool/klp: Add test for rejecting module-owned static branch keys Song Liu
2026-09-16 18:43 ` [PATCH v5 21/58] objtool/klp: Add test for rejecting module-owned static call keys Song Liu
2026-09-16 18:43 ` [PATCH v5 22/58] objtool/klp: Add test for symids in discarded sections Song Liu
2026-09-16 18:43 ` [PATCH v5 23/58] objtool/klp: Add test for rejecting references to init code/data Song Liu
2026-09-16 18:43 ` [PATCH v5 24/58] objtool/klp: Add test for correlation across ThinLTO name mangling Song Liu
2026-09-16 18:43 ` [PATCH v5 25/58] objtool/klp: Add test for objects without .modinfo Song Liu
2026-09-16 18:43 ` [PATCH v5 26/58] objtool/klp: Add test for unchecksummed input Song Liu
2026-09-16 18:43 ` [PATCH v5 27/58] objtool/klp: Add klp diff and post-link regression tests Song Liu
2026-09-16 18:43 ` [PATCH v5 28/58] objtool/klp: Add test for klp reloc section naming in module objects Song Liu
2026-09-16 18:43 ` [PATCH v5 29/58] objtool/klp: Add test for vmlinux relocs in a patched module Song Liu
2026-09-16 18:43 ` [PATCH v5 30/58] objtool/klp: Add test for Module.symvers path normalization Song Liu
2026-09-16 18:43 ` [PATCH v5 31/58] objtool/klp: Add test for the contents of the klp_funcs list Song Liu
2026-09-16 18:43 ` [PATCH v5 32/58] objtool/klp: Add test for EXPORT_SYMBOL_FOR_MODULES references Song Liu
2026-09-16 18:43 ` [PATCH v5 33/58] objtool/klp: Add test for new references to exported symbols Song Liu
2026-09-16 18:43 ` [PATCH v5 34/58] objtool/klp: Add test for empty x86 alternative replacements Song Liu
2026-09-16 18:43 ` [PATCH v5 35/58] objtool/klp: Add test for recorded checksum values Song Liu
2026-09-16 18:43 ` [PATCH v5 36/58] objtool/klp: Add test for position-independent checksums Song Liu
2026-09-16 19:01   ` sashiko-bot
2026-09-16 21:43     ` Song Liu
2026-09-17  0:22       ` Josh Poimboeuf
2026-09-16 18:43 ` [PATCH v5 37/58] objtool/klp: Add test for sympos in module objects Song Liu
2026-09-16 18:43 ` [PATCH v5 38/58] objtool/klp: Add test for sympos resolved against a linked vmlinux Song Liu
2026-09-16 18:43 ` [PATCH v5 39/58] objtool/klp: Add test for static locals which must not be correlated Song Liu
2026-09-16 18:43 ` [PATCH v5 40/58] objtool/klp: Add test for __bug_table, __ex_table and __mcount_loc extraction Song Liu
2026-09-16 18:43 ` [PATCH v5 41/58] objtool/klp: Add test for kCFI prefix symbols and traps Song Liu
2026-09-16 18:43 ` [PATCH v5 42/58] objtool/klp: Add test for symbols whose linkage the patch changes Song Liu
2026-09-16 18:43 ` [PATCH v5 43/58] objtool/klp: Test rejection of a file-local static branch key Song Liu
2026-09-16 19:00   ` sashiko-bot
2026-09-16 21:39     ` Song Liu
2026-09-16 18:43 ` [PATCH v5 44/58] objtool/klp: Test a hand-built livepatch module's static call keys Song Liu
2026-09-16 18:43 ` [PATCH v5 45/58] objtool/klp: Test text annotations on alternative replacements Song Liu
2026-09-16 18:43 ` [PATCH v5 46/58] objtool/klp: Add test for data object checksums Song Liu
2026-09-16 18:43 ` [PATCH v5 47/58] objtool/klp: Add test for symbols with no checksum entry of their own Song Liu
2026-09-16 18:43 ` [PATCH v5 48/58] objtool/klp: Add test for a static branch introduced by the patch Song Liu
2026-09-16 18:43 ` [PATCH v5 49/58] objtool/klp: Add test for tracepoint and pr_debug static branch keys Song Liu
2026-09-16 18:43 ` [PATCH v5 50/58] objtool/klp: Add test for a static call introduced by the patch Song Liu
2026-09-16 18:43 ` [PATCH v5 51/58] objtool/klp: Add test for instruction operand checksums Song Liu
2026-09-16 18:43 ` [PATCH v5 52/58] objtool/klp: Add test for alternative replacement code in checksums Song Liu
2026-09-16 18:43 ` [PATCH v5 53/58] objtool/klp: Add test for the alignment of cloned data sections Song Liu
2026-09-16 18:43 ` [PATCH v5 54/58] objtool/klp: Add test for a patch which strips a data annotation Song Liu
2026-09-16 18:43 ` [PATCH v5 55/58] objtool/klp: Add test for absolute and __ADDRESSABLE symbols Song Liu
2026-09-16 18:43 ` [PATCH v5 56/58] objtool/klp: Add test for UBSAN metadata in an unchanged function Song Liu
2026-09-16 18:43 ` [PATCH v5 57/58] objtool/klp: Add test for Clang switch jump tables Song Liu
2026-09-16 18:43 ` [PATCH v5 58/58] objtool/klp: Add test for ThinLTO symbols sharing a demangled name Song Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260916184351.2720310-4-song@kernel.org \
    --to=song@kernel.org \
    --cc=jikos@kernel.org \
    --cc=joe.lawrence@redhat.com \
    --cc=jpoimboe@kernel.org \
    --cc=kernel-team@meta.com \
    --cc=live-patching@vger.kernel.org \
    --cc=mbenes@suse.cz \
    --cc=peterz@infradead.org \
    --cc=pmladek@suse.com \
    --cc=puranjay@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.