Thread (42 messages) 42 messages, 11 authors, 2021-05-24

Re: Linux powerpc new system call instruction and ABI

From: Nicholas Piggin <npiggin@gmail.com>
Date: 2020-06-14 09:28:02
Also in: linux-api

Excerpts from Segher Boessenkool's message of June 12, 2020 7:02 am:
Hi!

On Thu, Jun 11, 2020 at 06:12:01PM +1000, Nicholas Piggin wrote:
quoted
Calling convention
------------------
The proposal is for scv 0 to provide the standard Linux system call ABI 
with the following differences from sc convention[1]:

- 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
section.
quoted
Notes
-----
- 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.

Thanks,
Nick
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help