The ndesk segfault is due to an inconsistency in how structs are passed in pinvoke. On ppc structs are always passed by-address. This is how GIOChannel is wrapped in ndesk-glib:
struct IOChannel { const string GLIB = "libglib-2.0-0.dll"; public IntPtr Handle; [DllImport(GLIB)] static extern IntPtr g_io_channel_unix_new (int fd); public IOChannel (int fd) { Handle = g_io_channel_unix_new (fd); } [snip] Then g_io_add_watch is defined as a pinvoke method: [snip] [DllImport(GLIB)] protected static extern uint g_io_add_watch (IOChannel channel, IOCondition condition, IOFunc func, IntPtr user_data); [snip] The g_io_add_watch wrapper takes a IOChannel structure as its first argument. The real g_io_add_watch takes a GIOChannel * argument as first argument. On x86 this works because IOChannel is passed by value, so the GIOChannel * pointer in the real g_io_add_watch gets the value of IOChannel::Handle which points to the right location. On ppc IOChannel is passed by address, so the GIOChannel * pointer in the real g_io_add_watch gets *a pointer* to IOChannel::Handle. setting PPC_PASS_STRUCTS_BY_VALUE to 1 in mono/mini/mini-ppc.h and recompiling fixes the bug here. Anyway i don't know why it is set to 0 by default and if changing it has any drawbacks. -- mono always crashes on ppc https://bugs.launchpad.net/bugs/122496 You received this bug notification because you are a member of Ubuntu Bugs, which is the bug contact for Ubuntu. -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs