Skip to content

ghc-pkg misbehaves after possible miscompilation on m68k and sh4

We have observed in Debian that GHC can produce a erratically behaving version of ghc-pkg which causes issues when piping it's output to another program.

Example:

make_setup_recipe
Running ghc --make Setup.hs -o debian/hlibrary.setup
[1 of 1] Compiling Main             ( Setup.hs, Setup.o )
Linking debian/hlibrary.setup ...
. /usr/share/haskell-devscripts/Dh_Haskell.sh && \
configure_recipe
Running debian/hlibrary.setup configure --ghc -v2 --package-db=/var/lib/ghc/package.conf.d --prefix=/usr --libdir=/usr/lib/haskell-packages/ghc/lib --libexecdir=/usr/lib --builddir=dist-ghc --ghc-option=-optl-Wl\,-z\,relro --haddockdir=/usr/lib/ghc-doc/haddock/base-prelude-/ --datasubdir=base-prelude --htmldir=/usr/share/doc/libghc-base-prelude-doc/html/ --enable-library-profiling
Configuring base-prelude-1.2.1...
Warning: cannot determine version of /usr/bin/ghc-pkg :
""
hlibrary.setup: The program 'ghc-pkg' is required but the version of
/usr/bin/ghc-pkg could not be determined.

(Full log: https://buildd.debian.org/status/fetch.php?pkg=haskell-base-prelude&arch=m68k&ver=1.2.1-1&stamp=1530588494&raw=0)

Examining the behavior of the affected ghc-pkg binary on m68k shows what's going on:

root@pacman:~# uname -a
Linux pacman 4.16.0-2-m68k #1 Debian 4.16.16-1 (2018-06-19) m68k GNU/Linux
root@pacman:~# ghc-pkg --version
GHC package manager version 8.2.2
root@pacman:~# ghc-pkg --version | cat
root@pacman:~#

Comparing that to an x86_64 machine shows that piping to cat should actually output something:

glaubitz@epyc:~$ uname -a
Linux epyc 4.16.0-2-amd64 #1 SMP Debian 4.16.12-1 (2018-05-27) x86_64 GNU/Linux
glaubitz@epyc:~$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 8.2.2
glaubitz@epyc:~$ ghc --version | cat
The Glorious Glasgow Haskell Compilation System, version 8.2.2
glaubitz@epyc:~$

Further investigation shows that the problem is partially resolved when building GHC with reduced optimization:

        echo "SRC_HC_OPTS += -O0 -H64m" >> mk/build.mk
        echo "GhcStage1HcOpts = -O" >> mk/build.mk
        echo "GhcStage2HcOpts = -O0" >> mk/build.mk
        echo "GhcLibHcOpts = -O" >> mk/build.mk

The above issue goes away, but ghc-pkg itself still shows some strange behavior:

make_setup_recipe
Running ghc --make Setup.hs -o debian/hlibrary.setup
[1 of 1] Compiling Main             ( Setup.hs, Setup.o )
Linking debian/hlibrary.setup ...
. /usr/share/haskell-devscripts/Dh_Haskell.sh && \
configure_recipe
Running debian/hlibrary.setup configure --ghc -v2 --package-db=/var/lib/ghc/package.conf.d --prefix=/usr --libdir=/usr/lib/haskell-packages/ghc/lib --libexecdir=/usr/lib --builddir=dist-ghc --ghc-option=-optl-Wl\,-z\,relro --haddockdir=/usr/lib/ghc-doc/haddock/microlens-ghc-0.4.8.0/ --datasubdir=microlens-ghc --htmldir=/usr/share/doc/libghc-microlens-ghc-doc/html/ --enable-library-profiling
Configuring microlens-ghc-0.4.8.0...
hlibrary.setup: ghc-pkg dump failed: dieVerbatim: user error (hlibrary.setup:
'/usr/bin/ghc-pkg' exited with an error:
ghc-pkg: <stdout>: commitBuffer: invalid argument (invalid character)
)

(Full log: https://buildd.debian.org/status/fetch.php?pkg=haskell-microlens-ghc&arch=m68k&ver=0.4.8.0-2&stamp=1529960552&raw=0)

To reproduce the issue, GHC can be tested using QEMU which has pretty good support for the m68k target these days.

Trac metadata
Trac field Value
Version 8.4.3
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information