Damon Lipparelli <lipp(a)primus.com> writes:
It looks like the badness occurs the first time mark_object() is
called.
We're are trying to mark the object pointed to by staticvec[0] (a hash
table). Stepping over line 2186 in "alloc.c" corrupts *(staticvec[0]).
I assume you mean line 3186? Which version of alloc.c are you using
anyway? The line numbers in your backtrace look like the latest one
from CVS, i.e. including Martin's patch after 21.0-b65?
I am afraid I just realized that the gdb commands cannot currently
handle marked lrecords properly (at least for
!USE_INDEXED_LRECORD_IMPLEMENTATION), so if you mean by 'corrupted'
that pobj say 'unknown Lisp_Object' then that is expected :-(
I noted below the following line numbers what kind of object is about
to be marked at each point in your backtrace:
#0 0x4eb24 in mark_object (obj=541672448) at alloc.c:3183
#1 0x6a5f0 in mark_char_table (obj=542035968, markobj=0x4e960 <mark_object>)
at chartab.c:145
#2 0x4ec04 in mark_object (obj=542035968) at alloc.c:3193
Lisp_Type_Record marker function
#3 0x4ee64 in mark_object (obj=-1605681276) at alloc.c:3247
Lisp_Type_symbol sym->value
#4 0x4edb4 in mark_object (obj=-2143416320) at alloc.c:3229
Lisp_Type_Vector element i
#5 0x52090 in garbage_collect_1 () at alloc.c:4510
staticvec[i]
If I read this right we're trying to mark a chartable which is the
value of a symbol which is an element of a Vector which is
staticpro'd.
Could you check what this vector contains? possibly before the actual
marking? Presumably it is already corrupted before the GC -- do you
always get the crash on marking this particular vector? Then you might
want to try the watchpoint or always_gc stuff Martin mentioned...
FWIW I have an additional report of such a crash under 21.0b65...
--
Gunnar Evermann
Speech, Vision & Robotics Group
Engineering Department
Cambridge University