Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 5 May 2001 14:13:24 -0500 (CDT)
From:      Rohit Rakshe <rakshe@cs.umn.edu>
To:        <freebsd-hackers@FreeBSD.ORG>
Subject:   FPU exception, kernel panic
Message-ID:  <Pine.GSO.4.31.0105051400070.16637-100000@mercury.cs.umn.edu>
In-Reply-To: <20010505195859.A383@cds220.halls.umist.ac.uk>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi !

I modified some TCP and UDP code in FreeBSD 4.1 and suddenly started
getting (almost repeatable) kernel panics. This is how it looks like
from remote gdb:

(kgdb) bt
#0  0xc0192e58 in panic (fmt=0xc035c076 "npxintr from nowhere") at
../../kern/kern_shutdown.c:550
#1  0xc0303c6c in npx_intr (dummy=0x0) at ../../i386/isa/npx.c:721
#2  0xc02e1052 in Xfpu ()
#3  0xc019824d in softclock () at ../../kern/kern_timeout.c:131
.
.
.
(kgdb) list
126                                     } else {
127                                             c->c_flags =
128                                                 (c->c_flags &
~CALLOUT_PENDING);
129                                     }
130                                     splx(s);
131                                     c_func(c_arg);
132                                     s = splhigh();
133                                     steps = 0;
134                                     c = nextsoftcheck;
135                             }
.
.
.
(kgdb)
#1  0xc0303c6c in npx_intr (dummy=0x0) at ../../i386/isa/npx.c:721
721                     panic("npxintr from nowhere");
(kgdb) p npxproc
$5 = 0
(kgdb) p npx_exists
$6 = 1 '\001'
.
.
.
(kgdb) info all-registers
eax            0x12     18
ecx            0xc03a60a0       -1069916000
edx            0x400000 4194304
ebx            0xcbc56540       -876255936
esp            0xc0361354       0xc0361354
ebp            0xc0361410       0xc0361410
esi            0x400000 4194304
edi            0x400000 4194304
eip            0xc019824d       0xc019824d
eflags         0x346    838
cs             0x8      8
ss             0x10     16
ds             0x400010 4194320
es             0x10     16
fs             0x0      0
gs             0x0      0
(kgdb) info float
status 0xc8f5: exceptions: INVALID DIVZ UNDERF LOS FPSTACK; flags: 1000;
top 1
control 0x6620: compute to 53 bits; round DOWN; mask: LOS;
warning: reserved bits on: 0x6000

last instruction: opcode 0x2825; pc 0x71a4:0x2824c316; operand
0xf800:0x8176640
 regno     tag  msb              lsb  value
%st(7)    valid 0000000008179a802825  Denormal (0 as a double)
%st(6)    valid 71a42824c31600000000  Unnormal (NaN)
%st(5)    valid 08176640282571a42824  Unnormal (NaN)
%st(4)    valid c8910818f9380818f800  Unnormal (NaN)
%st(3)    valid 282571a42824c316bfbf  Unnormal (NaN)
%st(2)    valid e82808176620089c3000  Unnormal (NaN)
%st(1)    valid 00000032000000010001  Denormal (0 as a double)
%st(0) => valid 0000000000240818f800  Denormal (0 as a double)


So, this means that there was a FPU exception in kernel, right ?

1. The code which I added in kernel does not use any floats. So I am
wondering why this problem should happen at all.

2. pc register in FPU should give address of the instruction which caused
this exception, right ?

3. If yes, how do I translate this 48 bit address in a linear address
which gdb can understand ?


Thanks for help !


- Rohit


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.31.0105051400070.16637-100000>