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