From: Arseny S. <am...@in...> - 2003-03-27 13:13:55
|
Hello Sam, Wednesday, March 26, 2003, 11:59:27 AM, you wrote: >> Record_type's before sigsegv are 28,28,28... then >> (in gcc) 0 then one of 51/54/58 and then sigsegv. > look at the Rectype_* enum - what are these types? > (make lispbibl.h is your friend) >> Am I overlooking something ? I did. > you are looking at the place after the bug. > we have to find where back_trace->bt_caller becomes invalid, i.e., not > a Subr/Fsubr/Closure. >> > also, please try "zbacktrace" in gdb (will probably fail...) >> Undefined command. p back_trace_out(0,0) causes another SIGSEGV > look at spvw_debug.d and .gdbinit for inspiration. > g++ allows tracking all back_trace manipulations, see p_backtrace_t in > lispbibl.d, you may want to enchance it to check all bt_caller fields > for being Subr/Fsubr/Closure. That's what I got with the following code var p_backtrace_t bt = back_trace; for (; bt; bt = bt->bt_next) { int rectype = -1; char * sbias = "??"; switch (as_oint(object(bt->bt_caller)) & nonimmediate_bias_mask) { case cons_bias: sbias = "cons";break; case varobject_bias: rectype = Record_type(object(bt->bt_caller)); sbias = "rec";break; case subr_bias: sbias = "subr";break; case machine_bias: sbias = "mach";break; default: sbias = "unkn";break; } printf("BT %s %x %x %d\n",sbias,bt,bt->bt_caller,rectype); gc_mark(bt->bt_caller); } ;; Loading file defseq.lisp ... ;; Loaded file defseq.lisp ;; Loading file backquote.lisp ... ;; Loaded file backquote.lisp ;; Loading file defmacro.lisp ...BT subr 1061e20 6fe4e2 -1 BT rec 1062560 1768af9 40 BT rec 10628a0 1768db5 40 BT rec 1062c00 1768c61 40 BT rec 1062fb0 1768c75 40 BT rec 10632f0 1768c25 40 BT rec 10636c0 1768b5d 40 ..... BT rec 108d7e0 1768d51 40 BT rec 108dc40 1768c89 40 BT rec 108e000 1768b71 40 BT rec 108e750 179bf9d -4 BT subr 108ef60 6fe64a -1 BT subr 108f6c0 6fe632 -1 BT subr 108f910 6fe4b2 -1 ;; Loaded file defmacro.lisp I.e. most of bt_callers are records of Rectype_Fsubr, also there are Rectype_Closure's and subr's. Before the crash: ;; Loading file /cygdrive/d/clisp-cvs/cygwclisp/build-cy++/compiler.lisp ...BT subr 107d660 6ff7ea -1 BT rec 107e4b0 17ee7e1 40 BT rec 107e800 17ee77d 40 BT rec 107eb40 17ee665 40 BT rec 107eec0 17ee7e1 40 BT rec 107f340 17ee7f5 40 BT rec 107f710 17ee6a1 40 ... BT rec 108c430 17ee7a5 40 BT rec 108c780 17ee81d 40 BT rec 108caf0 17ee63d 40 BT rec 108cec0 17ee6a1 40 BT rec 108d340 17ee7f5 40 BT rec 108d7e0 17ee895 40 BT rec 108dc40 17ee7cd 40 BT rec 108e000 17ee6b5 40 BT rec 108e750 18cb675 96 Bad rectype Program received signal SIGFPE, Arithmetic exception. This is my check in gc_mark. Rectype of >=53 is erroneous. Without the gdb error occurs earlier: ;; Loading file places.lisp ...BT subr 108a8a0 6fecc2 -1 BT subr 108ad70 6fecc2 -1 BT subr 108b240 6fecc2 -1 BT subr 108b710 6fecc2 -1 BT subr 108bbe0 6fecc2 -1 BT subr 108c0b0 6fecc2 -1 BT subr 108c590 6fef92 -1 BT rec 108cd30 177962d 40 BT rec 108d1b0 1779781 40 BT rec 108d650 1779821 40 BT rec 108dab0 1779759 40 BT rec 108de70 1779641 40 BT rec 108e5c0 1799ac1 -4 BT subr 108edd0 6fe64a -1 BT rec 108f4e0 1764689 -115 Signal 11 make: *** [interpreted.mem] Error 139 How back_trace get augmented ? -- Best regards, Arseny mailto:am...@in... |