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:
Helge Deller 2008-12-30 02:47:38 +00:00 committed by Kyle McMartin
parent 8a1def457b
commit c84c3a698f
1 changed files with 48 additions and 10 deletions

View File

@ -365,17 +365,51 @@ tracesys_sigexit:
/*********************************************************
Light-weight-syscall code
32/64-bit Light-Weight-Syscall ABI
r20 - lws number
r26,r25,r24,r23,r22 - Input registers
r28 - Function return register
r21 - Error code.
* - Indicates a hint for userspace inline asm
implementations.
Scracth: Any of the above that aren't being
currently used, including r1.
Syscall number (caller-saves)
- %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:
@ -473,7 +507,8 @@ lws_compare_and_swap64:
b,n lws_compare_and_swap
#else
/* 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
#endif
@ -635,12 +670,15 @@ END(sys_call_table64)
/*
All light-weight-syscall atomic operations
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
.align PAGE_SIZE
ENTRY(lws_lock_start)
/* lws locks */
.align 16
.rept 16
/* Keep locks aligned at 16-bytes */
.word 1