Messages in this thread | | | From | Linus Torvalds <> | Date | Fri, 18 Mar 2022 18:13:25 -0700 | Subject | Re: [PATCH v5] x86: use builtins to read eflags |
| |
On Fri, Mar 18, 2022 at 4:47 PM Segher Boessenkool <segher@kernel.crashing.org> wrote: >> > > 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!
We've never clobbered the stack register.
We've _marked_ it as an in-out register, but we obviously never actually change it (as far as the compiler can tell). That would very obviously never work.
And even that marking must have been some gcc person telling us to do that, because I don't think we would have come up with it otherwise. I would guess it's what gcc uses internally to decide "I need this function to have a stack frame". And once you have a stack frame, the inline asm will automatically be put inside of it.
I spent a lot of time trying to find the origin of it. Finding the commit in the kernel where it was first introduced is easy: looks like commit 0e8e2238b52e ("x86/xen: Add stack frame dependency to hypercall inline asm calls") was the first to use that trick, although it was a series of patches from Josh that did that to make objdump happy.
And I found the culprit. It's you, on the gcc lists:
https://gcc.gnu.org/legacy-ml/gcc/2015-07/msg00080.html
Heh.
Linus
| |