1
diff --git a/klibc/arch/parisc/Makefile.inc b/klibc/arch/parisc/Makefile.inc
2
index 980a543..4fddf5f 100644
3
--- a/klibc/arch/parisc/Makefile.inc
4
+++ b/klibc/arch/parisc/Makefile.inc
5
@@ -14,6 +14,3 @@ ARCHOBJS = \
6
ARCHOOBJS = $(patsubst %o,%.lo,%(ARCHOBJS))
10
-arch/$(ARCH)/syscall.o: arch/$(ARCH)/syscall.c
11
- $(CC) $(CFLAGS) -ffixed-r20 -c -o $@ $<
12
diff --git a/klibc/arch/parisc/syscall.S b/klibc/arch/parisc/syscall.S
14
index 0000000..2554404
16
+++ b/klibc/arch/parisc/syscall.S
19
+ * arch/parisc/syscall.S
21
+ * %r20 contains the system call number, %r2 contains whence we came
27
+ .globl __syscall_common
28
+ .type __syscall_common,@function
31
+ stw,ma %r4,0x40(%sp)
33
+ ldw -0x74(%sp),%r22 ; %arg4
34
+ ldw -0x78(%sp),%r21 ; %arg5
37
+ ble 0x100(%sr2, %r0) ; jump to gateway page
42
+ sub %r0,%ret0,%r22 ; %r22 = -%ret0
43
+ cmpb,>>=,n %r19,%ret0,1f ; if %r19 >= -4095UL
44
+ ldi -1,%ret0 ; nullified on taken forward
46
+ /* store %r22 to errno... somehow */
48
+ ldo R%errno(%r1),%r1
52
+ bv %r0(%r2) ; jump back
53
+ ldw,mb -0x40(%sp),%r4
55
+ .size __syscall_common,.-__syscall_common
56
diff --git a/klibc/arch/parisc/syscall.c b/klibc/arch/parisc/syscall.c
57
deleted file mode 100644
58
index 99ef5fe..0000000
59
--- a/klibc/arch/parisc/syscall.c
63
- * arch/parisc/syscall.c
65
- * This function is called from a stub with %r20 already set up.
66
- * Compile this function with -ffixed-r20 so that it doesn't clobber
67
- * this register by mistake.
70
-#include <klibc/compiler.h>
73
-long __syscall_common(long a0, long a1, long a2, long a3, long a4, long a5)
75
- register unsigned long rv asm ("r28");
77
- asm volatile("\tble 0x100(%%sr2, %%r0)\n"
79
- : "r" (a0), "r" (a1), "r" (a2), "r" (a3), "r" (a4), "r" (a5)
80
- : "%r1", "%r2", "%r29", "%r31");
82
- if ( __unlikely(rv >= -4095UL) ) {