#7629: segmentation fault in compiled program, involves gtk, selinux -----------------------------------------------------------------+---------- Reporter: wgmitchener | Owner: simonmar Type: bug | Status: infoneeded Priority: high | Milestone: 7.6.2 Component: Runtime System | Version: 7.4.2 Keywords: segmentation fault, multithreading, selinux, gtk | Os: Linux Architecture: x86 | Failure: Runtime crash Difficulty: Unknown | Testcase: Blockedby: | Blocking: Related: | -----------------------------------------------------------------+---------- Comment(by wgmitchener): I've been working with gtk 2.32.4, ghc 7.4.2, and the development tree from gtk2hs. I added a few print statements and tracked down this much of the problem: {{{ makeCallback: funPtr = 0xb7e8900c makeCallback: destroyFunPtr = 0x0821fcd6 g_timeout_add_full: function = 0xb7e8900c g_timeout_add_full: data = 0xb7e8900c g_timeout_add_full: notify = 0x821fcd6 g_main_dispatch: dispatch = 0xb7ed11c0 g_main_dispatch: source = 0x82c0500 g_main_dispatch: callback = 0xb7e8900c g_main_dispatch: user_data = 0xb7e8900c g_timeout_dispatch: source = 0x82c0500 g_timeout_dispatch: callback = 0xb7e8900c g_timeout_dispatch: user_data = 0xb7e8900c (gdb) disass /r 0xb7e8900c,+5 Dump of assembler code from 0xb7e8900c to 0xb7e89011: 0xb7e8900c: e8 c3 14 3b 50 call 0x823a4d4 End of assembler dump. (gdb) disass /r 0x823a4d4,+20 Dump of assembler code from 0x823a4d4 to 0x823a4e8: => 0x0823a4d4: 00 00 add %al,(%eax) 0x0823a4d6: 00 00 add %al,(%eax) 0x0823a4d8: 20 00 and %al,(%eax) 0x0823a4da: 00 00 add %al,(%eax) 0x0823a4dc <stg_sel_ret_5_upd_info+0>: 89 f0 mov %esi,%eax 0x0823a4de <stg_sel_ret_5_upd_info+2>: 83 e0 fc and $0xfffffffc,%eax 0x0823a4e1 <stg_sel_ret_5_upd_info+5>: 8b 70 18 mov 0x18(%eax),%esi 0x0823a4e4 <stg_sel_ret_5_upd_info+8>: 83 c5 04 add $0x4,%ebp 0x0823a4e7 <stg_sel_ret_5_upd_info+11>: f7 c6 03 00 00 00 test $0x3,%esi End of assembler dump. }}} In gtk2hs/Glib/System/Glib/MainLoop.chs, makeCallback function, the call to mkSourceFunc (which is a foreign import wrapper) seems to return a thunk stored at 0xb7e8900c, but the function call right at that address seems to be off by 8 bytes? Those first four instructions make no sense. The seg fault happens at that first add %al, (%eax) because %eax is a bad pointer. -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7629#comment:16> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler