Messages in this thread | | | Date | Fri, 18 Mar 2022 18:42:12 -0500 | From | Segher Boessenkool <> | Subject | Re: [PATCH v5] x86: use builtins to read eflags |
| |
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
| |