
#10383: AArch64: get GHC Calling convention working ----------------------------------------+---------------------------------- Reporter: erikd | Owner: erikd Type: feature request | Status: new Priority: normal | Milestone: 7.12.1 Component: Compiler | Version: 7.11 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: aarch64 Type of failure: Building GHC failed | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: ----------------------------------------+---------------------------------- Comment (by erikd): The `xchg` issue above was fixed in git commit f6ca6959e54ede0b28735ab7e011c16b3cb172db. Running `inplace/bin/ghc-stage2 +RTS -Da` under GDB now results in: {{{ ..... stg_ap_pppv_ret... FUN/4(0x7fb46fcc28) stg_ap_0_ret... FUN/4(0x7fb46fcc28) stg_ap_pppv_ret... FUN/4(0x7fb46fcc28) stg_ap_0_ret... FUN/4(0x7fb46fcc28) stg_ap_pppv_ret... FUN/4(0x7fb46fcc28) stg_ap_0_ret... FUN/4(0x7fb46fcc28) stg_ap_pppv_ret... FUN/4(0x7fb46fcc28) stg_ap_0_ret... FUN/4(0x7fb46fcc28) stg_ap_pppv_ret... FUN/4(0x7fb46fcc28) stg_ap_0_ret... FUN/4(0x7fb46fcc28) stg_ap_pppv_ret... FUN/4(0x7fb46fcc28) [New Thread 0x7fb39ff1f0 (LWP 25080)] stg_ap_v_ret... FUN/1(0x7fb47b8c78, 0x7fb3a041b9, 0x7fb3a05448, 0x7fb3a084c8 , 0x7fb3a084d8, 0x7fb3e96861, 0x7fb3a08558, (nil)d#, (nil)d#, 0x1fd#, 0x4d# , 0x5d#, 0x6d#) stg_ap_0_ret... base:GHC.Event.Manager.Created() Program received signal SIGSEGV, Segmentation fault. 0x0000007fb3dac244 in stg_ap_p_fast$def () from /home/erikd/ghc- upstream/rts/ dist/build/libHSrts_thr_debug-ghc7.11.20150602.so (gdb) bt #0 0x0000007fb3dac244 in stg_ap_p_fast$def () from /home/erikd/ghc- upstream/ rts/dist/build/libHSrts_thr_debug-ghc7.11.20150602.so Backtrace stopped: previous frame identical to this frame (corrupt stack?) }}} By hacking on `utils/genapply/GenApply.hs` I was able to add some more debug to the generated file `rts/dist/build/AutoApply.cmm` so that the generaed code for `stg_ap_pv_fast` looks like: {{{ stg_ap_pv_fast { W_ info; W_ arity; W_ xxxx; if (GETTAG(R1)==2) { Sp_adj(0); jump %GET_ENTRY(R1-2) [R1,R2]; } #ifdef PROFILING if (Sp - WDS(3) < SpLim) { Sp_adj(-2); W_[Sp+WDS(1)] = R2; Sp(0) = stg_ap_pv_info; jump __stg_gc_enter_1 [R1]; } #else if (Sp - WDS(2) < SpLim) { Sp_adj(-2); W_[Sp+WDS(1)] = R2; Sp(0) = stg_ap_pv_info; jump __stg_gc_enter_1 [R1]; } #endif R1 = UNTAG(R1); info = %GET_STD_INFO(R1); IF_DEBUG(apply,foreign "C" debugBelch("genApplyFast before\n");); xxxx = TO_W_(%INFO_TYPE(info)); IF_DEBUG(apply,foreign "C" debugBelch("genApplyFast after\n");); switch [INVALID_OBJECT .. N_CLOSURE_TYPES] (xxxx) { .... }}} With thjis debug the backtrace in GDB now looks like: {{{ stg_ap_0_ret... FUN/4(0x7fb46fcc28) stg_ap_pppv_ret... FUN/4(0x7fb46fcc28) [New Thread 0x7fb39ff1f0 (LWP 25080)] stg_ap_v_ret... FUN/1(0x7fb47b8c78, 0x7fb3a041b9, 0x7fb3a05448, 0x7fb3a084c8 , 0x7fb3a084d8, 0x7fb3e96861, 0x7fb3a08558, (nil)d#, (nil)d#, 0x1fd#, 0x4d# , 0x5d#, 0x6d#) stg_ap_0_ret... base:GHC.Event.Manager.Created() genApplyFast before genApplyFast after genApplyFast before Program received signal SIGSEGV, Segmentation fault. 0x0000007fb3dac244 in stg_ap_p_fast$def () from /home/erikd/ghc- upstream/rts/ dist/build/libHSrts_thr_debug-ghc7.11.20150602.so }}} suggesting it is segfaulting on the line: {{{ xxxx = TO_W_(%INFO_TYPE(info)); }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10383#comment:8 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler