objtool: Forward toolchain variables to the klp test runner

The tests target already passes ARCH and CROSS_COMPILE into
run-tests.sh.  lib.sh uses those to pick a default compiler and
binutils:

  CC=${CC:-${CROSS_COMPILE}gcc}
  LD=${LD:-${CROSS_COMPILE}ld}
  READELF=${READELF:-${CROSS_COMPILE}readelf}
  OBJCOPY=${OBJCOPY:-${CROSS_COMPILE}objcopy}

Those defaults only apply when the variables reach the shell that sources
lib.sh.  The recipe passed OBJTOOL, ARCH and CROSS_COMPILE explicitly, but
not CC or the binutils.  Makefile-assigned values (e.g. from LLVM=1) are
not visible in the recipe environment unless forwarded:

  $ LLVM=1 make -C tools/objtool tests
  ...
  # preflight
  #   compiler  gcc (GCC) ...

Pass CC, LD, READELF and OBJCOPY the same way as ARCH and CROSS_COMPILE,
so fixtures are built and inspected with the toolchain make selected:

  $ LLVM=1 make -C tools/objtool tests
  ...
  # preflight
  #   compiler  clang version 21.1.8 ...

Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
Signed-off-by: Song Liu <song@kernel.org>
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Assisted-by: Claude:claude-opus-5
Link: https://patch.msgid.link/20260916184351.2720310-12-song@kernel.org
This commit is contained in:
Joe Lawrence 2026-09-16 11:43:04 -07:00 committed by Ingo Molnar
parent 9b11acaad1
commit 913bf39ff4
2 changed files with 20 additions and 1 deletions

View File

@ -243,7 +243,17 @@ setting a cross compiler cannot produce one the host is unable to run. ARCH
selects both the objtool target and the directory of tests to run.
clang needs telling, since it defaults to the host triple however it is
invoked. The fixtures include no kernel headers, so no sysroot is needed:
invoked. LLVM=1 with CROSS_COMPILE does that for you -- the --target= it
derives is forwarded to the tests -- and the fixtures include no kernel
headers, so no sysroot is needed:
::
ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- LLVM=1 \
make -C tools/objtool tests
Naming the compiler by hand works too, and is what to reach for when the
target triple is not the one CROSS_COMPILE implies:
::

View File

@ -153,8 +153,17 @@ clean: $(LIBSUBCMD)-clean
mrproper: clean
$(call QUIET_CLEAN, objtool) $(RM) $(OBJTOOL)
# The kernel's own Makefile sets OBJCOPY, to llvm-objcopy under LLVM and to
# $(CROSS_COMPILE)objcopy otherwise; tools/scripts/Makefile.include names only
# LLVM_OBJCOPY and leaves OBJCOPY unset. Forwarding it unset would hand the
# tests an empty string, and they would fall back to GNU objcopy even when
# asked for an LLVM toolchain.
OBJCOPY ?= $(if $(LLVM),$(LLVM_OBJCOPY),$(CROSS_COMPILE)objcopy)
tests: $(OBJTOOL)
$(Q)OBJTOOL=$(abspath $(OBJTOOL)) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) \
CC='$(CC) $(CLANG_CROSS_FLAGS)' LD='$(LD)' \
READELF='$(READELF)' OBJCOPY='$(OBJCOPY)' \
KEEP=$(KEEP) $(srctree)/tools/objtool/tests/run-tests.sh
FORCE: