"Stephen J. Turnbull" <stephen(a)xemacs.org> wrote:
>>>>> "Jerry" == Jerry James
<james(a)xemacs.org> writes:
 #6  0x081ed71f in printing_major_badness (printcharfun=0, 
     badness_string=0x6 <Address 0x6 out of bounds>, type=137356736, val=0x6, 
     badness=BADNESS_INTEGER_OBJECT)
     at /usr/src/xemacs/xemacs-21.5/src/print.c:1480
 I wonder if this is compiler or gdb breakage.  That 0x6 is supposed to
 point to a string, namely "freed lrecord". 
And since that string got printed, it did point to it at one time.  I
have the latest RedHat 9 packages installed, namely gcc-3.2.2-5 and
gdb-5.3post-0.20021129.18.  Now why does that gdb version number fail to
inspire me with confidence?
 Now _this_ is bad news:
 #7  0x081ed8cd in print_internal (obj=147290844, printcharfun=139642720, 
     escapeflag=1) at /usr/src/xemacs/xemacs-21.5/src/print.c:1709
 #8  0x081ebada in print_error_message (error_object=1, stream=139642720)
     at /usr/src/xemacs/xemacs-21.5/src/print.c:977
 #9  0x081ebed0 in Fdisplay_error (error_object=0, stream=0)
     at /usr/src/xemacs/xemacs-21.5/src/print.c:1035
 #10 0x080ece95 in Ffuncall (nargs=3, args=0x1)
     at /usr/src/xemacs/xemacs-21.5/src/eval.c:3866
 In frame #10, args is supposed to be a Lisp_Object *, so stack is
 being corrupted here somehow.  Maybe there's a compiler bug, since
 that value should get trapped by the code #ifdef ERROR_CHECK_BYTE_CODE
 in execute_optimized_program before you get to the Ffuncall (check
 that ERROR_CHECK_BYTE_CODE is defined in config.h).  But it seems more
 likely that the stack got corrupted after these frames, as
 error_object and stream are both Lisp_Objects, too.  Then, the obj in
 print_internal is the freed lrecord (0x8C77ADC), so things look
 consistent again. 
I agree.  It looks like that stack is hosed (or else gdb lost its mind).
 The only thing I can think of that's remotely related is that Vin
had
 partially analyzed a (possible) problem with stack depth allocation by
 the byte compiler, Martin and I each replied once, but nothing since.
 
http://list-archive.xemacs.org/xemacs-beta/200302/msg00268.html
 http://list-archive.xemacs.org/xemacs-beta/200303/msg00107.html
 I guess this could be related, since execute_optimized_program allocas
 its stack. 
But since ERROR_CHECK_BYTE_CODE is defined for beta versions, wouldn't
the check at the top of the while loop in execute_optimized_program
catch that kind of problem?  Apparently not, but I don't understand why.
Hmmmm.  What was check_specbind_stack_sanity() supposed to do?  It looks
like whoever came up with the idea never got around to writing it.  Not
that it makes any difference, since ERROR_CHECK_CATCH is not defined by
--error-checking.
-- 
Jerry James
http://www.ittc.ku.edu/~james/