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.
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)
)
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 |