From: Mark Rutland <mark.rutland@arm.com>
To: Dylan Hatch <dylanbhatch@google.com>
Cc: Roman Gushchin <roman.gushchin@linux.dev>,
Weinan Liu <wnliu@google.com>, Will Deacon <will@kernel.org>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Indu Bhagat <ibhagatgnu@gmail.com>,
Peter Zijlstra <peterz@infradead.org>,
Steven Rostedt <rostedt@goodmis.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Jiri Kosina <jikos@kernel.org>, Jens Remus <jremus@linux.ibm.com>,
Prasanna Kumar T S M <ptsm@linux.microsoft.com>,
Puranjay Mohan <puranjay@kernel.org>, Song Liu <song@kernel.org>,
joe.lawrence@redhat.com, linux-toolchains@vger.kernel.org,
linux-kernel@vger.kernel.org, live-patching@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
Randy Dunlap <rdunlap@infradead.org>
Subject: Re: [PATCH v5 0/8] unwind, arm64: add sframe unwinder for kernel
Date: Wed, 29 Apr 2026 18:18:19 +0100 [thread overview]
Message-ID: <afI9W5gj6Eo-bYi3@J2N7QTR9R3.cambridge.arm.com> (raw)
In-Reply-To: <20260428183643.3796063-1-dylanbhatch@google.com>
Hi Dylan,
On Tue, Apr 28, 2026 at 06:36:35PM +0000, Dylan Hatch wrote:
> Implement a generic kernel sframe-based [1] unwinder. The main goal is
> to improve reliable stacktrace on arm64 by unwinding across exception
> boundaries.
Thanks for this!
Just as a holding reply: I'm going over the series now, and I have some
partially-written comments that I'll try to finish up and get out
tomorrow.
Mark.
> On x86, the ORC unwinder provides reliable stacktrace through similar
> methodology, but arm64 lacks the necessary support from objtool to
> create ORC unwind tables.
>
> Currently, there's already a sframe unwinder proposed for userspace: [2].
> To maintain common definitions and algorithms for sframe lookup, a
> substantial portion of this patch series aims to refactor the sframe
> lookup code to support both kernel and userspace sframe sections.
>
> Currently, only GNU Binutils support sframe. This series relies on the
> Sframe V3 format, which is supported in binutils 2.46.
>
> These patches are based on Steven Rostedt's sframe/core branch [3],
> which is and aggregation of existing work done for x86 sframe userspace
> unwind, and contains [2]. This branch is, in turn, based on Linux
> v7.0-rc3. This full series (applied to the sframe/core branch) is
> available on github: [4].
>
> Ref:
> [1]: https://sourceware.org/binutils/docs/sframe-spec.html
> [2]: https://lore.kernel.org/lkml/20260127150554.2760964-1-jremus@linux.ibm.com/
> [3]: https://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git/log/?h=sframe/core
> [4]: https://github.com/dylanbhatch/linux/tree/sframe-v5
>
> Changes since v4:
> - (Jens) Fix some minor nits.
> - Handle .init.text and .exit.text in function address validation.
>
> Changes since v3:
>
> - (Jens) Clean up patch summaries.
> - (Jens) Rename SFRAME_LOOKUP -> UNWIND_SFRAME_LOOKUP to fit existing
> naming convention.
> - (Randy) Correct typo errors in new config options.
> - (Jens) Move unwind types to a new unwind_types.h to match their
> usage.
> - (Jens) Update KERNEL_[COPY|GET] to use label-based error handling
> like their userspace counterparts.
> - (Jens) Rename SFRAME_UNWINDER -> HAVE_UNWIND_KERNEL_SFRAME and
> ARCH_SUPPORTS_SFRAME_UNWINDER -> ARCH_SUPPORTS_UNWIND_KERNEL_SFRAME
> to match existing naming convention.
> - (Jens) Move HAVE_UNWIND_KERNEL_SFRAME config option to arch/Kconfig.
> - (Jens) Rename/move extern definitions of __[start|end]_sframe into
> include/asm-generic/sections.h.
> - (Jens) Fix up CFI annotations at kernel entry.
> - (Jens) Fix error path for unsorted FDE lookup.
> - (Jens) Zero-out module sframe_section before init.
> - (Jens) For SFRAME_VALIDATION, use an arch-specific function-address
> validation helper so that .rodata.text can be correctly handled on
> arm64 vmlinux.
> - (Jens) Fixup and better comment kernel stacktrace code.
>
> Changes since v2:
>
> The biggest change from v2 is the switch from adding a dedicated,
> in-kernel sframe-lookup library, to refactoring/using the existing
> library developed by Josh, Jens, and Steve. Consequently, this series
> now depends on Sframe V3, though this upgrade would likely have been
> necessary anyway. Below is a full accounting of the changes since v2.
>
> - (Josh) Add stricter reliability checks during unwind.
> - (Puranjay, Indu, Jens) Update to use a common sframe library with
> userpace unwind, thus resolving the need to support
> SFRAME_F_FDE_FUNC_START_PCREL, added in binutils 2.45.
> - (Jens) Add check for sframe V3, thus resolving the prior need for V2
> and SFRAME_F_FDE_FUNC_START_PCREL support.
> - (Will) Add ARCH_SUPPORTS_SFRAME_UNWINDER, remove SFRAME_UNWIND_TABLE
> - (Indu) add support for unsorted FDE tables, allowing for module
> sframe lookups.
> - (Mark) Prefer frame-pointer unwind when possible, for better
> performance.
> - Simplify compile-time logic, adding stubbs when necessary.
> - Add support for in-kernel SFRAME_VALIDATION.
> - Rebase onto core/sframe (with v7.0-rc3 base)
>
> Dylan Hatch (7):
> sframe: Allow kernelspace sframe sections
> arm64, unwind: build kernel with sframe V3 info
> sframe: Provide PC lookup for vmlinux .sframe section
> sframe: Allow unsorted FDEs
> arm64/module, sframe: Add sframe support for modules
> sframe: Introduce in-kernel SFRAME_VALIDATION
> unwind: arm64: Use sframe to unwind interrupt frames
>
> Weinan Liu (1):
> arm64: entry: add unwind info for various kernel entries
>
> MAINTAINERS | 3 +-
> Makefile | 8 +
> arch/Kconfig | 27 +-
> arch/arm64/Kconfig | 1 +
> arch/arm64/include/asm/module.h | 6 +
> arch/arm64/include/asm/sections.h | 1 +
> arch/arm64/include/asm/stacktrace/common.h | 6 +
> arch/arm64/include/asm/unwind_sframe.h | 55 +++
> arch/arm64/kernel/entry.S | 23 +
> arch/arm64/kernel/module.c | 8 +
> arch/arm64/kernel/setup.c | 2 +
> arch/arm64/kernel/stacktrace.c | 246 ++++++++++-
> arch/arm64/kernel/vdso/Makefile | 2 +-
> arch/arm64/kernel/vmlinux.lds.S | 2 +
> .../{unwind_user_sframe.h => unwind_sframe.h} | 6 +-
> arch/x86/include/asm/unwind_user.h | 12 +-
> include/asm-generic/sections.h | 4 +
> include/asm-generic/vmlinux.lds.h | 15 +
> include/linux/sframe.h | 67 ++-
> include/linux/unwind_types.h | 46 ++
> include/linux/unwind_user_types.h | 41 --
> kernel/unwind/Makefile | 2 +-
> kernel/unwind/sframe.c | 410 ++++++++++++++----
> kernel/unwind/user.c | 41 +-
> 24 files changed, 827 insertions(+), 207 deletions(-)
> create mode 100644 arch/arm64/include/asm/unwind_sframe.h
> rename arch/x86/include/asm/{unwind_user_sframe.h => unwind_sframe.h} (50%)
> create mode 100644 include/linux/unwind_types.h
>
> --
> 2.54.0.545.g6539524ca2-goog
>
next prev parent reply other threads:[~2026-04-29 17:18 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-28 18:36 [PATCH v5 0/8] unwind, arm64: add sframe unwinder for kernel Dylan Hatch
2026-04-28 18:36 ` [PATCH v5 1/8] sframe: Allow kernelspace sframe sections Dylan Hatch
2026-04-28 18:36 ` [PATCH v5 2/8] arm64, unwind: build kernel with sframe V3 info Dylan Hatch
2026-04-28 18:36 ` [PATCH v5 3/8] arm64: entry: add unwind info for various kernel entries Dylan Hatch
2026-04-29 15:26 ` Mark Rutland
2026-04-28 18:36 ` [PATCH v5 4/8] sframe: Provide PC lookup for vmlinux .sframe section Dylan Hatch
2026-04-28 18:36 ` [PATCH v5 5/8] sframe: Allow unsorted FDEs Dylan Hatch
2026-04-30 10:04 ` Jens Remus
2026-04-28 18:36 ` [PATCH v5 6/8] arm64/module, sframe: Add sframe support for modules Dylan Hatch
2026-04-30 10:04 ` Jens Remus
2026-04-28 18:36 ` [PATCH v5 7/8] sframe: Introduce in-kernel SFRAME_VALIDATION Dylan Hatch
2026-04-30 10:04 ` Jens Remus
2026-04-28 18:36 ` [PATCH v5 8/8] unwind: arm64: Use sframe to unwind interrupt frames Dylan Hatch
2026-05-01 16:46 ` Mark Rutland
2026-05-04 8:47 ` Jens Remus
2026-05-05 10:29 ` Mark Rutland
2026-05-05 15:52 ` Jens Remus
2026-04-29 17:18 ` Mark Rutland [this message]
2026-04-30 10:11 ` [PATCH v5 0/8] unwind, arm64: add sframe unwinder for kernel Jens Remus
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=afI9W5gj6Eo-bYi3@J2N7QTR9R3.cambridge.arm.com \
--to=mark.rutland@arm.com \
--cc=catalin.marinas@arm.com \
--cc=dylanbhatch@google.com \
--cc=ibhagatgnu@gmail.com \
--cc=jikos@kernel.org \
--cc=joe.lawrence@redhat.com \
--cc=jpoimboe@kernel.org \
--cc=jremus@linux.ibm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-toolchains@vger.kernel.org \
--cc=live-patching@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=ptsm@linux.microsoft.com \
--cc=puranjay@kernel.org \
--cc=rdunlap@infradead.org \
--cc=roman.gushchin@linux.dev \
--cc=rostedt@goodmis.org \
--cc=song@kernel.org \
--cc=will@kernel.org \
--cc=wnliu@google.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox