svn commit: r203910 - projects/ppc64/lib/libc/powerpc64/sys

Nathan Whitehorn nwhitehorn at FreeBSD.org
Mon Feb 15 03:37:53 UTC 2010


Author: nwhitehorn
Date: Mon Feb 15 03:37:52 2010
New Revision: 203910
URL: http://svn.freebsd.org/changeset/base/203910

Log:
  Fix invocation of __cerror following earlier API changes and place the
  old value of LR in the parent's stack frame in ptrace(2) instead of
  accidentally putting it in the function's own. This gets GDB at least
  not to crash on a running program, but it still does not work correctly.

Modified:
  projects/ppc64/lib/libc/powerpc64/sys/brk.S
  projects/ppc64/lib/libc/powerpc64/sys/exect.S
  projects/ppc64/lib/libc/powerpc64/sys/pipe.S
  projects/ppc64/lib/libc/powerpc64/sys/ptrace.S
  projects/ppc64/lib/libc/powerpc64/sys/sbrk.S

Modified: projects/ppc64/lib/libc/powerpc64/sys/brk.S
==============================================================================
--- projects/ppc64/lib/libc/powerpc64/sys/brk.S	Mon Feb 15 03:09:55 2010	(r203909)
+++ projects/ppc64/lib/libc/powerpc64/sys/brk.S	Mon Feb 15 03:37:52 2010	(r203910)
@@ -59,5 +59,12 @@ ENTRY(brk)
 	blr				/* return 0 */
 
 1:
-	b	PIC_PLT(HIDENAME(cerror))
+	mflr	%r0
+	std	%r0,16(%r1)
+	stdu	%r1,-48(%r1)
+	bl	PIC_PLT(HIDENAME(cerror))
 	nop
+	ld	%r1,0(%r1)
+	ld	%r0,16(%r1)
+	mtlr	%r0
+	blr

Modified: projects/ppc64/lib/libc/powerpc64/sys/exect.S
==============================================================================
--- projects/ppc64/lib/libc/powerpc64/sys/exect.S	Mon Feb 15 03:09:55 2010	(r203909)
+++ projects/ppc64/lib/libc/powerpc64/sys/exect.S	Mon Feb 15 03:37:52 2010	(r203910)
@@ -36,5 +36,12 @@ ENTRY(exect)
 	bso	1f
 	blr
 1:
-	b	PIC_PLT(HIDENAME(cerror))
+	mflr	%r0
+	std	%r0,16(%r1)
+	stdu	%r1,-48(%r1)
+	bl	PIC_PLT(HIDENAME(cerror))
 	nop
+	ld	%r1,0(%r1)
+	ld	%r0,16(%r1)
+	mtlr	%r0
+	blr

Modified: projects/ppc64/lib/libc/powerpc64/sys/pipe.S
==============================================================================
--- projects/ppc64/lib/libc/powerpc64/sys/pipe.S	Mon Feb 15 03:09:55 2010	(r203909)
+++ projects/ppc64/lib/libc/powerpc64/sys/pipe.S	Mon Feb 15 03:37:52 2010	(r203910)
@@ -40,5 +40,12 @@ ENTRY(pipe)
 	li	%r3,0
 	blr			/* and return 0 */
 1:
-	b	PIC_PLT(HIDENAME(cerror))
+	mflr	%r0
+	std	%r0,16(%r1)
+	stdu	%r1,-48(%r1)
+	bl	PIC_PLT(HIDENAME(cerror))
 	nop
+	ld	%r1,0(%r1)
+	ld	%r0,16(%r1)
+	mtlr	%r0
+	blr

Modified: projects/ppc64/lib/libc/powerpc64/sys/ptrace.S
==============================================================================
--- projects/ppc64/lib/libc/powerpc64/sys/ptrace.S	Mon Feb 15 03:09:55 2010	(r203909)
+++ projects/ppc64/lib/libc/powerpc64/sys/ptrace.S	Mon Feb 15 03:37:52 2010	(r203910)
@@ -33,7 +33,7 @@ __FBSDID("$FreeBSD$");
 ENTRY(ptrace)
 	mflr	%r0
 	stdu	%r1,-68(%r1)
-	std	%r0,16(%r1)
+	std	%r0,84(%r1)
 	stw	%r3,48(%r1)
 	stw	%r4,52(%r1)
 	std	%r5,56(%r1)
@@ -47,7 +47,7 @@ ENTRY(ptrace)
 	lwz	%r3,48(%r1)
 	lwz	%r4,52(%r1)
 	ld	%r5,56(%r1)
-	ld	%r0,16(%r1)
+	ld	%r0,84(%r1)
 	lwz	%r6,64(%r1)
 	mtlr	%r0
 	ld	%r1,0(%r1)
@@ -56,5 +56,10 @@ ENTRY(ptrace)
 	bso	1f
 	blr
 1:
-	b	PIC_PLT(HIDENAME(cerror))
+	stdu	%r1,-48(%r1)		/* lr already saved */
+	bl	PIC_PLT(HIDENAME(cerror))
 	nop
+	ld	%r1,0(%r1)
+	ld	%r0,16(%r1)
+	mtlr	%r0
+	blr

Modified: projects/ppc64/lib/libc/powerpc64/sys/sbrk.S
==============================================================================
--- projects/ppc64/lib/libc/powerpc64/sys/sbrk.S	Mon Feb 15 03:09:55 2010	(r203909)
+++ projects/ppc64/lib/libc/powerpc64/sys/sbrk.S	Mon Feb 15 03:37:52 2010	(r203910)
@@ -54,5 +54,12 @@ ENTRY(sbrk)
 	mr      %r3,%r6				/* set return value */
 	blr
 2:
-	b	PIC_PLT(HIDENAME(cerror))
+	mflr	%r0
+	std	%r0,16(%r1)
+	stdu	%r1,-48(%r1)
+	bl	PIC_PLT(HIDENAME(cerror))
 	nop
+	ld	%r1,0(%r1)
+	ld	%r0,16(%r1)
+	mtlr	%r0
+	blr


More information about the svn-src-projects mailing list