svn commit: r203428 - head/lib/libc/mips/sys

Randall Stewart rrs at FreeBSD.org
Wed Feb 3 12:59:44 UTC 2010


Author: rrs
Date: Wed Feb  3 12:59:44 2010
New Revision: 203428
URL: http://svn.freebsd.org/changeset/base/203428

Log:
  This fixes a bug found and fixed by JC. Basically
  no save was being done of the ra and gp pointers
  before we call the __error function.
  
  Obtained from:	JC (c.jayachandran at gmail.com)

Modified:
  head/lib/libc/mips/sys/ptrace.S

Modified: head/lib/libc/mips/sys/ptrace.S
==============================================================================
--- head/lib/libc/mips/sys/ptrace.S	Wed Feb  3 12:35:42 2010	(r203427)
+++ head/lib/libc/mips/sys/ptrace.S	Wed Feb  3 12:59:44 2010	(r203428)
@@ -42,14 +42,26 @@ __FBSDID("$FreeBSD$");
 #endif /* LIBC_SCCS and not lint */
 
 LEAF(ptrace)
+	.frame	sp,40,ra
+	.mask	0x80000000, -8
 #ifdef __ABICALLS__
 	.set    noreorder
 	.cpload t9
 	.set    reorder
 #endif
+	subu	sp, sp, 40
+	sw	ra,  32(sp)
+#ifdef __ABICALLS__
+	.cprestore 16
+#endif
 	la	t9, _C_LABEL(__error)	# locate address of errno
-	jalr	t9
+	jalr	t9	
+#ifdef __ABICALLS__
+	lw	gp, 16(sp)
+#endif
 	sw	zero, 0(v0)
+	lw	ra, 32(sp)
+	addu	sp, sp, 40
 	li	v0, SYS_ptrace
 	syscall
 	bne	a3, zero, 1f


More information about the svn-src-all mailing list