https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119279

--- Comment #4 from Linus Torvalds <torva...@linux-foundation.org> ---
(In reply to Richard Biener from comment #3)
> I think
> 
> asm ("" : : "g" (__builtin_frame_address_(0)))
> 
> and using that input as frame pointer looks spot-on semantically, is that
> what you are actually using or are you then using %rbp anyway in the
> assembler text?

The kernel is actually never interested in the %rbp value at all in the asm
itself.

In fact, the __builtin_frame_address_(0) version is somewhat inconvenient for
the kernel, because then we need a different version of the same thing when we
*don't* compile with frame pointers. 

What we actually care about is that the asm has to be in a context where the
call instruction is valid, and results in proper stack frames in the callee.

IOW, it isn't about %rbp directly, it's about being able to follow stack frames
when tracing or when exceptions happen. 

So basically *if* the code is generated with frame pointers, the ASM needs to
be after the frame had been set up. That does obviously mean that %rbp is
valid, but that's not the primary issue per see, and the asm doesn't itself
directly care.

Reply via email to