[GHC] #8977: GHC infinite loop on Solaris

GHC ghc-devs at haskell.org
Wed Apr 9 08:21:32 UTC 2014


#8977: GHC infinite loop on Solaris
------------------------------------+---------------------------------
       Reporter:  kgardas           |             Owner:
           Type:  bug               |            Status:  new
       Priority:  normal            |         Milestone:
      Component:  Compiler          |           Version:  7.8.1
       Keywords:                    |  Operating System:  Solaris
   Architecture:  Unknown/Multiple  |   Type of failure:  None/Unknown
     Difficulty:  Unknown           |         Test Case:
     Blocked By:                    |          Blocking:
Related Tickets:                    |
------------------------------------+---------------------------------
 Hello,
 sometimes on Solaris ghc gets into infinite loop while trying to print
 something. E.g. ghc --version or ghc --info are good examples. This also
 happens for example while trying to build another ghc by already installed
 ghc. The reason for loop is simple: ghc is using libiconv for printing and
 libiconv is using its own libraries/binary tables. The problem arise when
 libiconv is not able to find the appropriate library/table file, then it
 tries to print error message (or GHC itself) which results in calling
 libiconv for printing which goes to search for appropriate library/table
 file and loop is closed.
 Please note that library/table file is different for different LANG
 settings. That also means that if you are able to invoke ghc --version on
 command line, still your ./configure of a new ghc may stuck on checking
 ghc version since configure sets LANG=C while on command line you may have
 LANG=en_US.UTF-8.
 Running ghc --version in truss shows this issue nicely as:
 {{{
 /1:     munmap(0xFF210000, 8790)                        = 0
 /1:     access("/usr/lib/iconv/geniconvtbl/binarytables/646%UTF-32BE.bt",
 R_OK) Err#2 ENOENT
 /1:     access("/usr/lib/iconv/646%UTF-32BE.so", R_OK)  Err#2 ENOENT
 /1:     lwp_unpark(2)                                   = 0
 /2:     lwp_park(0x00000000, 0)                         = 0
 /2:     clock_gettime(4, 0xFF0D9E68)                    = 0
 /2:     lwp_unpark(1)                                   = 0
 /1:     lwp_park(0x00000000, 0)                         = 0
 /1:     access("/usr/lib/iconv/geniconvtbl/binarytables/646%UTF-32BE.bt",
 R_OK) Err#2 ENOENT
 /1:     access("/usr/lib/iconv/646%UTF-32BE.so", R_OK)  Err#2 ENOENT
 /1:     open("/usr/lib/iconv/alias", O_RDONLY)          = 7
 /1:     fstat64(7, 0xFFBFD388)                          = 0
 /1:     fstat64(7, 0xFFBFD5C8)                          = 0
 /1:     mmap(0x00000000, 8790, PROT_READ, MAP_SHARED, 7, 0) = 0xFF210000
 /1:     close(7)                                        = 0
 /1:     munmap(0xFF210000, 8790)                        = 0
 /1:     access("/usr/lib/iconv/geniconvtbl/binarytables/646%UTF-32BE.bt",
 R_OK) Err#2 ENOENT
 /1:     access("/usr/lib/iconv/646%UTF-32BE.so", R_OK)  Err#2 ENOENT
 /1:     access("/usr/lib/iconv/geniconvtbl/binarytables/646%UTF-32BE.bt",
 R_OK) Err#2 ENOENT
 /1:     access("/usr/lib/iconv/646%UTF-32BE.so", R_OK)  Err#2 ENOENT
 /1:     open("/usr/lib/iconv/alias", O_RDONLY)          = 7
 /1:     fstat64(7, 0xFFBFD388)                          = 0
 /1:     fstat64(7, 0xFFBFD5C8)                          = 0
 }}}
 So, the solution on Solaris is simple. Install appropriate libiconv files.
 Usually if you are hit by this issue, then at least on Solaris 11 you are
 missing unicode-core package and this may be installed by:
 {{{
 # pkg install unicode-core
 }}}

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


More information about the ghc-tickets mailing list