32 lines
		
	
	
		
			760 B
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			760 B
		
	
	
	
		
			Diff
		
	
	
	
	
	
--- 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
 |