Messages in this thread | | | From | Andy Lutomirski <> | Date | Mon, 7 Mar 2016 09:01:50 -0800 | Subject | Re: [PATCH] x86/entry: Improve system call entry comments |
| |
On Mar 7, 2016 12:22 AM, "Ingo Molnar" <mingo@kernel.org> wrote: > > > * Andy Lutomirski <luto@kernel.org> wrote: > > > Ingo suggested that the comments should explain when the various > > entries are used. This adds these explanations and improves other > > parts of the comments. > > Thanks for doing this, this is really useful! > > One very small detail I noticed: > > > +/* > > + * 32-bit legacy system call entry. > > + * > > + * 32-bit x86 Linux system calls traditionally used the INT $0x80 > > + * instruction. INT $0x80 lands here. > > + * > > + * This entry point can be used by 32-bit and 64-bit programs to perform > > + * 32-bit system calls. Instances of INT $0x80 can be found inline in > > + * various programs and libraries. It is also used by the vDSO's > > + * __kernel_vsyscall fallback for hardware that doesn't support a faster > > + * entry method. Restarted 32-bit system calls also fall back to INT > > + * $0x80 regardless of what instruction was originally used to do the > > + * system call. > > + * > > + * This is considered a slow path. It is not used by modern libc > > + * implementations on modern hardware except during process startup. > > + * > > + * Arguments: > > + * eax system call number > > + * ebx arg1 > > + * ecx arg2 > > + * edx arg3 > > + * esi arg4 > > + * edi arg5 > > + * ebp arg6 > > + */ > > ENTRY(entry_INT80_32) > > entry_INT80_32() is only used on pure 32-bit kernels, 64-bit kernels use > entry_INT80_compat(). So the above text should not talk about 64-bit programs, as > they can never trigger this specific entry point, right? >
64-bit programs can and sometimes do trigger this entry point. It does a 32-bit syscall regardless of the caller's bitness, but it returns back to the caller's original context, whatever it was.
> So I'd change the explanation to something like: > > > + * This entry point is active on 32-bit kernels and can thus be used by 32-bit > > + * programs to perform 32-bit system calls. (Programs running on 64-bit > > + * kernels executing INT $0x80 will land on another entry point: > > + * entry_INT80_compat. The ABI is identical.)
I like the part in parentheses.
--Andy
| |