Subject: ddb help
To: None <port-sparc64@netbsd.org>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: port-sparc64
Date: 10/24/2004 22:19:02
Hi,
I can't understand how this can happen. Is it possible that ddb is printing
the wrong address here, or is missing a function call in the stack frame ?
This is a current GENERIC32 kernel, recompiled with -g

text_access_fault: pc=0 va=0
kernel trap 64: +fast instruction access MMU miss
Stopped in pid 4.1 (atabus0) at 0:      undefined
db> tr
wdc_ata_bio_start(1dd4150, 1e34000, 0, 0, 0, 1dd4180) at netbsd:wdc_ata_bio_star
t+0x48c
atabus_thread(0, 0, ffff, 5bcd, 0, 0) at netbsd:atabus_thread+0x128
proc_trampoline(0, 0, 0, 0, 0, 0) at netbsd:proc_trampoline+0x4
db> examine/i wdc_ata_bio_start+0x480
netbsd:wdc_ata_bio_start+0x480: st              %g1, [%l3 + 0x34]
db> 
netbsd:wdc_ata_bio_start+0x484: stb             %g0, [%l0 + 0xa]
db> 
netbsd:wdc_ata_bio_start+0x488: or              %g0, %i0, %o0
db> 
netbsd:wdc_ata_bio_start+0x48c: call            netbsd:wdc_ata_bio_done
db> 
netbsd:wdc_ata_bio_start+0x490: or              %g0, %i1, %o1
db> 
netbsd:wdc_ata_bio_start+0x494: ldd             [%l2 + 0xc0], %o4
db> 
netbsd:wdc_ata_bio_start+0x498: ldsb            [%l2 + 0xc8], %g4
db> 
netbsd:wdc_ata_bio_start+0x49c: or              %g4, 0x9, %g1
db> 
netbsd:wdc_ata_bio_start+0x4a0: subcc           %g1, 0x1d, %g0
db> show registers 
tstate      0x44
pc          0
npc         0
ipl         0x5
y           0
g0          0
g1          0
g2          0
g3          0
g4          0
g5          0
g6          0
g7          0xffffffff
o0          0
o1          0
o2          0
o3          0
o4          0
o5          0
o6          0
o7          0
l0          0
l1          0
l2          0
l3          0
l4          0
l5          0
l6          0
l7          0
i0          0
i1          0
i2          0
i3          0
i4          0
i5          0
i6          0
i7          0
f0          0x3fb96ced
f2          0xffffffff
f4          0xffffffff
f6          0xffffffff
f8          0x3fb0c299
f10         0x3eef7510
f12         0x41e00000
f14         0x3ff00000
f16         0
f18         0x3eef7510
f20         0x40000
f22         0xffffffff
f24         0xffffffff
f26         0xffffffff
f28         0xffffffff
f30         0xffffffff
f32         0xffffffff
f34         0xffffffff
f36         0xffffffff
f38         0xffffffff
f40         0xffffffff
f42         0xffffffff
f44         0xffffffff
f46         0xffffffff
f48         0xffffffff
f50         0xffffffff
f52         0xffffffff
f54         0xffffffff
f56         0xffffffff
f58         0xffffffff
f60         0xffffffff
f62         0xffffffff
fsr         0
gsr         0
0:      undefined


The matching lines in the sources would be:
0x1386f0c is in wdc_ata_bio_start (/local/pop1/bouyer/current/src/sys/dev/ata/ata_wdc.c:309).
304                     ata_bio->r_error = chp->ch_error;
305                     ata_bio->error = ERROR;
306             }
307     ctrldone:
308             drvp->state = 0;
309             wdc_ata_bio_done(chp, xfer);
310             bus_space_write_1(wdr->ctl_iot, wdr->ctl_ioh, wd_aux_ctlr, WDCTL_4BIT);
311             return;
312     }

Any idea how to debug this further ?

-- 
Manuel Bouyer <bouyer@antioche.eu.org>
     NetBSD: 26 ans d'experience feront toujours la difference
--