Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Feb 2010 03:37:52 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r203910 - projects/ppc64/lib/libc/powerpc64/sys
Message-ID:  <201002150337.o1F3bqm4080171@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201002150337.o1F3bqm4080171>