[libc-dev] Linux powerpc new system call instruction and ABI
Nicholas Piggin via libc-dev
libc-dev at lists.llvm.org
Sun Jun 14 02:26:07 PDT 2020
Excerpts from Segher Boessenkool's message of June 12, 2020 7:02 am:
> On Thu, Jun 11, 2020 at 06:12:01PM +1000, Nicholas Piggin wrote:
>> Calling convention
>> The proposal is for scv 0 to provide the standard Linux system call ABI
>> with the following differences from sc convention:
>> - lr is to be volatile across scv calls. This is necessary because the
>> scv instruction clobbers lr. From previous discussion, this should be
>> possible to deal with in GCC clobbers and CFI.
>> - cr1 and cr5-cr7 are volatile. This matches the C ABI and would allow the
>> kernel system call exit to avoid restoring the volatile cr registers
>> (although we probably still would anyway to avoid information leaks).
>> - Error handling: The consensus among kernel, glibc, and musl is to move to
>> using negative return values in r3 rather than CR0[SO]=1 to indicate error,
>> which matches most other architectures, and is closer to a function call.
> What about cr0 then? Will it be volatile as well (exactly like for
> function calls)?
Yes, same as for sc (except for SO bit). Which is a bit unclear in this
>> - r0,r4-r8 are documented as volatile in the ABI, but the kernel patch as
>> submitted currently preserves them. This is to leave room for deciding
>> which way to go with these.
> The kernel has to set it to *something* that doesn't leak information ;-)
For "sc" system calls these were defined as volatile (and used to just
leak information), so now we just zero them.
More information about the libc-dev