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.