xemacs 21.4.17 and Tiger

Crash and burnThat is just what xemacs 21.4.17 does when running on Mac OS X Tiger under X11. It simply crashes during initialisation.

Crash and burn

That is just what xemacs 21.4.17 does when running on Mac OS X Tiger under X11. It simply crashes during initialisation. If you unset the DISPLAY environment variable so that the ncurses version comes up, it works fine. I tried the beta version of xemacs, version 21.5.20 and it also works fine.

After a quick run with gdb it seems the culprit is the call to NSCreateObjectFileImageFromFile(fname, &file); In previous versions of Mac OS X passing a NULL pointer for filename used to cause NSCreateObjectFileImageFromFile to return a dll handle to the current process image but in Tiger is just crashes with:

Thread 0 Crashed:
0 dyld 0x8fe1e900 strncmp + 224
1 dyld 0x8fe04f68 dyld::loadPhase3(char const*, dyld::LoadContext const&, std::vector<char const*, std::allocator<char const*> >*) + 56
2 dyld 0x8fe05638 dyld::loadPhase0(char const*, dyld::LoadContext const&, std::vector<char const*, std::allocator<char const*> >*) + 468

It seems that some Darwin developer somewhere broke the dyld::loadPhase3() routine during their latest programming efforts.

A quick and dirty workaround is to edit the file src/device-x.c, line 505 and change

dll_handle xaw_dll_handle = dll_open (NULL);

to

dll_handle xaw_dll_handle = dll_open (“/usr/local/bin/xemacs”);

If your xemacs is not installed in /usr/local/bin then just change the above string to point to the location its installed in.

Hopefully some xemacs development guys read this and fix it properly by propagating argv[0] to x_init_device()

Technorati Tags: , ,