[parisc-linux] parisc64 kernel and ret1 (gr29) setup

Richard Hirst rhirst@linuxcare.com
Thu, 21 Dec 2000 16:00:06 +0000


Hi,
  I tried calling ptrace() from a 32 bit app on a 64 bit kernel, and
the kernel crashed.  sys_ptrace needs a 32 bit wrapper, but that is
a seperate issue (I think).

It died at sys_ptrace+0x28, where it tried to use ret1.
(ret1 = 00000000000517a1):

0000000000000000 <sys_ptrace>:
   0:   0f c2 12 c1     std  rp,-10(sr0,sp)
   4:   37 de 03 00     ldo 180(sp),sp
   8:   73 c5 3e 51     std r5,-d8(sp)
   c:   37 a5 3f 81     ldo -40(ret1),r5
  10:   73 c4 3e 61     std r4,-d0(sp)
  14:   08 1b 02 44     copy dp,r4
  18:   db 39 0f e0     extrd,s r25,63,32,r25
  1c:   73 c8 3e 31     std r8,-e8(sp)
  20:   73 c6 3e 41     std r6,-e0(sp)
  24:   73 c3 3e 71     std r3,-c8(sp)
  28:   73 b7 3f b1     std r23,-28(ret1)
  2c:   ef 40 2e 28     cmpib,*= 0,r26,748 <.L1098+0x7c>
  30:   34 08 3f ff     ldi -1,r8
  34:   d3 33 1e e8     extrw,s r25,23,24,r19
  38:   2b 60 00 00     addil 0,dp,%r1
                        38: R_PARISC_DLTIND21L  pidhash

At the moment we set up sp with "ldo TASK_SZ_ALGN+64(%r1),%r30" on syscall
entry.  For 64 bit presumably we should do something like:

	ldo     TASK_SZ_ALGN+80(%r1),%r30
	ldo	-16(%r30),%r29

Which gives 64 bytes for parameter saves, plus 16 bytes for rp+sp, and
initialises ret1.

Does that sound right?

Richard