Inline function (difficult debug)
Menshikov Konstantin
kostjn at peterhost.ru
Fri Jun 5 14:58:15 UTC 2009
John Baldwin wrote:
> On Thursday 04 June 2009 9:02:32 am Menshikov Konstantin wrote:
>
>> John Baldwin wrote:
>>
>>> On Thursday 04 June 2009 5:24:07 am Menshikov Konstantin wrote:
>>>
>>>
>>>> Hi.
>>>> My system FreeBSD 7.1 RELEASE periodically freeze.
>>>>
>>>> I`m compiling kernel with WITNESS and get backtrace.
>>>>
>>>> #0 doadump () at pcpu.h:195
>>>> #1 0xffffffff801a899c in db_fncall (dummy1=Variable "dummy1" is not
>>>> available.
>>>> ) at /usr/src/sys/ddb/db_command.c:516
>>>> #2 0xffffffff801a8ecf in db_command (last_cmdp=0xffffffff80825688,
>>>> cmd_table=0x0, dopager=1)
>>>> at /usr/src/sys/ddb/db_command.c:413
>>>> #3 0xffffffff801a90e0 in db_command_loop () at
>>>> /usr/src/sys/ddb/db_command.c:466
>>>> #4 0xffffffff801aaa19 in db_trap (type=Variable "type" is not available.
>>>> ) at /usr/src/sys/ddb/db_main.c:228
>>>> #5 0xffffffff803d5e55 in kdb_trap (type=3, code=0,
>>>> tf=0xffffffffabf284c0) at /usr/src/sys/kern/subr_kdb.c:524
>>>> #6 0xffffffff8059a0e5 in trap (frame=0xffffffffabf284c0) at
>>>> /usr/src/sys/amd64/amd64/trap.c:538
>>>> #7 0xffffffff8057f60e in calltrap () at
>>>> /usr/src/sys/amd64/amd64/exception.S:209
>>>> #8 0xffffffff803d602d in kdb_enter_why (why=0xffffffff80628137
>>>> "witness", msg=0xa <Address 0xa out of bounds>)
>>>> at cpufunc.h:63
>>>> #9 0xffffffff803e70c3 in witness_checkorder (lock=Variable "lock" is not
>>>> available.
>>>> ) at /usr/src/sys/kern/subr_witness.c:1126
>>>> #10 0xffffffff8039e341 in _mtx_lock_spin_flags (m=0xffffffff8084fad0,
>>>> opts=0, file=dwarf2_read_address: Corrupted DWARF expression.
>>>> ) at /usr/src/sys/kern/kern_mutex.c:227
>>>> #11 0xffffffff80319838 in sc_puts (scp=0xffffffff8084f980,
>>>> buf=0xffffffffabf286a7 "a@\az\200ЪЪЪЪ", len=1)
>>>> at /usr/src/sys/dev/syscons/syscons.c:2519
>>>> #12 0xffffffff8031b3da in sc_cnputc (cd=Variable "cd" is not available.
>>>> ) at /usr/src/sys/dev/syscons/syscons.c:1561
>>>> #13 0xffffffff803f9d89 in cnputc (c=97)
>>>>
> at /usr/src/sys/kern/tty_cons.c:632
>
>>>> #14 0xffffffff803d993b in putchar (c=97, arg=Variable "arg" is not
>>>> available.
>>>> ) at /usr/src/sys/kern/subr_prf.c:421
>>>> #15 0xffffffff803d7f22 in kvprintf (fmt=0xffffffff80628b89 "cquiring
>>>> duplicate lock of same type: \"%s\"\n",
>>>> func=0xffffffff803d98d0 <putchar>, arg=0xffffffffabf28890, radix=10,
>>>> ap=Variable "ap" is not available.
>>>> ) at /usr/src/sys/kern/subr_prf.c:674
>>>> #16 0xffffffff803d9384 in printf (fmt=Variable "fmt" is not available.
>>>> ) at /usr/src/sys/kern/subr_prf.c:314
>>>> #17 0xffffffff803e705d in witness_checkorder (lock=0xffffffff808668f8,
>>>> flags=0,
>>>> file=0xffffffff80626cf8 "/usr/src/sys/kern/subr_sleepqueue.c", line=232)
>>>> at /usr/src/sys/kern/subr_witness.c:948
>>>> #18 0xffffffff8039e341 in _mtx_lock_spin_flags (m=0xffffffff808668f8,
>>>> opts=0, file=dwarf2_read_address: Corrupted DWARF expression.
>>>> ) at /usr/src/sys/kern/kern_mutex.c:227
>>>> #19 0xffffffff803b2271 in wakeup (ident=0xffffffff80850ac0) at
>>>> /usr/src/sys/kern/kern_synch.c:341
>>>> #20 0xffffffff803aed95 in tdsignal (p=0xffffff00017978f0,
>>>> td=0xffffff000146a6e0, sig=14, ksi=Variable "ksi" is not available.
>>>> )
>>>> at /usr/src/sys/kern/kern_sig.c:2292
>>>> #21 0xffffffff803ba2de in realitexpire (arg=Variable "arg" is not
>>>>
> available.
>
>>>> ) at /usr/src/sys/kern/kern_time.c:669
>>>> #22 0xffffffff803bbe1a in softclock (dummy=Variable "dummy" is not
>>>> available.
>>>> ) at /usr/src/sys/kern/kern_timeout.c:274
>>>> #23 0xffffffff8038c120 in ithread_loop (arg=0xffffff00010ebc00) at
>>>> /usr/src/sys/kern/kern_intr.c:1088
>>>> #24 0xffffffff8038978a in fork_exit (callout=0xffffffff8038c040
>>>> <ithread_loop>, arg=0xffffff00010ebc00,
>>>> frame=0xffffffffabf28c80) at /usr/src/sys/kern/kern_fork.c:804
>>>> #25 0xffffffff8057f9de in fork_trampoline () at
>>>> /usr/src/sys/amd64/amd64/exception.S:455
>>>>
>>>> But file /usr/src/sys/kern/kern_sig.c:2292
>>>> hasn`t run function wake up on string 2292
>>>> I`m think, what compiler use inline function, therefore code and trace
>>>> differ.
>>>> Tell me please, how compile kernel without any inline function.
>>>>
>
>
> Where did you get the pointer values from? I meant doing 'frame 17', 'p
> i', 'p *lock', 'p *lock1', 'p *lock2'
>
>
Excuse I has not understood you.
Disable optimization -O0, disable inline function.
I`m get new backtrace
#0 doadump () at /usr/src/sys/kern/kern_shutdown.c:244
#1 0xffffffff801c58fc in db_fncall_generic (addr=-2142879744,
rv=0xffffffffac0f9d88, nargs=0, args=0xffffffffac0f9d90)
at /usr/src/sys/ddb/db_command.c:516
#2 0xffffffff801c5805 in db_fncall (dummy1=-2136396608, dummy2=0,
dummy3=-1408262592,
dummy4=0xffffffffac0f9e30 "`\224\224\200ЪЪЪЪЪЪЪЪ\r") at
/usr/src/sys/ddb/db_command.c:568
#3 0xffffffff801c5546 in db_command (last_cmdp=0xffffffff809d14c0,
cmd_table=0x0, dopager=1)
at /usr/src/sys/ddb/db_command.c:413
#4 0xffffffff801c5644 in db_command_loop () at
/usr/src/sys/ddb/db_command.c:466
#5 0xffffffff801c81e9 in db_trap (type=3, code=0) at
/usr/src/sys/ddb/db_main.c:228
#6 0xffffffff8049d629 in kdb_trap (type=3, code=0,
tf=0xffffffffac0fa0f0) at /usr/src/sys/kern/subr_kdb.c:524
#7 0xffffffff807180d2 in trap (frame=0xffffffffac0fa0f0) at
/usr/src/sys/amd64/amd64/trap.c:538
#8 0xffffffff806f7cee in calltrap () at
/usr/src/sys/amd64/amd64/exception.S:209
#9 0xffffffff8049d0c5 in breakpoint () at cpufunc.h:63
#10 0xffffffff8049d0b2 in kdb_enter_why (why=0xffffffff807c9140
"witness", msg=0xffffffff807c97f0 "witness_checkorder")
at /usr/src/sys/kern/subr_kdb.c:315
#11 0xffffffff804b3db8 in witness_checkorder (lock=0xffffffff809fb8b0,
flags=9,
file=0xffffffff807aeb30 "/usr/src/sys/dev/syscons/syscons.c",
line=2519) at /usr/src/sys/kern/subr_witness.c:1126
#12 0xffffffff80453ead in _mtx_lock_spin_flags (m=0xffffffff809fb8b0,
opts=0,
file=0xffffffff807aeb30 "/usr/src/sys/dev/syscons/syscons.c",
line=2519) at /usr/src/sys/kern/kern_mutex.c:227
#13 0xffffffff803a0d4d in sc_puts (scp=0xffffffff809fb760,
buf=0xffffffffac0fa337 "a`╥\237\200ЪЪЪЪ\200д)\001", len=1)
at /usr/src/sys/dev/syscons/syscons.c:2519
#14 0xffffffff8039f063 in sc_cnputc (cd=0xffffffff80949460, c=97) at
/usr/src/sys/dev/syscons/syscons.c:1561
#15 0xffffffff804cf82f in cnputc (c=97) at /usr/src/sys/kern/tty_cons.c:632
#16 0xffffffff804a0864 in putcons (c=97, ap=0xffffffffac0fa6b0) at
/usr/src/sys/kern/subr_prf.c:372
#17 0xffffffff804a09a4 in putchar (c=97, arg=0xffffffffac0fa6b0) at
/usr/src/sys/kern/subr_prf.c:413
#18 0xffffffff804a0ee9 in kvprintf (fmt=0xffffffff807c9911 "cquiring
duplicate lock of same type: \"%s\"\n",
func=0xffffffff804a0920 <putchar>, arg=0xffffffffac0fa6b0, radix=10,
ap=0xffffffffac0fa6e0)
at /usr/src/sys/kern/subr_prf.c:599
#19 0xffffffff804a07a4 in printf (fmt=0xffffffff807c9910 "acquiring
duplicate lock of same type: \"%s\"\n")
at /usr/src/sys/kern/subr_prf.c:314
#20 0xffffffff804b374e in witness_checkorder (lock=0xffffffff80a13448,
flags=9,
file=0xffffffff807c7a38 "/usr/src/sys/kern/subr_sleepqueue.c",
line=232) at /usr/src/sys/kern/subr_witness.c:948
#21 0xffffffff80453ead in _mtx_lock_spin_flags (m=0xffffffff80a13448,
opts=0,
file=0xffffffff807c7a38 "/usr/src/sys/kern/subr_sleepqueue.c",
line=232) at /usr/src/sys/kern/kern_mutex.c:227
#22 0xffffffff804a8472 in sleepq_lock (wchan=0xffffffff809fc8a0) at
/usr/src/sys/kern/subr_sleepqueue.c:232
#23 0xffffffff80470175 in wakeup (ident=0xffffffff809fc8a0) at
/usr/src/sys/kern/kern_synch.c:341
#24 0xffffffff806cf110 in kick_proc0 () at /usr/src/sys/vm/vm_glue.c:761
#25 0xffffffff8046aa16 in tdsigwakeup (td=0xffffff000172a000, sig=14,
action=0x2, intrval=4)
at /usr/src/sys/kern/kern_sig.c:2422
#26 0xffffffff8046a5d1 in do_tdsignal (p=0xffffff0001727000,
td=0xffffff000172a000, sig=14, ksi=0xffffff00017dfd68)
at /usr/src/sys/kern/kern_sig.c:2292
#27 0xffffffff80469d48 in tdsignal (p=0xffffff0001727000, td=0x0,
sig=14, ksi=0xffffff00017dfd68)
at /usr/src/sys/kern/kern_sig.c:2029
#28 0xffffffff80469cd9 in psignal_event (p=0xffffff0001727000,
sigev=0xffffff00017dfcd8, ksi=0xffffff00017dfd68)
at /usr/src/sys/kern/kern_sig.c:2017
#29 0xffffffff8047c036 in itimer_fire (it=0xffffff00017dfca8) at
/usr/src/sys/kern/kern_time.c:1419
#30 0xffffffff8047be84 in realtimer_expire (arg=0xffffff00017dfca8) at
/usr/src/sys/kern/kern_time.c:1396
#31 0xffffffff8047c9a6 in softclock (dummy=0x0) at
/usr/src/sys/kern/kern_timeout.c:274
#32 0xffffffff8043c057 in ithread_execute_handlers
(p=0xffffff0001105000, ie=0xffffff000110c000)
---Type <return> to continue, or q <return> to quit---
at /usr/src/sys/kern/kern_intr.c:1088
#33 0xffffffff8043c28f in ithread_loop (arg=0xffffff00010ecbe0) at
/usr/src/sys/kern/kern_intr.c:1175
#34 0xffffffff8043a3d7 in fork_exit (callout=0xffffffff8043c1d0
<ithread_loop>, arg=0xffffff00010ecbe0,
frame=0xffffffffac0fac80) at /usr/src/sys/kern/kern_fork.c:804
#35 0xffffffff806f80be in fork_trampoline () at
/usr/src/sys/amd64/amd64/exception.S:455
Frame 20
(kgdb) f 20
#20 0xffffffff804b374e in witness_checkorder (lock=0xffffffff80a13448,
flags=9,
file=0xffffffff807c7a38 "/usr/src/sys/kern/subr_sleepqueue.c",
line=232) at /usr/src/sys/kern/subr_witness.c:948
948 printf("acquiring duplicate lock of same type: \"%s\"\n",
(kgdb) p *lock
$1 = {lo_name = 0xffffffff807c7a20 "sleepq chain", lo_type =
0xffffffff807c7a20 "sleepq chain", lo_flags = 720896,
lo_witness_data = {lod_list = {stqe_next = 0xffffffff80a251a0},
lod_witness = 0xffffffff80a251a0}}
(kgdb) p *lock1
$2 = {li_lock = 0xffffffff80a12db8, li_file = 0xffffffff807c22f5
"/usr/src/sys/kern/kern_sig.c", li_line = 2291,
li_flags = 65536}
(kgdb) p *lock2
$3 = {li_lock = 0xffffffff80a10d40, li_file = 0xffffff0001105000
"xT\020\001", li_line = 0, li_flags = 0}
(kgdb) p i
$4 = -2139345904
Frame 11
(kgdb) f 11
#11 0xffffffff804b3db8 in witness_checkorder (lock=0xffffffff809fb8b0,
flags=9,
file=0xffffffff807aeb30 "/usr/src/sys/dev/syscons/syscons.c",
line=2519) at /usr/src/sys/kern/subr_witness.c:1126
1126 kdb_enter_why(KDB_WHY_WITNESS, __func__);
(kgdb) p *lock
$6 = {lo_name = 0xffffffff807aebc5 "scrlock", lo_type =
0xffffffff807aebc5 "scrlock", lo_flags = 8585216,
lo_witness_data = {lod_list = {stqe_next = 0xffffffff80a25320},
lod_witness = 0xffffffff80a25320}}
(kgdb) p *lock1
$7 = {li_lock = 0xffffffff80a12db8, li_file = 0xffffffff807c22f5
"/usr/src/sys/kern/kern_sig.c", li_line = 2291,
li_flags = 65536}
(kgdb) p *lock2
$8 = {li_lock = 0xffffff0001727030, li_file = 0xffffffff807c22f5
"/usr/src/sys/kern/kern_sig.c", li_line = 2176,
li_flags = 65536}
(kgdb) p i
$9 = -1
Thanks.
More information about the freebsd-hackers
mailing list