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); \ } |