[GHC] #10375: arm: ghci hits an illegal instruction

GHC ghc-devs at haskell.org
Mon May 25 16:02:26 UTC 2015


#10375: arm: ghci hits an illegal instruction
-------------------------------------+---------------------------------
        Reporter:  erikd             |                   Owner:
            Type:  bug               |                  Status:  new
        Priority:  normal            |               Milestone:  7.10.2
       Component:  GHCi              |                 Version:  7.10.1
      Resolution:                    |                Keywords:
Operating System:  Unknown/Multiple  |            Architecture:  arm
 Type of failure:  GHCi crash        |               Test Case:
      Blocked By:                    |                Blocking:
 Related Tickets:                    |  Differential Revisions:
-------------------------------------+---------------------------------

Comment (by carter):

 @erikd, your register snapshot doesnt make sense, it names x86_64
 registers, namely XMM*, YMM* , and  ZMM* families, but your code is on ARM
 right? Or am I misreading the dump?


 Replying to [comment:15 erikd]:
 > Using the gdb macros on the wiki I can retrieve the following info after
 the segfault:
 >
 > {{{
 > Program received signal SIGSEGV, Segmentation fault.
 > [Switching to Thread 0xb14ff460 (LWP 7214)]
 > 0xb88d09d4 in ?? ()
 > (gdb) bt
 > #0  0xb88d09d4 in ?? ()
 > #1  0x70000000 in ?? ()
 > Backtrace stopped: previous frame identical to this frame (corrupt
 stack?)
 > (gdb) pregs
 > $1 = {rR1 = {w = 0, a = 0x0, c = 0, f = 0, i = 0, p = 0x0}
 >      ,rR2 = {w = 0, a = 0x0, c = 0, f = 0, i = 0, p = 0x0}
 >      , rR3 = {w = 0, a = 0x0, c = 0, f = 0, i = 0, p = 0x0}
 >      , rR4 = {w = 0, a = 0x0, c = 0, f = 0, i = 0, p = 0x0}
 >      , rR5 = {w = 0, a = 0x0, c = 0, f = 0, i = 0, p = 0x0}
 >      , rR6 = {w = 0, a = 0x0, c = 0, f = 0, i = 0, p = 0x0}
 >      , rR7 = {w = 0, a = 0x0, c = 0, f = 0, i = 0, p = 0x0}
 >      , rR8 = {w = 0, a = 0x0, c = 0, f = 0, i = 0, p = 0x0}
 >      , rR9 = {w = 0, a = 0x0, c = 0, f = 0, i = 0, p = 0x0}
 >      , rR10 = {w = 0, a = 0x0, c = 0, f = 0, i = 0, p = 0x0}
 >      , rF1 = 0, rF2 = 0, rF3 = 0, rF4 = 0, rF5 = 0, rF6 = 0
 >      , rD1 = 0, rD2 = 0, rD3 = 0, rD4 = 0, rD5 = 0, rD6 = 0
 >      , rXMM1 = {h = 0, l = 0}
 >      , rXMM2 = {h = 0, l = 0}
 >      , rXMM3 = {h = 0, l = 0}
 >      , rXMM4 = {h = 0, l = 0}
 >      , rXMM5 = {h = 0, l = 0}
 >      , rXMM6 = {h = 0, l = 0}
 >      , rYMM1 = {h = {h = 0, l = 0}, l = {h = 0, l = 0}}
 >      , rYMM2 = {h = {h = 0, l = 0}, l = {h = 0, l = 0}}
 >      , rYMM3 = {h = {h = 0, l = 0}, l = {h = 0, l = 0}}
 >      , rYMM4 = {h = {h = 0, l = 0}, l = {h = 0, l = 0}}
 >      , rYMM5 = {h = {h = 0, l = 0}, l = {h = 0, l = 0}}
 >      , rYMM6 = {h = {h = 0, l = 0}, l = {h = 0, l = 0}}
 >      , rZMM1 = {h = {h = {h = 0, l = 0}, l = {h = 0, l = 0}}, l = {h =
 {h = 0, l = 0}, l = {h = 0, l = 0}}}
 >      , rZMM2 = {h = {h = {h = 0, l = 0}, l = {h = 0, l = 0}}, l = {h =
 {h = 0, l = 0}, l = {h = 0, l = 0}}}
 >      , rZMM3 = {h = {h = {h = 0, l = 0}, l = {h = 0, l = 0}}, l = {h =
 {h = 0, l = 0}, l = {h = 0, l = 0}}}
 >      , rZMM4 = {h = {h = {h = 0, l = 0}, l = {h = 0, l = 0}}, l = {h =
 {h = 0, l = 0}, l = {h = 0, l = 0}}}
 >      , rZMM5 = {h = {h = {h = 0, l = 0}, l = {h = 0, l = 0}}, l = {h =
 {h = 0, l = 0}, l = {h = 0, l = 0}}}
 >      , rZMM6 = {h = {h = {h = 0, l = 0}, l = {h = 0, l = 0}}, l = {h =
 {h = 0, l = 0}, l = {h = 0, l = 0}}}
 >      , rL1 = 0, rSp = 0x0, rSpLim = 0x0, rHp = 0x0, rHpLim = 0xb08fbfff
 >      , rCCCS = 0x0, rCurrentTSO = 0xb09cc8a4, rNursery = 0x109078
 >      , rCurrentNursery = 0xb0801f60, rCurrentAlloc = 0xb0901980,
 rHpAlloc = 0, rRet = 3}
 > (gdb) ptso
 > $2 = {header = {info = 0xb2bf43c0 <stg_TSO_info$def>}, _link =
 0xb2c146d8 <stg_END_TSO_QUEUE_closure>
 >      , global_link = 0xb2c146d8 <stg_END_TSO_QUEUE_closure>
 >      , stackobj = 0xb09cc4f4, what_next = 1, why_blocked = 0, flags = 0
 >      , block_info = {closure = 0xb2c146d8 <stg_END_TSO_QUEUE_closure>
 >                     , prev = 0xb2c146d8 <stg_END_TSO_QUEUE_closure>
 >                     , bh = 0xb2c146d8 <stg_END_TSO_QUEUE_closure>
 >                     , throwto = 0xb2c146d8 <stg_END_TSO_QUEUE_closure>
 >                     , wakeup = 0xb2c146d8 <stg_END_TSO_QUEUE_closure>
 >                     , fd = -1295956264
 >                     }
 >      , id = 22, saved_errno = 0, dirty = 1
 >      , bound = 0x0, cap = 0xb2c16180 <MainCapability>
 >      , trec = 0xb2c146d0 <stg_NO_TREC_closure>
 >      , blocked_exceptions = 0xb2c146d8 <stg_END_TSO_QUEUE_closure>
 >      , bq = 0xb2c146d8 <stg_END_TSO_QUEUE_closure>
 >      , alloc_limit = 2592, tot_stack_size = 232
 >      }
 > (gdb) info registers
 > r0             0xb6f73018       3069653016
 > r1             0xb2bf434c       2998879052
 > r2             0x1      1
 > r3             0xb09cc7c6       2963064774
 > r4             0xb2c16190       2999017872
 > r5             0xb09cc81c       2963064860
 > r6             0xb08fbbf4       2962209780
 > r7             0xb09cc938       2963065144
 > r8             0xb14fefa0       2974805920
 > r9             0x0      0
 > r10            0xb2bf4160       2998878560
 > r11            0xb09cc558       2963064152
 > r12            0xb2c15b8c       2999016332
 > sp             0xb14fcd68       0xb14fcd68
 > lr             0x70000000       1879048192
 > pc             0xb88d09d4       0xb88d09d4
 > cpsr           0x400f0010       1074724880
 >
 > }}}
 >
 > The `pc` register definitetly does contain a bad value, but there's no
 good explanation of how it got there.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10375#comment:21>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list