diff --git a/toolchain/uClibc/patches/160-mips_syscall.patch b/toolchain/uClibc/patches/160-mips_syscall.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c5e5f6b468628fef4d9e8be7fe24ce3488a27bcb
--- /dev/null
+++ b/toolchain/uClibc/patches/160-mips_syscall.patch
@@ -0,0 +1,31 @@
+--- 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