[GHC] #8024: Dynamic linking not working on PowerPC Linux. (was: Illegal instruction in cr_str)

GHC ghc-devs at haskell.org
Sun Jun 30 03:17:23 CEST 2013


#8024: Dynamic linking not working on PowerPC Linux.
--------------------------------+-------------------------------------------
Reporter:  erikd                |          Owner:          
    Type:  bug                  |         Status:  new     
Priority:  normal               |      Component:  Compiler
 Version:  7.7                  |       Keywords:          
      Os:  Linux                |   Architecture:  powerpc 
 Failure:  Building GHC failed  |      Blockedby:          
Blocking:                       |        Related:          
--------------------------------+-------------------------------------------
Description changed by erikd:

Old description:

> During the process of coming up for a fix for ticket #7830 (which left
> GHC un-buildable for many months) I ran into this problem.
>
> After coming up with a fix for #7830 I ran into this problem where the
> first executable (compiled with the stage1 compiler) to run crashes with
> an illegal instruction:
>
> {{{
> (gdb) bt
> #0  0x0f3f2e24 in cr_str () from /home/erikd/Git/ghc-
> upstream/rts/dist/build/libHSrts-ghc7.7.20130630.so
> #1  0x0f3de490 in stg_catchzh () from /home/erikd/Git/ghc-
> upstream/rts/dist/build/libHSrts-ghc7.7.20130630.so
> #2  0x0f3cc01c in scheduleWaitThread () from /home/erikd/Git/ghc-
> upstream/rts/dist/build/libHSrts-ghc7.7.20130630.so
> #3  0x0f3c63dc in rts_evalLazyIO () from /home/erikd/Git/ghc-
> upstream/rts/dist/build/libHSrts-ghc7.7.20130630.so
> #4  0x0f3c8300 in hs_main () from /home/erikd/Git/ghc-
> upstream/rts/dist/build/libHSrts-ghc7.7.20130630.so
> #5  0x10006ae4 in main ()
> }}}
>
> Disassmbling the function gives:
>
> {{{
> Dump of assembler code for function cr_str:
>    0x0f3f2dec:  rlwimi  r1,r2,10,0,16
>    0x0f3f2df0:  xoris   r2,r27,27237
>    0x0f3f2df4:  ori     r20,r27,8293
>    0x0f3f2df8:  xoris   r20,r19,25970
>    0x0f3f2dfc:  oris    r4,r11,8448
>    0x0f3f2e00:  .long 0xfffeae2c
>    0x0f3f2e04:  .long 0xfffeae2c
>    0x0f3f2e08:  .long 0xfffeae2c
>    0x0f3f2e0c:  .long 0xfffeae2c
>    0x0f3f2e10:  .long 0xfffeae2c
>    0x0f3f2e14:  .long 0xfffeae2c
>    0x0f3f2e18:  .long 0xfffeae2c
>    0x0f3f2e1c:  .long 0xfffeae2c
>    0x0f3f2e20:  .long 0xfffeae2c
> => 0x0f3f2e24:  .long 0xfffeae20
>    0x0f3f2e28:  .long 0xfffeae20
>    0x0f3f2e2c:  .long 0xfffeae20
>    0x0f3f2e30:  .long 0xfffeae20
> }}}
>
> However function stg_catchzh() in rts/Exception.cmm does not call
> cr_str().

New description:

 With dynamic linking enabled, the first binary compiled by the stage1
 compiler (dll-split) crashes with an illegal instruction exception.

 {{{
 (gdb) bt
 #0  0x0f3f2e24 in cr_str () from /home/erikd/Git/ghc-
 upstream/rts/dist/build/libHSrts-ghc7.7.20130630.so
 #1  0x0f3de490 in stg_catchzh () from /home/erikd/Git/ghc-
 upstream/rts/dist/build/libHSrts-ghc7.7.20130630.so
 #2  0x0f3cc01c in scheduleWaitThread () from /home/erikd/Git/ghc-
 upstream/rts/dist/build/libHSrts-ghc7.7.20130630.so
 #3  0x0f3c63dc in rts_evalLazyIO () from /home/erikd/Git/ghc-
 upstream/rts/dist/build/libHSrts-ghc7.7.20130630.so
 #4  0x0f3c8300 in hs_main () from /home/erikd/Git/ghc-
 upstream/rts/dist/build/libHSrts-ghc7.7.20130630.so
 #5  0x10006ae4 in main ()
 }}}

 Disassmbling the function gives:

 {{{
 Dump of assembler code for function cr_str:
    0x0f3f2dec:  rlwimi  r1,r2,10,0,16
    0x0f3f2df0:  xoris   r2,r27,27237
    0x0f3f2df4:  ori     r20,r27,8293
    0x0f3f2df8:  xoris   r20,r19,25970
    0x0f3f2dfc:  oris    r4,r11,8448
    0x0f3f2e00:  .long 0xfffeae2c
    0x0f3f2e04:  .long 0xfffeae2c
    0x0f3f2e08:  .long 0xfffeae2c
    0x0f3f2e0c:  .long 0xfffeae2c
    0x0f3f2e10:  .long 0xfffeae2c
    0x0f3f2e14:  .long 0xfffeae2c
    0x0f3f2e18:  .long 0xfffeae2c
    0x0f3f2e1c:  .long 0xfffeae2c
    0x0f3f2e20:  .long 0xfffeae2c
 => 0x0f3f2e24:  .long 0xfffeae20
    0x0f3f2e28:  .long 0xfffeae20
    0x0f3f2e2c:  .long 0xfffeae20
    0x0f3f2e30:  .long 0xfffeae20
 }}}

 However function stg_catchzh() in rts/Exception.cmm does not call
 cr_str().

 If I disable dynamic lbraries by adding powerpc-unknow-linux to
 `NoSharedLibsPlatformList` in `mk/config.mk.in` then the compile builds.

--

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



More information about the ghc-tickets mailing list