Re: [PATCH v5 0/8] unwind, arm64: add sframe unwinder for kernel
Dylan Hatch <[email protected]> Mon, 11 May 2026 18:10:26 -0700
| Newsgroups | org.kernel.vger.linux-toolchains,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel,org.kernel.vger.live-patching |
|---|---|
| Message-ID | <CADBMgpwDzrQU289fRXCRvSiCo3noOTy6=q8C58sLPrT_KO+=UQ@mail.gmail.com> |
On Thu, Apr 30, 2026 at 3:11=E2=80=AFAM Jens Remus <[email protected]> w= rote: > > On 4/28/2026 8:36 PM, 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. > > Please add support to initialize the optional sframe unwinder debug > information. Either in the appropriate patches in this series or as a > separate patch. Sounds good, I'll add this in as a separate patch in the next version. > > Note that for the module case I wonder whether it would be preferable > to somehow indicate that it is a module name in the string, e.g. > "(<module-name>)" or "<module-name> (module)"? I don't have a strong preference, though I agree it makes sense to indicate that the section is from a module. For now I'll add the parentheses "(<module-name>)". > > diff --git a/kernel/unwind/sframe.c b/kernel/unwind/sframe.c > --- a/kernel/unwind/sframe.c > +++ b/kernel/unwind/sframe.c > @@ -1028,6 +1028,8 @@ void __init init_sframe_table(void) > kernel_sfsec.text_start =3D (unsigned long)_stext; > kernel_sfsec.text_end =3D (unsigned long)_etext; > > + dbg_init(&kernel_sfsec); > + > if (WARN_ON(sframe_read_header(&kernel_sfsec))) > return; > if (WARN_ON(sframe_validate_section(&kernel_sfsec))) > @@ -1047,6 +1049,8 @@ void sframe_module_init(struct module *mod, void *s= frame, size_t sframe_size, > sec->text_start =3D (unsigned long)text; > sec->text_end =3D (unsigned long)text + text_size; > > + dbg_init(sec); > + > if (WARN_ON(sframe_read_header(sec))) > return; > if (WARN_ON(sframe_validate_section(sec))) > diff --git a/kernel/unwind/sframe_debug.h b/kernel/unwind/sframe_debug.h > --- a/kernel/unwind/sframe_debug.h > +++ b/kernel/unwind/sframe_debug.h > @@ -32,6 +32,18 @@ static inline void dbg_init(struct sframe_section *sec= ) > struct mm_struct *mm =3D current->mm; > struct vm_area_struct *vma; > > + if (sec->sec_type =3D=3D SFRAME_KERNEL) { > + if (sec =3D=3D &kernel_sfsec) { > + sec->filename =3D kstrdup("(vmlinux)", GFP_KERNEL= ); > + } else { > + struct module *mod =3D container_of(sec, struct m= odule, > + arch.sframe_sec= ); > + sec->filename =3D kstrdup(mod->name, GFP_KERNEL); > + } > + > + return; > + } > + > guard(mmap_read_lock)(mm); > vma =3D vma_lookup(mm, sec->sframe_start); > if (!vma) > > Regards, > Jens > -- > Jens Remus > Linux on Z Development (D3303) > [email protected] / [email protected] > > IBM Deutschland Research & Development GmbH; Vorsitzender des Aufsichtsra= ts: Wolfgang Wendt; Gesch=C3=A4ftsf=C3=BChrung: David Faller; Sitz der Gese= llschaft: Ehningen; Registergericht: Amtsgericht Stuttgart, HRB 243294 > IBM Data Privacy Statement: https://www.ibm.com/privacy/ > Thanks for the suggestion, Dylan