[GHC] #7794: GHCi "Prelude.undefined" exceptions on ARM; ByteCodeItbls.mkJumpToAddr unimplemented

GHC cvs-ghc at haskell.org
Mon Apr 8 14:55:40 CEST 2013


#7794: GHCi "Prelude.undefined" exceptions on ARM; ByteCodeItbls.mkJumpToAddr
unimplemented
-------------------------+--------------------------------------------------
    Reporter:  cjwatson  |       Owner:            
        Type:  bug       |      Status:  new       
    Priority:  normal    |   Milestone:            
   Component:  GHCi      |     Version:  7.6.2     
    Keywords:            |          Os:  Linux     
Architecture:  arm       |     Failure:  GHCi crash
  Difficulty:  Unknown   |    Testcase:            
   Blockedby:            |    Blocking:            
     Related:            |  
-------------------------+--------------------------------------------------
Changes (by igloo):

  * difficulty:  => Unknown


Old description:

> A number of non-trivial operations fail in ghci on ARM (specifically
> armhf on both Debian experimental and Ubuntu raring).  I initially
> noticed this as conduit's doctests failing, but reduced this to:
>
>   $ ghci
>   GHCi, version 7.6.2: http://www.haskell.org/ghc/  :? for help
>   Loading package ghc-prim ... linking ... done.
>   Loading package integer-gmp ... linking ... done.
>   Loading package base ... linking ... done.
>   Prelude> data Type a = Nothing
>   *** Exception: Prelude.undefined
>
> This is a singularly unhelpful exception, coming as it does without
> context, but I eventually tracked it down to ByteCodeItbls.mkJumpToAddr
> having no specific implementation for ARM and thus falling back to the
> default of "undefined".  I've tried adding this:
>
> +#elif arm_TARGET_ARCH
> +type ItblCode = Word32
> +mkJumpToAddr a
> +    = [ 0xe51ff004      -- ldr pc, [pc, #-4]    # pc reads as <current
> insn>+8
> +      , fromIntegral (ptrToInt a) ]
>
> This definitely changes the nature of the problem, so I think I'm on the
> right track, and I'm reasonably confident that that's the correct branch
> implementation; but when I actually try it in practice I get crashes
> (SIGSEGV/SIGILL/SIGBUS) with trashed stack traces, so I'm clearly not
> done yet.  Friends of mine suggest that I may need to __clear_cache or
> equivalent, which sounds plausible, so my current line of attack is
> figuring out how to glue that in; but if any actual GHC hackers can spot
> something obviously missing in the meantime then that would be great.

New description:

 A number of non-trivial operations fail in ghci on ARM (specifically armhf
 on both Debian experimental and Ubuntu raring).  I initially noticed this
 as conduit's doctests failing, but reduced this to:
 {{{
   $ ghci
   GHCi, version 7.6.2: http://www.haskell.org/ghc/  :? for help
   Loading package ghc-prim ... linking ... done.
   Loading package integer-gmp ... linking ... done.
   Loading package base ... linking ... done.
   Prelude> data Type a = Nothing
   *** Exception: Prelude.undefined
 }}}
 This is a singularly unhelpful exception, coming as it does without
 context, but I eventually tracked it down to ByteCodeItbls.mkJumpToAddr
 having no specific implementation for ARM and thus falling back to the
 default of "undefined".  I've tried adding this:
 {{{
 +#elif arm_TARGET_ARCH
 +type ItblCode = Word32
 +mkJumpToAddr a
 +    = [ 0xe51ff004      -- ldr pc, [pc, #-4]    # pc reads as <current
 insn>+8
 +      , fromIntegral (ptrToInt a) ]
 }}}
 This definitely changes the nature of the problem, so I think I'm on the
 right track, and I'm reasonably confident that that's the correct branch
 implementation; but when I actually try it in practice I get crashes
 (SIGSEGV/SIGILL/SIGBUS) with trashed stack traces, so I'm clearly not done
 yet.  Friends of mine suggest that I may need to `__clear_cache` or
 equivalent, which sounds plausible, so my current line of attack is
 figuring out how to glue that in; but if any actual GHC hackers can spot
 something obviously missing in the meantime then that would be great.

--

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



More information about the ghc-tickets mailing list