On Tue, Sep 27, 2022 at 3:35 PM Russell King (Oracle) linux@armlinux.org.uk wrote:
On Tue, Sep 27, 2022 at 03:28:51PM -0700, Nick Desaulniers wrote:
commit 1069c1dd20a3 ("ARM: 9231/1: Recover kretprobes return address for EABI stack unwinder") tickled a bug in clang's integrated assembler where the .save and .pad directives must have corresponding .fnstart directives. The integrated assembler is unaware that the compiler will be generating the .fnstart directive.
Has it been confirmed that gcc does generate a .fnstart for naked functions?
From what I can tell, the presence of __attribute__((naked)) makes no difference with regards to the emission of the .fnstart directive for GCC.
One thing I did notice though: https://godbolt.org/z/Mv5GEobc8 GCC will emit .fnstart directives when -fasynchronous-unwind-tables is specified for C (omitting the directive otherwise), or regardless of -fasynchronous-unwind-tables/-fno-asynchronous-unwind-tables for C++. Clang will unconditionally emit .fnstart directives regardless of language mode.
I don't see -fasynchronous-unwind-tables being specified under arch/arm/. But there are many instances of UNWIND(.fnstart) in various .S files under arch/arm/.
https://sourceware.org/binutils/docs/as/ARM-Unwinding-Tutorial.html https://sourceware.org/binutils/docs/as/ARM-Directives.html#arm_005ffnstart
-- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
-- Thanks, ~Nick Desaulniers