Regarding my earlier crash on sparc-sun-solaris2.5.1:
XEmacs is crashing because the superclass of the
topLevelEmacsShellWidgetClass is not initialized. In fact, the entire thing
looks decidedly screwy. Just after entering main() in temacs, it looks like
this:
$1 = {core_class = {superclass = 0x4ecf60, class_name = 0x1b5b98
"TopLevelEmacsShell", widget_size = 328, class_initialize = 0,
class_part_initialize = 0, class_inited = 0 '\000', initialize = 0,
initialize_hook = 0, realize = 0x1c87f8 <_XtInherit>, actions = 0x0,
num_actions = 0, resources = 0x1d0e10, num_resources = 6, xrm_class = 0,
compress_motion = 0 '\000', compress_exposure = 1 '\001',
compress_enterleave = 0 '\000', visible_interest = 1 '\001', destroy = 0,
resize = 0x1c87f8 <_XtInherit>, expose = 0, set_values = 0, set_values_hook
= 0, set_values_almost = 0x1c87f8 <_XtInherit>, get_values_hook = 0,
accept_focus = 0, version = 11005, callback_private = 0x0, tm_table = 0x0,
query_geometry = 0, display_accelerator = 0, extension = 0x0},
composite_class = {geometry_manager = 0x1c87f8 <_XtInherit>, change_managed
= 0x180a58 <ChangeManaged>, insert_child = 0x1c87f8 <_XtInherit>,
delete_child = 0x1c87f8 <_XtInherit>, extension = 0x1d0eb8}, shell_class =
{extension = 0x1d0ecc}, wm_shell_class = {extension = 0x0},
vendor_shell_class = {extension = 0x0}, top_level_shell_class = {extension =
0x0}, emacs_shell_class = {dummy = 0}}
Note that some of the fields (e.g. core_class.class_name) are right, but
others (e.g. composite_class.insert_child) are wrong, or even point at
inaccessible garbage (e.g. core_class.superclass).
`superclass', for instance, has a value very different to that of
topLevelShellClassRec (transientShellClassRec points to the same place):
(gdb) print (WidgetClass) topLevelShellClassRec
$5 = (struct _WidgetClassRec *) 0xef78bc00
So somewhere *before XEmacs starts* that value of 0xef78bc00 is getting
mangled to 0x4ecf60, which is crashing libXt and thus XEmacs.
Furthermore, this doesn't happen if XEmacs (and probably just
src/EmacsShell-sub.c) is assembled with the Solaris assembler, rather than
GNU as from binutils-2.11.2.
So it looks like this is (another) binutils-on-Solaris bug. Bah.
--
`> You never need to use # for anything, either?
Not to date, but # would suffice if I did.'
-- Stig Brautaset espouses uniquely effective ways
of protecting HTML from #-stripping preprocessors