Commit c84c3a69 authored by Helge Deller's avatar Helge Deller Committed by Kyle McMartin

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: default avatarCarlos O'Donell <carlos@systemhalted.org>
Signed-off-by: default avatarHelge Deller <deller@gmx.de>
Signed-off-by: default avatarKyle McMartin <kyle@mcmartin.ca>
parent 8a1def45
...@@ -365,17 +365,51 @@ tracesys_sigexit: ...@@ -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: ...@@ -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) ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment