On Saturday, 31 July 1999 at  0:19:27 +0200, Jeroen Ruigrok/Asmodai wrote:
> * Greg Lehey ([EMAIL PROTECTED]) [990730 11:23]:
>> On Friday, 30 July 1999 at  8:45:32 +0200, Jeroen Ruigrok/Asmodai wrote:
>
>>> I started a make world on my box last night and then proceeded to go to bed.
>>>
>>> When I looked at my console this morning it had sprung into DDB because
>>> of a panic: ffs_alloccg: map corrupted.
>>
>> The first question is: do you have a kernel with debug symbols?  If
>> not, gdb isn't going to help you much.  bde can do it with ddb (though
>> it's a bit late if you have the dump), but mere mortals are in trouble
>> without symbols.
>
> I thought I had one, but alas I didn't. *sigh* One of those days when ye
> bump against stuff you should've done. Learned from that in a multiple
> ways, so next time I got everything I need...

That's why I tried a few months back to make debug symbols the
default.

>> The first thing you should do with any dump is a backtrace (bt).  The
>> appearance depends on how you got there.  Since you appear to have
>> gone via ddb, your dump should look something like this:
>
> Here is at least some info:
>
> (kgdb) bt
> #0  0xc0155f14 in boot ()
> #1  0xc0156249 in panic ()
> #2  0xc01e737b in ffs_mapsearch ()
> #3  0xc01e5cea in ffs_alloccg ()
> #4  0xc01e5756 in ffs_hashalloc ()
> #5  0xc01e4adc in ffs_alloc ()
> #6  0xc01e7af0 in ffs_balloc ()
> #7  0xc01f0a5c in ffs_write ()
> #8  0xc01827ce in vn_write ()
> #9  0xc01623ac in dofilewrite ()
> #10 0xc01622bb in write ()
> #11 0xc0225066 in syscall ()
> #12 0xc02192b6 in Xint0x80_syscall ()
> #13 0x807d24a in ?? ()
> #14 0x807666d in ?? ()

Hmm, that doesn't look like a dump from ddb.  Did you have
DDB_UNATTENDED set?

> Think I'll read up on GDB in my printed manual...
>
> Other hints/tips still welcome, I still have the dumps =)

OK, you have the stack frame.  The panic name appears wrong; it's out
of ffs_mapsearch, not ffs_alloccg.  Anyway, ffs_mapsearch looks like
this:

static ufs_daddr_t
ffs_mapsearch(fs, cgp, bpref, allocsiz)
        register struct fs *fs;
        register struct cg *cgp;
        ufs_daddr_t bpref;
        int allocsiz;
{
        ufs_daddr_t bno;
        int start, len, loc, i;
        int blk, field, subfield, pos;

At a first glance, it would seem that what you want to look at is
*cgp, which is stored at a fixed location from the stack frame
(%ebp+0xc).  You could enter something like

 (kgdb) f 2
 (kgdb) x/30x *(int*)($ebp+0xc)

This should give you the first 30 ints of the cylinder group.  If you
had symbols, this would be quite a bit simpler:

 (kgdb) p *cgp

What you do with the results depends a lot on what you find.  On the
whole, I wouldn't think it worth the pain of debugging without
symbols.

Greg 
--
See complete headers for address, home page and phone numbers
finger [EMAIL PROTECTED] for PGP public key


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to