[klibc] [klibc:master] alpha: Fix dual1 system call wrapper
klibc-bot for Ben Hutchings
ben at decadent.org.uk
Sun Jan 20 19:27:02 PST 2019
Commit-ID: fb7fdfa873f980d71b3acafea381af77e927cace
Gitweb: http://git.kernel.org/?p=libs/klibc/klibc.git;a=commit;h=fb7fdfa873f980d71b3acafea381af77e927cace
Author: Ben Hutchings <ben at decadent.org.uk>
AuthorDate: Mon, 21 Jan 2019 03:09:10 +0000
Committer: Ben Hutchings <ben at decadent.org.uk>
CommitDate: Mon, 21 Jan 2019 03:19:12 +0000
[klibc] alpha: Fix dual1 system call wrapper
Several get*id() system calls are paired up on alpha, returning one ID
in v0 (usual return register) and another ID in a4. The "dual1"
system call wrapper is used when we want the second ID from a4.
This system call wrapper had a fatal bug: it moves v0 to a4, but it
needs to do the opposite.
Also, in case of error, it stored the error flag (a3) to errno rather
than the error code (v0). Rearrange the code so we only change v0
at the bottom of the function, and store the original value of v0 to
errno before that.
Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
---
usr/klibc/arch/alpha/sysdual.S | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/usr/klibc/arch/alpha/sysdual.S b/usr/klibc/arch/alpha/sysdual.S
index 1719e37..03e719d 100644
--- a/usr/klibc/arch/alpha/sysdual.S
+++ b/usr/klibc/arch/alpha/sysdual.S
@@ -18,15 +18,15 @@
__syscall_dual1:
.frame sp,0,ra,0
callsys
- mov v0, a4
beq a3, 1f
br pv, 2f # pv <- pc
2:
ldgp gp, 0(pv)
lda a1, errno
- lda v0, -1(zero)
- stl a3, 0(a1)
+ stl v0, 0(a1)
+ lda a4, -1(zero)
1:
+ mov a4, v0
ret zero,(ra),1
.size __syscall_dual1,.-__syscall_dual1
More information about the klibc
mailing list