Package: xemacs21 Version: 21.4.21-4 Severity: important User: [EMAIL PROTECTED] Usertag: rc-m68k
Hi, xemacs currently segfaults on m68k. The reason isn't entirely clear to me yet, but I wanted to put this bugreport out so that perhaps some other people could join in. (gdb) where #0 0x8005d0d2 in Fsetcdr (cons_cell=0, newcdr=-2144562184) at data.c:633 #1 0x8006cfea in warn_when_safe_lispobj (class=0, level=0, obj=-2144562184) at eval.c:5296 #2 0x8006e98c in Fsignal (error_symbol=0, data=-2144562234) at eval.c:2048 #3 0x8006fcc8 in signal_error (sig=0, data=-2144562234) at eval.c:2062 #4 0x8005b6a0 in dead_wrong_type_argument (predicate=0, value=-2144632030) at data.c:116 #5 0x8013980a in Fintern (string=-2144632030, obarray=-2144627976) at symbols.c:213 #6 0x8013997a in defsymbol (location=0x8028eee4, name=0x8019ede9 "t") at symbols.c:3380 #7 0x80139b12 in init_symbols_once_early () at symbols.c:3292 #8 0x8006b9e6 in xemacs_21_4_21_m68k_unknown_linux (argc=5, argv=0xefa6cd54, envp=0xefa6cd6c, restart=0) at emacs.c:1333 #9 0x8006c52c in main (argc=5, argv=0xefa6cd54, envp=0xefa6cd6c) at emacs.c:2829 What's going on is that defsymbol calls Fintern like this: *location = Fintern (make_string_nocopy ((const Bufbyte *) name, strlen (name)), Qnil); One of the first thing Fintern does is CHECK_STRING. This (through a twisty maze of cpp macros, all alike) expands to: do { if (!((((enum Lisp_Type) (((unsigned long)(string)) & ~(((1UL << ((4 * 8) - 2)) - 1UL) << 2))) == Lisp_Type_Record) && (((unsigned int)(((struct lrecord_header *) ((void *) (string)))->type)) == ((unsigned int)(lrecord_type_string))))) dead_wrong_type_argument (Qstringp, string); } while (0); That is, after running it through indent: do { if(! ((((enum Lisp_Type)(((unsigned long)(string)) & ~(((1UL << ((4 * 8) - 2)) - 1UL) << 2))) == Lisp_Type_Record) && (((unsigned int)(((struct lrecord_header *)((void *)(string)))-> type)) == ((unsigned int)(lrecord_type_string))))) dead_wrong_type_argument(Qstringp, string); } while(0); Which in this particular case happens to mean that dead_wrong_type_argument gets called with a Qstringp that is 0 at this point. Since Fsetcdr wants to dereference whatever becomes of Qstringp as a pointer, we obviously get a segfault. I've not finished debugging this yet, but any insight as to what's going wrong is welcome. -- <Lo-lan-do> Home is where you have to wash the dishes. -- #debian-devel, Freenode, 2004-09-22 -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]