]> git.ipfire.org Git - thirdparty/man-pages.git/commitdiff
syscall.2: Fix wrong retval register number in alpha architecture
authorsnyh <snyh@snyh.org>
Sat, 8 Dec 2018 13:44:15 +0000 (14:44 +0100)
committerMichael Kerrisk <mtk.manpages@gmail.com>
Sat, 8 Dec 2018 13:44:15 +0000 (14:44 +0100)
alpha use v0 e.g. $0 as the return value register both in
syscall ABI and C ABI.

see also
https://github.com/torvalds/linux/blob/master/arch/alpha/kernel/entry.S#L479

The normal Alpha C ABI use a0~a5 to pass arguments and use v0 as
the return value register. See here
https://www2.cs.arizona.edu/projects/alto/Doc/local/alpha.register.html

The syscall ABI use v0 as the trap number, a0~a5 to pass arguments
and use a3 as a indicator (bool type) whether has a error occurred.

We can also see the libc's syscall wrapper implements at
https://code.woboq.org/userspace/glibc/sysdeps/unix/sysv/linux/alpha/syscall.S.html
The v0 is the normal used as return register, and we can see the
return processing doesn't do anything about a0 which is the wrong
register of currently syscall(2) description.

p.s. I found this wrong description because I'm porting Go gc to
a new CPU architecture which is similar to Alpha, And I use the
wrong register at first, then I have inspect the kernel code and
objdump to ensure the right syscall ABI.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
man2/syscall.2

index 3f4d64c0f5d8c713193f317155b20a0d3672c1fb..11e14167cb01e537250e75afd57960a1f5ebfaac 100644 (file)
@@ -181,7 +181,7 @@ and the register used to signal an error.
 l2     l2      l2      l2      l2      l.
 arch/ABI       instruction     syscall #       retval  error   Notes
 _
-alpha  callsys v0      a0      a3      [1]
+alpha  callsys v0      v0      a3      [1]
 arc    trap0   r8      r0      -
 arm/OABI       swi NR  -       a1      -       [2]
 arm/EABI       swi 0x0 r7      r0      -