Re: [PATCH v8 6/6] x86/vdso: Enable sframe generation in VDSO
flat view
From: Josh Poimboeuf <jpoimboe@kernel.org>
Date: 2026-02-10 18:50:36
Also in:
bpf, linux-mm, lkml
Subsystem:
kernel build + files below scripts/ (unless maintained elsewhere), objtool, the rest · Maintainers:
Nathan Chancellor, Nicolas Schier, Josh Poimboeuf, Peter Zijlstra, Linus Torvalds
On Tue, Feb 10, 2026 at 05:46:33PM +0100, Jens Remus wrote:
On 2/6/2026 8:36 PM, Jens Remus wrote:quoted
From: Josh Poimboeuf <jpoimboe@kernel.org> Enable sframe generation in the VDSO library so kernel and user space can unwind through it. SFrame isn't supported for x32 or x86-32. Discard .sframe sections for those VDSOs. [ Jens Remus: Add support for SFrame V3. Prevent GNU_SFRAME program table entry to empty .sframe section. ] Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> Signed-off-by: Jens Remus <redacted>quoted
diff --git a/arch/Kconfig b/arch/Kconfigquoted
@@ -479,6 +479,13 @@ config HAVE_HARDLOCKUP_DETECTOR_ARCH It uses the same command line parameters, and sysctl interface, as the generic hardlockup detectors. +config AS_SFRAME + bool + +config AS_SFRAME3 + def_bool $(as-instr,.cfi_startproc\n.cfi_endproc,-Wa$(comma)--gsframe-3)Above tests whether the assembler supports --gsframe-3 to generate .sframe in SFrame V3 format. GNU assembler only supports to generate SFrame for x86-64. If the assembler is built for i386 (x86-32) the test will fail unless option --64 is specified. I wonder whether that could happen in (the rather hypothetical?) case, when the kernel is cross built for x86-64 on i386? Should this therefore be changed to the following? config AS_SFRAME_64 def_bool $(as-instr,.cfi_startproc\n.cfi_endproc,$(m64-flag) -Wa$(comma)--gsframe) An alternative would be to enable as-instr64 to accept an optional flag operand, similar to as-instr, and use as-instr64 instead of as-instr. Or is this not required, as in a cross build for 64-bit on a 32-bit platform (or inverse) a respective cross toolchain is a prerequisite and the m64-flag (or m32-flag) is not used? I tried to simulate this using docker and an i386 image and then using the i386 tool in the container to switch "uname -m" to "i686". But both of my following attempts to build for x86-64 on i386 fail with fixdep not found: $ docker run -it --rm -v "$HOME/linux:$HOME/linux" --platform i386 public.ecr.aws/docker/library/debian:13.3 # sed -i -s 's/^Types: deb/& deb-src/' /etc/apt/sources.list.d/debian.sources # apt update # apt -y build-dep linux # make mrproper # i386 make ARCH=x86_64 defconfig # i386 make ARCH=x86_64 arch/x86/entry/vdso/ # make mrproper # apt -y install gcc-x86-64-linux-gnu # i386 make ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- defconfig # i386 make ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- arch/x86/entry/vdso/
Hm, I think I broke that with
a808a2b35f66 ("tools build: Fix fixdep dependencies")
... though it's been broken almost a year, maybe nobody cares.
Regardless, we do need to fix "make clean" and "make mrproper" for
objtool, which would be something like so:
diff --git a/Makefile b/Makefile
index d3a8482bdbd0..ed850044491d 100644
--- a/Makefile
+++ b/Makefile@@ -1474,6 +1474,15 @@ ifneq ($(wildcard $(resolve_btfids_O)),) $(Q)$(MAKE) -sC $(srctree)/tools/bpf/resolve_btfids O=$(resolve_btfids_O) clean endif +PHONY += objtool_clean + +objtool_O = $(abspath $(objtree))/tools/objtool + +objtool_clean: +ifneq ($(wildcard $(objtool_O)),) + $(Q)$(MAKE) -sC $(abs_srctree)/tools/objtool O=$(objtool_O) srctree=$(abs_srctree) clean +endif + tools/: FORCE $(Q)mkdir -p $(objtree)/tools $(Q)$(MAKE) O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/
@@ -1637,7 +1646,7 @@ vmlinuxclean: $(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean $(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean) -clean: archclean vmlinuxclean resolve_btfids_clean +clean: archclean vmlinuxclean resolve_btfids_clean objtool_clean # mrproper - Delete all generated files, including .config #
diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile
index a40f30232929..6964175abdfd 100644
--- a/tools/objtool/Makefile
+++ b/tools/objtool/Makefile@@ -29,6 +29,8 @@ srctree := $(patsubst %/,%,$(dir $(CURDIR))) srctree := $(patsubst %/,%,$(dir $(srctree))) endif +RM ?= rm -f + LIBSUBCMD_DIR = $(srctree)/tools/lib/subcmd/ ifneq ($(OUTPUT),) LIBSUBCMD_OUTPUT = $(abspath $(OUTPUT))/libsubcmd