Skip to content

Commit

Permalink
parisc: document light weight syscall ABI
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Helge Deller authored and Kyle McMartin committed Mar 31, 2009
1 parent 8a1def4 commit c84c3a6
Showing 1 changed file with 48 additions and 10 deletions.
58 changes: 48 additions & 10 deletions arch/parisc/kernel/syscall.S
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit c84c3a6

Please sign in to comment.