snowleopard / hadrian

Hadrian: a new build system for the Glasgow Haskell Compiler. Now merged into the GHC tree!
https://gitlab.haskell.org/ghc/ghc/tree/master/hadrian
MIT License
208 stars 39 forks source link

New linker error - relocation truncated to fit: R_X86_64_32S against `r7Eh_bytes' #641

Closed alpmestan closed 5 years ago

alpmestan commented 6 years ago

On NixOS, from a clean tree, in a ghc.nix shell, when building ghc master with hadrian master with the Cabal submodule tweaked, I encounter the following error when linking the stage 2 GHC:

| Run Ghc LinkHs Stage1: out/stage1/ghc/build/c/hschooks.o (and 6 more) => out/stage1/bin/ghc
out/stage0/bin/ghc -Wall -hisuf hi -osuf o -hcsuf hc -static -hide-all-packages -no-user-package-db '-package-db out/stage1/lib/package.conf.d' '-package-id array-0.5.2.0' '-package-id base-4.12.0.0' '-package-id bytestring-0.10.8.2' '-package-id containers-0.6.0.1' '-package-id deepseq-1.4.4.0' '-package-id directory-1.3.2.3' '-package-id filepath-1.4.2' '-package-id ghc-8.7' '-package-id ghc-boot-8.7' '-package-id ghc-prim-0.5.3' '-package-id ghci-8.7' '-package-id haskeline-0.7.4.2' '-package-id process-1.6.3.0' '-package-id time-1.8.0.2' '-package-id transformers-0.5.5.0' '-package-id unix-2.8.0.0' -i -iout/stage1/ghc/build -iout/stage1/ghc/build/ghc/autogen -ighc/. -Iincludes -Iout/generated -Iout/stage1/ghc/build -I/nix/store/im9rpbg9smk1j74wfjyq4syhdjjxv75x-ghc-build-environment/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/ghc-8.7/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/process-1.6.3.0/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/unix-2.8.0.0/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/time-1.8.0.2/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/bytestring-0.10.8.2/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/base-4.12.0.0/include -I/nix/store/im9rpbg9smk1j74wfjyq4syhdjjxv75x-ghc-build-environment/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/integer-gmp-1.0.2.0/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/rts-1.0/include -Iout/generated -optc-Iout/generated -optP-include -optPout/stage1/ghc/build/ghc/autogen/cabal_macros.h -optc-fno-stack-protector -optP-DGHCI -odir out/stage1/ghc/build -hidir out/stage1/ghc/build -stubdir out/stage1/ghc/build -no-auto-link-packages -no-hs-main -optl-lgmp -Wnoncanonical-monad-instances -optc-Werror=unused-but-set-variable -optc-Wno-error=inline out/stage1/ghc/build/c/hschooks.o out/stage1/ghc/build/Main.o out/stage1/ghc/build/GHCi/Leak.o out/stage1/ghc/build/GHCi/UI.o out/stage1/ghc/build/GHCi/UI/Info.o out/stage1/ghc/build/GHCi/UI/Monad.o out/stage1/ghc/build/GHCi/UI/Tags.o -o out/stage1/bin/ghc -O2 -H32m -Wall -Wnoncanonical-monad-instances -Wnoncanonical-monadfail-instances -Wnoncanonical-monoid-instances -fno-warn-name-shadowing -XHaskell2010 -ghcversion-file=/home/alp/WT/ghc-hadrian/out/generated/ghcversion.h -Iout/stage1/compiler/build -Wcpp-undef
out/stage1/lib/../lib/x86_64-linux-ghc-8.7.20180705/ghc-8.7/libHSghc-8.7.a(Unique.o):(.text+0x338b): relocation truncated to fit: R_X86_64_32S against `r7Eh_bytes'
collect2: error: ld returned 1 exit status
`cc' failed in phase `Linker'. (Exit code: 1)
shakeArgsWith   0.000s    0%                           
Function shake  0.296s    2%                           
Database read   0.253s    1%                           
With database   0.027s    0%                           
Running rules  13.466s   95%  =========================
Total          14.040s  100%         
Error when running Shake build system:
* test
* out/stage1/bin/ghc
user error (Development.Shake.cmd, system command failed
Command: out/stage0/bin/ghc -Wall -hisuf hi -osuf o -hcsuf hc -static -hide-all-packages -no-user-package-db '-package-db out/stage1/lib/package.conf.d' '-package-id array-0.5.2.0' '-package-id base-4.12.0.0' '-package-id bytestring-0.10.8.2' '-package-id containers-0.6.0.1' '-package-id deepseq-1.4.4.0' '-package-id directory-1.3.2.3' '-package-id filepath-1.4.2' '-package-id ghc-8.7' '-package-id ghc-boot-8.7' '-package-id ghc-prim-0.5.3' '-package-id ghci-8.7' '-package-id haskeline-0.7.4.2' '-package-id process-1.6.3.0' '-package-id time-1.8.0.2' '-package-id transformers-0.5.5.0' '-package-id unix-2.8.0.0' -i -iout/stage1/ghc/build -iout/stage1/ghc/build/ghc/autogen -ighc/. -Iincludes -Iout/generated -Iout/stage1/ghc/build -I/nix/store/im9rpbg9smk1j74wfjyq4syhdjjxv75x-ghc-build-environment/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/ghc-8.7/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/process-1.6.3.0/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/unix-2.8.0.0/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/time-1.8.0.2/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/bytestring-0.10.8.2/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/base-4.12.0.0/include -I/nix/store/im9rpbg9smk1j74wfjyq4syhdjjxv75x-ghc-build-environment/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/integer-gmp-1.0.2.0/include -I/home/alp/WT/ghc-hadrian/out/stage1/lib/x86_64-linux-ghc-8.7.20180705/rts-1.0/include -Iout/generated -optc-Iout/generated -optP-include -optPout/stage1/ghc/build/ghc/autogen/cabal_macros.h -optc-fno-stack-protector -optP-DGHCI -odir out/stage1/ghc/build -hidir out/stage1/ghc/build -stubdir out/stage1/ghc/build -no-auto-link-packages -no-hs-main -optl-lgmp -Wnoncanonical-monad-instances -optc-Werror=unused-but-set-variable -optc-Wno-error=inline out/stage1/ghc/build/c/hschooks.o out/stage1/ghc/build/Main.o out/stage1/ghc/build/GHCi/Leak.o out/stage1/ghc/build/GHCi/UI.o out/stage1/ghc/build/GHCi/UI/Info.o out/stage1/ghc/build/GHCi/UI/Monad.o out/stage1/ghc/build/GHCi/UI/Tags.o -o out/stage1/bin/ghc -O2 -H32m -Wall -Wnoncanonical-monad-instances -Wnoncanonical-monadfail-instances -Wnoncanonical-monoid-instances -fno-warn-name-shadowing -XHaskell2010 -ghcversion-file=/home/alp/WT/ghc-hadrian/out/generated/ghcversion.h -Iout/stage1/compiler/build -Wcpp-undef
Exit code: 1
Stderr:
out/stage1/lib/../lib/x86_64-linux-ghc-8.7.20180705/ghc-8.7/libHSghc-8.7.a(Unique.o):(.text+0x338b): relocation truncated to fit: R_X86_64_32S against `r7Eh_bytes'
collect2: error: ld returned 1 exit status
`cc' failed in phase `Linker'. (Exit code: 1)
)

Has anyone else seen this?

angerman commented 6 years ago

I’ve been talking with someone about the relocation truncated stuff a few weeks back. @Mistuke, @bgamari, @hvr?

bgamari commented 6 years ago

This is rather mysterious; what build flavour is being used here? Does -fPIC make it into the compiler command line?

alpmestan commented 6 years ago

@bgamari I'm just running hadrian/build.sh -c -j5 --build-root=_tmp/ --trace test, so the default build flavour (see here). I've tried with perf too, and got the same error.

Calling GHC to get Main.o from Main.c:

$ _tmp/stage0/bin/ghc -Wall -hisuf hi -osuf o -hcsuf hc -static -hide-all-packages -no-user-package-db '-package-db _tmp/stage1/lib/package.conf.d' '-package-id array-0.5.2.0' '-package-id base-4.12.0.0' '-package-id bytestring-0.10.8.2' '-package-id containers-0.6.0.1' '-package-id deepseq-1.4.4.0' '-package-id directory-1.3.2.3' '-package-id filepath-1.4.2' '-package-id ghc-8.7' '-package-id ghc-boot-8.7' '-package-id ghci-8.7' '-package-id haskeline-0.7.4.2' '-package-id process-1.6.3.0' '-package-id time-1.8.0.2' '-package-id transformers-0.5.5.0' '-package-id unix-2.8.0.0' -i -i_tmp/stage1/ghc/build -i_tmp/stage1/ghc/build/ghc/autogen -ighc/. -Iincludes -I_tmp/generated -I_tmp/stage1/ghc/build -I/nix/store/im9rpbg9smk1j74wfjyq4syhdjjxv75x-ghc-build-environment/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/ghc-8.7/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/process-1.6.3.0/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/unix-2.8.0.0/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/time-1.8.0.2/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/bytestring-0.10.8.2/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/base-4.12.0.0/include -I/nix/store/im9rpbg9smk1j74wfjyq4syhdjjxv75x-ghc-build-environment/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/integer-gmp-1.0.2.0/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/rts-1.0/include -I_tmp/generated -optc-I_tmp/generated -optP-include -optP_tmp/stage1/ghc/build/ghc/autogen/cabal_macros.h -optc-fno-stack-protector -optP-DGHCI -odir _tmp/stage1/ghc/build -hidir _tmp/stage1/ghc/build -stubdir _tmp/stage1/ghc/build -Wnoncanonical-monad-instances -optc-Werror=unused-but-set-variable -optc-Wno-error=inline -c ghc/Main.hs -o _tmp/stage1/ghc/build/Main.o -O2 -H32m -Wall -Wnoncanonical-monad-instances -Wnoncanonical-monadfail-instances -Wnoncanonical-monoid-instances -fno-warn-name-shadowing -XHaskell2010 -ghcversion-file=/home/alp/WT/ghc-hadrian/_tmp/generated/ghcversion.h -I_tmp/stage1/compiler/build -Wcpp-undef

Linking the ghc executable (where the build fails):

 | Run Ghc LinkHs Stage1: _tmp/stage1/ghc/build/c/hschooks.o (and 6 more) => _tmp/stage1/bin/ghc
_tmp/stage0/bin/ghc -Wall -hisuf hi -osuf o -hcsuf hc -static -hide-all-packages -no-user-package-db '-package-db _tmp/stage1/lib/package.conf.d' '-package-id array-0.5.2.0' '-package-id base-4.12.0.0' '-package-id bytestring-0.10.8.2' '-package-id containers-0.6.0.1' '-package-id deepseq-1.4.4.0' '-package-id directory-1.3.2.3' '-package-id filepath-1.4.2' '-package-id ghc-8.7' '-package-id ghc-boot-8.7' '-package-id ghci-8.7' '-package-id haskeline-0.7.4.2' '-package-id process-1.6.3.0' '-package-id time-1.8.0.2' '-package-id transformers-0.5.5.0' '-package-id unix-2.8.0.0' -i -i_tmp/stage1/ghc/build -i_tmp/stage1/ghc/build/ghc/autogen -ighc/. -Iincludes -I_tmp/generated -I_tmp/stage1/ghc/build -I/nix/store/im9rpbg9smk1j74wfjyq4syhdjjxv75x-ghc-build-environment/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/ghc-8.7/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/process-1.6.3.0/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/unix-2.8.0.0/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/time-1.8.0.2/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/bytestring-0.10.8.2/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/base-4.12.0.0/include -I/nix/store/im9rpbg9smk1j74wfjyq4syhdjjxv75x-ghc-build-environment/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/integer-gmp-1.0.2.0/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180621/rts-1.0/include -I_tmp/generated -optc-I_tmp/generated -optP-include -optP_tmp/stage1/ghc/build/ghc/autogen/cabal_macros.h -optc-fno-stack-protector -optP-DGHCI -odir _tmp/stage1/ghc/build -hidir _tmp/stage1/ghc/build -stubdir _tmp/stage1/ghc/build -no-auto-link-packages -no-hs-main -optl-lgmp -Wnoncanonical-monad-instances -optc-Werror=unused-but-set-variable -optc-Wno-error=inline _tmp/stage1/ghc/build/c/hschooks.o _tmp/stage1/ghc/build/Main.o _tmp/stage1/ghc/build/GHCi/Leak.o _tmp/stage1/ghc/build/GHCi/UI.o _tmp/stage1/ghc/build/GHCi/UI/Info.o _tmp/stage1/ghc/build/GHCi/UI/Monad.o _tmp/stage1/ghc/build/GHCi/UI/Tags.o -o _tmp/stage1/bin/ghc -O2 -H32m -Wall -Wnoncanonical-monad-instances -Wnoncanonical-monadfail-instances -Wnoncanonical-monoid-instances -fno-warn-name-shadowing -XHaskell2010 -ghcversion-file=/home/alp/WT/ghc-hadrian/_tmp/generated/ghcversion.h -I_tmp/stage1/compiler/build -Wcpp-undef

I don't see -fPIC.

alpmestan commented 6 years ago

This does not happen on CI and therefore quite likely is specific to my setup.

alpmestan commented 5 years ago

Hmmm. I suspect that in fact it will happen whenever the flavour includes a dynamic-enabled way. So I don't see the error with --flavour=quickest (which CI uses too) but I do see it with perf or the default flavour. But for the testsuite it is rather important to have plenty of ways handy.

Would the following bit of code from src/Settings/Builders/Ghc.hs be to blame?

-- TODO: Do '-ticky' in all debug ways?
wayGhcArgs :: Args
wayGhcArgs = do
    way <- getWay
    mconcat [ if (Dynamic `wayUnit` way)      --  <- the part likely to be relevant to this problem
              then pure ["-fPIC", "-dynamic"] --  <-
              else arg "-static"              --  <-
            , (Threaded  `wayUnit` way) ? arg "-optc-DTHREADED_RTS"
            , (Debug     `wayUnit` way) ? arg "-optc-DDEBUG"
            , (Profiling `wayUnit` way) ? arg "-prof"
            , (Logging   `wayUnit` way) ? arg "-eventlog"
            , (way == debug || way == debugDynamic) ?
              pure ["-ticky", "-DTICKY_TICKY"] ]

Maybe this conflicts with the speedHack somewhere or something?

snowleopard commented 5 years ago

@alpmestan Just to explain where the line in question comes from:

https://github.com/ghc/ghc/blob/master/mk/ways.mk#L93

I think all other ways including dyn also have -fPIC -dynamic, but I may be mistaken. I believe wayGhcArgs was an attempt to disentagnle these way-related arguments, extracting a hidden structure from them, but we could of course fall back to listing all arguments on case-by-case basis.

alpmestan commented 5 years ago

Or maybe it's ghcLinkArgs that's to blame?

ghcLinkArgs :: Args
ghcLinkArgs = builder (Ghc LinkHs) ? do
    way     <- getWay
    pkg     <- getPackage
    libs    <- pkg == hp2ps ? pure ["m"]
    intLib  <- getIntegerPackage
    gmpLibs <- notStage0 ? intLib == integerGmp ? pure ["gmp"]
    mconcat [ (Dynamic `wayUnit` way) ?                            -- < look
              pure [ "-shared", "-dynamic", "-dynload", "deploy" ] -- < here
            , arg "-no-auto-link-packages"
            ,      nonHsMainPackage pkg  ? arg "-no-hs-main"
            , not (nonHsMainPackage pkg) ? arg "-rtsopts"
            , pure [ "-optl-l" ++           lib | lib <- libs ++ gmpLibs ]
            ]
snowleopard commented 5 years ago

This comes from here:

https://github.com/ghc/ghc/blob/0a3629af36e89de73b7012c726fd533c4c5460fb/rules/build-package-way.mk#L66

It does seem that Hadrian may be missing the ifneq "$$(TargetOS_CPP)" "mingw32" condition, but I guess this is not related to your issue.

Note also the ifeq "$3" "dyn" condition above.

alpmestan commented 5 years ago

Indeed I'm not compiling GHC on Windows. Any idea/lead Andrey?

snowleopard commented 5 years ago

@alpmestan I'm afraid I don't know a lot about dynamic linking. Perhaps @izgzhen could help -- he was working on implementing support for the dynamic way in #4.

bgamari commented 5 years ago

I have seen this on Debian/amd64.

bgamari commented 5 years ago

The fact that the compilation command line of Main.hs doesn't have -fPIC is quite suspicious. I believe GHC will add -fPIC when building in the dynamic way, but it's suspicious nevertheless. This might be a good place to start looking; in general this feels like an issue of a missing -fPIC.

snowleopard commented 5 years ago

@bgamari Thanks! Perhaps, the solution is to simply add wayGhcArgs to ghcLinkArgs? At the moment, it looks like wayGhcArgs are only included when compiling with GHC, otherwise -fPIC would appear in the command line in question.

@alpmestan Could you give this a try? Essentially, change this:

    mconcat [ (Dynamic `wayUnit` way) ?                            -- < look
              pure [ "-shared", "-dynamic", "-dynload", "deploy" ] -- < here

to:

    mconcat [ (Dynamic `wayUnit` way) ?                            -- < look
              pure [ "-shared", "-dynamic", "-dynload", "deploy" ] -- < here
            , wayGhcArgs
alpmestan commented 5 years ago

@snowleopard This is what I get with your change:

| Run Ghc CompileCWithGhc Stage1: libraries/integer-gmp/cbits/wrappers.c => _tmp/stage1/libraries/integer-gmp/build/c/cbits/wrappers.dyn_o
_tmp/stage0/bin/ghc -Wall -hisuf dyn_hi -osuf dyn_o -hcsuf dyn_hc -fPIC -dynamic -hide-all-packages -no-user-package-db '-package-db _tmp/stage1/lib/package.conf.d' '-this-unit-id integer-gmp-1.0.2.0' '-package-id ghc-prim-0.5.3' -i -i_tmp/stage1/libraries/integer-gmp/build -i_tmp/stage1/libraries/integer-gmp/build/autogen -ilibraries/integer-gmp/src/ -Iincludes -I_tmp/generated -I_tmp/stage1/libraries/integer-gmp/build -I/nix/store/x62j2xwx40c197gfn73akd2m73nsqw0f-ghc-build-environment/include -I_tmp/stage1/libraries/integer-gmp/build/include -Ilibraries/integer-gmp/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180724/rts-1.0/include -I_tmp/generated -optc-I_tmp/generated -optP-include -optP_tmp/stage1/libraries/integer-gmp/build/autogen/cabal_macros.h -optc-fno-stack-protector -odir _tmp/stage1/libraries/integer-gmp/build -hidir _tmp/stage1/libraries/integer-gmp/build -stubdir _tmp/stage1/libraries/integer-gmp/build -optc-std=c99 -optc-Wall -optc-fno-stack-protector -optc-Iincludes -optc-I_tmp/generated -optc-I_tmp/stage1/libraries/integer-gmp/build -optc-I/nix/store/x62j2xwx40c197gfn73akd2m73nsqw0f-ghc-build-environment/include -optc-I_tmp/stage1/libraries/integer-gmp/build/include -optc-Ilibraries/integer-gmp/include -optc-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180724/rts-1.0/include -optc-fPIC -optc-DDYNAMIC -Wnoncanonical-monad-instances -optc-Werror=unused-but-set-variable -optc-Wno-error=inline -c libraries/integer-gmp/cbits/wrappers.c -o _tmp/stage1/libraries/integer-gmp/build/c/cbits/wrappers.dyn_o -O0 -H64m -this-unit-id integer-gmp -Wall -XHaskell2010 -ghcversion-file=/home/alp/WT/ghc-hadrian/_tmp/generated/ghcversion.h -O -Wno-deprecated-flags
| Remove file _tmp/stage1/libraries/integer-gmp/.dependencies.mk.bak
| KeyValues oracle: reading '_tmp/stage1/libraries/integer-gmp/.dependencies'...
| PackageDataFile oracle: reading 'libraries/bytestring/bytestring.cabal' (Stage: stage1)...
| PackageDataFile oracle: reading 'libraries/base/base.cabal' (Stage: stage1)...
| PackageDataFile oracle: reading 'ghc/ghc-bin.cabal' (Stage: stage1)...
| Configure package 'haskeline'
| Configure package 'template-haskell'
| Configure package 'terminfo'
| PackageDataFile oracle: reading 'libraries/containers/containers.cabal' (Stage: stage1)...
| Configure package 'ghc-boot-th'
| Configure package 'deepseq'
| Configure package 'array'
| PackageDataFile oracle: reading 'libraries/terminfo/terminfo.cabal' (Stage: stage1)...
shakeArgsWith   0.000s    0%                           
Function shake  0.260s    0%                           
Database read   0.192s    0%                           
With database   0.016s    0%                           
Running rules  88.517s   99%  =========================
Total          88.985s   99%                           
Error when running Shake build system:
* test
* _tmp/stage1/bin/ghc
* OracleQ (PackageDataFile (Context {stage = Stage1, package = Package {pkgLanguage = Haskell, pkgType = Program, pkgName = "ghc-bin", pkgPath = "ghc"}, way = v}))
* _tmp/stage1/ghc/setup-config
* _tmp/stage1/lib/package.conf.d/bytestring-0.10.8.2.conf
* OracleQ (PackageDataFile (Context {stage = Stage1, package = Package {pkgLanguage = Haskell, pkgType = Library, pkgName = "bytestring", pkgPath = "libraries/bytestring"}, way = v}))
* _tmp/stage1/libraries/bytestring/setup-config
* _tmp/stage1/lib/package.conf.d/integer-gmp-1.0.2.0.conf
* _tmp/stage1/libraries/integer-gmp/build/libHSinteger-gmp-1.0.2.0-ghc8.7.20180724.so
* _tmp/stage1/libraries/integer-gmp/build/GHC/Integer/Type.dyn_o
* _tmp/stage1/libraries/integer-gmp/build/GHC/Integer/Type.dyn_o _tmp/stage1/libraries/integer-gmp/build/GHC/Integer/Type.dyn_hi
* _tmp/stage1/lib/x86_64-linux-ghc-8.7.20180724/ghc-prim-0.5.3/GHC/Magic.dyn_hi
Error, file does not exist and no rule available:
  _tmp/stage1/lib/x86_64-linux-ghc-8.7.20180724/ghc-prim-0.5.3/GHC/Magic.dyn_hi
CallStack (from HasCallStack):
  error, called at src/Development/Shake/Internal/Rules/File.hs:180:58 in shake-0.16.4-a64b1d49691e8976283aeace49a0e40055db44875134effda8a7c66163292986:Development.Shake.Internal.Rules.File
snowleopard commented 5 years ago

@alpmestan I don't think the error is related to my change: it only adds some new command line flags, whereas the error says there is no build rule for _tmp/stage1/lib/x86_64-linux-ghc-8.7.20180724/ghc-prim-0.5.3/GHC/Magic.dyn_hi.

snowleopard commented 5 years ago

Or perhaps, Hadrian doesn't know how to build dyn_hi files at all? I find this strange, since that was presumably implemented/tested in @izgzhen's work on dynamic way.

alpmestan commented 5 years ago

I hadn't seen that error before, that's for sure. So I'm thinking your change somehow revealed this problem. Anyway, @izgzhen's input will be very valuable here.

alpmestan commented 5 years ago

He does not seem to be available these days. I'll try and pick this back up, this is really holding hadrian back, along with the findPtr issue on OS X.

snowleopard commented 5 years ago

Thanks @alpmestan! I'm slowly returning to working mode after holidays, so hope to also close a couple of issues in the coming week.

alpmestan commented 5 years ago

Friends, something is puzzling me here.

So I ran a --flavour=quick build again, and it failed when building the stage 2 shared library for ghc, complaining about Unique:

_tmp/stage1/compiler/build/Unique.dyn_o : In function « r7vr_info » :
(.text+0x36d5): relocalisation truncated to fit: R_X86_64_PC32 against r7vq_bytes

This is how the shared library for ghc is put together:

| Run Ghc LinkHs Stage1: _tmp/stage1/compiler/build/c/parser/cutils.dyn_o (and 448 more) => _tmp/stage1/compiler/build/libHSghc-8.7-ghc8.7.20180822.so
_tmp/stage0/bin/ghc -Wall -hisuf dyn_hi -osuf dyn_o -hcsuf dyn_hc -fPIC -dynamic -hide-all-packages 
-no-user-package-db '-package-db _tmp/stage1/lib/package.conf.d' '-this-unit-id ghc-8.7' 
'-package-id array-0.5.2.0' '-package-id base-4.12.0.0' '-package-id binary-0.8.6.0' 
'-package-id bytestring-0.10.8.2' '-package-id containers-0.6.0.1' '-package-id deepseq-1.4.4.0' 
'-package-id directory-1.3.3.0' '-package-id filepath-1.4.2.1' '-package-id ghc-boot-8.7' 
'-package-id ghc-boot-th-8.7' '-package-id ghc-heap-8.7' '-package-id ghci-8.7' '-package-id hpc-0.6.0.3' 
'-package-id process-1.6.3.0' '-package-id template-haskell-2.14.0.0' '-package-id terminfo-0.4.1.2' 
'-package-id time-1.8.0.2' '-package-id transformers-0.5.5.0' '-package-id unix-2.7.2.2' -i 
-i_tmp/stage1/compiler/build -i_tmp/stage1/compiler/build/autogen -icompiler/backpack 
-icompiler/basicTypes -icompiler/cmm -icompiler/codeGen -icompiler/coreSyn -icompiler/deSugar 
-icompiler/ghci -icompiler/hsSyn -icompiler/iface -icompiler/llvmGen -icompiler/main -icompiler/nativeGen
-icompiler/parser -icompiler/prelude -icompiler/profiling -icompiler/rename -icompiler/simplCore 
-icompiler/simplStg -icompiler/specialise -icompiler/stgSyn -icompiler/stranal -icompiler/typecheck 
-icompiler/types -icompiler/utils -Iincludes -I_tmp/generated -I_tmp/stage1/compiler/build 
-I/nix/store/x62j2xwx40c197gfn73akd2m73nsqw0f-ghc-build-environment/include 
-I_tmp/stage1/compiler/build/. -I_tmp/stage1/compiler/build/parser -I_tmp/stage1/compiler/build/utils 
-I_tmp/stage1/compiler/build/../rts/dist/build -Icompiler/. -Icompiler/parser -Icompiler/utils 
-Icompiler/../rts/dist/build 
-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/process-1.6.3.0/include 
-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/unix-2.7.2.2/include 
-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/time-1.8.0.2/include 
-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/bytestring-0.10.8.2/include 
-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/base-4.12.0.0/include 
-I/nix/store/x62j2xwx40c197gfn73akd2m73nsqw0f-ghc-build-environment/include 
-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/integer-gmp-1.0.2.0/include
-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/rts-1.0/include 
-I_tmp/generated -optc-I_tmp/generated -optP-include 
-optP_tmp/stage1/compiler/build/autogen/cabal_macros.h -optc-fno-stack-protector -optP-DGHCI 
-odir _tmp/stage1/compiler/build -hidir _tmp/stage1/compiler/build -stubdir _tmp/stage1/compiler/build 
-shared -dynamic -dynload deploy -no-auto-link-packages -rtsopts -optl-lgmp 
-Wnoncanonical-monad-instances -optc-Werror=unused-but-set-variable -optc-Wno-error=inline
_tmp/stage1/compiler/build/c/parser/cutils.dyn_o 
_tmp/stage1/compiler/build/c/ghci/keepCAFsForGHCi.dyn_o 
_tmp/stage1/compiler/build/c/cbits/genSym.dyn_o _tmp/stage1/compiler/build/Ar.dyn_o 
_tmp/stage1/compiler/build/FileCleanup.dyn_o _tmp/stage1/compiler/build/DriverBkp.dyn_o 
_tmp/stage1/compiler/build/BkpSyn.dyn_o _tmp/stage1/compiler/build/NameShape.dyn_o 
_tmp/stage1/compiler/build/RnModIface.dyn_o _tmp/stage1/compiler/build/Avail.dyn_o 
_tmp/stage1/compiler/build/AsmUtils.dyn_o _tmp/stage1/compiler/build/BasicTypes.dyn_o 
_tmp/stage1/compiler/build/ConLike.dyn_o _tmp/stage1/compiler/build/DataCon.dyn_o 
_tmp/stage1/compiler/build/PatSyn.dyn_o _tmp/stage1/compiler/build/Demand.dyn_o 
_tmp/stage1/compiler/build/Debug.dyn_o _tmp/stage1/compiler/build/Exception.dyn_o 
_tmp/stage1/compiler/build/FieldLabel.dyn_o _tmp/stage1/compiler/build/GhcMonad.dyn_o 
_tmp/stage1/compiler/build/Hooks.dyn_o _tmp/stage1/compiler/build/Id.dyn_o 
_tmp/stage1/compiler/build/IdInfo.dyn_o _tmp/stage1/compiler/build/Lexeme.dyn_o 
_tmp/stage1/compiler/build/Literal.dyn_o _tmp/stage1/compiler/build/Llvm.dyn_o 
_tmp/stage1/compiler/build/Llvm/AbsSyn.dyn_o _tmp/stage1/compiler/build/Llvm/MetaData.dyn_o 
_tmp/stage1/compiler/build/Llvm/PpLlvm.dyn_o _tmp/stage1/compiler/build/Llvm/Types.dyn_o 
_tmp/stage1/compiler/build/LlvmCodeGen.dyn_o _tmp/stage1/compiler/build/LlvmCodeGen/Base.dyn_o 
_tmp/stage1/compiler/build/LlvmCodeGen/CodeGen.dyn_o 
_tmp/stage1/compiler/build/LlvmCodeGen/Data.dyn_o 
_tmp/stage1/compiler/build/LlvmCodeGen/Ppr.dyn_o 
_tmp/stage1/compiler/build/LlvmCodeGen/Regs.dyn_o _tmp/stage1/compiler/build/LlvmMangler.dyn_o 
_tmp/stage1/compiler/build/MkId.dyn_o _tmp/stage1/compiler/build/Module.dyn_o 
_tmp/stage1/compiler/build/Name.dyn_o _tmp/stage1/compiler/build/NameEnv.dyn_o 
_tmp/stage1/compiler/build/NameSet.dyn_o _tmp/stage1/compiler/build/OccName.dyn_o 
_tmp/stage1/compiler/build/RdrName.dyn_o _tmp/stage1/compiler/build/NameCache.dyn_o 
_tmp/stage1/compiler/build/SrcLoc.dyn_o _tmp/stage1/compiler/build/UniqSupply.dyn_o 
_tmp/stage1/compiler/build/Unique.dyn_o _tmp/stage1/compiler/build/Var.dyn_o 
_tmp/stage1/compiler/build/VarEnv.dyn_o _tmp/stage1/compiler/build/VarSet.dyn_o 
_tmp/stage1/compiler/build/UnVarGraph.dyn_o _tmp/stage1/compiler/build/BlockId.dyn_o 
_tmp/stage1/compiler/build/CLabel.dyn_o _tmp/stage1/compiler/build/Cmm.dyn_o 
_tmp/stage1/compiler/build/CmmBuildInfoTables.dyn_o _tmp/stage1/compiler/build/CmmPipeline.dyn_o 
_tmp/stage1/compiler/build/CmmCallConv.dyn_o 
_tmp/stage1/compiler/build/CmmCommonBlockElim.dyn_o 
_tmp/stage1/compiler/build/CmmImplementSwitchPlans.dyn_o 
_tmp/stage1/compiler/build/CmmContFlowOpt.dyn_o _tmp/stage1/compiler/build/CmmExpr.dyn_o 
_tmp/stage1/compiler/build/CmmInfo.dyn_o _tmp/stage1/compiler/build/CmmLex.dyn_o 
_tmp/stage1/compiler/build/CmmLint.dyn_o _tmp/stage1/compiler/build/CmmLive.dyn_o 
_tmp/stage1/compiler/build/CmmMachOp.dyn_o _tmp/stage1/compiler/build/CmmMonad.dyn_o 
_tmp/stage1/compiler/build/CmmSwitch.dyn_o _tmp/stage1/compiler/build/CmmNode.dyn_o 
_tmp/stage1/compiler/build/CmmOpt.dyn_o _tmp/stage1/compiler/build/CmmParse.dyn_o 
_tmp/stage1/compiler/build/CmmProcPoint.dyn_o _tmp/stage1/compiler/build/CmmSink.dyn_o 
_tmp/stage1/compiler/build/CmmType.dyn_o _tmp/stage1/compiler/build/CmmUtils.dyn_o 
_tmp/stage1/compiler/build/CmmLayoutStack.dyn_o _tmp/stage1/compiler/build/EnumSet.dyn_o 
_tmp/stage1/compiler/build/MkGraph.dyn_o _tmp/stage1/compiler/build/PprBase.dyn_o 
_tmp/stage1/compiler/build/PprC.dyn_o _tmp/stage1/compiler/build/PprCmm.dyn_o 
_tmp/stage1/compiler/build/PprCmmDecl.dyn_o _tmp/stage1/compiler/build/PprCmmExpr.dyn_o 
_tmp/stage1/compiler/build/Bitmap.dyn_o _tmp/stage1/compiler/build/CodeGen/Platform.dyn_o 
_tmp/stage1/compiler/build/CodeGen/Platform/ARM.dyn_o 
_tmp/stage1/compiler/build/CodeGen/Platform/ARM64.dyn_o 
_tmp/stage1/compiler/build/CodeGen/Platform/NoRegs.dyn_o 
_tmp/stage1/compiler/build/CodeGen/Platform/PPC.dyn_o 
_tmp/stage1/compiler/build/CodeGen/Platform/PPC_Darwin.dyn_o 
_tmp/stage1/compiler/build/CodeGen/Platform/SPARC.dyn_o 
_tmp/stage1/compiler/build/CodeGen/Platform/X86.dyn_o 
_tmp/stage1/compiler/build/CodeGen/Platform/X86_64.dyn_o _tmp/stage1/compiler/build/CgUtils.dyn_o 
_tmp/stage1/compiler/build/StgCmm.dyn_o _tmp/stage1/compiler/build/StgCmmBind.dyn_o 
_tmp/stage1/compiler/build/StgCmmClosure.dyn_o _tmp/stage1/compiler/build/StgCmmCon.dyn_o 
_tmp/stage1/compiler/build/StgCmmEnv.dyn_o _tmp/stage1/compiler/build/StgCmmExpr.dyn_o 
_tmp/stage1/compiler/build/StgCmmForeign.dyn_o _tmp/stage1/compiler/build/StgCmmHeap.dyn_o 
_tmp/stage1/compiler/build/StgCmmHpc.dyn_o _tmp/stage1/compiler/build/StgCmmArgRep.dyn_o 
_tmp/stage1/compiler/build/StgCmmLayout.dyn_o _tmp/stage1/compiler/build/StgCmmMonad.dyn_o 
_tmp/stage1/compiler/build/StgCmmPrim.dyn_o _tmp/stage1/compiler/build/StgCmmProf.dyn_o 
_tmp/stage1/compiler/build/StgCmmTicky.dyn_o _tmp/stage1/compiler/build/StgCmmUtils.dyn_o 
_tmp/stage1/compiler/build/StgCmmExtCode.dyn_o _tmp/stage1/compiler/build/SMRep.dyn_o 
_tmp/stage1/compiler/build/CoreArity.dyn_o _tmp/stage1/compiler/build/CoreFVs.dyn_o 
_tmp/stage1/compiler/build/CoreLint.dyn_o _tmp/stage1/compiler/build/CorePrep.dyn_o 
_tmp/stage1/compiler/build/CoreSubst.dyn_o _tmp/stage1/compiler/build/CoreOpt.dyn_o 
_tmp/stage1/compiler/build/CoreSyn.dyn_o _tmp/stage1/compiler/build/TrieMap.dyn_o 
_tmp/stage1/compiler/build/CoreTidy.dyn_o _tmp/stage1/compiler/build/CoreUnfold.dyn_o 
_tmp/stage1/compiler/build/CoreUtils.dyn_o _tmp/stage1/compiler/build/CoreMap.dyn_o 
_tmp/stage1/compiler/build/CoreSeq.dyn_o _tmp/stage1/compiler/build/CoreStats.dyn_o 
_tmp/stage1/compiler/build/MkCore.dyn_o _tmp/stage1/compiler/build/PprCore.dyn_o 
_tmp/stage1/compiler/build/PmExpr.dyn_o _tmp/stage1/compiler/build/TmOracle.dyn_o 
_tmp/stage1/compiler/build/Check.dyn_o _tmp/stage1/compiler/build/Coverage.dyn_o 
_tmp/stage1/compiler/build/Desugar.dyn_o _tmp/stage1/compiler/build/DsArrows.dyn_o 
_tmp/stage1/compiler/build/DsBinds.dyn_o _tmp/stage1/compiler/build/DsCCall.dyn_o 
_tmp/stage1/compiler/build/DsExpr.dyn_o _tmp/stage1/compiler/build/DsForeign.dyn_o 
_tmp/stage1/compiler/build/DsGRHSs.dyn_o _tmp/stage1/compiler/build/DsListComp.dyn_o 
_tmp/stage1/compiler/build/DsMonad.dyn_o _tmp/stage1/compiler/build/DsUsage.dyn_o 
_tmp/stage1/compiler/build/DsUtils.dyn_o _tmp/stage1/compiler/build/ExtractDocs.dyn_o 
_tmp/stage1/compiler/build/Match.dyn_o _tmp/stage1/compiler/build/MatchCon.dyn_o 
_tmp/stage1/compiler/build/MatchLit.dyn_o _tmp/stage1/compiler/build/HsBinds.dyn_o 
_tmp/stage1/compiler/build/HsDecls.dyn_o _tmp/stage1/compiler/build/HsDoc.dyn_o 
_tmp/stage1/compiler/build/HsExpr.dyn_o _tmp/stage1/compiler/build/HsImpExp.dyn_o 
_tmp/stage1/compiler/build/HsLit.dyn_o _tmp/stage1/compiler/build/PlaceHolder.dyn_o 
_tmp/stage1/compiler/build/HsExtension.dyn_o _tmp/stage1/compiler/build/HsInstances.dyn_o 
_tmp/stage1/compiler/build/HsPat.dyn_o _tmp/stage1/compiler/build/HsSyn.dyn_o 
_tmp/stage1/compiler/build/HsTypes.dyn_o _tmp/stage1/compiler/build/HsUtils.dyn_o 
_tmp/stage1/compiler/build/HsDumpAst.dyn_o _tmp/stage1/compiler/build/BinIface.dyn_o 
_tmp/stage1/compiler/build/BinFingerprint.dyn_o _tmp/stage1/compiler/build/BuildTyCl.dyn_o 
_tmp/stage1/compiler/build/IfaceEnv.dyn_o _tmp/stage1/compiler/build/IfaceSyn.dyn_o 
_tmp/stage1/compiler/build/IfaceType.dyn_o _tmp/stage1/compiler/build/ToIface.dyn_o 
_tmp/stage1/compiler/build/LoadIface.dyn_o _tmp/stage1/compiler/build/MkIface.dyn_o 
_tmp/stage1/compiler/build/TcIface.dyn_o _tmp/stage1/compiler/build/FlagChecker.dyn_o 
_tmp/stage1/compiler/build/Annotations.dyn_o _tmp/stage1/compiler/build/CmdLineParser.dyn_o 
_tmp/stage1/compiler/build/CodeOutput.dyn_o _tmp/stage1/compiler/build/Config.dyn_o 
_tmp/stage1/compiler/build/Constants.dyn_o _tmp/stage1/compiler/build/DriverMkDepend.dyn_o 
_tmp/stage1/compiler/build/DriverPhases.dyn_o _tmp/stage1/compiler/build/PipelineMonad.dyn_o 
_tmp/stage1/compiler/build/DriverPipeline.dyn_o _tmp/stage1/compiler/build/DynFlags.dyn_o 
_tmp/stage1/compiler/build/ErrUtils.dyn_o _tmp/stage1/compiler/build/Finder.dyn_o 
_tmp/stage1/compiler/build/GHC.dyn_o _tmp/stage1/compiler/build/GhcMake.dyn_o 
_tmp/stage1/compiler/build/GhcPlugins.dyn_o _tmp/stage1/compiler/build/DynamicLoading.dyn_o 
_tmp/stage1/compiler/build/HeaderInfo.dyn_o _tmp/stage1/compiler/build/HscMain.dyn_o 
_tmp/stage1/compiler/build/HscStats.dyn_o _tmp/stage1/compiler/build/HscTypes.dyn_o 
_tmp/stage1/compiler/build/InteractiveEval.dyn_o _tmp/stage1/compiler/build/InteractiveEvalTypes.dyn_o 
_tmp/stage1/compiler/build/PackageConfig.dyn_o _tmp/stage1/compiler/build/Packages.dyn_o 
_tmp/stage1/compiler/build/PlatformConstants.dyn_o _tmp/stage1/compiler/build/Plugins.dyn_o 
_tmp/stage1/compiler/build/TcPluginM.dyn_o _tmp/stage1/compiler/build/PprTyThing.dyn_o 
_tmp/stage1/compiler/build/StaticPtrTable.dyn_o _tmp/stage1/compiler/build/SysTools.dyn_o 
_tmp/stage1/compiler/build/SysTools/BaseDir.dyn_o _tmp/stage1/compiler/build/SysTools/Terminal.dyn_o 
_tmp/stage1/compiler/build/SysTools/ExtraObj.dyn_o _tmp/stage1/compiler/build/SysTools/Info.dyn_o 
_tmp/stage1/compiler/build/SysTools/Process.dyn_o _tmp/stage1/compiler/build/SysTools/Tasks.dyn_o 
_tmp/stage1/compiler/build/Elf.dyn_o _tmp/stage1/compiler/build/TidyPgm.dyn_o 
_tmp/stage1/compiler/build/Ctype.dyn_o _tmp/stage1/compiler/build/HaddockUtils.dyn_o 
_tmp/stage1/compiler/build/Lexer.dyn_o _tmp/stage1/compiler/build/OptCoercion.dyn_o 
_tmp/stage1/compiler/build/Parser.dyn_o _tmp/stage1/compiler/build/RdrHsSyn.dyn_o 
_tmp/stage1/compiler/build/ApiAnnotation.dyn_o _tmp/stage1/compiler/build/ForeignCall.dyn_o 
_tmp/stage1/compiler/build/KnownUniques.dyn_o _tmp/stage1/compiler/build/PrelInfo.dyn_o 
_tmp/stage1/compiler/build/PrelNames.dyn_o _tmp/stage1/compiler/build/PrelRules.dyn_o 
_tmp/stage1/compiler/build/PrimOp.dyn_o _tmp/stage1/compiler/build/TysPrim.dyn_o 
_tmp/stage1/compiler/build/TysWiredIn.dyn_o _tmp/stage1/compiler/build/CostCentre.dyn_o 
_tmp/stage1/compiler/build/CostCentreState.dyn_o _tmp/stage1/compiler/build/ProfInit.dyn_o 
_tmp/stage1/compiler/build/RnBinds.dyn_o _tmp/stage1/compiler/build/RnEnv.dyn_o 
_tmp/stage1/compiler/build/RnExpr.dyn_o _tmp/stage1/compiler/build/RnHsDoc.dyn_o 
_tmp/stage1/compiler/build/RnNames.dyn_o _tmp/stage1/compiler/build/RnPat.dyn_o 
_tmp/stage1/compiler/build/RnSource.dyn_o _tmp/stage1/compiler/build/RnSplice.dyn_o 
_tmp/stage1/compiler/build/RnTypes.dyn_o _tmp/stage1/compiler/build/RnFixity.dyn_o 
_tmp/stage1/compiler/build/RnUtils.dyn_o _tmp/stage1/compiler/build/RnUnbound.dyn_o 
_tmp/stage1/compiler/build/CoreMonad.dyn_o _tmp/stage1/compiler/build/CSE.dyn_o 
_tmp/stage1/compiler/build/FloatIn.dyn_o _tmp/stage1/compiler/build/FloatOut.dyn_o 
_tmp/stage1/compiler/build/LiberateCase.dyn_o _tmp/stage1/compiler/build/OccurAnal.dyn_o 
_tmp/stage1/compiler/build/SAT.dyn_o _tmp/stage1/compiler/build/SetLevels.dyn_o 
_tmp/stage1/compiler/build/SimplCore.dyn_o _tmp/stage1/compiler/build/SimplEnv.dyn_o 
_tmp/stage1/compiler/build/SimplMonad.dyn_o _tmp/stage1/compiler/build/SimplUtils.dyn_o 
_tmp/stage1/compiler/build/Simplify.dyn_o _tmp/stage1/compiler/build/SimplStg.dyn_o 
_tmp/stage1/compiler/build/StgStats.dyn_o _tmp/stage1/compiler/build/StgCse.dyn_o 
_tmp/stage1/compiler/build/UnariseStg.dyn_o _tmp/stage1/compiler/build/RepType.dyn_o 
_tmp/stage1/compiler/build/Rules.dyn_o _tmp/stage1/compiler/build/SpecConstr.dyn_o 
_tmp/stage1/compiler/build/Specialise.dyn_o _tmp/stage1/compiler/build/CoreToStg.dyn_o 
_tmp/stage1/compiler/build/StgLint.dyn_o _tmp/stage1/compiler/build/StgSyn.dyn_o 
_tmp/stage1/compiler/build/CallArity.dyn_o _tmp/stage1/compiler/build/DmdAnal.dyn_o 
_tmp/stage1/compiler/build/Exitify.dyn_o _tmp/stage1/compiler/build/WorkWrap.dyn_o 
_tmp/stage1/compiler/build/WwLib.dyn_o _tmp/stage1/compiler/build/FamInst.dyn_o 
_tmp/stage1/compiler/build/ClsInst.dyn_o _tmp/stage1/compiler/build/Inst.dyn_o 
_tmp/stage1/compiler/build/TcAnnotations.dyn_o _tmp/stage1/compiler/build/TcArrows.dyn_o 
_tmp/stage1/compiler/build/TcBinds.dyn_o _tmp/stage1/compiler/build/TcSigs.dyn_o 
_tmp/stage1/compiler/build/TcClassDcl.dyn_o _tmp/stage1/compiler/build/TcDefaults.dyn_o 
_tmp/stage1/compiler/build/TcDeriv.dyn_o _tmp/stage1/compiler/build/TcDerivInfer.dyn_o 
_tmp/stage1/compiler/build/TcDerivUtils.dyn_o _tmp/stage1/compiler/build/TcEnv.dyn_o 
_tmp/stage1/compiler/build/TcExpr.dyn_o _tmp/stage1/compiler/build/TcForeign.dyn_o 
_tmp/stage1/compiler/build/TcGenDeriv.dyn_o _tmp/stage1/compiler/build/TcGenFunctor.dyn_o 
_tmp/stage1/compiler/build/TcGenGenerics.dyn_o _tmp/stage1/compiler/build/TcHsSyn.dyn_o 
_tmp/stage1/compiler/build/TcHsType.dyn_o _tmp/stage1/compiler/build/TcInstDcls.dyn_o 
_tmp/stage1/compiler/build/TcMType.dyn_o _tmp/stage1/compiler/build/TcValidity.dyn_o 
_tmp/stage1/compiler/build/TcMatches.dyn_o _tmp/stage1/compiler/build/TcPat.dyn_o 
_tmp/stage1/compiler/build/TcPatSyn.dyn_o _tmp/stage1/compiler/build/TcRnDriver.dyn_o 
_tmp/stage1/compiler/build/TcBackpack.dyn_o _tmp/stage1/compiler/build/TcRnExports.dyn_o 
_tmp/stage1/compiler/build/TcRnMonad.dyn_o _tmp/stage1/compiler/build/TcRnTypes.dyn_o 
_tmp/stage1/compiler/build/TcRules.dyn_o _tmp/stage1/compiler/build/TcSimplify.dyn_o 
_tmp/stage1/compiler/build/TcHoleErrors.dyn_o _tmp/stage1/compiler/build/TcErrors.dyn_o 
_tmp/stage1/compiler/build/TcTyClsDecls.dyn_o _tmp/stage1/compiler/build/TcTyDecls.dyn_o 
_tmp/stage1/compiler/build/TcTypeable.dyn_o _tmp/stage1/compiler/build/TcType.dyn_o 
_tmp/stage1/compiler/build/TcEvidence.dyn_o _tmp/stage1/compiler/build/TcEvTerm.dyn_o 
_tmp/stage1/compiler/build/TcUnify.dyn_o _tmp/stage1/compiler/build/TcInteract.dyn_o 
_tmp/stage1/compiler/build/TcCanonical.dyn_o _tmp/stage1/compiler/build/TcFlatten.dyn_o 
_tmp/stage1/compiler/build/TcSMonad.dyn_o _tmp/stage1/compiler/build/TcTypeNats.dyn_o 
_tmp/stage1/compiler/build/TcSplice.dyn_o _tmp/stage1/compiler/build/Class.dyn_o 
_tmp/stage1/compiler/build/Coercion.dyn_o _tmp/stage1/compiler/build/DsMeta.dyn_o 
_tmp/stage1/compiler/build/THNames.dyn_o _tmp/stage1/compiler/build/FamInstEnv.dyn_o 
_tmp/stage1/compiler/build/FunDeps.dyn_o _tmp/stage1/compiler/build/InstEnv.dyn_o 
_tmp/stage1/compiler/build/TyCon.dyn_o _tmp/stage1/compiler/build/CoAxiom.dyn_o 
_tmp/stage1/compiler/build/Kind.dyn_o _tmp/stage1/compiler/build/Type.dyn_o 
_tmp/stage1/compiler/build/TyCoRep.dyn_o _tmp/stage1/compiler/build/Unify.dyn_o 
_tmp/stage1/compiler/build/Bag.dyn_o _tmp/stage1/compiler/build/Binary.dyn_o 
_tmp/stage1/compiler/build/BooleanFormula.dyn_o _tmp/stage1/compiler/build/BufWrite.dyn_o 
_tmp/stage1/compiler/build/Digraph.dyn_o _tmp/stage1/compiler/build/Encoding.dyn_o 
_tmp/stage1/compiler/build/FastFunctions.dyn_o _tmp/stage1/compiler/build/FastMutInt.dyn_o 
_tmp/stage1/compiler/build/FastString.dyn_o _tmp/stage1/compiler/build/FastStringEnv.dyn_o 
_tmp/stage1/compiler/build/Fingerprint.dyn_o _tmp/stage1/compiler/build/FiniteMap.dyn_o 
_tmp/stage1/compiler/build/FV.dyn_o _tmp/stage1/compiler/build/GraphBase.dyn_o 
_tmp/stage1/compiler/build/GraphColor.dyn_o _tmp/stage1/compiler/build/GraphOps.dyn_o 
_tmp/stage1/compiler/build/GraphPpr.dyn_o _tmp/stage1/compiler/build/IOEnv.dyn_o 
_tmp/stage1/compiler/build/Json.dyn_o _tmp/stage1/compiler/build/ListSetOps.dyn_o 
_tmp/stage1/compiler/build/ListT.dyn_o _tmp/stage1/compiler/build/Maybes.dyn_o 
_tmp/stage1/compiler/build/MonadUtils.dyn_o _tmp/stage1/compiler/build/OrdList.dyn_o 
_tmp/stage1/compiler/build/Outputable.dyn_o _tmp/stage1/compiler/build/Pair.dyn_o 
_tmp/stage1/compiler/build/Panic.dyn_o _tmp/stage1/compiler/build/PprColour.dyn_o 
_tmp/stage1/compiler/build/Pretty.dyn_o _tmp/stage1/compiler/build/State.dyn_o 
_tmp/stage1/compiler/build/Stream.dyn_o _tmp/stage1/compiler/build/StringBuffer.dyn_o 
_tmp/stage1/compiler/build/UniqDFM.dyn_o _tmp/stage1/compiler/build/UniqDSet.dyn_o 
_tmp/stage1/compiler/build/UniqFM.dyn_o _tmp/stage1/compiler/build/UniqMap.dyn_o 
_tmp/stage1/compiler/build/UniqSet.dyn_o _tmp/stage1/compiler/build/Util.dyn_o 
_tmp/stage1/compiler/build/Hoopl/Block.dyn_o _tmp/stage1/compiler/build/Hoopl/Collections.dyn_o 
_tmp/stage1/compiler/build/Hoopl/Dataflow.dyn_o _tmp/stage1/compiler/build/Hoopl/Graph.dyn_o 
_tmp/stage1/compiler/build/Hoopl/Label.dyn_o _tmp/stage1/compiler/build/AsmCodeGen.dyn_o 
_tmp/stage1/compiler/build/TargetReg.dyn_o _tmp/stage1/compiler/build/NCGMonad.dyn_o 
_tmp/stage1/compiler/build/Instruction.dyn_o _tmp/stage1/compiler/build/Format.dyn_o 
_tmp/stage1/compiler/build/Reg.dyn_o _tmp/stage1/compiler/build/RegClass.dyn_o 
_tmp/stage1/compiler/build/PIC.dyn_o _tmp/stage1/compiler/build/Platform.dyn_o 
_tmp/stage1/compiler/build/CPrim.dyn_o _tmp/stage1/compiler/build/X86/Regs.dyn_o 
_tmp/stage1/compiler/build/X86/RegInfo.dyn_o _tmp/stage1/compiler/build/X86/Instr.dyn_o 
_tmp/stage1/compiler/build/X86/Cond.dyn_o _tmp/stage1/compiler/build/X86/Ppr.dyn_o 
_tmp/stage1/compiler/build/X86/CodeGen.dyn_o _tmp/stage1/compiler/build/PPC/Regs.dyn_o 
_tmp/stage1/compiler/build/PPC/RegInfo.dyn_o _tmp/stage1/compiler/build/PPC/Instr.dyn_o 
_tmp/stage1/compiler/build/PPC/Cond.dyn_o _tmp/stage1/compiler/build/PPC/Ppr.dyn_o 
_tmp/stage1/compiler/build/PPC/CodeGen.dyn_o _tmp/stage1/compiler/build/SPARC/Base.dyn_o 
_tmp/stage1/compiler/build/SPARC/Regs.dyn_o _tmp/stage1/compiler/build/SPARC/Imm.dyn_o 
_tmp/stage1/compiler/build/SPARC/AddrMode.dyn_o _tmp/stage1/compiler/build/SPARC/Cond.dyn_o 
_tmp/stage1/compiler/build/SPARC/Instr.dyn_o _tmp/stage1/compiler/build/SPARC/Stack.dyn_o 
_tmp/stage1/compiler/build/SPARC/ShortcutJump.dyn_o _tmp/stage1/compiler/build/SPARC/Ppr.dyn_o 
_tmp/stage1/compiler/build/SPARC/CodeGen.dyn_o 
_tmp/stage1/compiler/build/SPARC/CodeGen/Amode.dyn_o 
_tmp/stage1/compiler/build/SPARC/CodeGen/Base.dyn_o 
_tmp/stage1/compiler/build/SPARC/CodeGen/CondCode.dyn_o 
_tmp/stage1/compiler/build/SPARC/CodeGen/Gen32.dyn_o 
_tmp/stage1/compiler/build/SPARC/CodeGen/Gen64.dyn_o 
_tmp/stage1/compiler/build/SPARC/CodeGen/Sanity.dyn_o 
_tmp/stage1/compiler/build/SPARC/CodeGen/Expand.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Liveness.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Graph/Main.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Graph/Stats.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Graph/ArchBase.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Graph/ArchX86.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Graph/Coalesce.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Graph/Spill.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Graph/SpillClean.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Graph/SpillCost.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Graph/TrivColorable.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Linear/Main.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Linear/JoinToTargets.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Linear/State.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Linear/Stats.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Linear/FreeRegs.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Linear/StackMap.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Linear/Base.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Linear/X86/FreeRegs.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Linear/X86_64/FreeRegs.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Linear/PPC/FreeRegs.dyn_o 
_tmp/stage1/compiler/build/RegAlloc/Linear/SPARC/FreeRegs.dyn_o 
_tmp/stage1/compiler/build/Dwarf.dyn_o _tmp/stage1/compiler/build/Dwarf/Types.dyn_o 
_tmp/stage1/compiler/build/Dwarf/Constants.dyn_o _tmp/stage1/compiler/build/Convert.dyn_o 
_tmp/stage1/compiler/build/ByteCodeTypes.dyn_o _tmp/stage1/compiler/build/ByteCodeAsm.dyn_o 
_tmp/stage1/compiler/build/ByteCodeGen.dyn_o _tmp/stage1/compiler/build/ByteCodeInstr.dyn_o 
_tmp/stage1/compiler/build/ByteCodeItbls.dyn_o _tmp/stage1/compiler/build/ByteCodeLink.dyn_o 
_tmp/stage1/compiler/build/Debugger.dyn_o _tmp/stage1/compiler/build/Linker.dyn_o 
_tmp/stage1/compiler/build/RtClosureInspect.dyn_o _tmp/stage1/compiler/build/GHCi.dyn_o 
_tmp/stage1/compiler/build/GhcPrelude.dyn_o
-o _tmp/stage1/compiler/build/libHSghc-8.7-ghc8.7.20180822.so -O0 -H64m -Wall
-Wno-name-shadowing -Wnoncanonical-monad-instances -Wnoncanonical-monadfail-instances 
-Wnoncanonical-monoid-instances -this-unit-id ghc -XHaskell2010 -XNoImplicitPrelude 
-ghcversion-file=/home/alp/WT/ghc-hadrian/_tmp/generated/ghcversion.h -DSTAGE=2 
-optc-DTHREADED_RTS -DGHCI_TABLES_NEXT_TO_CODE -O -Wno-deprecated-flags -Wcpp-undef

This is how Unique.dyn_o is built:

| Run Ghc CompileHs Stage1: compiler/basicTypes/Unique.hs => _tmp/stage1/compiler/build/Unique.dyn_o
_tmp/stage0/bin/ghc -Wall -hisuf dyn_hi -osuf dyn_o -hcsuf dyn_hc -fPIC -dynamic -hide-all-packages 
-no-user-package-db '-package-db _tmp/stage1/lib/package.conf.d' '-this-unit-id ghc-8.7' '-package-id
array-0.5.2.0' '-package-id base-4.12.0.0' '-package-id binary-0.8.6.0' '-package-id bytestring-0.10.8.2' 
'-package-id containers-0.6.0.1' '-package-id deepseq-1.4.4.0' '-package-id directory-1.3.3.0' 
'-package-id filepath-1.4.2.1' '-package-id ghc-boot-8.7' '-package-id ghc-boot-th-8.7' 
'-package-id ghc-heap-8.7' '-package-id ghci-8.7' '-package-id hpc-0.6.0.3' '-package-id process-1.6.3.0' 
'-package-id template-haskell-2.14.0.0' '-package-id terminfo-0.4.1.2' '-package-id time-1.8.0.2' 
'-package-id transformers-0.5.5.0' '-package-id unix-2.7.2.2' -i -i_tmp/stage1/compiler/build 
-i_tmp/stage1/compiler/build/autogen -icompiler/backpack -icompiler/basicTypes -icompiler/cmm 
-icompiler/codeGen -icompiler/coreSyn -icompiler/deSugar -icompiler/ghci -icompiler/hsSyn 
-icompiler/iface -icompiler/llvmGen -icompiler/main -icompiler/nativeGen -icompiler/parser 
-icompiler/prelude -icompiler/profiling -icompiler/rename -icompiler/simplCore -icompiler/simplStg 
-icompiler/specialise -icompiler/stgSyn -icompiler/stranal -icompiler/typecheck -icompiler/types 
-icompiler/utils -Iincludes -I_tmp/generated -I_tmp/stage1/compiler/build 
-I/nix/store/x62j2xwx40c197gfn73akd2m73nsqw0f-ghc-build-environment/include 
-I_tmp/stage1/compiler/build/. -I_tmp/stage1/compiler/build/parser -I_tmp/stage1/compiler/build/utils 
-I_tmp/stage1/compiler/build/../rts/dist/build -Icompiler/. -Icompiler/parser -Icompiler/utils 
-Icompiler/../rts/dist/build
-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/process-1.6.3.0/include 
-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/unix-2.7.2.2/include 
-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/time-1.8.0.2/include 
-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/bytestring-0.10.8.2/include 
-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/base-4.12.0.0/include 
-I/nix/store/x62j2xwx40c197gfn73akd2m73nsqw0f-ghc-build-environment/include 
-I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/integer-gmp-1.0.2.0/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/rts-1.0/include 
-I_tmp/generated -optc-I_tmp/generated -optP-include 
-optP_tmp/stage1/compiler/build/autogen/cabal_macros.h -optc-fno-stack-protector -optP-DGHCI -odir
_tmp/stage1/compiler/build -hidir _tmp/stage1/compiler/build -stubdir _tmp/stage1/compiler/build 
-Wnoncanonical-monad-instances -optc-Werror=unused-but-set-variable -optc-Wno-error=inline -c
compiler/basicTypes/Unique.hs -o _tmp/stage1/compiler/build/Unique.dyn_o -O0 -H64m -Wall 
-Wno-name-shadowing -Wnoncanonical-monad-instances -Wnoncanonical-monadfail-instances 
-Wnoncanonical-monoid-instances -this-unit-id ghc -XHaskell2010 -XNoImplicitPrelude 
-ghcversion-file=/home/alp/WT/ghc-hadrian/_tmp/generated/ghcversion.h -DSTAGE=2 
-optc-DTHREADED_RTS -DGHCI_TABLES_NEXT_TO_CODE -O -Wno-deprecated-flags -Wcpp-undef

We can see that Unique.dyn_o is built with -fPIC, and that it is used to try and put together the shared library. So this should be fine, shouldn't it? What am I missing?

alpmestan commented 5 years ago
$ readelf --relocs _tmp/stage1/compiler/build/Unique.dyn_o

Relocation section '.rela.text' at offset 0xa128 contains 490 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
00000000001d  00ac00000029 R_X86_64_GOTPCREL 0000000000000000 stg_ap_0_fast - 4
0000000000f2  00b900000029 R_X86_64_GOTPCREL 0000000000000000 ghc_FastString_uniqueO - 4
000000000132  00db00000029 R_X86_64_GOTPCREL 0000000000000000 ghczmprim_GHCziClasses - 4
0000000001c5  00de0000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_F - 4
0000000001d7  00df00000002 R_X86_64_PC32     00000000000002e8 ghc_Unique_zdfEqUnique - 4
0000000001e2  00e00000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_T - 4
00000000023b  00e500000029 R_X86_64_GOTPCREL 0000000000000000 stg_ap_p_fast - 4
000000000295  00e60000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_B - 4
0000000002a7  00e700000002 R_X86_64_PC32     0000000000000310 ghc_Unique_hasKey_clos - 4
0000000002d7  00eb0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziNum_zdfNumIn - 4
0000000002de  00ec0000002a R_X86_64_REX_GOTP 0000000000000000 stg_ap_pp_info - 4
0000000002ed  00e800000002 R_X86_64_PC32     0000000000000318 ghc_Unique_dataConTyRe - 3
0000000002fb  00ed00000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziNum_zp_info - 4
000000000302  00ee00000002 R_X86_64_PC32     0000000000000328 ghc_Unique_dataConTyRe - 4
000000000324  00ee00000002 R_X86_64_PC32     0000000000000328 ghc_Unique_dataConTyRe - 4
000000000344  00ee00000002 R_X86_64_PC32     0000000000000328 ghc_Unique_dataConTyRe - 4
000000000357  00eb0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziNum_zdfNumIn - 4
00000000035e  00ec0000002a R_X86_64_REX_GOTP 0000000000000000 stg_ap_pp_info - 4
00000000036d  00f100000002 R_X86_64_PC32     0000000000000350 ghc_Unique_pprUniqueAl - 3
00000000037b  00ed00000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziNum_zp_info - 4
000000000382  00f300000002 R_X86_64_PC32     0000000000000360 ghc_Unique_dataConWork - 4
0000000003a4  00f300000002 R_X86_64_PC32     0000000000000360 ghc_Unique_dataConWork - 4
0000000003c4  00f300000002 R_X86_64_PC32     0000000000000360 ghc_Unique_dataConWork - 4
0000000003dc  00ee00000002 R_X86_64_PC32     0000000000000328 ghc_Unique_dataConTyRe - 4
0000000003f9  00fa00000004 R_X86_64_PLT32    0000000000000000 newCAF - 4
000000000409  00fb0000002a R_X86_64_REX_GOTP 0000000000000000 stg_bh_upd_frame_info - 4
000000000418  00eb0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziNum_zdfNumIn - 4
00000000041f  00ec0000002a R_X86_64_REX_GOTP 0000000000000000 stg_ap_pp_info - 4
00000000042a  00fc0000002a R_X86_64_REX_GOTP 0000000000000000 base_DataziBits_zdfBit - 4
000000000435  00f800000002 R_X86_64_PC32     0000000000000390 ghc_Unique_pprUniqueAl - 3
000000000443  00fd00000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziNum_zm_info - 4
00000000045c  00ee00000002 R_X86_64_PC32     0000000000000328 ghc_Unique_dataConTyRe - 4
00000000047d  00fa00000004 R_X86_64_PLT32    0000000000000000 newCAF - 4
00000000048d  00fb0000002a R_X86_64_REX_GOTP 0000000000000000 stg_bh_upd_frame_info - 4
0000000004a7  00eb0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziNum_zdfNumIn - 4
0000000004ae  00ec0000002a R_X86_64_REX_GOTP 0000000000000000 stg_ap_pp_info - 4
0000000004b9  00fc0000002a R_X86_64_REX_GOTP 0000000000000000 base_DataziBits_zdfBit - 4
0000000004c4  00f800000002 R_X86_64_PC32     0000000000000390 ghc_Unique_pprUniqueAl - 3
0000000004d2  00fd00000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziNum_zm_info - 4
000000000506  00ff00000002 R_X86_64_PC32     00000000000003c0 ghc_Unique_pprUniqueAl - 3
000000000522  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000000529  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
00000000055c  000200000002 R_X86_64_PC32     0000000000000000 .data + 3ec
000000000579  00fa00000004 R_X86_64_PLT32    0000000000000000 newCAF - 4
000000000589  00fb0000002a R_X86_64_REX_GOTP 0000000000000000 stg_bh_upd_frame_info - 4
000000000598  00eb0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziNum_zdfNumIn - 4
00000000059f  00ec0000002a R_X86_64_REX_GOTP 0000000000000000 stg_ap_pp_info - 4
0000000005aa  010200000002 R_X86_64_PC32     00000000000003d0 ghc_Unique_pprUniqueAl - 4
0000000005b5  00f100000002 R_X86_64_PC32     0000000000000350 ghc_Unique_pprUniqueAl - 3
0000000005c3  00fd00000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziNum_zm_info - 4
0000000005dc  00ee00000002 R_X86_64_PC32     0000000000000328 ghc_Unique_dataConTyRe - 4
0000000005f9  00fa00000004 R_X86_64_PLT32    0000000000000000 newCAF - 4
000000000609  00fb0000002a R_X86_64_REX_GOTP 0000000000000000 stg_bh_upd_frame_info - 4
000000000618  00eb0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziNum_zdfNumIn - 4
00000000061f  00ec0000002a R_X86_64_REX_GOTP 0000000000000000 stg_ap_pp_info - 4
00000000062a  00fc0000002a R_X86_64_REX_GOTP 0000000000000000 base_DataziBits_zdfBit - 4
000000000635  00f800000002 R_X86_64_PC32     0000000000000390 ghc_Unique_pprUniqueAl - 3
000000000643  00fd00000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziNum_zm_info - 4
000000000664  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
0000000006a4  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
0000000006d4  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
0000000006ea  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
00000000070c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000000728  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
00000000073a  010900000002 R_X86_64_PC32     0000000000000470 ghc_Unique_mkAlphaTyVa - 4
000000000750  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000007a1  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
0000000007c7  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000007fb  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000000821  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
00000000083c  010900000002 R_X86_64_PC32     0000000000000470 ghc_Unique_mkAlphaTyVa - 4
00000000085c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000000894  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
0000000008aa  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
0000000008cc  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000008e8  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000008fa  010f00000002 R_X86_64_PC32     00000000000004a0 ghc_Unique_mkAlphaTyVa - 4
000000000910  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000000962  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000000988  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000009bb  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
0000000009e1  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000009fc  010f00000002 R_X86_64_PC32     00000000000004a0 ghc_Unique_mkAlphaTyVa - 4
000000000a1c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000000a54  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000000a6a  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
000000000a8c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000000aa8  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000000aba  011400000002 R_X86_64_PC32     00000000000004d0 ghc_Unique_mkCoVarUniq - 4
000000000ad0  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000000b22  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000000b48  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000000b7b  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000000ba1  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000000bbc  011400000002 R_X86_64_PC32     00000000000004d0 ghc_Unique_mkCoVarUniq - 4
000000000bdc  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000000c14  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000000c2a  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
000000000c4c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000000c68  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000000c7a  011900000002 R_X86_64_PC32     0000000000000500 ghc_Unique_mkPreludeCl - 4
000000000c90  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000000ce2  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000000d08  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000000d3b  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000000d61  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000000d7c  011900000002 R_X86_64_PC32     0000000000000500 ghc_Unique_mkPreludeCl - 4
000000000d9c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000000dd4  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000000dea  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
000000000e0c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000000e28  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000000e3a  011e00000002 R_X86_64_PC32     0000000000000530 ghc_Unique_mkPrimOpIdU - 4
000000000e50  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000000ea2  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000000ec8  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000000efb  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000000f21  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000000f3c  011e00000002 R_X86_64_PC32     0000000000000530 ghc_Unique_mkPrimOpIdU - 4
000000000f5c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000000f94  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000000faa  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
000000000fcc  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000000fe8  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000000ffa  012300000002 R_X86_64_PC32     0000000000000560 ghc_Unique_mkPreludeMi - 4
000000001010  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001062  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001088  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000010bb  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
0000000010e1  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000010fc  012300000002 R_X86_64_PC32     0000000000000560 ghc_Unique_mkPreludeMi - 4
000000001114  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000001135  00fa00000004 R_X86_64_PLT32    0000000000000000 newCAF - 4
000000001145  00fb0000002a R_X86_64_REX_GOTP 0000000000000000 stg_bh_upd_frame_info - 4
00000000115f  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
00000000117c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001198  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000011b9  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000011f0  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001222  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
00000000123b  00ff00000002 R_X86_64_PC32     00000000000003c0 ghc_Unique_pprUniqueAl - 3
00000000125c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000001294  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
0000000012aa  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
0000000012cc  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000012e8  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000012fa  012c00000002 R_X86_64_PC32     00000000000005d0 ghc_Unique_mkBuiltinUn - 4
000000001310  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001362  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001388  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000013bb  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
0000000013e1  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000013fc  012c00000002 R_X86_64_PC32     00000000000005d0 ghc_Unique_mkBuiltinUn - 4
00000000141c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000001454  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
00000000146a  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
00000000148c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000014a8  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000014ba  013100000002 R_X86_64_PC32     0000000000000600 ghc_Unique_mkPseudoUni - 4
0000000014d0  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001522  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001548  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
00000000157b  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
0000000015a1  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000015bc  013100000002 R_X86_64_PC32     0000000000000600 ghc_Unique_mkPseudoUni - 4
0000000015dc  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000001614  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
00000000162a  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
00000000164c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001668  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
00000000167a  013600000002 R_X86_64_PC32     0000000000000630 ghc_Unique_mkPseudoUni - 4
000000001690  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000016e2  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001708  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
00000000173b  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001761  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
00000000177c  013600000002 R_X86_64_PC32     0000000000000630 ghc_Unique_mkPseudoUni - 4
00000000179c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
0000000017d4  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
0000000017ea  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
00000000180c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001828  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
00000000183a  013b00000002 R_X86_64_PC32     0000000000000660 ghc_Unique_mkPseudoUni - 4
000000001850  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000018a2  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
0000000018c8  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000018fb  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001921  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
00000000193c  013b00000002 R_X86_64_PC32     0000000000000660 ghc_Unique_mkPseudoUni - 4
00000000195c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000001994  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
0000000019aa  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
0000000019cc  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000019e8  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000019fa  013f00000002 R_X86_64_PC32     0000000000000680 ghc_Unique_mkRegSingle - 4
000000001a10  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001a62  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001a88  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000001abb  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001ae1  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000001afc  013f00000002 R_X86_64_PC32     0000000000000680 ghc_Unique_mkRegSingle - 4
000000001b1c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000001b54  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000001b6a  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
000000001b8c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001ba8  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001bba  014300000002 R_X86_64_PC32     00000000000006a0 ghc_Unique_mkRegSubUni - 4
000000001bd0  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001c22  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001c48  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000001c7b  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001ca1  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000001cbc  014300000002 R_X86_64_PC32     00000000000006a0 ghc_Unique_mkRegSubUni - 4
000000001cdc  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000001d14  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000001d2a  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
000000001d4c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001d68  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001d7a  014700000002 R_X86_64_PC32     00000000000006c0 ghc_Unique_mkRegPairUn - 4
000000001d90  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001de2  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001e08  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000001e3b  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001e61  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000001e7c  014700000002 R_X86_64_PC32     00000000000006c0 ghc_Unique_mkRegPairUn - 4
000000001e9c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000001ed4  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000001eea  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
000000001f0c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001f28  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001f3a  014b00000002 R_X86_64_PC32     00000000000006e0 ghc_Unique_mkRegClassU - 4
000000001f50  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000001fa2  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000001fc8  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000001ffb  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000002021  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
00000000203c  014b00000002 R_X86_64_PC32     00000000000006e0 ghc_Unique_mkRegClassU - 4
00000000205c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000002094  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
0000000020aa  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
0000000020cc  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000020e8  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000020fa  014f00000002 R_X86_64_PC32     0000000000000700 ghc_Unique_mkCostCentr - 4
000000002110  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000002162  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000002188  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000021bb  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
0000000021e1  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000021fc  014f00000002 R_X86_64_PC32     0000000000000700 ghc_Unique_mkCostCentr - 4
00000000221c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000002254  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
00000000226a  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
00000000228c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000022a8  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000022ba  015300000002 R_X86_64_PC32     0000000000000720 ghc_Unique_mkVarOccUni - 4
0000000022d0  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000002322  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000002348  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
00000000237b  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
0000000023a1  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000023bc  015300000002 R_X86_64_PC32     0000000000000720 ghc_Unique_mkVarOccUni - 4
0000000023dc  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000002414  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
00000000242a  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
00000000244c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000002468  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
00000000247a  015700000002 R_X86_64_PC32     0000000000000740 ghc_Unique_mkDataOccUn - 4
000000002490  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000024e2  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000002508  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
00000000253b  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000002561  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
00000000257c  015700000002 R_X86_64_PC32     0000000000000740 ghc_Unique_mkDataOccUn - 4
00000000259c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
0000000025d4  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
0000000025ea  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
00000000260c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000002628  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
00000000263a  015b00000002 R_X86_64_PC32     0000000000000760 ghc_Unique_mkTvOccUniq - 4
000000002650  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000026a2  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
0000000026c8  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000026fb  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000002721  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
00000000273c  015b00000002 R_X86_64_PC32     0000000000000760 ghc_Unique_mkTvOccUniq - 4
00000000275c  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000002794  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
0000000027aa  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
0000000027cc  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000027e8  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000027fa  015f00000002 R_X86_64_PC32     0000000000000780 ghc_Unique_mkTcOccUniq - 4
000000002810  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000002862  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000002888  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000028bb  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
0000000028e1  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
0000000028fc  015f00000002 R_X86_64_PC32     0000000000000780 ghc_Unique_mkTcOccUniq - 4
000000002914  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000002935  00fa00000004 R_X86_64_PLT32    0000000000000000 newCAF - 4
000000002945  00fb0000002a R_X86_64_REX_GOTP 0000000000000000 stg_bh_upd_frame_info - 4
00000000295f  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
00000000297c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000002998  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000029b9  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000029f0  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000002a22  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000002a3b  00ff00000002 R_X86_64_PC32     00000000000003c0 ghc_Unique_pprUniqueAl - 3
000000002a54  000200000002 R_X86_64_PC32     0000000000000000 .data + 7ec
000000002a71  00fa00000004 R_X86_64_PLT32    0000000000000000 newCAF - 4
000000002a81  00fb0000002a R_X86_64_REX_GOTP 0000000000000000 stg_bh_upd_frame_info - 4
000000002a9a  016900000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziChar_zdwlvl_ - 4
000000002ab4  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000002ac4  016b0000002a R_X86_64_REX_GOTP 0000000000000000 stg_upd_frame_info - 4
000000002ad3  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000002ae1  016c00000029 R_X86_64_GOTPCREL 0000000000000000 base_DataziBits_zdfBit - 4
000000002afc  000200000002 R_X86_64_PC32     0000000000000000 .data + 844
000000002b10  016b0000002a R_X86_64_REX_GOTP 0000000000000000 stg_upd_frame_info - 4
000000002b44  000200000002 R_X86_64_PC32     0000000000000000 .data + 844
000000002b5a  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
000000002b7c  000200000002 R_X86_64_PC32     0000000000000000 .data + 824
000000002ba7  016a00000002 R_X86_64_PC32     0000000000000808 ghc_Unique_pprUniqueAl - 4
000000002bc2  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000002bd7  010d0000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_C - 4
000000002bfd  016900000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziChar_zdwlvl_ - 4
000000002c08  016500000002 R_X86_64_PC32     00000000000007e0 ghc_Unique_pprUniqueAl - 3
000000002c79  016e00000002 R_X86_64_PC32     0000000000000868 ghc_Unique_zdwunpkUniq - 4
000000002c9c  016e00000002 R_X86_64_PC32     0000000000000868 ghc_Unique_zdwunpkUniq - 4
000000002ce0  01700000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTuple_Z - 4
000000002d01  017100000002 R_X86_64_PC32     0000000000000888 ghc_Unique_unpkUnique_ - 4
000000002d16  017200000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_pp - 4
000000002d34  000200000002 R_X86_64_PC32     0000000000000000 .data + 894
000000002d74  000200000002 R_X86_64_PC32     0000000000000000 .data + 894
000000002da4  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000002dcc  000200000002 R_X86_64_PC32     0000000000000000 .data + 44c
000000002de2  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
000000002e04  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000002e20  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000002e32  017400000002 R_X86_64_PC32     00000000000008b8 ghc_Unique_newTagUniqu - 4
000000002e48  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000002e99  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000002ebf  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000002ef3  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000002f19  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000002f34  017400000002 R_X86_64_PC32     00000000000008b8 ghc_Unique_newTagUniqu - 4
000000002f6f  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
000000002f94  000200000002 R_X86_64_PC32     0000000000000000 .data + 8d4
000000002fbc  00eb0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziNum_zdfNumIn - 4
000000002fc3  00ec0000002a R_X86_64_REX_GOTP 0000000000000000 stg_ap_pp_info - 4
000000002fd9  00ed00000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziNum_zp_info - 4
000000002fe0  017800000002 R_X86_64_PC32     00000000000008f8 ghc_Unique_zdwderiveUn - 4
000000002ff4  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
00000000300a  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000003065  00eb0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziNum_zdfNumIn - 4
00000000306c  00ec0000002a R_X86_64_REX_GOTP 0000000000000000 stg_ap_pp_info - 4
000000003086  00ed00000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziNum_zp_info - 4
00000000309c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000030b2  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000003104  017800000002 R_X86_64_PC32     00000000000008f8 ghc_Unique_zdwderiveUn - 4
000000003148  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000003164  017a00000002 R_X86_64_PC32     0000000000000918 ghc_Unique_deriveUniqu - 4
000000003179  017b00000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unbx_r1 - 4
000000003194  017a00000002 R_X86_64_PC32     0000000000000918 ghc_Unique_deriveUniqu - 4
0000000031b4  017800000002 R_X86_64_PC32     00000000000008f8 ghc_Unique_zdwderiveUn - 4
0000000031cf  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
0000000031f4  000200000002 R_X86_64_PC32     0000000000000000 .data + 8d4
000000003218  00eb0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziNum_zdfNumIn - 4
00000000321f  00ec0000002a R_X86_64_REX_GOTP 0000000000000000 stg_ap_pp_info - 4
00000000322a  00e800000002 R_X86_64_PC32     0000000000000318 ghc_Unique_dataConTyRe - 3
00000000323c  017f00000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziNum_zt_info - 4
000000003243  018000000002 R_X86_64_PC32     0000000000000938 ghc_Unique_zdwmkPrelud - 4
00000000325c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000003272  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000032cd  00eb0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziNum_zdfNumIn - 4
0000000032d4  00ec0000002a R_X86_64_REX_GOTP 0000000000000000 stg_ap_pp_info - 4
0000000032df  00e800000002 R_X86_64_PC32     0000000000000318 ghc_Unique_dataConTyRe - 3
0000000032f5  017f00000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziNum_zt_info - 4
00000000330c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000003322  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000003374  018000000002 R_X86_64_PC32     0000000000000938 ghc_Unique_zdwmkPrelud - 4
0000000033b8  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
0000000033d4  018200000002 R_X86_64_PC32     0000000000000948 ghc_Unique_mkPreludeTy - 4
0000000033e9  017b00000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unbx_r1 - 4
000000003404  018200000002 R_X86_64_PC32     0000000000000948 ghc_Unique_mkPreludeTy - 4
000000003424  017800000002 R_X86_64_PC32     00000000000008f8 ghc_Unique_zdwderiveUn - 4
00000000343f  010700000002 R_X86_64_PC32     0000000000000430 ghc_Unique_pprUniqueAl - 4
000000003464  000200000002 R_X86_64_PC32     0000000000000000 .data + 8d4
000000003488  00eb0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziNum_zdfNumIn - 4
00000000348f  00ec0000002a R_X86_64_REX_GOTP 0000000000000000 stg_ap_pp_info - 4
00000000349a  018500000002 R_X86_64_PC32     0000000000000968 ghc_Unique_mkPreludeDa - 3
0000000034ac  017f00000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziNum_zt_info - 4
0000000034b3  018700000002 R_X86_64_PC32     0000000000000978 ghc_Unique_zdwmkPrelud - 4
0000000034cc  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000034e2  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
00000000353d  00eb0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziNum_zdfNumIn - 4
000000003544  00ec0000002a R_X86_64_REX_GOTP 0000000000000000 stg_ap_pp_info - 4
00000000354f  018500000002 R_X86_64_PC32     0000000000000968 ghc_Unique_mkPreludeDa - 3
000000003565  017f00000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziNum_zt_info - 4
00000000357c  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
000000003592  010500000002 R_X86_64_PC32     0000000000000410 ghc_Unique_uniqueMask_ - 4
0000000035e4  018700000002 R_X86_64_PC32     0000000000000978 ghc_Unique_zdwmkPrelud - 4
000000003628  00e90000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_I - 4
000000003644  018900000002 R_X86_64_PC32     0000000000000988 ghc_Unique_mkPreludeDa - 4
000000003659  017b00000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unbx_r1 - 4
000000003674  018900000002 R_X86_64_PC32     0000000000000988 ghc_Unique_mkPreludeDa - 4
0000000036b6  00fa00000004 R_X86_64_PLT32    0000000000000000 newCAF - 4
0000000036c6  00fb0000002a R_X86_64_REX_GOTP 0000000000000000 stg_bh_upd_frame_info - 4
0000000036d5  008800000002 R_X86_64_PC32     000000000000002c r7vq_bytes + 7ffffffffffffffc
0000000036dc  010d0000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_C - 4
00000000371c  000200000002 R_X86_64_PC32     0000000000000000 .data + 9c4
00000000372c  018e00000002 R_X86_64_PC32     00000000000009e8 ghc_Unique_zdwgo_closu - 4
000000003737  008800000002 R_X86_64_PC32     000000000000002c r7vq_bytes - 4
000000003742  010d0000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_C - 4
000000003753  00d50000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_Z - 4
000000003787  018c0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziReal_even3_c - 4
0000000037a1  008800000002 R_X86_64_PC32     000000000000002c r7vq_bytes - 4
0000000037ac  010d0000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_C - 4
0000000037bd  00d50000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_Z - 4
0000000037f4  000200000002 R_X86_64_PC32     0000000000000000 .data + 9c4
000000003839  000200000002 R_X86_64_PC32     0000000000000000 .data + 9a4
000000003869  008800000002 R_X86_64_PC32     000000000000002c r7vq_bytes - 4
000000003874  010d0000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_C - 4
0000000038b5  008800000002 R_X86_64_PC32     000000000000002c r7vq_bytes - 4
0000000038c0  010d0000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_C - 4
0000000038f1  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000003924  018e00000002 R_X86_64_PC32     00000000000009e8 ghc_Unique_zdwgo_closu - 4
000000003938  016b0000002a R_X86_64_REX_GOTP 0000000000000000 stg_upd_frame_info - 4
00000000396c  018e00000002 R_X86_64_PC32     00000000000009e8 ghc_Unique_zdwgo_closu - 4
00000000397e  00c60000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_Z - 4
0000000039b0  00d50000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_Z - 4
0000000039df  017200000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_pp - 4
0000000039f4  018e00000002 R_X86_64_PC32     00000000000009e8 ghc_Unique_zdwgo_closu - 4
000000003a04  016b0000002a R_X86_64_REX_GOTP 0000000000000000 stg_upd_frame_info - 4
000000003a1e  00c60000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_Z - 4
000000003a58  00d50000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_Z - 4
000000003a87  017200000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_pp - 4
000000003a9c  000200000002 R_X86_64_PC32     0000000000000000 .data + a04
000000003ab0  016b0000002a R_X86_64_REX_GOTP 0000000000000000 stg_upd_frame_info - 4
000000003aca  00eb0000002a R_X86_64_REX_GOTP 0000000000000000 base_GHCziNum_zdfNumIn - 4
000000003ad1  00ec0000002a R_X86_64_REX_GOTP 0000000000000000 stg_ap_pp_info - 4
000000003adc  018f00000002 R_X86_64_PC32     00000000000009f8 ghc_Unique_pprUniqueAl - 3
000000003af2  00ed00000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziNum_zp_info - 4
000000003b04  000200000002 R_X86_64_PC32     0000000000000000 .data + 7ec
000000003b24  010d0000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_C - 4
000000003b4e  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000003b5f  016900000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziChar_zdwlvl_ - 4
000000003bb4  000200000002 R_X86_64_PC32     0000000000000000 .data + a24
000000003be4  000200000002 R_X86_64_PC32     0000000000000000 .data + a24
000000003c34  000200000002 R_X86_64_PC32     0000000000000000 .data + a24
000000003c62  00c60000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_Z - 4
000000003c79  019100000002 R_X86_64_PC32     0000000000000a48 ghc_Unique_zdwshowUniq - 4
000000003c8e  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000003cbb  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000003cf4  019100000002 R_X86_64_PC32     0000000000000a48 ghc_Unique_zdwshowUniq - 4
000000003d38  00d50000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_Z - 4
000000003d59  019300000002 R_X86_64_PC32     0000000000000a68 ghc_Unique_showUnique_ - 4
000000003d6e  017200000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_pp - 4
000000003d84  000200000002 R_X86_64_PC32     0000000000000000 .data + a8c
000000003d98  016b0000002a R_X86_64_REX_GOTP 0000000000000000 stg_upd_frame_info - 4
000000003dcc  000200000002 R_X86_64_PC32     0000000000000000 .data + a74
000000003dde  01950000002a R_X86_64_REX_GOTP 0000000000000000 ghc_Pretty_double1_clo - 4
000000003def  019600000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziList_lenAcc_ - 4
000000003e1c  01970000002a R_X86_64_REX_GOTP 0000000000000000 ghc_Pretty_Str_con_inf - 4
000000003e31  01980000002a R_X86_64_REX_GOTP 0000000000000000 ghc_Pretty_TextBeside_ - 4
000000003e47  01990000002a R_X86_64_REX_GOTP 0000000000000000 ghc_Pretty_Empty_closu - 4
000000003e74  010100000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_unpt_r1 - 4
000000003eb4  000200000002 R_X86_64_PC32     0000000000000000 .data + a8c
000000003f01  019b00000002 R_X86_64_PC32     0000000000000ab0 ghc_Unique_pprUniqueAl - 4
000000003f24  019b00000002 R_X86_64_PC32     0000000000000ab0 ghc_Unique_pprUniqueAl - 4
000000003f44  019100000002 R_X86_64_PC32     0000000000000a48 ghc_Unique_zdwshowUniq - 4
000000003f90  00d50000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_Z - 4
000000003fb1  01a100000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziBase_zpzp_in - 4
000000003fb8  01a200000002 R_X86_64_PC32     0000000000000af0 ghc_Unique_zdfShowUniq - 4
000000003fcd  017200000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_pp - 4
000000003fec  019100000002 R_X86_64_PC32     0000000000000a48 ghc_Unique_zdwshowUniq - 4
000000004038  00d50000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_Z - 4
000000004059  01a100000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziBase_zpzp_in - 4
000000004060  01a400000002 R_X86_64_PC32     0000000000000b00 ghc_Unique_zdfShowUniq - 4
000000004075  017200000029 R_X86_64_GOTPCREL 0000000000000000 stg_gc_pp - 4
000000004094  01a400000002 R_X86_64_PC32     0000000000000b00 ghc_Unique_zdfShowUniq - 4
0000000040a1  01a400000002 R_X86_64_PC32     0000000000000b00 ghc_Unique_zdfShowUniq - 2
0000000040a7  01a600000029 R_X86_64_GOTPCREL 0000000000000000 base_GHCziShow_showLis - 4
000000004140  01ab0000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_E - 4
000000004152  01ac00000002 R_X86_64_PC32     0000000000000b48 ghc_Unique_nonDetCmpUn - 4
000000004162  01ad0000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_L - 4
000000004174  01ae0000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_G - 4
0000000041a2  01b000000029 R_X86_64_GOTPCREL 0000000000000000 ghczmprim_GHCziClasses - 4
0000000041bc  016e00000002 R_X86_64_PC32     0000000000000868 ghc_Unique_zdwunpkUniq - 4
00000000424a  01b300000002 R_X86_64_PC32     0000000000000b58 ghc_Unique_isValidKnow - 4
000000004255  00de0000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_F - 4
00000000428d  00e60000002a R_X86_64_REX_GOTP 0000000000000000 ghczmprim_GHCziTypes_B - 4

Relocation section '.rela.data' at offset 0xcf18 contains 214 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
000000000000  00aa00000001 R_X86_64_64       0000000000000018 ghc_Unique_getUnique_i + 0
000000000008  00ae00000001 R_X86_64_64       0000000000000040 ghc_Unique_zdfUniquabl + 0
000000000010  00b000000001 R_X86_64_64       0000000000000068 ghc_Unique_zdfUniquabl + 0
000000000018  00b200000001 R_X86_64_64       0000000000000088 ghc_Unique_zdfUniquabl + 0
000000000020  00b400000001 R_X86_64_64       00000000000000b0 ghc_Unique_mkUniqueGri + 0
000000000028  00b600000001 R_X86_64_64       00000000000000d0 ghc_Unique_zdfUniquabl + 0
000000000030  00b800000001 R_X86_64_64       00000000000000f0 ghc_Unique_zdfUniquabl + 0
000000000038  00bb00000001 R_X86_64_64       0000000000000110 ghc_Unique_getKey_info + 0
000000000040  00bf00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_T + 0
000000000048  00bd00000001 R_X86_64_64       0000000000000000 ghc_Unique_zdtrModule4 + 0
000000000050  00bf00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_T + 0
000000000058  00c000000001 R_X86_64_64       0000000000000004 ghc_Unique_zdtrModule2 + 0
000000000060  00c300000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_M + 0
000000000068  00be00000001 R_X86_64_64       0000000000000040 ghc_Unique_zdtrModule3 + 1
000000000070  00c100000001 R_X86_64_64       0000000000000050 ghc_Unique_zdtrModule1 + 1
000000000080  00c400000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_K + 0
000000000088  00c500000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_z + 0
000000000090  00c600000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_Z + 1
0000000000a0  00c400000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_K + 0
0000000000a8  00c700000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_z + 0
0000000000b0  00c600000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_Z + 1
0000000000c0  00c900000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_K + 0
0000000000c8  00ca00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_k + 0
0000000000d0  000200000001 R_X86_64_64       0000000000000000 .data + a1
0000000000e0  00cb00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_K + 0
0000000000f0  00cd00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_T + 0
0000000000f8  00c200000001 R_X86_64_64       0000000000000060 ghc_Unique_zdtrModule_ + 1
000000000100  00c100000001 R_X86_64_64       0000000000000050 ghc_Unique_zdtrModule1 + 1
000000000108  00ca00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_k + 0
000000000130  00c400000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_K + 0
000000000138  00cc00000001 R_X86_64_64       00000000000000f0 ghc_Unique_zdtcUnique_ + 1
000000000140  00c600000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_Z + 1
000000000150  00c900000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_K + 0
000000000158  000200000001 R_X86_64_64       0000000000000000 .data + e2
000000000160  000200000001 R_X86_64_64       0000000000000000 .data + 131
000000000170  00c900000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_K + 0
000000000178  000200000001 R_X86_64_64       0000000000000000 .data + 81
000000000180  000200000001 R_X86_64_64       0000000000000000 .data + 131
000000000190  00bf00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_T + 0
000000000198  00cf00000001 R_X86_64_64       000000000000000b ghc_Unique_zdtczqMkUni + 0
0000000001a0  00cd00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_T + 0
0000000001a8  00c200000001 R_X86_64_64       0000000000000060 ghc_Unique_zdtrModule_ + 1
0000000001b0  00d000000001 R_X86_64_64       0000000000000190 ghc_Unique_zdtczqMkUni + 1
0000000001b8  00ce00000001 R_X86_64_64       0000000000000170 ghc_Unique_zdtczqMkUni + 4
0000000001e0  00bf00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_T + 0
0000000001e8  00d200000001 R_X86_64_64       0000000000000015 ghc_Unique_zdtcUniquab + 0
0000000001f0  00cd00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_T + 0
0000000001f8  00c200000001 R_X86_64_64       0000000000000060 ghc_Unique_zdtrModule_ + 1
000000000200  00d300000001 R_X86_64_64       00000000000001e0 ghc_Unique_zdtcUniquab + 1
000000000208  00c800000001 R_X86_64_64       00000000000000c0 ghc_Unique_zdtcUniquab + 4
000000000230  00d500000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_Z + 0
000000000238  000200000001 R_X86_64_64       0000000000000000 .data + e2
000000000240  00c600000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_Z + 1
000000000250  00c400000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_K + 0
000000000258  00d400000001 R_X86_64_64       00000000000001f0 ghc_Unique_zdtcUniquab + 1
000000000260  000200000001 R_X86_64_64       0000000000000000 .data + 232
000000000270  00c900000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_K + 0
000000000278  000200000001 R_X86_64_64       0000000000000000 .data + 154
000000000280  000200000001 R_X86_64_64       0000000000000000 .data + 251
000000000290  00bf00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_T + 0
000000000298  00d700000001 R_X86_64_64       000000000000001f ghc_Unique_zdtczqCZCUn + 0
0000000002a0  00cd00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_T + 0
0000000002a8  00c200000001 R_X86_64_64       0000000000000060 ghc_Unique_zdtrModule_ + 1
0000000002b0  00d800000001 R_X86_64_64       0000000000000290 ghc_Unique_zdtczqCZCUn + 1
0000000002b8  00d600000001 R_X86_64_64       0000000000000270 ghc_Unique_zdtczqCZCUn + 4
0000000002e0  00da00000001 R_X86_64_64       0000000000000130 ghc_Unique_eqUnique_in + 0
0000000002e8  00dd00000001 R_X86_64_64       0000000000000150 ghc_Unique_zdfEqUnique + 0
0000000002f0  00e200000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziClasses + 0
0000000002f8  00e300000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziClasses + 2
000000000300  00df00000001 R_X86_64_64       00000000000002e8 ghc_Unique_zdfEqUnique + 2
000000000310  00e400000001 R_X86_64_64       0000000000000210 ghc_Unique_hasKey_info + 0
000000000318  00e900000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_I + 0
000000000328  00ea00000001 R_X86_64_64       00000000000002c8 ghc_Unique_dataConTyRe + 0
000000000330  00eb00000001 R_X86_64_64       0000000000000000 base_GHCziNum_zdfNumIn + 0
000000000340  00ef00000001 R_X86_64_64       0000000000000328 ghc_Unique_dataConTyRe + 0
000000000350  00e900000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_I + 0
000000000360  00f200000001 R_X86_64_64       0000000000000348 ghc_Unique_dataConWork + 0
000000000370  00f400000001 R_X86_64_64       00000000000003a8 ghc_Unique_tyConRepNam + 0
000000000380  00f600000001 R_X86_64_64       00000000000003c8 ghc_Unique_dataConWork + 0
000000000390  00e900000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_I + 0
0000000003a0  00f900000001 R_X86_64_64       00000000000003e0 ghc_Unique_uNIQUEzuBIT + 0
0000000003c0  00e900000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_I + 0
0000000003d0  010000000001 R_X86_64_64       0000000000000460 ghc_Unique_pprUniqueAl + 0
0000000003f0  010300000001 R_X86_64_64       0000000000000000 stg_SRT_2_info + 0
0000000003f8  00eb00000001 R_X86_64_64       0000000000000000 base_GHCziNum_zdfNumIn + 0
000000000400  010200000001 R_X86_64_64       00000000000003d0 ghc_Unique_pprUniqueAl + 0
000000000410  010400000001 R_X86_64_64       0000000000000560 ghc_Unique_uniqueMask_ + 0
000000000430  010600000001 R_X86_64_64       00000000000005e0 ghc_Unique_pprUniqueAl + 0
000000000450  010300000001 R_X86_64_64       0000000000000000 stg_SRT_2_info + 0
000000000458  010700000001 R_X86_64_64       0000000000000430 ghc_Unique_pprUniqueAl + 0
000000000460  010500000001 R_X86_64_64       0000000000000410 ghc_Unique_uniqueMask_ + 0
000000000470  010800000001 R_X86_64_64       0000000000000668 ghc_Unique_mkAlphaTyVa + 0
000000000480  010a00000001 R_X86_64_64       0000000000000840 ghc_Unique_mkUnique_in + 0
000000000490  010d00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_C + 0
0000000004a0  010e00000001 R_X86_64_64       0000000000000860 ghc_Unique_mkAlphaTyVa + 0
0000000004b0  011000000001 R_X86_64_64       0000000000000a00 ghc_Unique_mkAlphaTyVa + 0
0000000004c0  010d00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_C + 0
0000000004d0  011300000001 R_X86_64_64       0000000000000a20 ghc_Unique_mkCoVarUniq + 0
0000000004e0  011500000001 R_X86_64_64       0000000000000bc0 ghc_Unique_mkCoVarUniq + 0
0000000004f0  010d00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_C + 0
000000000500  011800000001 R_X86_64_64       0000000000000be0 ghc_Unique_mkPreludeCl + 0
000000000510  011a00000001 R_X86_64_64       0000000000000d80 ghc_Unique_mkPreludeCl + 0
000000000520  010d00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_C + 0
000000000530  011d00000001 R_X86_64_64       0000000000000da0 ghc_Unique_mkPrimOpIdU + 0
000000000540  011f00000001 R_X86_64_64       0000000000000f40 ghc_Unique_mkPrimOpIdU + 0
000000000550  010d00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_C + 0
000000000560  012200000001 R_X86_64_64       0000000000000f60 ghc_Unique_mkPreludeMi + 0
000000000570  012400000001 R_X86_64_64       0000000000001100 ghc_Unique_mkPreludeMi + 0
000000000580  012600000001 R_X86_64_64       0000000000001118 ghc_Unique_initTyVarUn + 0
0000000005a0  012900000001 R_X86_64_64       0000000000000000 stg_IND_STATIC_info + 0
0000000005a8  012700000001 R_X86_64_64       0000000000000580 ghc_Unique_initTyVarUn + 0
0000000005c0  010d00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_C + 0
0000000005d0  012b00000001 R_X86_64_64       0000000000001260 ghc_Unique_mkBuiltinUn + 0
0000000005e0  012d00000001 R_X86_64_64       0000000000001400 ghc_Unique_mkBuiltinUn + 0
0000000005f0  010d00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_C + 0
000000000600  013000000001 R_X86_64_64       0000000000001420 ghc_Unique_mkPseudoUni + 0
000000000610  013200000001 R_X86_64_64       00000000000015c0 ghc_Unique_mkPseudoUni + 0
000000000620  010d00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_C + 0
000000000630  013500000001 R_X86_64_64       00000000000015e0 ghc_Unique_mkPseudoUni + 0
000000000640  013700000001 R_X86_64_64       0000000000001780 ghc_Unique_mkPseudoUni + 0
000000000650  010d00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_C + 0
000000000660  013a00000001 R_X86_64_64       00000000000017a0 ghc_Unique_mkPseudoUni + 0
000000000670  013c00000001 R_X86_64_64       0000000000001940 ghc_Unique_mkPseudoUni + 0
000000000680  013e00000001 R_X86_64_64       0000000000001960 ghc_Unique_mkRegSingle + 0
000000000690  014000000001 R_X86_64_64       0000000000001b00 ghc_Unique_mkRegSingle + 0
0000000006a0  014200000001 R_X86_64_64       0000000000001b20 ghc_Unique_mkRegSubUni + 0
0000000006b0  014400000001 R_X86_64_64       0000000000001cc0 ghc_Unique_mkRegSubUni + 0
0000000006c0  014600000001 R_X86_64_64       0000000000001ce0 ghc_Unique_mkRegPairUn + 0
0000000006d0  014800000001 R_X86_64_64       0000000000001e80 ghc_Unique_mkRegPairUn + 0
0000000006e0  014a00000001 R_X86_64_64       0000000000001ea0 ghc_Unique_mkRegClassU + 0
0000000006f0  014c00000001 R_X86_64_64       0000000000002040 ghc_Unique_mkRegClassU + 0
000000000700  014e00000001 R_X86_64_64       0000000000002060 ghc_Unique_mkCostCentr + 0
000000000710  015000000001 R_X86_64_64       0000000000002200 ghc_Unique_mkCostCentr + 0
000000000720  015200000001 R_X86_64_64       0000000000002220 ghc_Unique_mkVarOccUni + 0
000000000730  015400000001 R_X86_64_64       00000000000023c0 ghc_Unique_mkVarOccUni + 0
000000000740  015600000001 R_X86_64_64       00000000000023e0 ghc_Unique_mkDataOccUn + 0
000000000750  015800000001 R_X86_64_64       0000000000002580 ghc_Unique_mkDataOccUn + 0
000000000760  015a00000001 R_X86_64_64       00000000000025a0 ghc_Unique_mkTvOccUniq + 0
000000000770  015c00000001 R_X86_64_64       0000000000002740 ghc_Unique_mkTvOccUniq + 0
000000000780  015e00000001 R_X86_64_64       0000000000002760 ghc_Unique_mkTcOccUniq + 0
000000000790  016000000001 R_X86_64_64       0000000000002900 ghc_Unique_mkTcOccUniq + 0
0000000007a0  016200000001 R_X86_64_64       0000000000002918 ghc_Unique_initExitJoi + 0
0000000007c0  012900000001 R_X86_64_64       0000000000000000 stg_IND_STATIC_info + 0
0000000007c8  016300000001 R_X86_64_64       00000000000007a0 ghc_Unique_initExitJoi + 0
0000000007e0  010d00000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_C + 0
0000000007f0  016600000001 R_X86_64_64       0000000000000000 stg_SRT_1_info + 0
0000000007f8  016700000001 R_X86_64_64       0000000000000000 base_GHCziChar_zdwlvl_ + 0
000000000808  016800000001 R_X86_64_64       0000000000002a58 ghc_Unique_pprUniqueAl + 0
000000000828  010300000001 R_X86_64_64       0000000000000000 stg_SRT_2_info + 0
000000000830  016700000001 R_X86_64_64       0000000000000000 base_GHCziChar_zdwlvl_ + 0
000000000838  016a00000001 R_X86_64_64       0000000000000808 ghc_Unique_pprUniqueAl + 0
000000000848  010300000001 R_X86_64_64       0000000000000000 stg_SRT_2_info + 0
000000000850  010700000001 R_X86_64_64       0000000000000430 ghc_Unique_pprUniqueAl + 0
000000000858  000200000001 R_X86_64_64       0000000000000000 .data + 828
000000000868  016d00000001 R_X86_64_64       0000000000002c30 ghc_Unique_zdwunpkUniq + 0
000000000870  010500000001 R_X86_64_64       0000000000000410 ghc_Unique_uniqueMask_ + 0
000000000878  000200000001 R_X86_64_64       0000000000000000 .data + 848
000000000888  016f00000001 R_X86_64_64       0000000000002ca0 ghc_Unique_unpkUnique_ + 0
000000000898  010300000001 R_X86_64_64       0000000000000000 stg_SRT_2_info + 0
0000000008a0  016e00000001 R_X86_64_64       0000000000000868 ghc_Unique_zdwunpkUniq + 0
0000000008a8  000200000001 R_X86_64_64       0000000000000000 .data + 450
0000000008b8  017300000001 R_X86_64_64       0000000000002d38 ghc_Unique_newTagUniqu + 0
0000000008c8  017500000001 R_X86_64_64       0000000000002f38 ghc_Unique_newTagUniqu + 0
0000000008d8  010300000001 R_X86_64_64       0000000000000000 stg_SRT_2_info + 0
0000000008e0  00eb00000001 R_X86_64_64       0000000000000000 base_GHCziNum_zdfNumIn + 0
0000000008e8  010500000001 R_X86_64_64       0000000000000410 ghc_Unique_uniqueMask_ + 0
0000000008f8  017700000001 R_X86_64_64       0000000000002f58 ghc_Unique_zdwderiveUn + 0
000000000900  010700000001 R_X86_64_64       0000000000000430 ghc_Unique_pprUniqueAl + 0
000000000908  000200000001 R_X86_64_64       0000000000000000 .data + 8d8
000000000918  017900000001 R_X86_64_64       0000000000003108 ghc_Unique_deriveUniqu + 0
000000000928  017c00000001 R_X86_64_64       0000000000003198 ghc_Unique_deriveUniqu + 0
000000000938  017e00000001 R_X86_64_64       00000000000031b8 ghc_Unique_zdwmkPrelud + 0
000000000948  018100000001 R_X86_64_64       0000000000003378 ghc_Unique_mkPreludeTy + 0
000000000958  018300000001 R_X86_64_64       0000000000003408 ghc_Unique_mkPreludeTy + 0
000000000968  00e900000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_I + 0
000000000978  018600000001 R_X86_64_64       0000000000003428 ghc_Unique_zdwmkPrelud + 0
000000000988  018800000001 R_X86_64_64       00000000000035e8 ghc_Unique_mkPreludeDa + 0
000000000998  018a00000001 R_X86_64_64       0000000000003678 ghc_Unique_mkPreludeDa + 0
0000000009a8  000100000001 R_X86_64_64       0000000000000000 .text + 3690
0000000009c8  010300000001 R_X86_64_64       0000000000000000 stg_SRT_2_info + 0
0000000009d0  018c00000001 R_X86_64_64       0000000000000000 base_GHCziReal_even3_c + 0
0000000009d8  000200000001 R_X86_64_64       0000000000000000 .data + 9a8
0000000009e8  018d00000001 R_X86_64_64       0000000000003720 ghc_Unique_zdwgo_info + 0
0000000009f8  00e900000001 R_X86_64_64       0000000000000000 ghczmprim_GHCziTypes_I + 0
000000000a08  010300000001 R_X86_64_64       0000000000000000 stg_SRT_2_info + 0
000000000a10  00eb00000001 R_X86_64_64       0000000000000000 base_GHCziNum_zdfNumIn + 0
000000000a18  000200000001 R_X86_64_64       0000000000000000 .data + 7f0
000000000a28  010300000001 R_X86_64_64       0000000000000000 stg_SRT_2_info + 0
000000000a30  018e00000001 R_X86_64_64       00000000000009e8 ghc_Unique_zdwgo_closu + 0
000000000a38  000200000001 R_X86_64_64       0000000000000000 .data + a08
000000000a48  019000000001 R_X86_64_64       0000000000003b80 ghc_Unique_zdwshowUniq + 0
000000000a50  016e00000001 R_X86_64_64       0000000000000868 ghc_Unique_zdwunpkUniq + 0
000000000a58  000200000001 R_X86_64_64       0000000000000000 .data + a28
000000000a68  019200000001 R_X86_64_64       0000000000003cf8 ghc_Unique_showUnique_ + 0
000000000a78  016600000001 R_X86_64_64       0000000000000000 stg_SRT_1_info + 0
000000000a80  019400000001 R_X86_64_64       0000000000000000 base_GHCziList_lenAcc_ + 0
000000000a90  010300000001 R_X86_64_64       0000000000000000 stg_SRT_2_info + 0
000000000a98  019300000001 R_X86_64_64       0000000000000a68 ghc_Unique_showUnique_ + 0
000000000aa0  000200000001 R_X86_64_64       0000000000000000 .data + a78
000000000ab0  019a00000001 R_X86_64_64       0000000000003eb8 ghc_Unique_pprUniqueAl + 0
000000000ac0  019c00000001 R_X86_64_64       0000000000003f28 ghc_Unique_zdfOutputab + 0
000000000ad0  019f00000001 R_X86_64_64       0000000000000000 ghc_Outputable_CZCOutp + 0
000000000ad8  019b00000001 R_X86_64_64       0000000000000ab0 ghc_Unique_pprUniqueAl + 1
000000000ae0  019d00000001 R_X86_64_64       0000000000000ac0 ghc_Unique_zdfOutputab + 2
000000000af0  01a000000001 R_X86_64_64       0000000000003f48 ghc_Unique_zdfShowUniq + 0
000000000b00  01a300000001 R_X86_64_64       0000000000003ff0 ghc_Unique_zdfShowUniq + 0
000000000b10  01a500000001 R_X86_64_64       0000000000004098 ghc_Unique_zdfShowUniq + 0
000000000b20  01a900000001 R_X86_64_64       0000000000000000 base_GHCziShow_CZCShow + 0
000000000b28  01a200000001 R_X86_64_64       0000000000000af0 ghc_Unique_zdfShowUniq + 3
000000000b30  019300000001 R_X86_64_64       0000000000000a68 ghc_Unique_showUnique_ + 1
000000000b38  01a700000001 R_X86_64_64       0000000000000b10 ghc_Unique_zdfShowUniq + 2
000000000b48  01aa00000001 R_X86_64_64       00000000000040c8 ghc_Unique_nonDetCmpUn + 0
000000000b50  01af00000001 R_X86_64_64       00000000000041a0 ghc_Unique_ltUnique_in + 0
000000000b58  01b200000001 R_X86_64_64       00000000000041c0 ghc_Unique_isValidKnow + 0

In particular, at the offset indicated by the error, I can see:

0000000036d5  008800000002 R_X86_64_PC32     000000000000002c r7vq_bytes + 7ffffffffffffffc

(... which is not an R_X86_64_32S relocation...?! Let's pretend it's fine. I don't know that symbol but I suppose it's some form of 32 bits relocation too.)

The offset that we add to r7vq_bytes seems incredibly big, quite likely way way outside of my memory, or my laptop for that matter :-)

All the other offsets, as you can see above, are at most 3 hexadecimal digits long.

@bgamari How would I go about finding where that comes from, and most importantly, how to fix it?

alpmestan commented 5 years ago

Ben and I had a chat about this yesterday, and he suggested that I try using ld.gold instead of ld, in case we were seeing a linker bug. Which I did, and now I'm seeing this error:

_tmp/stage1/compiler/build/Unique.dyn_o:r7vr_info: error: relocation overflow: reference to local symbol 136 in _tmp/stage1/compiler/build/Unique.dyn_o

Which isn't a relocation error I've seen before. I'll quite likely -ddump-asm and see what code is generated for r7vr, looking for that problematic reference to a local symbol. Hopefully we'll see something there that will tell us why it is problematic :-)

snowleopard commented 5 years ago

@alpmestan I'm afraid I have no idea what's going on here :( I don't even know what relocations are. Could you give a brief higher-level description of the problem or point to where I can read more?

alpmestan commented 5 years ago

@snowleopard https://jvns.ca/blog/2013/12/10/day-40-learning-about-linkers/ has some quite approachable description of the purpose of relocations. And the idea here is that with ld, we end up generating a relocation whose target is just waaaaaaaaaaaay outside of the object file, because of the huge offset I mentionned above. With ld.gold, the story is slightly different as we apparently end up generating a different relocation, which seems to trigger a slightly different error. It remains to be seen whether we're still generating a bad offset in that case or whether it's something else.

alpmestan commented 5 years ago

Alright, I dumped the assembly, and here are the sections that define r7vr info and closure:

==================== Asm code ====================
.section .rodata.str,"aMS",@progbits,1
.align 1
.align 1
chars62_r7vq_bytes:
    .asciz "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

==================== Asm code ====================
.section .text
.align 8
.align 8
    .quad   0
    .long   21
    .long   0
lvl_r7vr_info:
_c8jp:
    leaq -16(%rbp),%rax
    cmpq %r15,%rax
    jb _c8js
_c8jt:
    addq $16,%r12
    cmpq 856(%r13),%r12
    ja _c8jv
_c8ju:
    subq $8,%rsp
    movq %r13,%rax
    movq %rbx,%rsi
    movq %rax,%rdi
    xorl %eax,%eax
    call newCAF@plt
    addq $8,%rsp
    testq %rax,%rax
    je _c8jm
_c8jl:
    movq stg_bh_upd_frame_info@gotpcrel(%rip),%rbx
    movq %rbx,-16(%rbp)
    movq %rax,-8(%rbp)
    movzbl chars62_r7vq_bytes+-9223372036854775808(%rip),%eax
    movq GHC.Types.C#_con_info@gotpcrel(%rip),%rbx
    movq %rbx,-8(%r12)
    movq %rax,(%r12)
    leaq -7(%r12),%rbx
    addq $-16,%rbp
    jmp *(%rbp)
_c8jm:
    jmp *(%rbx)
_c8jv:
    movq $16,904(%r13)
_c8js:
    jmp *-16(%r13)
    .size lvl_r7vr_info, .-lvl_r7vr_info

==================== Asm code ====================
.section .data
.align 8
.align 1
lvl_r7vr_closure:
    .quad   lvl_r7vr_info
    .quad   0
    .quad   0
    .quad   0

Of particular interest is that line:

    movzbl chars62_r7vq_bytes+-9223372036854775808(%rip),%eax

The offset here is very close to the one we saw in the readelf --relocs output in an earlier comment of mine, it turns out:

# 7ffffffffffffffc is the offset we saw with readelf
$ ghc -e '0x7ffffffffffffffc'
9223372036854775804
# this is almost the offset we're seeing on that movzbl line

This would, I suppose, tend to suggest that the native code generator emits bad code?

I also included the definition of chars62_r7vq_bytes (which is I suppose that infamous "local symbol 136" ?), and is never going to be as long as that offset would have us think :-) I'm also a bit puzzleld by the +- there, which I suppose simplifies to -, meaning this would in fact be a negative offset. Either way, the number's just too large.

alpmestan commented 5 years ago

Haha! I dumped the STG (-ddump-stg) for our Unique module, and the huge offset is already there:

chars62_r7vq :: GHC.Prim.Addr#
[GblId, Caf=NoCafRefs, Unf=OtherCon []] =
    "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"#;

lvl_r7vr :: GHC.Types.Char
[GblId] =
    [] \u []
        case
            indexCharOffAddr# [chars62_r7vq -9223372036854775808#]
        of
        v_s7Ch [Occ=Once]
        { __DEFAULT -> GHC.Types.C# [v_s7Ch];
        };

As well as in the final Core (-ddump-simpl), i.e earlier in the pipeline:

-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
chars62_r7vq :: ghc-prim-0.5.3:GHC.Prim.Addr#
[GblId, Caf=NoCafRefs, Unf=OtherCon []]
chars62_r7vq
  = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"#

-- RHS size: {terms: 7, types: 1, coercions: 0, joins: 0/0}
lvl_r7vr :: Char
[GblId]
lvl_r7vr
  = case indexCharOffAddr# chars62_r7vq -9223372036854775808# of v_B2
    { __DEFAULT ->
    ghc-prim-0.5.3:GHC.Types.C# v_B2
    }

This seems to correspond to a fragment of this piece of Haskell code from Unique.hs:

{-
************************************************************************
*                                                                      *
\subsection[Utils-base62]{Base-62 numbers}
*                                                                      *
************************************************************************

A character-stingy way to read/write numbers (notably Uniques).
The ``62-its'' are \tr{[0-9a-zA-Z]}.  We don't handle negative Ints.
Code stolen from Lennart.
-}

iToBase62 :: Int -> String
iToBase62 n_
  = ASSERT(n_ >= 0) go n_ ""
  where
    go n cs | n < 62
            = let !c = chooseChar62 n in c : cs
            | otherwise
            = go q (c : cs) where (q, r) = quotRem n 62
                                  !c = chooseChar62 r

    chooseChar62 :: Int -> Char
    {-# INLINE chooseChar62 #-}
    chooseChar62 (I# n) = C# (indexCharOffAddr# chars62 n)
    chars62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"#

In particular the chooseChar62 function. With n = -9223372036854775804 ?!

bgamari commented 5 years ago

Amazing work, @alpmestan! This is quite interesting indeed; can you by any chance find where lvl_r7vr arose from? There is probably a particular callsite of showUnique that is responsible.

Of course, r should always be in the range of [-61, 61] and no amount of fooling around in ghci has shown me a case where this isn't true. Consequently, I strongly suspect we have some bad constant folding going on here.

alpmestan commented 5 years ago

The interesting part is that I don't see any place in Unique.hs where showUnique is called against a fixed Unique. The only constant that I see is:

-- compiler/Unique.h defines UNIQUE_TAG_BITS to be 8
uNIQUE_BITS :: Int
uNIQUE_BITS = finiteBitSize (0 :: Int) - UNIQUE_TAG_BITS

(By the way:

$ ghc -e 'minBound :: Int'
-9223372036854775808

)

snowleopard commented 5 years ago

@alpmestan Interesting! Are you saying this is a bug in GHC -- showUnique is called with minBound + 4?

alpmestan commented 5 years ago

@snowleopard We'll soon know. I'm now looking at who's using this result to figure out where the number comes from.

alpmestan commented 5 years ago

Alright, so here is the context in Core:

-- our array of chars
chars62_r7vq :: ghc-prim-0.5.3:GHC.Prim.Addr#
chars62_r7vq
  = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"#

-- chars62_r7vq[-9223372036854775808#]
lvl_r7vr :: Char
lvl_r7vr
  = case indexCharOffAddr# chars62_r7vq -9223372036854775808# of v_B2
    { __DEFAULT ->
    ghc-prim-0.5.3:GHC.Types.C# v_B2
    }

-- the user of r7vr
Rec {
-- RHS size: {terms: 82, types: 46, coercions: 0, joins: 0/0}
Unique.$wgo [InlPrag=NOUSERINLINE[2], Occ=LoopBreaker]
  :: ghc-prim-0.5.3:GHC.Prim.Int# -> [Char] -> (# Char, [Char] #)
[GblId, Arity=2, Str=<S,U><L,U>, Unf=OtherCon []]
Unique.$wgo
  = \ (ww_s77F :: ghc-prim-0.5.3:GHC.Prim.Int#) (w_s77C :: [Char]) ->
      case GHC.Real.even3 of { I# y_a6xU ->
      case y_a6xU of {
        __DEFAULT ->
          case ghc-prim-0.5.3:GHC.Prim.quotRemInt# ww_s77F 62# of
          { (# ipv_a6xZ, ipv1_a6y0 #) ->
          case indexCharOffAddr# chars62_r7vq ipv1_a6y0 of wild2_X4
          { __DEFAULT ->
          case ghc-prim-0.5.3:GHC.Prim.<# ww_s77F 62# of {
            __DEFAULT ->
              Unique.$wgo
                ipv_a6xZ
                (ghc-prim-0.5.3:GHC.Types.:
                   @ Char (ghc-prim-0.5.3:GHC.Types.C# wild2_X4) w_s77C);
            1# ->
              case indexCharOffAddr# chars62_r7vq ww_s77F of wild3_X54
              { __DEFAULT ->
              (# ghc-prim-0.5.3:GHC.Types.C# wild3_X54, w_s77C #)
              }
          }
          }
          };
        62# ->
          case ww_s77F of wild2_a6y2 {
            __DEFAULT ->
              case ghc-prim-0.5.3:GHC.Prim.quotRemInt# wild2_a6y2 62# of
              { (# ipv_a6y5, ipv1_a6y6 #) ->
              case indexCharOffAddr# chars62_r7vq ipv1_a6y6 of wild4_X4
              { __DEFAULT ->
              case ghc-prim-0.5.3:GHC.Prim.<# wild2_a6y2 62# of {
                __DEFAULT ->
                  Unique.$wgo
                    ipv_a6y5
                    (ghc-prim-0.5.3:GHC.Types.:
                       @ Char (ghc-prim-0.5.3:GHC.Types.C# wild4_X4) w_s77C);
                1# ->
                  case indexCharOffAddr# chars62_r7vq wild2_a6y2 of wild5_X54
                  { __DEFAULT ->
                  (# ghc-prim-0.5.3:GHC.Types.C# wild5_X54, w_s77C #)
                  }
              }
              }
              };
            -9223372036854775808# ->
              case lvl_r7vr of { C# v1_B2 ->
              (# ghc-prim-0.5.3:GHC.Types.C# v1_B2, w_s77C #)
              }
          }
      }
      }
end Rec }

In the function using r7vr, we see two branches:

        __DEFAULT ->
          case ghc-prim-0.5.3:GHC.Prim.quotRemInt# ww_s77F 62# of
          { (# ipv_a6xZ, ipv1_a6y0 #) ->
          case indexCharOffAddr# chars62_r7vq ipv1_a6y0 of wild2_X4
          { __DEFAULT ->
          case ghc-prim-0.5.3:GHC.Prim.<# ww_s77F 62# of {
            __DEFAULT ->
              Unique.$wgo
                ipv_a6xZ
                (ghc-prim-0.5.3:GHC.Types.:
                   @ Char (ghc-prim-0.5.3:GHC.Types.C# wild2_X4) w_s77C);
            1# ->
              case indexCharOffAddr# chars62_r7vq ww_s77F of wild3_X54
              { __DEFAULT ->
              (# ghc-prim-0.5.3:GHC.Types.C# wild3_X54, w_s77C #)
              }
          }
          }
          };

and

        62# ->
          case ww_s77F of wild2_a6y2 {
            __DEFAULT ->
              case ghc-prim-0.5.3:GHC.Prim.quotRemInt# wild2_a6y2 62# of
              { (# ipv_a6y5, ipv1_a6y6 #) ->
              case indexCharOffAddr# chars62_r7vq ipv1_a6y6 of wild4_X4
              { __DEFAULT ->
              case ghc-prim-0.5.3:GHC.Prim.<# wild2_a6y2 62# of {
                __DEFAULT ->
                  Unique.$wgo
                    ipv_a6y5
                    (ghc-prim-0.5.3:GHC.Types.:
                       @ Char (ghc-prim-0.5.3:GHC.Types.C# wild4_X4) w_s77C);
                1# ->
                  case indexCharOffAddr# chars62_r7vq wild2_a6y2 of wild5_X54
                  { __DEFAULT ->
                  (# ghc-prim-0.5.3:GHC.Types.C# wild5_X54, w_s77C #)
                  }
              }
              }
              };
            -9223372036854775808# ->
              case lvl_r7vr of { C# v1_B2 ->
              (# ghc-prim-0.5.3:GHC.Types.C# v1_B2, w_s77C #)
              }
          }

We can see that r7vr is used in that -9223372036854775808# branch.

guibou commented 5 years ago

My two cents: is this possible that the recent changes related to constant folding may had rewritten an expression to something which is not overflow free?

alpmestan commented 5 years ago

@guibou Hah! @angerman mentionned this to me earlier today. So... maybe :-) @bgamari thoughts?

snowleopard commented 5 years ago

@guibou @alpmestan Could you link to the "recent changes related to constant folding"? Presumably, there is a ticket/commit somewhere? I'm curious :)

guibou commented 5 years ago

https://ghc.haskell.org/trac/ghc/ticket/9136

bgamari commented 5 years ago

Yes, I strongly suspect this is the culprit.

alpmestan commented 5 years ago

Alright, so the first time the huge offset appears, it's in a function called go_s6KF, defined locally in the Core for showUnique initially. At that point, there's no huge number:

...
               letrec {
                 <go_s6KF,F<0,0>>
                 <go_s6KF,F<0,0>>
                   = \ <n_a4zN,<1,0>> <cs_a4zO,<1,0>> ->
                       let {
                         <ds_s6K2,<1,2>>
                         <ds_s6K2,<1,2>>
                           = GHC.Real.$fIntegralInt_$cquotRem
                               n_a4zN
                               (let {
                                  <lvl_s6KG,F<0,0>>
                                  <lvl_s6KG,F<0,0>> = GHC.Types.I# 62# } in
                                lvl_s6KG) } in
                       case case case ds_s6K2 of <wild_X17,<1,5>>
                                 { (<q_a58F,<1,5>>, <r_a58H,<1,5>>) ->
                                 r_a58H
                                 }
                            of <wild_X3A,<1,4>>
                            { GHC.Types.I# <n_a4Kt,<1,4>> ->
                            case GHC.Prim.indexCharOffAddr# chars62_s6KB n_a4Kt
                            of <wild_X4,<1,5>>
                            { __DEFAULT ->
                            GHC.Types.C# wild_X4
                            }
                            }
                       of <c_a4zR,<1,3>>
                       { GHC.Types.C# <ipv_s6yf,<1,3>> ->
                       case GHC.Classes.ltInt
                              n_a4zN
                              (let {
                                 <lvl_s6KH,F<0,0>>
                                 <lvl_s6KH,F<0,0>> = GHC.Types.I# 62# } in
                               lvl_s6KH)
                       of <wild_X18,<1,4>> {
                         GHC.Types.False ->
                           go_s6KF
                             (case ds_s6K2 of <wild_X19,<1,5>>
                              { (<q_a58F,<1,5>>, <r_a58H,<1,5>>) ->
                              q_a58F
                              })
                             (GHC.Types.: @ GHC.Types.Char c_a4zR cs_a4zO);
                         GHC.Types.True ->
                           case chooseChar62_s6KD n_a4zN of <c_a4Ks,<1,5>>
                           { GHC.Types.C# <ipv_s6yB,<1,5>> ->
                           GHC.Types.: @ GHC.Types.Char c_a4Ks cs_a4zO
                           }
                       }
                       }; } in
               go_s6KF u_a4zD (GHC.Types.[] @ GHC.Types.Char)
...

This quite likely corresponds to iToBase62, with GHC.Types.[] @ GHC.Types.Char being "" and go_s6KF being go:

iToBase62 :: Int -> String
iToBase62 n_
  = ASSERT(n_ >= 0) go n_ ""
  where
    go n cs | n < 62
            = let !c = chooseChar62 n in c : cs
            | otherwise
            = go q (c : cs) where (q, r) = quotRem n 62
                                  !c = chooseChar62 r

    chooseChar62 :: Int -> Char
    {-# INLINE chooseChar62 #-}
    chooseChar62 (I# n) = C# (indexCharOffAddr# chars62 n)
    chars62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"#

This function then gets floated out, to the toplevel (I edited the Core to be more readable... or rather tried to):

go_s6KF
  = \ (n_a4zN :: Int) (cs_a4zO :: [Char]) ->
      let {
        ds_s6K2 :: (Int, Int)
        ds_s6K2 = GHC.Real.$fIntegralInt_$cquotRem n_a4zN lvl_s6KG } in
      case case case ds_s6K2 of { (q_a58F, r_a58H) -> r_a58H } of
           { I# n_a4Kt ->
           case indexCharOffAddr# chars62_s6KB n_a4Kt of wild_X4
           { __DEFAULT -> C# wild_X4 }
           }
      of c_a4zR
      { C# ipv_s6yf ->
      case GHC.Classes.ltInt n_a4zN lvl_s6KH of {
        False ->
          go_s6KF
            (case ds_s6K2 of { (q_a58F, r_a58H) -> q_a58F })
            (c_a4zR : cs_a4zO);
        True ->
          case chooseChar62_s6KD n_a4zN of c_a4Ks { C# ipv_s6yB ->
          c_a4Ks : cs_a4zO }
      }
      }

And at the next iteration, we see our beloved number appear:

go_s6KF
  = \ (n_a4zN :: Int) (cs_a4zO :: [Char]) ->
      case n_a4zN of ww_a6xI { I# ww1_a6xK ->
      case GHC.Real.even3 of { I# y_a6xU ->
      join {
        $j_s6Oo :: Int -> Int -> [Char]
        $j_s6Oo (q_a58F :: Int) (r_a58H :: Int)
          = case r_a58H of { I# n_a4Kt ->
            case indexCharOffAddr# chars62_s6KB n_a4Kt of wild_X4
            { __DEFAULT ->
            case GHC.Classes.ltInt ww_a6xI lvl_s6KH of {
              False -> go_s6KF q_a58F (C# wild_X4 : cs_a4zO);
              True ->
                case indexCharOffAddr# chars62_s6KB ww1_a6xK of wild_X54
                  { __DEFAULT -> C# wild_X54 : cs_a4zO }
            }
            }
            } } in
      case y_a6xU of {
        __DEFAULT ->
          case quotRemInt# ww1_a6xK 62# of
          { (# ipv_a6xZ, ipv1_a6y0 #) ->
          jump $j_s6Oo (I# ipv_a6xZ) (I# ipv1_a6y0)
          };
        62# ->
          case ww1_a6xK of wild2_a6y2 {
            __DEFAULT ->
              case quotRemInt# wild2_a6y2 62# of
              { (# ipv_a6y5, ipv1_a6y6 #) ->
              jump $j_s6Oo (I# ipv_a6y5) (I# ipv1_a6y6)
              };
            -9223372036854775808# ->
              jump $j_s6Oo (GHC.Real.overflowError @ Int) GHC.Real.$fIntegralInt1
          }
      }
      }
      }

So, what happened?

We'll need this, from libraries/base/GHC/Real.hs:

    a `quotRem` b
     | b == 0                     = divZeroError
       -- Note [Order of tests] in GHC.Int
     | b == (-1) && a == minBound = (overflowError, 0)
     | otherwise                  =  a `quotRemInt` b

and this from libraries/base/GHC/Base.hs:

quotRemInt :: Int -> Int -> (Int, Int)
(I# x) `quotRemInt` (I# y) = case x `quotRemInt#` y of
                             (# q, r #) ->
                                 (I# q, I# r)

With those definitions in mind, we can see that the use of the Integral Int dictionary disappears and that the actual definition of quotRem for Ints gets inlined, as we end up with "naked" quotRemInt# calls.

We see that the overflowError appears in the last version of our function that I gave:

            -9223372036854775808# ->
              jump $j_s6Oo (GHC.Real.overflowError @ Int) GHC.Real.$fIntegralInt1

Right next to our number. Our number then perfectly matches the minBound in the definition of quotRem for Ints. And as pointed out above, minBound :: Int is -9223372036854775808.

Note that $j_s6Oo is:

        $j_s6Oo :: Int -> Int -> [Char]
        $j_s6Oo (q_a58F :: Int) (r_a58H :: Int)
          = case r_a58H of { I# n_a4Kt ->
            case indexCharOffAddr# chars62_s6KB n_a4Kt of wild_X4
            { __DEFAULT ->
            case GHC.Classes.ltInt ww_a6xI lvl_s6KH of {
              False -> go_s6KF q_a58F (C# wild_X4 : cs_a4zO);
              True ->
                case indexCharOffAddr# chars62_s6KB ww1_a6xK of wild_X54
                  { __DEFAULT -> C# wild_X54 : cs_a4zO }
            } } } } 

And since we end up with a huge offset given as the second argument to indexCharOffAddr# at the end, I suppose GHC.Real.$fIntegralInt1 is a sweet name for minBound :: Int.

Some optimisations later, we have:

go_s6KF
  = \ (n_a4zN :: Int) (cs_a4zO :: [Char]) ->
      case n_a4zN of { I# ww1_a6xK ->
      case GHC.Real.even3 of { I# y_a6xU ->
      case y_a6xU of {
        __DEFAULT ->
          case ghc-prim-0.5.3:GHC.Prim.quotRemInt# ww1_a6xK 62# of
          { (# ipv_a6xZ, ipv1_a6y0 #) ->
          case indexCharOffAddr# chars62_s6KB ipv1_a6y0 of wild_X4
          { __DEFAULT ->
          case ghc-prim-0.5.3:GHC.Prim.<# ww1_a6xK 62# of {
            __DEFAULT ->
              go_s6KF
                (ghc-prim-0.5.3:GHC.Types.I# ipv_a6xZ)
                (ghc-prim-0.5.3:GHC.Types.:
                   @ Char (ghc-prim-0.5.3:GHC.Types.C# wild_X4) cs_a4zO);
            1# ->
              case indexCharOffAddr# chars62_s6KB ww1_a6xK of wild_X54
              { __DEFAULT ->
              ghc-prim-0.5.3:GHC.Types.:
                @ Char (ghc-prim-0.5.3:GHC.Types.C# wild_X54) cs_a4zO
              }
          }
          }
          };
        62# ->
          case ww1_a6xK of wild2_a6y2 {
            __DEFAULT ->
              case ghc-prim-0.5.3:GHC.Prim.quotRemInt# wild2_a6y2 62# of
              { (# ipv_a6y5, ipv1_a6y6 #) ->
              case indexCharOffAddr# chars62_s6KB ipv1_a6y6 of wild_X4
              { __DEFAULT ->
              case ghc-prim-0.5.3:GHC.Prim.<# wild2_a6y2 62# of {
                __DEFAULT ->
                  go_s6KF
                    (ghc-prim-0.5.3:GHC.Types.I# ipv_a6y5)
                    (ghc-prim-0.5.3:GHC.Types.:
                       @ Char (ghc-prim-0.5.3:GHC.Types.C# wild_X4) cs_a4zO);
                1# ->
                  case indexCharOffAddr# chars62_s6KB wild2_a6y2 of wild_X54
                  { __DEFAULT ->
                  ghc-prim-0.5.3:GHC.Types.:
                    @ Char (ghc-prim-0.5.3:GHC.Types.C# wild_X54) cs_a4zO
                  }
              }
              }
              };
            -9223372036854775808# ->
              case indexCharOffAddr# chars62_s6KB -9223372036854775808#
              of wild_X54
              { __DEFAULT ->
              ghc-prim-0.5.3:GHC.Types.:
                @ Char (ghc-prim-0.5.3:GHC.Types.C# wild_X54) cs_a4zO
              }
          }
      } } }

So it indeed looks like we're giving minBound :: Int to indexCharOffAddr#. So what is that $fIntegralInt1, really?

$ _tmp/stage0/bin/ghc -Wall -hisuf dyn_hi -osuf dyn_o -hcsuf dyn_hc -fPIC -dynamic -hide-all-packages -no-user-package-db '-package-db _tmp/stage1/lib/package.conf.d' '-this-unit-id base-4.12.0.0' '-package-id ghc-prim-0.5.3' '-package-id integer-gmp-1.0.2.0' '-package-id rts-1.0' -i -i_tmp/stage1/libraries/base/build -i_tmp/stage1/libraries/base/build/autogen -ilibraries/base/. -Iincludes -I_tmp/generated -I_tmp/stage1/libraries/base/build -I/nix/store/x62j2xwx40c197gfn73akd2m73nsqw0f-ghc-build-environment/include -I_tmp/stage1/libraries/base/build/include -Ilibraries/base/include -I/nix/store/x62j2xwx40c197gfn73akd2m73nsqw0f-ghc-build-environment/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/integer-gmp-1.0.2.0/include -I/home/alp/WT/ghc-hadrian/_tmp/stage1/lib/x86_64-linux-ghc-8.7.20180822/rts-1.0/include -I_tmp/generated -optc-I_tmp/generated -optP-include -optP_tmp/stage1/libraries/base/build/autogen/cabal_macros.h -optc-fno-stack-protector -optP-DOPTIMISE_INTEGER_GCD_LCM -odir _tmp/stage1/libraries/base/build -hidir _tmp/stage1/libraries/base/build -stubdir _tmp/stage1/libraries/base/build -Wnoncanonical-monad-instances -optc-Werror=unused-but-set-variable -optc-Wno-error=inline -c libraries/base/GHC/Real.hs -o _tmp/stage1/libraries/base/build/GHC/Real.dyn_o -O0 -H64m -this-unit-id base -Wcompat -Wnoncanonical-monad-instances -XHaskell2010 -ghcversion-file=/home/alp/WT/ghc-hadrian/_tmp/generated/ghcversion.h -O -Wno-deprecated-flags -Wno-trustworthy-safe -ddump-simpl | grep -n "\$fIntegralInt1 ="
1703:GHC.Real.$fIntegralInt1 = GHC.Types.I# 0#

So it appears we're changing 0 to -9223372036854775808 ?!

alpmestan commented 5 years ago

For the record, these are the rules that fire (constant folding happens through rules):

Click to view ``` Rule fired Rule: Class op == Module: (BUILTIN) Before: GHC.Classes.== TyArg GHC.Types.Int ValArg GHC.Classes.$fEqInt After: GHC.Classes.eqInt Cont: ApplyToVal nodup (ds_d5Uz `cast` (Unique.N:Unique[0] :: Unique.Unique ~R# GHC.Types.Int)) ApplyToVal nodup (ds_d5UA `cast` (Unique.N:Unique[0] :: Unique.Unique ~R# GHC.Types.Int)) Stop[BoringCtxt] GHC.Types.Bool Rule fired Rule: Class op == Module: (BUILTIN) Before: GHC.Classes.== TyArg Unique.Unique ValArg Unique.$fEqUnique After: GHC.Classes.eqInt `cast` (Sym (Unique.N:Unique[0]) ->_R Sym (Unique.N:Unique[0]) ->_R _R :: (GHC.Types.Int -> GHC.Types.Int -> GHC.Types.Bool) ~R# (Unique.Unique -> Unique.Unique -> GHC.Types.Bool)) Cont: ApplyToVal nodup (Unique.getUnique @ a_a5O7 $dUniquable_a5O9 x_a4zt) ApplyToVal nodup k_a4zu Stop[BoringCtxt] GHC.Types.Bool Rule fired Rule: Class op finiteBitSize Module: (BUILTIN) Before: Data.Bits.finiteBitSize TyArg GHC.Types.Int ValArg Data.Bits.$fFiniteBitsInt After: Data.Bits.$fBitsInt_$cfiniteBitSize Cont: ApplyToVal nodup (GHC.Types.I# 0#) Stop[RuleArgCtxt] GHC.Types.Int Rule fired Rule: Class op finiteBitSize Module: (BUILTIN) Before: Data.Bits.finiteBitSize TyArg GHC.Types.Int ValArg Data.Bits.$fFiniteBitsInt After: Data.Bits.$fBitsInt_$cfiniteBitSize Cont: ApplyToVal nodup (GHC.Types.I# 0#) Stop[RuleArgCtxt] GHC.Types.Int Rule fired Rule: Class op shiftL Module: (BUILTIN) Before: Data.Bits.shiftL TyArg GHC.Types.Int ValArg Data.Bits.$fBitsInt After: Data.Bits.$fBitsInt_$cshiftL Cont: ApplyToVal nodup (GHC.Types.I# 1#) ApplyToVal nodup Unique.uNIQUE_BITS Stop[RuleArgCtxt] GHC.Types.Int Rule fired Rule: Class op .|. Module: (BUILTIN) Before: Data.Bits..|. TyArg GHC.Types.Int ValArg Data.Bits.$fBitsInt After: Data.Bits.$fBitsInt_$c.|. Cont: ApplyToVal nodup (Data.Bits.shiftL @ GHC.Types.Int Data.Bits.$fBitsInt (GHC.Base.ord c_a4z5) Unique.uNIQUE_BITS) ApplyToVal nodup (Data.Bits..&. @ GHC.Types.Int Data.Bits.$fBitsInt i_a4z6 Unique.uniqueMask) CastIt (Sym (Unique.N:Unique[0]) :: GHC.Types.Int ~R# Unique.Unique) Stop[BoringCtxt] Unique.Unique Rule fired Rule: Class op shiftL Module: (BUILTIN) Before: Data.Bits.shiftL TyArg GHC.Types.Int ValArg Data.Bits.$fBitsInt After: Data.Bits.$fBitsInt_$cshiftL Cont: ApplyToVal nodup (GHC.Base.ord c_a4z5) ApplyToVal nodup Unique.uNIQUE_BITS Select nodup wild_a6wi CastIt (Sym (Unique.N:Unique[0]) :: GHC.Types.Int ~R# Unique.Unique) Stop[BoringCtxt] Unique.Unique Rule fired Rule: Class op .&. Module: (BUILTIN) Before: Data.Bits..&. TyArg GHC.Types.Int ValArg Data.Bits.$fBitsInt After: Data.Bits.$fBitsInt_$c.&. Cont: ApplyToVal nodup i_a4z6 ApplyToVal nodup Unique.uniqueMask Select nodup wild1_a6wm Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: Class op shiftR Module: (BUILTIN) Before: Data.Bits.shiftR TyArg GHC.Types.Int ValArg Data.Bits.$fBitsInt After: Data.Bits.$fBitsInt_$cshiftR Cont: ApplyToVal nodup (ds_d6nb `cast` (Unique.N:Unique[0] :: Unique.Unique ~R# GHC.Types.Int)) ApplyToVal nodup Unique.uNIQUE_BITS Select nodup wild_a5U1 Stop[BoringCtxt] GHC.Types.Char Rule fired Rule: Class op .&. Module: (BUILTIN) Before: Data.Bits..&. TyArg GHC.Types.Int ValArg Data.Bits.$fBitsInt After: Data.Bits.$fBitsInt_$c.&. Cont: ApplyToVal nodup (ds_d6nb `cast` (Unique.N:Unique[0] :: Unique.Unique ~R# GHC.Types.Int)) ApplyToVal nodup Unique.uniqueMask Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: Class op quotRem Module: (BUILTIN) Before: GHC.Real.quotRem TyArg GHC.Types.Int ValArg GHC.Real.$fIntegralInt After: GHC.Real.$fIntegralInt_$cquotRem Cont: ApplyToVal nodup n_a4zN ApplyToVal nodup (GHC.Types.I# 62#) Stop[RhsCtxt] (GHC.Types.Int, GHC.Types.Int) Rule fired Rule: Class op < Module: (BUILTIN) Before: GHC.Classes.< TyArg GHC.Types.Int ValArg GHC.Classes.$fOrdInt After: GHC.Classes.ltInt Cont: ApplyToVal nodup n_a4zN ApplyToVal nodup (GHC.Types.I# 62#) Select nodup wild_X18 Stop[BoringCtxt] [GHC.Types.Char] Rule fired Rule: Class op < Module: (BUILTIN) Before: GHC.Classes.< TyArg GHC.Types.Int ValArg GHC.Classes.$fOrdInt After: GHC.Classes.ltInt Cont: ApplyToVal nodup u_a4zE ApplyToVal nodup (GHC.Types.I# 26#) Select nodup wild_X17 Stop[BoringCtxt] GHC.Base.String Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'a'# After: 97# Cont: Stop[RuleArgCtxt] GHC.Prim.Int# Rule fired Rule: Class op ppr Module: (BUILTIN) Before: Outputable.ppr TyArg Unique.Unique ValArg Unique.$fOutputableUnique After: Unique.pprUniqueAlways Cont: Stop[BoringCtxt] Unique.Unique -> Outputable.SDoc Rule fired Rule: Class op showsPrec Module: (BUILTIN) Before: GHC.Show.showsPrec TyArg Unique.Unique ValArg Unique.$fShowUnique After: $cshowsPrec_a5Ro Cont: ApplyToVal nodup (GHC.Types.I# 0#) Stop[DiscArgCtxt] Unique.Unique -> GHC.Show.ShowS Rule fired Rule: Class op show Module: (BUILTIN) Before: GHC.Show.show TyArg Unique.Unique ValArg Unique.$fShowUnique After: Unique.showUnique Cont: ApplyToVal nodup x_a6uz Stop[RuleArgCtxt] [GHC.Types.Char] Rule fired Rule: Class op == Module: (BUILTIN) Before: GHC.Classes.== TyArg GHC.Types.Int ValArg GHC.Classes.$fEqInt After: GHC.Classes.eqInt Cont: ApplyToVal nodup (ds_d5Ul `cast` (Unique.N:Unique[0] :: Unique.Unique ~R# GHC.Types.Int)) ApplyToVal nodup (ds_d5Um `cast` (Unique.N:Unique[0] :: Unique.Unique ~R# GHC.Types.Int)) Select nodup wild_00 Stop[BoringCtxt] GHC.Types.Ordering Rule fired Rule: Class op < Module: (BUILTIN) Before: GHC.Classes.< TyArg GHC.Types.Int ValArg GHC.Classes.$fOrdInt After: GHC.Classes.ltInt Cont: ApplyToVal nodup (ds_d5Ul `cast` (Unique.N:Unique[0] :: Unique.Unique ~R# GHC.Types.Int)) ApplyToVal nodup (ds_d5Um `cast` (Unique.N:Unique[0] :: Unique.Unique ~R# GHC.Types.Int)) Select nodup wild_X1c Stop[BoringCtxt] GHC.Types.Ordering Rule fired Rule: Class op < Module: (BUILTIN) Before: GHC.Classes.< TyArg GHC.Types.Int ValArg GHC.Classes.$fOrdInt After: GHC.Classes.ltInt Cont: ApplyToVal nodup (ds_d5Us `cast` (Unique.N:Unique[0] :: Unique.Unique ~R# GHC.Types.Int)) ApplyToVal nodup (ds_d5Ut `cast` (Unique.N:Unique[0] :: Unique.Unique ~R# GHC.Types.Int)) Stop[BoringCtxt] GHC.Types.Bool Rule fired Rule: Class op < Module: (BUILTIN) Before: GHC.Classes.< TyArg GHC.Types.Int ValArg GHC.Classes.$fOrdInt After: GHC.Classes.ltInt Cont: ApplyToVal nodup (GHC.Base.ord c_a4zr) ApplyToVal nodup (GHC.Types.I# 255#) Select nodup wild_a5T9 Stop[BoringCtxt] GHC.Types.Bool Rule fired Rule: Class op <= Module: (BUILTIN) Before: GHC.Classes.<= TyArg GHC.Types.Int ValArg GHC.Classes.$fOrdInt After: GHC.Classes.leInt Cont: ApplyToVal nodup x_a4zs ApplyToVal nodup (Data.Bits.shiftL @ GHC.Types.Int Data.Bits.$fBitsInt (GHC.Types.I# 1#) (GHC.Types.I# 22#)) Stop[BoringCtxt] GHC.Types.Bool Rule fired Rule: Class op shiftL Module: (BUILTIN) Before: Data.Bits.shiftL TyArg GHC.Types.Int ValArg Data.Bits.$fBitsInt After: Data.Bits.$fBitsInt_$cshiftL Cont: ApplyToVal nodup (GHC.Types.I# 1#) ApplyToVal nodup (GHC.Types.I# 22#) Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: >=# Module: (BUILTIN) Before: GHC.Prim.>=# ValArg 22# ValArg 64# After: 0# Cont: Select nodup lwild_a6wd Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: uncheckedIShiftL# Module: (BUILTIN) Before: GHC.Prim.uncheckedIShiftL# ValArg 1# ValArg 22# After: 4194304# Cont: Stop[BoringCtxt] GHC.Prim.Int# Rule fired Rule: andI# Module: (BUILTIN) Before: GHC.Prim.andI# ValArg 0# ValArg y#_a6wC After: 0# Cont: StrictArg GHC.Prim.orI# StrictArg GHC.Types.I# Stop[RhsCtxt] GHC.Types.Int Rule fired Rule: orI# Module: (BUILTIN) Before: GHC.Prim.orI# ValArg x#_a6wk ValArg 0# After: x#_a6wk Cont: StrictArg GHC.Types.I# Stop[RhsCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 't'# After: 116# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Types.I# Stop[RhsCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'i'# After: 105# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictBind x#_a6wk Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: orI# Module: (BUILTIN) Before: GHC.Prim.orI# ValArg 0# ValArg GHC.Prim.andI# dt_a6mR y#_a6wC After: GHC.Prim.andI# dt_a6mR y#_a6wC Cont: StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'd'# After: 100# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictBind x#_a6wk Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: orI# Module: (BUILTIN) Before: GHC.Prim.orI# ValArg 0# ValArg GHC.Prim.andI# dt_a6mR y#_a6wC After: GHC.Prim.andI# dt_a6mR y#_a6wC Cont: StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'v'# After: 118# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictBind x#_a6wk Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: orI# Module: (BUILTIN) Before: GHC.Prim.orI# ValArg 0# ValArg GHC.Prim.andI# dt_a6mR y#_a6wC After: GHC.Prim.andI# dt_a6mR y#_a6wC Cont: StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'c'# After: 99# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictBind x#_a6wk Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: orI# Module: (BUILTIN) Before: GHC.Prim.orI# ValArg 0# ValArg GHC.Prim.andI# dt_a6mR y#_a6wC After: GHC.Prim.andI# dt_a6mR y#_a6wC Cont: StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: andI# Module: (BUILTIN) Before: GHC.Prim.andI# ValArg 0# ValArg y#_a6wC After: 0# Cont: StrictArg GHC.Prim.orI# StrictArg GHC.Types.I# Stop[RhsCtxt] GHC.Types.Int Rule fired Rule: orI# Module: (BUILTIN) Before: GHC.Prim.orI# ValArg x#_a6wk ValArg 0# After: x#_a6wk Cont: StrictArg GHC.Types.I# Stop[RhsCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 's'# After: 115# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Types.I# Stop[RhsCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'X'# After: 88# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# x#_a6wy y#_a6wC) StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: orI# Module: (BUILTIN) Before: GHC.Prim.orI# ValArg 0# ValArg GHC.Prim.andI# x#_a6wy y#_a6wC After: GHC.Prim.andI# x#_a6wy y#_a6wC Cont: StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg '3'# After: 51# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# x#_a6wy y#_a6wC) StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: orI# Module: (BUILTIN) Before: GHC.Prim.orI# ValArg 0# ValArg GHC.Prim.andI# x#_a6wy y#_a6wC After: GHC.Prim.andI# x#_a6wy y#_a6wC Cont: StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg '6'# After: 54# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# x#_a6wy y#_a6wC) StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: orI# Module: (BUILTIN) Before: GHC.Prim.orI# ValArg 0# ValArg GHC.Prim.andI# x#_a6wy y#_a6wC After: GHC.Prim.andI# x#_a6wy y#_a6wC Cont: StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ==# Module: (BUILTIN) Before: GHC.Prim.==# ValArg 62# ValArg y_a6xU After: case y_a6xU of wild_00 { __DEFAULT -> 0#; 62# -> 1# } Cont: Select nodup lwild_a6xW Stop[RhsCtxt] (GHC.Types.Int, GHC.Types.Int) Rule fired Rule: orI# Module: (BUILTIN) Before: GHC.Prim.orI# ValArg 0# ValArg GHC.Prim.andI# x#_a6wy y#_a6wC After: GHC.Prim.andI# x#_a6wy y#_a6wC Cont: StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'R'# After: 82# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# x#_a6wy y#_a6wC) StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'S'# After: 83# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# x#_a6wy y#_a6wC) StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'P'# After: 80# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# x#_a6wy y#_a6wC) StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'L'# After: 76# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# x#_a6wy y#_a6wC) StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'C'# After: 67# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# x#_a6wy y#_a6wC) StrictArg GHC.Types.I# Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: int2Word# Module: (BUILTIN) Before: GHC.Prim.int2Word# ValArg 0# After: 0## Cont: StrictArg GHC.Prim.leWord# ApplyToVal nodup 1114111## Select nodup lwild_a5U5 Stop[BoringCtxt] GHC.Types.Char Rule fired Rule: leWord# Module: (BUILTIN) Before: GHC.Prim.leWord# ValArg 0## ValArg 1114111## After: 1# Cont: Select nodup lwild_a5U5 Stop[BoringCtxt] GHC.Types.Char Rule fired Rule: chr# Module: (BUILTIN) Before: GHC.Prim.chr# ValArg 0# After: '\NUL'# Cont: StrictArg GHC.Types.C# Stop[BoringCtxt] GHC.Types.Char Rule fired Rule: int2Word# Module: (BUILTIN) Before: GHC.Prim.int2Word# ValArg -1# After: 18446744073709551615## Cont: StrictArg GHC.Prim.leWord# ApplyToVal nodup 1114111## Select nodup lwild_a5U5 Stop[BoringCtxt] GHC.Types.Char Rule fired Rule: leWord# Module: (BUILTIN) Before: GHC.Prim.leWord# ValArg 18446744073709551615## ValArg 1114111## After: 0# Cont: Select nodup lwild_a5U5 Stop[BoringCtxt] GHC.Types.Char Rule fired Rule: <# Module: (BUILTIN) Before: GHC.Prim.<# ValArg -9223372036854775808# ValArg 62# After: 1# Cont: Select nodup lwild_s6Ud Stop[BoringCtxt] [GHC.Types.Char] Rule fired Rule: foldr/app Module: (GHC.Base) Before: GHC.Base.foldr TyArg GHC.Types.Char TyArg [GHC.Types.Char] ValArg GHC.Types.: @ GHC.Types.Char ValArg s_a6uA ValArg Unique.showUnique x_a6uz After: (\ (@ a_a6Hu) (ys_a6Hv :: [a_a6Hu]) (xs_a6Hw [Occ=Once] :: [a_a6Hu]) -> GHC.Base.++ @ a_a6Hu xs_a6Hw ys_a6Hv) @ GHC.Types.Char s_a6uA Cont: Stop[BoringCtxt] [GHC.Types.Char] Rule fired Rule: foldr/app Module: (GHC.Base) Before: GHC.Base.foldr TyArg GHC.Types.Char TyArg [GHC.Types.Char] ValArg GHC.Types.: @ GHC.Types.Char ValArg s_a6uA ValArg Unique.showUnique x_a6uz After: (\ (@ a_a6Hu) (ys_a6Hv :: [a_a6Hu]) (xs_a6Hw [Occ=Once] :: [a_a6Hu]) -> GHC.Base.++ @ a_a6Hu xs_a6Hw ys_a6Hv) @ GHC.Types.Char s_a6uA Cont: Stop[BoringCtxt] [GHC.Types.Char] Rule fired Rule: ++ Module: (GHC.Base) Before: GHC.Base.++ TyArg GHC.Types.Char ValArg Unique.showUnique x_a6uz ValArg s_a6uA After: (\ (@ a_a6Uy) (xs_a6Uz :: [a_a6Uy]) (ys_a6UA :: [a_a6Uy]) -> GHC.Base.augment @ a_a6Uy (\ (@ b_a6UB) (c_a6UC [Occ=Once, OS=OneShot] :: a_a6Uy -> b_a6UB -> b_a6UB) (n_a6UD [Occ=Once, OS=OneShot] :: b_a6UB) -> GHC.Base.foldr @ a_a6Uy @ b_a6UB c_a6UC n_a6UD xs_a6Uz) ys_a6UA) @ GHC.Types.Char (Unique.showUnique x_a6uz) s_a6uA Cont: Stop[BoringCtxt] [GHC.Types.Char] Rule fired Rule: ++ Module: (GHC.Base) Before: GHC.Base.++ TyArg GHC.Types.Char ValArg Unique.showUnique x_a6uz ValArg s_a6uA After: (\ (@ a_a6Uy) (xs_a6Uz :: [a_a6Uy]) (ys_a6UA :: [a_a6Uy]) -> GHC.Base.augment @ a_a6Uy (\ (@ b_a6UB) (c_a6UC [Occ=Once, OS=OneShot] :: a_a6Uy -> b_a6UB -> b_a6UB) (n_a6UD [Occ=Once, OS=OneShot] :: b_a6UB) -> GHC.Base.foldr @ a_a6Uy @ b_a6UB c_a6UC n_a6UD xs_a6Uz) ys_a6UA) @ GHC.Types.Char (Unique.showUnique x_a6uz) s_a6uA Cont: Stop[BoringCtxt] [GHC.Types.Char] Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg '1'# After: 49# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# ww_s75t y#_a6wC) Select ok ww_s75x Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'g'# After: 103# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# ww_s75t y#_a6wC) Select ok ww_s75x Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg '2'# After: 50# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# ww_s75t y#_a6wC) Select ok ww_s75x Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg '9'# After: 57# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# ww_s75t y#_a6wC) Select ok ww_s75x Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg '0'# After: 48# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# ww_s75t y#_a6wC) Select ok ww_s75x Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'B'# After: 66# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# ww_s75t y#_a6wC) Select ok ww_s75x Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'D'# After: 68# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# ww_s75t y#_a6wC) Select ok ww_s75x Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'E'# After: 69# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# ww_s75t y#_a6wC) Select ok ww_s75x Stop[BoringCtxt] GHC.Types.Int Rule fired Rule: ord# Module: (BUILTIN) Before: GHC.Prim.ord# ValArg 'H'# After: 72# Cont: StrictArg GHC.Prim.uncheckedIShiftL# ApplyToVal nodup i#_a6wb StrictArg GHC.Prim.orI# ApplyToVal nodup (GHC.Prim.andI# ww_s75t y#_a6wC) Select ok ww_s75x Stop[BoringCtxt] GHC.Types.Int ```
alpmestan commented 5 years ago

Alright, Ben and I found out what's going on, but not down to every detail. The gist of it is that we enter the

     | b == (-1) && a == minBound = (overflowError, 0)

branch of the Int implementation of quotRem. Except that GHC doesn't realise early enough there's an error in there and just proceeds with the array indexing. Indeed:

-- in Haskell:
    go n cs | n < 62
            = let !c = chooseChar62 n in c : cs
            | otherwise
            = go q (c : cs) where (q, r) = quotRem n 62
                                  !c = chooseChar62 r
-- note how 'q' is not used right away but just passed on to the recursive call to go

-- in Core:
        $j_s6Oo :: Int -> Int -> [Char]
        $j_s6Oo (q_a58F :: Int) (r_a58H :: Int)
          = case r_a58H of { I# n_a4Kt ->
            case indexCharOffAddr# chars62_s6KB n_a4Kt of wild_X4
            { __DEFAULT ->
            case GHC.Classes.ltInt ww_a6xI lvl_s6KH of {
              False -> go_s6KF q_a58F (C# wild_X4 : cs_a4zO);
              True ->
                case indexCharOffAddr# chars62_s6KB ww1_a6xK of wild_X54
                  { __DEFAULT -> C# wild_X54 : cs_a4zO }
            } } } } 

q and r in the Haskell code are the two arguments to $j_s6Oo. In our minBound case, we jump to $j_s6Oo with q_a58F = overflowError and r_a58H = 0. Now you can see the problem: we scrutinize the latter first, which is 0, and then proceed with the indexing. We just completely miss that the first argument is bottom. In fact, by applying the following patch, I can now build all of GHC with the quick flavour and workaround the issue:

diff --git a/compiler/basicTypes/Unique.hs b/compiler/basicTypes/Unique.hs
index 4a709d238e..b5c0fcec58 100644
--- a/compiler/basicTypes/Unique.hs
+++ b/compiler/basicTypes/Unique.hs
@@ -325,7 +325,7 @@ iToBase62 n_
     go n cs | n < 62
             = let !c = chooseChar62 n in c : cs
             | otherwise
-            = go q (c : cs) where (q, r) = quotRem n 62
+            = go q (c : cs) where (!q, r) = quotRem n 62
                                   !c = chooseChar62 r

This forces GHC to generate code that scrutinizes what turns out to be overflowError first, which somehow makes it more visible, and therefore GHC does not distribute case branches around/past it anymore, and we never end up indexing our array with a huge negative offset. I'm somewhat amazed by this whole thing.

Anyway, I'm going to put together a differential for this patch and once it hits GHC HEAD, hadrian's support for the quick flavour, and any other that requires building things the dynamic way (which, because of -fPIC, forces a bunch of relocations to be created), will be fixed and this issue closed.

This still leaves the problem of figuring out exactly why GHC performs those bad transformations. Ben and I will look into getting a small, self-contained reproducer and then letting the Core wizards do their thing.

alpmestan commented 5 years ago

GHC patch: https://phabricator.haskell.org/D5106

snowleopard commented 5 years ago

Wow, what a bug! Great detective work, @alpmestan and @bgamari :)

edsko commented 5 years ago

:open_mouth:

alpmestan commented 5 years ago

Hmm, this is becoming a bit scary: I can't reproduce this with a GHC built by the make build system. I built a quick-flavoured GHC with both hadrian and make, from the same commit (except that for hadrian I added the Unique.hs fix, otherwise I can't build GHC to completion). Then I compile this example - adapted from compiler/basicTypes/Unique.hs - with both, same options (-O -fPIC -dynamic -ddump-simpl -c bug.hs -o bug.o):

{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE MagicHash #-}
module Bug where

import GHC.Prim
import GHC.Types

f :: Int -> String
f n_
  = go n_ ""
  where
    go n cs | n < 62
            = let !c = chooseChar62 n in c : cs
            | otherwise
            = go q (c : cs) where (q, r) = quotRem n 62
                                  !c = chooseChar62 r

    chooseChar62 :: Int -> Char
    {-# INLINE chooseChar62 #-}
    chooseChar62 (I# n) = C# (indexCharOffAddr# chars62 n)
    chars62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"#

g :: Int -> String
g n_
  = go n_ ""
  where
    go n cs | n < 62
            = let !c = chooseChar62 n in c : cs
            | otherwise
            = go q (c : cs) where (!q, r) = quotRem n 62 -- !!! Note the bang on q
                                  !c = chooseChar62 r

    chooseChar62 :: Int -> Char
    {-# INLINE chooseChar62 #-}
    chooseChar62 (I# n) = C# (indexCharOffAddr# chars62 n)
    chars62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"#

The GHC built by hadrian generates bad code for f but not g, while the one built by make doesn't generate bad code at all. What I mean by bad code is that GHC floats/inlines/distributes things around too much, and ends up generating something like:

-- See https://gist.github.com/alpmestan/e1517b72c5bfec83a5e644add826c5c4#file-bug-core-hs
-- for the entire Core output.
--
-- chars62_r30r is an array of char, of which we're trying to access the element at
-- index -9223372036854775808...
--
-- This is then later used by the Core for 'f'
lvl_r30s :: Char
lvl_r30s
  = case indexCharOffAddr# chars62_r30r -9223372036854775808# of v_B2
    { __DEFAULT ->
    GHC.Types.C# v_B2
    }

And I just can't get the GHC built by make to generate anything like this.

snowleopard commented 5 years ago

@alpmestan @bgamari OK, I found a bug in constant folding.

Here is how to trigger it using GHC 8.6.1-beta1:

-- This is just subtraction in disguise
minus :: Int -> Int -> Int
minus x y = (8 - y) - (8 - x) 
{-# NOINLINE minus #-}

main :: IO ()
main = print (2 `minus` 1)

Without optimisation this prints 1, as expected, but when compiled with -O this prints 3. Crazy!

snowleopard commented 5 years ago

Here is the GHC ticket: https://ghc.haskell.org/trac/ghc/ticket/15569

snowleopard commented 5 years ago

@alpmestan Could you check if this issue is resolved with this patch: https://phabricator.haskell.org/D5109?

P.S.: By the way, there is still something odd about the GHC built by Hadrian: I cannot reproduce the bug with it, only with the GHC built by Make.

alpmestan commented 5 years ago

Wait, so you solved a bug that only appears with GHCs built by make? The one I've been fighting is juuuust the opposite. Here's the ticket for it: https://ghc.haskell.org/trac/ghc/ticket/15570

snowleopard commented 5 years ago

@alpmestan I'm actually not sure what happened :) The constant folding code looked like an easy way to shoot oneself in the foot, so I meticulously checked every line and found a bug, thinking that it was the underlying cause behind this issue. But now it seems that it may be unrelated! 😮

alpmestan commented 5 years ago

Our workaround made it to master: https://github.com/ghc/ghc/commit/ed789516e201e4fad771e5588da47a62e53b42b8

Should we close this, since there's #15570 (on trac) for the underlying problem?

snowleopard commented 5 years ago

@alpmestan Great, thank you! Yes, let me close this issue here.