|
From: <sv...@va...> - 2006-01-03 14:28:08
|
Author: cerion
Date: 2006-01-03 14:28:02 +0000 (Tue, 03 Jan 2006)
New Revision: 5490
Log:
Tidy up some ppc64 assembly & comments a little.
Modified:
trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
Modified: trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2006-01-03 14:20:36 U=
TC (rev 5489)
+++ trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2006-01-03 14:28:02 U=
TC (rev 5490)
@@ -140,7 +140,7 @@
pid_t* parent_tid in r8
void* ??? in r9
=20
- Note: r3 contains fn ptr, not fn entry ptr -- needs toc deref
+ Note: r3 contains fn desc ptr, not fn ptr -- p_fn =3D p_fn_desc[=
0]
System call requires:
=20
int $__NR_clone in r0 (sc number)
@@ -185,7 +185,8 @@
=20
// setup child stack
" rldicr 4,4, 0,59\n" // trim sp to multiple of 16 bytes
-" li 0,0\n" // (r4 &=3D ~0xF)
+ // (r4 &=3D ~0xF)
+" li 0,0\n"
" stdu 0,-32(4)\n" // make initial stack frame
" mr 29,4\n" // preserve sp
=20
@@ -202,13 +203,10 @@
" sc\n" // clone()
=20
" mfcr 4\n" // CR now in low half r4
-" sldi 4,4,16\n"
-" sldi 4,4,16\n" // CR now in hi half r4
+" sldi 4,4,32\n" // CR now in hi half r4
=20
-" sldi 3,3,16\n"
-" sldi 3,3,16\n"
-" srdi 3,3,16\n"
-" srdi 3,3,16\n" // zero out hi half r3
+" sldi 3,3,32\n"
+" srdi 3,3,32\n" // zero out hi half r3
=20
" or 3,3,4\n" // r3 =3D CR : syscall-retval
" cmpwi 3,0\n" // child if retval =3D=3D 0 (note, =
cmpw)
@@ -220,7 +218,7 @@
That does leave a small window for a signal to be delivered
on the wrong stack, unfortunately. */
" mr 1,29\n"
-" ld 30, 0(30)\n" // convert fn ptr to fn entry
+" ld 30, 0(30)\n" // convert fn desc ptr to fn ptr
" mtctr 30\n" // ctr reg =3D fn
" mr 3,31\n" // r3 =3D arg
" bctrl\n" // call fn()
|