https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82221
--- Comment #17 from H.J. Lu <hjl.tools at gmail dot com> ---
(In reply to Josh Poimboeuf from comment #7)
> Putting "sp" in the clobbers list is something that was suggested to me on
> the GCC mailing list a while back. And, other than this rare bug, it seems
> to do exactly what we want, which is, force GCC to save the frame pointer
> before inserting the inline asm. We need that to happen when we put a
> "call" instruction inside the inline asm, so that we can get a reliable
> stack trace from the called function.
>
> I know that putting "sp" in the clobbers list is an undocumented "feature",
> so maybe it is user error. However it would be nice to have something like
> this as a real feature. Either with "sp", or maybe a new clobbers keyword
> like "frame".
>
> Would that be feasible?
Can you use something like
unsigned long paravirt_read_pmc(void)
{
register char *frame __asm__("ebp");
unsigned long __eax;
asm volatile("# foo" : "=a" (__eax)
: "r" (frame)
: "memory", "cc");
return __eax;
}
That is your asm statement needs frame pointer.