Re: [PATCH v5] x86: use builtins to read eflags
From: Segher Boessenkool
Date: Fri Mar 18 2022 - 19:49:53 EST
On Fri, Mar 18, 2022 at 04:10:55PM -0700, Linus Torvalds wrote:
> It would be lovely to have some explicit model for "I want the frame
> to have been set up for backtraces", but here we are.
So please define exactly what that *means*? Preferably portably, but I
reckon at least some of it will have to be machine-specific (and ABI-
specific). But it needs to be well-defined, clearly defined, defined at
all, and *documented* :-)
> Marking '%rsp
> used makes the compiler understand it's not a leaf function.
As I said before, this is explicitly incorrect code. Always was, but
it is documented since a while (since GCC 9). Clobbering the stack
pointer can never be correct, the stack pointer after an asm has to be
identical to the one before that asm!
> And while we have other uses for it that then use the actual value,
> those don't care about the exact value of the stack pointer register,
> they just want "give me a pointer that is contained within the current
> stack", because we control the stack allocation and do funky things
> there. So "any random stack pointer value in this function" is
> perfectly fine and expected.
You can use %rsp as *input* operand just fine, which is all you need for
that.
> But for user mode, it would probably be a great idea to also have a "I
> cannot use a redzone in this function" thing. The kernel can't use it
> because we have nested exceptions, but maybe some day even the kernel
> could make use of (controlled) red-zoning.
Yes. We just have to figure out what the exact semantics we want is,
and how to express that in a target-independent way, and then relatedly
what a good name for it would be ("redzone" in the clobber list is the
best I can come up with right now, but that may have to change).
Segher