parisc: document light weight syscall ABI
Document the LWS ABI including implementation notes for userspace, and comment cleanup. Remove extraneous .align 16 after lws_lock_start. Signed-off-by: Carlos O'Donell <carlos@systemhalted.org> Signed-off-by: Helge Deller <deller@gmx.de> Signed-off-by: Kyle McMartin <kyle@mcmartin.ca>
This commit is contained in:
parent
8a1def457b
commit
c84c3a698f
|
@ -365,17 +365,51 @@ tracesys_sigexit:
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************
|
/*********************************************************
|
||||||
Light-weight-syscall code
|
32/64-bit Light-Weight-Syscall ABI
|
||||||
|
|
||||||
r20 - lws number
|
* - Indicates a hint for userspace inline asm
|
||||||
r26,r25,r24,r23,r22 - Input registers
|
implementations.
|
||||||
r28 - Function return register
|
|
||||||
r21 - Error code.
|
|
||||||
|
|
||||||
Scracth: Any of the above that aren't being
|
Syscall number (caller-saves)
|
||||||
currently used, including r1.
|
- %r20
|
||||||
|
* In asm clobber.
|
||||||
|
|
||||||
Return pointer: r31 (Not usable)
|
Argument registers (caller-saves)
|
||||||
|
- %r26, %r25, %r24, %r23, %r22
|
||||||
|
* In asm input.
|
||||||
|
|
||||||
|
Return registers (caller-saves)
|
||||||
|
- %r28 (return), %r21 (errno)
|
||||||
|
* In asm output.
|
||||||
|
|
||||||
|
Caller-saves registers
|
||||||
|
- %r1, %r27, %r29
|
||||||
|
- %r2 (return pointer)
|
||||||
|
- %r31 (ble link register)
|
||||||
|
* In asm clobber.
|
||||||
|
|
||||||
|
Callee-saves registers
|
||||||
|
- %r3-%r18
|
||||||
|
- %r30 (stack pointer)
|
||||||
|
* Not in asm clobber.
|
||||||
|
|
||||||
|
If userspace is 32-bit:
|
||||||
|
Callee-saves registers
|
||||||
|
- %r19 (32-bit PIC register)
|
||||||
|
|
||||||
|
Differences from 32-bit calling convention:
|
||||||
|
- Syscall number in %r20
|
||||||
|
- Additional argument register %r22 (arg4)
|
||||||
|
- Callee-saves %r19.
|
||||||
|
|
||||||
|
If userspace is 64-bit:
|
||||||
|
Callee-saves registers
|
||||||
|
- %r27 (64-bit PIC register)
|
||||||
|
|
||||||
|
Differences from 64-bit calling convention:
|
||||||
|
- Syscall number in %r20
|
||||||
|
- Additional argument register %r22 (arg4)
|
||||||
|
- Callee-saves %r27.
|
||||||
|
|
||||||
Error codes returned by entry path:
|
Error codes returned by entry path:
|
||||||
|
|
||||||
|
@ -473,7 +507,8 @@ lws_compare_and_swap64:
|
||||||
b,n lws_compare_and_swap
|
b,n lws_compare_and_swap
|
||||||
#else
|
#else
|
||||||
/* If we are not a 64-bit kernel, then we don't
|
/* If we are not a 64-bit kernel, then we don't
|
||||||
* implement having 64-bit input registers
|
* have 64-bit input registers, and calling
|
||||||
|
* the 64-bit LWS CAS returns ENOSYS.
|
||||||
*/
|
*/
|
||||||
b,n lws_exit_nosys
|
b,n lws_exit_nosys
|
||||||
#endif
|
#endif
|
||||||
|
@ -635,12 +670,15 @@ END(sys_call_table64)
|
||||||
/*
|
/*
|
||||||
All light-weight-syscall atomic operations
|
All light-weight-syscall atomic operations
|
||||||
will use this set of locks
|
will use this set of locks
|
||||||
|
|
||||||
|
NOTE: The lws_lock_start symbol must be
|
||||||
|
at least 16-byte aligned for safe use
|
||||||
|
with ldcw.
|
||||||
*/
|
*/
|
||||||
.section .data
|
.section .data
|
||||||
.align PAGE_SIZE
|
.align PAGE_SIZE
|
||||||
ENTRY(lws_lock_start)
|
ENTRY(lws_lock_start)
|
||||||
/* lws locks */
|
/* lws locks */
|
||||||
.align 16
|
|
||||||
.rept 16
|
.rept 16
|
||||||
/* Keep locks aligned at 16-bytes */
|
/* Keep locks aligned at 16-bytes */
|
||||||
.word 1
|
.word 1
|
||||||
|
|
Loading…
Reference in New Issue