|
From: Dave A. <ai...@us...> - 2001-05-27 23:20:15
|
Update of /cvsroot/linux-vax/kernel-2.4/include/asm-vax
In directory usw-pr-cvs1:/tmp/cvs-serv13351/include/asm-vax
Modified Files:
unistd.h
Log Message:
DA: re-written again... this time the return value from the syscall is
correct at the callee... before it was pure crapola... I hate header files..
re-compiling takes too long :-)
Index: unistd.h
===================================================================
RCS file: /cvsroot/linux-vax/kernel-2.4/include/asm-vax/unistd.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- unistd.h 2001/05/27 16:51:29 1.7
+++ unistd.h 2001/05/27 23:20:11 1.8
@@ -225,8 +225,16 @@
/* this from alpha port, easier to rework - atp */
#define _syscall_return(type) \
- return (_sc_err ? errno = _sc_ret, _sc_ret = -1L : 0), (type) _sc_ret
+do { \
+ if ((unsigned long)(_sc_ret) >= (unsigned long)(-125)) { \
+ errno = -(_sc_ret); \
+ _sc_ret = -1; \
+ } \
+ return (type) (_sc_ret); \
+} while (0)
+ /* return (_sc_ret ? errno = _sc_ret, _sc_ret = -1L : 0), (type) _sc_ret */
+
#define _syscall_clobbers \
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", \
"r9", "r10", "r11"
@@ -234,40 +242,35 @@
#define _syscall0(type, name) \
type name(void) \
{ \
- long _sc_ret, _sc_err; \
+ long _sc_ret; \
{ \
register long _sc_0 __asm__("r0"); \
- register long _sc_9 __asm__("r9"); \
- \
- _sc_0 = __NR_##name; \
- __asm__ __volatile__ ("pushl $0x0\n\t" \
+ __asm__ __volatile__ ("pushl $0x0\n\t" \
"movl sp, ap\n\t" \
- "chmk r0 # %0 %1 %2\n\t" \
- : "=r"(_sc_0), "=r"(_sc_9) \
+ "chmk r0 # %0 %1\n\t" \
+ : "=r"(_sc_0) \
: "0"(_sc_0) \
: _syscall_clobbers); \
- _sc_ret = _sc_0, _sc_err = _sc_9; \
+ _sc_ret = _sc_0; \
} \
- _syscall_return(type); \
+ _syscall_return(type); \
}
#define _syscall1(type,name,type1,arg1) \
type name(type1 arg1) \
{ \
- long _sc_ret, _sc_err; \
+ long _sc_ret; \
{ \
register long _sc_0 __asm__("r0"); \
- register long _sc_9 __asm__("r9"); \
- \
- _sc_0 = __NR_##name; \
- __asm__ __volatile__ ("pushl %3\n\t" \
+ _sc_0 = __NR_##name; \
+ __asm__ __volatile__ ("pushl %2\n\t" \
"pushl $0x1\n\t" \
"movl sp, ap\n\t" \
- "chmk r0 # %0 %1 %2 %3\n\t" \
- : "=r"(_sc_0), "=r"(_sc_9) \
+ "chmk r0 # %0 %1 %2\n\t" \
+ : "=r"(_sc_0) \
: "0"(_sc_0), "m"((long)arg1) \
: _syscall_clobbers); \
- _sc_ret = _sc_0, _sc_err = _sc_9; \
+ _sc_ret = _sc_0; \
} \
_syscall_return(type); \
}
@@ -275,21 +278,19 @@
#define _syscall2(type,name,type1,arg1,type2,arg2) \
type name(type1 arg1,type2 arg2) \
{ \
- long _sc_ret, _sc_err; \
+ long _sc_ret; \
{ \
register long _sc_0 __asm__("r0"); \
- register long _sc_9 __asm__("r9"); \
- \
_sc_0 = __NR_##name; \
- __asm__ __volatile__ ("pushl %4\n\t" \
- "pushl %3\n\t" \
+ __asm__ __volatile__ ("pushl %3\n\t" \
+ "pushl %2\n\t" \
"pushl $0x2\n\t" \
"movl sp, ap\n\t" \
"chmk r0 # %0 %1 %2 %3 %4\n\t" \
- : "=r"(_sc_0), "=r"(_sc_9) \
+ : "=r"(_sc_0) \
: "0"(_sc_0), "m"((long)arg1), "m"((long)arg2) \
: _syscall_clobbers); \
- _sc_ret = _sc_0, _sc_err = _sc_9; \
+ _sc_ret = _sc_0; \
} \
_syscall_return(type); \
}
@@ -297,23 +298,21 @@
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
type name(type1 arg1,type2 arg2,type3 arg3) \
{ \
- long _sc_ret, _sc_err; \
+ long _sc_ret; \
{ \
register long _sc_0 __asm__("r0"); \
- register long _sc_9 __asm__("r9"); \
- \
- _sc_0 = __NR_##name; \
- __asm__ __volatile__ ("pushl %5\n\t" \
- "pushl %4\n\t" \
+ _sc_0 = __NR_##name; \
+ __asm__ __volatile__ ("pushl %4\n\t" \
"pushl %3\n\t" \
+ "pushl %2\n\t" \
"pushl $0x3\n\t" \
"movl sp, ap\n\t" \
- "chmk r0 # %0 %1 %2 %3 %4 %5\n\t" \
- : "=r"(_sc_0), "=r"(_sc_9) \
+ "chmk r0 # %0 %1 %2 %3 %4\n\t" \
+ : "=r"(_sc_0) \
: "0"(_sc_0), "m"((long)arg1), "m"((long)arg2), \
"m"((long)arg3) \
: _syscall_clobbers); \
- _sc_ret = _sc_0, _sc_err = _sc_9; \
+ _sc_ret = _sc_0; \
} \
_syscall_return(type); \
}
@@ -321,24 +320,22 @@
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
{ \
- long _sc_ret, _sc_err; \
+ long _sc_ret; \
{ \
register long _sc_0 __asm__("r0"); \
- register long _sc_9 __asm__("r9"); \
- \
_sc_0 = __NR_##name; \
- __asm__ __volatile__ ("pushl %6\n\t" \
- "pushl %5\n\t" \
+ __asm__ __volatile__ ("pushl %5\n\t" \
"pushl %4\n\t" \
"pushl %3\n\t" \
+ "pushl %2\n\t" \
"pushl $0x4\n\t" \
"movl sp, ap\n\t" \
- "chmk r0 # %0 %1 %2 %3 %4 %5 %6\n\t" \
- : "=r"(_sc_0), "=r"(_sc_9) \
+ "chmk r0 # %0 %1 %2 %3 %4 %5\n\t" \
+ : "=r"(_sc_0) \
: "0"(_sc_0), "m"((long)arg1), "m"((long)arg2), \
"m"((long) arg3), "m"((long) arg4) \
: _syscall_clobbers); \
- _sc_ret = _sc_0, _sc_err = _sc_9; \
+ _sc_ret = _sc_0; \
} \
_syscall_return(type); \
}
@@ -347,26 +344,24 @@
type5,arg5) \
type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
{ \
- long _sc_ret, _sc_err; \
+ long _sc_ret; \
{ \
register long _sc_0 __asm__("r0"); \
- register long _sc_9 __asm__("r9"); \
- \
_sc_0 = __NR_##name; \
- __asm__ __volatile__ ("pushl %7\n\t" \
- "pushl %6\n\t" \
+ __asm__ __volatile__ ("pushl %6\n\t" \
"pushl %5\n\t" \
"pushl %4\n\t" \
"pushl %3\n\t" \
+ "pushl %2\n\t" \
"pushl $0x5\n\t" \
"movl sp, ap\n\t" \
- "chmk r0 # %0 %1 %2 %3 %4 %5 %6 %7\n\t" \
- : "=r"(_sc_0), "=r"(_sc_9) \
+ "chmk r0 # %0 %1 %2 %3 %4 %5 %6\n\t" \
+ : "=r"(_sc_0) \
: "0"(_sc_0), "m"((long)arg1), "m"((long)arg2), \
"m"((long)arg3), "m"((long)arg4), \
"m"((long)arg5) \
: _syscall_clobbers); \
- _sc_ret = _sc_0, _sc_err = _sc_9; \
+ _sc_ret = _sc_0; \
} \
_syscall_return(type); \
}
|