On 2026-02-03 09:19, Jens Remus wrote: > From: Josh Poimboeuf <[email protected]> > > It was decided years ago that .cfi_* annotations aren't maintainable in > the kernel. They were replaced by objtool unwind hints. For the kernel > proper, ensure the CFI_* macros don't do anything. > > On the other hand the VDSO library *does* use them, so user space can > unwind through it. > > Make sure these macros only work for VDSO. They aren't actually being > used outside of VDSO anyway, so there's no functional change. > > Signed-off-by: Josh Poimboeuf <[email protected]> > Signed-off-by: Steven Rostedt (Google) <[email protected]> > Signed-off-by: Jens Remus <[email protected]> > --- > arch/x86/include/asm/dwarf2.h | 51 ++++++++++++++++++++++++----------- > 1 file changed, 35 insertions(+), 16 deletions(-) > > diff --git a/arch/x86/include/asm/dwarf2.h b/arch/x86/include/asm/dwarf2.h > index 09c9684d3ad6..7cc30500c095 100644 > --- a/arch/x86/include/asm/dwarf2.h > +++ b/arch/x86/include/asm/dwarf2.h > @@ -6,6 +6,15 @@ > #warning "asm/dwarf2.h should be only included in pure assembly files" > #endif > > +#ifdef BUILD_VDSO > + > + /* > + * For the vDSO, emit both runtime unwind information and debug > + * symbols for the .dbg file. > + */ > + > + .cfi_sections .eh_frame, .debug_frame > + > #define CFI_STARTPROC .cfi_startproc > #define CFI_ENDPROC .cfi_endproc > #define CFI_DEF_CFA .cfi_def_cfa > @@ -22,21 +31,31 @@ > #define CFI_ESCAPE .cfi_escape > #define CFI_SIGNAL_FRAME .cfi_signal_frame > > -#ifndef BUILD_VDSO > - /* > - * Emit CFI data in .debug_frame sections, not .eh_frame sections. > - * The latter we currently just discard since we don't do DWARF > - * unwinding at runtime. So only the offline DWARF information is > - * useful to anyone. Note we should not use this directive if we > - * ever decide to enable DWARF unwinding at runtime. > - */ > - .cfi_sections .debug_frame > -#else > - /* > - * For the vDSO, emit both runtime unwind information and debug > - * symbols for the .dbg file. > - */ > - .cfi_sections .eh_frame, .debug_frame > -#endif > +#else /* !BUILD_VDSO */ > + > +/* > + * On x86, these macros aren't used outside VDSO. As well they shouldn't be: > + * they're fragile and very difficult to maintain. > + */ > + > +.macro nocfi args:vararg > +.endm > + > +#define CFI_STARTPROC nocfi > +#define CFI_ENDPROC nocfi > +#define CFI_DEF_CFA nocfi > +#define CFI_DEF_CFA_REGISTER nocfi > +#define CFI_DEF_CFA_OFFSET nocfi > +#define CFI_ADJUST_CFA_OFFSET nocfi > +#define CFI_OFFSET nocfi > +#define CFI_REL_OFFSET nocfi > +#define CFI_REGISTER nocfi > +#define CFI_RESTORE nocfi > +#define CFI_REMEMBER_STATE nocfi > +#define CFI_RESTORE_STATE nocfi > +#define CFI_UNDEFINED nocfi > +#define CFI_ESCAPE nocfi > + > +#endif /* !BUILD_VDSO */ > > #endif /* _ASM_X86_DWARF2_H */
I guess patch 3 justifies this. Acked-by: H. Peter Anvin (Intel) <[email protected]>
