--- uClibc-0.9.29.orig/libc/sysdeps/linux/mips/syscall.S 2009-02-27 19:26:57.420288905 +0100 +++ uClibc-0.9.29/libc/sysdeps/linux/mips/syscall.S 2009-02-27 19:43:18.000000000 +0100 @@ -29,6 +29,9 @@ .type syscall,@function .ent syscall syscall: +#ifdef __PIC__ + SETUP_GP +#endif move v0, a0 /* Load system call number from first arg. */ move a0, a1 /* Move the next three args up a register. */ move a1, a2 @@ -60,6 +63,18 @@ #else addiu sp,sp,32 #endif + bnez a3, 1f j ra /* Return to caller. */ +1: + move a0,v0 /* Pass return val to C function. */ + +#ifdef __PIC__ + SETUP_GP64(v0, syscall) + PTR_LA t9, __syscall_error + RESTORE_GP64 + jr t9 +#else + j __syscall_error +#endif .end syscall .size syscall,.-syscall