Re: [PATCH] x86/entry: Improve system call entry comments

From: Andy Lutomirski
Date: Tue Mar 08 2016 - 14:11:44 EST

On Tue, Mar 8, 2016 at 10:59 AM, H. Peter Anvin <hpa@xxxxxxxxx> wrote:
> On 03/08/16 10:50, Andy Lutomirski wrote:
>> On Tue, Mar 8, 2016 at 10:47 AM, H. Peter Anvin <hpa@xxxxxxxxx> wrote:
>>> On 03/08/16 10:45, Andy Lutomirski wrote:
>>>> s/modern/most, perhaps?
>>>> I'm hoping that some day Bionic goes away and gets replaced by musl.
>>>> Of course, musl doesn't always use fast syscalls because it needs a
>>>> vdso facility that doesn't currently exist. I'll deal with that
>>>> eventually.
>>> You don't actually need actual DSO support to support fast system calls
>>> on i386. Even klibc uses them now, and the additional code to support
>>> it is trivial.
>> That's not the issue. The issue is that musl does something
>> crazy^Wclever to support POSIX pthread cancellation, and it involves
>> being able to tell whether a signal's ucontext points to a syscall
>> and, if so, what the return address is. This is straightforward with
>> an inlined int $0x80, but doing it reliably with the current vdso
>> design would requiring parsing the DWARF data, and I can't really
>> blame musl for not wanting to do that.
>> There was a thread awhile back about adding a new vdso helper to do
>> this. I think I even had some code for it. If I find time, I'll try
>> to send patches for 4.7.
> As far as I know, when we get a signal the EIP always points to int
> $0x80 as we don't support system call restart (being a rare case) for
> the fast system calls.

We actually fully support system call restart on fast syscalls as of
(IIRC) 4.5, even on AMD. Phew!

However, the nasty case for musl is when the cancellation signal
happens immediately before the actual kernel entry. The signal
handler needs some way to detect whether the thread is at a
cancellation point.