Subject: Re: Port benchmarks
To: None <port-alpha@netbsd.org>
From: Jason R Thorpe <thorpej@zembu.com>
List: port-alpha
Date: 04/02/2000 13:26:49
On Sun, Apr 02, 2000 at 09:25:54PM +0200, Manuel Bouyer wrote:

 >     pc         = 0xfffffc000039b6fc
 >     ra         = 0xfffffc00004bf498

 > panic: trap
 > Stopped in  at  0xfffffc00004caca4:     ret     zero,(ra)
 > db> 
 > 
 > 'tr' doesn't show anything here.

Right, DDB isn't initialized yet, so no symbols are available... and
without symbols, you can't trace back on the Alpha.

 > I tried to boot with the 'd' flag, but it gets the kernel trap before
 > entering ddb.
 > gdb says:
 > (gdb) l *0xfffffc00004caca4
 > 0xfffffc00004caca4 is in cpu_Debugger (../../../../arch/alpha/alpha/db_interface.c:225).
 > 220     
 > 221     void
 > 222     cpu_Debugger()
 > 223     {
 > 224     
 > 225             __asm __volatile("call_pal 0x81");              /* bugchk */
 > 226     }

Right, well, this part works, at least.  The reason you don't get into DDB
with -d is because it'd dying in pmap_bootstrap().

 > (gdb) l *0xfffffc000039b6fc
 > 0xfffffc000039b6fc is in pool_init (../../../../kern/subr_pool.c:439).
 > 434             pp->pr_minitems = 0;
 > 435             pp->pr_minpages = 0;
 > 436             pp->pr_maxpages = UINT_MAX;
 > 437             pp->pr_roflags = flags;
 > 438             pp->pr_flags = 0;
 > 439             pp->pr_size = ALIGN(size);

Hm... Disassemble that, please :-)

 > I also compiled a libc with -mcpu=21264, and now portmap cores dump with an
 > Illegal instruction, in libc (_svc_getreqset()). Disassembly around the
 > instruction which caused the fault is (fault is at 0x16048d8e0):
 > 0x16048d8d0 <_svc_getreqset+80>:        ldl     s2,0(s4)
 > 0x16048d8d4 <_svc_getreqset+84>:        addq    s4,0x4,s4
 > 0x16048d8d8 <_svc_getreqset+88>:        zapnot  s2,0xf,t1
 > 0x16048d8dc <_svc_getreqset+92>:        cttz    t1,t0
 > 0x16048d8e0 <_svc_getreqset+96>:        addq    t0,0x1,t0

Right, so the PC in the trap frame is the instruction *AFTER* the faulting
instruction.  Methinks the `cttz' instruction is what bit you.  I'm betting
that the ALIGN() macro above is getting an instruction from the Counting
Extension inserted in there, too.

Those instructions SHOULD be available on the 21264.  But I'll add some
code to print out the extensions present on the CPU so we can tell For
Sure.

-- 
        -- Jason R. Thorpe <thorpej@zembu.com>