On Fri, Feb 27, 2026 at 11:40 PM Ard Biesheuvel <[email protected]> wrote: > > hv_crash_c_entry() is a C function that is entered without a stack, > and this is only allowed for functions that have the __naked attribute, > which informs the compiler that it must not emit the usual prologue and > epilogue or emit any other kind of instrumentation that relies on a > stack frame. > > So split up the function, and set the __naked attribute on the initial > part that sets up the stack, GDT, IDT and other pieces that are needed > for ordinary C execution. Given that function calls are not permitted > either, use the existing long return coded in an asm() block to call the > second part of the function, which is an ordinary function that is > permitted to call other functions as usual. > > Cc: Mukesh Rathor <[email protected]> > Cc: Wei Liu <[email protected]> > Cc: Uros Bizjak <[email protected]> > Cc: Andrew Cooper <[email protected]> > Cc: [email protected] > Fixes: 94212d34618c ("x86/hyperv: Implement hypervisor RAM collection into > vmcore") > Signed-off-by: Ard Biesheuvel <[email protected]> > --- > v2: apply some asm tweaks suggested by Uros and Andrew
Acked by: Uros Bizjak <[email protected]> FYI: GCC by design inserts ud2 at the end of x86 naked functions. This is intended to help debugging in case someone forgets ret/jmp, so program execution does not wander into whatever follows the function. IIRC, when ud2 follows ret, code analyzers may report "unreachable code" warnings. I don't know if this is still the case, but nevertheless this should be considered an important "safety net" feature of the compiler. Uros.

