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.

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)"?

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         = (unsigned long)_stext;
        kernel_sfsec.text_end           = (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 *sframe, 
size_t sframe_size,
        sec->text_start   = (unsigned long)text;
        sec->text_end     = (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 = current->mm;
        struct vm_area_struct *vma;
 
+       if (sec->sec_type == SFRAME_KERNEL) {
+               if (sec == &kernel_sfsec) {
+                       sec->filename = kstrdup("(vmlinux)", GFP_KERNEL);
+               } else {
+                       struct module *mod = container_of(sec, struct module,
+                                                         arch.sframe_sec);
+                       sec->filename = kstrdup(mod->name, GFP_KERNEL);
+               }
+
+               return;
+       }
+
        guard(mmap_read_lock)(mm);
        vma = 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 Aufsichtsrats: 
Wolfgang Wendt; Geschäftsführung: David Faller; Sitz der Gesellschaft: 
Ehningen; Registergericht: Amtsgericht Stuttgart, HRB 243294
IBM Data Privacy Statement: https://www.ibm.com/privacy/


Reply via email to