[GHC] #9277: GHCi panic: Loading temp shared object failed: Symbol not found

GHC ghc-devs at haskell.org
Mon Jul 7 11:38:40 UTC 2014


#9277: GHCi panic: Loading temp shared object failed: Symbol not found
-------------------------------+------------------------------------------
        Reporter:  mietek      |            Owner:
            Type:  bug         |           Status:  new
        Priority:  normal      |        Milestone:
       Component:  GHCi        |          Version:  7.8.2
      Resolution:              |         Keywords:  panic, dynamic linking
Operating System:  MacOS X     |     Architecture:  x86_64 (amd64)
 Type of failure:  GHCi crash  |       Difficulty:  Unknown
       Test Case:              |       Blocked By:
        Blocking:              |  Related Tickets:  #9034, #9074, #8935
-------------------------------+------------------------------------------
Description changed by mietek:

Old description:

> When given a Objective-C object file referencing a symbol available in a
> system framework, GHCi panics saying it can't find the symbol the object
> file relies on.
>
> {{{
> $ cat >foo.m <<EOF
> #import <Foundation/Foundation.h>
>
> BOOL is_main_thread()
> {
>   return [NSThread isMainThread];
> }
> EOF
> }}}
> {{{
> $ clang -c -o foo.o foo.m
> }}}
> {{{
> $ ghci -v -framework Foundation foo.o
> GHCi, version 7.8.2: http://www.haskell.org/ghc/  :? for help
> Glasgow Haskell Compiler, Version 7.8.2, stage 2 booted by GHC version
> 7.6.3
> Using binary package database:
> /opt/ghc-7.8.2/lib/ghc-7.8.2/package.conf.d/package.cache
> wired-in package ghc-prim mapped to ghc-
> prim-0.3.1.0-948744e1f99cc8bcc7c7d3ba60c7c2d8
> wired-in package integer-gmp mapped to integer-
> gmp-0.5.1.0-dc47f6b546fc171f67a7f7d311684a99
> wired-in package base mapped to
> base-4.7.0.0-a333addb6892f3cc2e6baa5ec782bd04
> wired-in package rts mapped to builtin_rts
> wired-in package template-haskell mapped to template-
> haskell-2.9.0.0-ed6ecfb467e6936688bb20f968f702e1
> wired-in package dph-seq not found.
> wired-in package dph-par not found.
> Hsc static flags:
> Loading package ghc-prim ... linking ... done.
> Loading package integer-gmp ... linking ... done.
> *** gcc:
> /usr/bin/gcc -m64 -fno-stack-protector -DTABLES_NEXT_TO_CODE
> -L/opt/ghc-7.8.2/lib/ghc-7.8.2/base-4.7.0.0 --print-file-name
> libiconv.dylib
> Loading package base ... linking ... done.
> Loading object (static) foo.o ... Created temporary directory:
> /var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc36377_0
> *** Linker:
> /usr/bin/gcc -m64 -fno-stack-protector -DTABLES_NEXT_TO_CODE -m64
> -dynamiclib -o
> /var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc36377_0/ghc36377_1.dylib
> foo.o -undefined dynamic_lookup -single_module -install_name
> '@rpath/ghc36377_1.dylib' -L/opt/ghc-7.8.2/lib/ghc-7.8.2/base-4.7.0.0
> -Wl,-rpath -Wl,/opt/ghc-7.8.2/lib/ghc-7.8.2/base-4.7.0.0
> -L/opt/ghc-7.8.2/lib/ghc-7.8.2/integer-gmp-0.5.1.0 -Wl,-rpath
> -Wl,/opt/ghc-7.8.2/lib/ghc-7.8.2/integer-gmp-0.5.1.0
> -L/opt/ghc-7.8.2/lib/ghc-7.8.2/ghc-prim-0.3.1.0 -Wl,-rpath
> -Wl,/opt/ghc-7.8.2/lib/ghc-7.8.2/ghc-prim-0.3.1.0
> -L/opt/ghc-7.8.2/lib/ghc-7.8.2/rts-1.0 -Wl,-rpath
> -Wl,/opt/ghc-7.8.2/lib/ghc-7.8.2/rts-1.0 -lHSbase-4.7.0.0-ghc7.8.2
> -lHSinteger-gmp-0.5.1.0-ghc7.8.2 -lHSghc-prim-0.3.1.0-ghc7.8.2 -liconv
> *** Deleting temp files:
> Deleting:
> /var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc36377_0/ghc36377_1.dylib
> *** Deleting temp dirs:
> Deleting: /var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc36377_0
> ghc: panic! (the 'impossible' happened)
>   (GHC version 7.8.2 for x86_64-apple-darwin):
>         Loading temp shared object failed:
> dlopen(/var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc36377_0/ghc36377_1.dylib,
> 9): Symbol not found: _OBJC_CLASS_$_NSThread
>   Referenced from:
> /var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc36377_0/ghc36377_1.dylib
>   Expected in: flat namespace
>  in
> /var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc36377_0/ghc36377_1.dylib
>
> Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
> }}}
>
> Note omitting `-framework Foundation` makes no difference to the output.

New description:

 When given a Objective-C object file referencing a symbol available in a
 system framework, interactive GHCi 7.8.2 panics saying it can't find the
 symbol the object file relies on.

 Start with an Objective-C source file, defining a function to be used via
 the FFI:

 {{{
 $ cat >foo.m <<EOF
 #import <Foundation/Foundation.h>

 BOOL is_main_thread()
 {
   return [NSThread isMainThread];
 }
 EOF
 }}}
 {{{
 $ cat >Main.hs <<EOF
 module Main where

 foreign import ccall "is_main_thread" isMainThread :: IO Bool

 main :: IO ()
 main = do
   mt <- isMainThread
   print mt
 EOF
 }}}

 Non-interactive GHC 7.8.2 works as expected:

 {{{
 $ clang -c -o foo.o foo.m
 }}}
 {{{
 $ ghc -framework Foundation -o foo foo.o Main.hs
 [1 of 1] Compiling Main             ( Main.hs, Main.o )
 Linking foo ...
 }}}
 {{{
 $ ./foo
 True
 }}}

 Interactive GHCi 7.8.2 panics:

 {{{
 $ ghci -v -framework Foundation foo.o Main.hs
 GHCi, version 7.8.2: http://www.haskell.org/ghc/  :? for help
 Glasgow Haskell Compiler, Version 7.8.2, stage 2 booted by GHC version
 7.6.3
 Using binary package database:
 /opt/ghc-7.8.2/lib/ghc-7.8.2/package.conf.d/package.cache
 wired-in package ghc-prim mapped to ghc-
 prim-0.3.1.0-948744e1f99cc8bcc7c7d3ba60c7c2d8
 wired-in package integer-gmp mapped to integer-
 gmp-0.5.1.0-dc47f6b546fc171f67a7f7d311684a99
 wired-in package base mapped to
 base-4.7.0.0-a333addb6892f3cc2e6baa5ec782bd04
 wired-in package rts mapped to builtin_rts
 wired-in package template-haskell mapped to template-
 haskell-2.9.0.0-ed6ecfb467e6936688bb20f968f702e1
 wired-in package dph-seq not found.
 wired-in package dph-par not found.
 Hsc static flags:
 Loading package ghc-prim ... linking ... done.
 Loading package integer-gmp ... linking ... done.
 *** gcc:
 /usr/bin/gcc -m64 -fno-stack-protector -DTABLES_NEXT_TO_CODE
 -L/opt/ghc-7.8.2/lib/ghc-7.8.2/base-4.7.0.0 --print-file-name
 libiconv.dylib
 Loading package base ... linking ... done.
 Loading object (static) foo.o ... Created temporary directory:
 /var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc37622_0
 *** Linker:
 /usr/bin/gcc -m64 -fno-stack-protector -DTABLES_NEXT_TO_CODE -m64
 -dynamiclib -o
 /var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc37622_0/ghc37622_1.dylib
 foo.o -undefined dynamic_lookup -single_module -install_name
 '@rpath/ghc37622_1.dylib' -L/opt/ghc-7.8.2/lib/ghc-7.8.2/base-4.7.0.0
 -Wl,-rpath -Wl,/opt/ghc-7.8.2/lib/ghc-7.8.2/base-4.7.0.0
 -L/opt/ghc-7.8.2/lib/ghc-7.8.2/integer-gmp-0.5.1.0 -Wl,-rpath
 -Wl,/opt/ghc-7.8.2/lib/ghc-7.8.2/integer-gmp-0.5.1.0
 -L/opt/ghc-7.8.2/lib/ghc-7.8.2/ghc-prim-0.3.1.0 -Wl,-rpath
 -Wl,/opt/ghc-7.8.2/lib/ghc-7.8.2/ghc-prim-0.3.1.0
 -L/opt/ghc-7.8.2/lib/ghc-7.8.2/rts-1.0 -Wl,-rpath
 -Wl,/opt/ghc-7.8.2/lib/ghc-7.8.2/rts-1.0 -lHSbase-4.7.0.0-ghc7.8.2
 -lHSinteger-gmp-0.5.1.0-ghc7.8.2 -lHSghc-prim-0.3.1.0-ghc7.8.2 -liconv
 *** Deleting temp files:
 Deleting:
 /var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc37622_0/ghc37622_1.dylib
 *** Deleting temp dirs:
 Deleting: /var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc37622_0
 ghc: panic! (the 'impossible' happened)
   (GHC version 7.8.2 for x86_64-apple-darwin):
         Loading temp shared object failed:
 dlopen(/var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc37622_0/ghc37622_1.dylib,
 9): Symbol not found: _OBJC_CLASS_$_NSThread
   Referenced from:
 /var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc37622_0/ghc37622_1.dylib
   Expected in: flat namespace
  in
 /var/folders/26/0tzj1txn0vb_0061l4z4rsmr0000gn/T/ghc37622_0/ghc37622_1.dylib

 Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
 }}}

 Omitting `-framework Foundation` makes no difference to the output.

--

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


More information about the ghc-tickets mailing list