Closed alpmestan closed 6 years ago
I’ve been talking with someone about the relocation truncated
stuff a few weeks back. @Mistuke, @bgamari, @hvr?
This is rather mysterious; what build flavour is being used here? Does -fPIC
make it into the compiler command line?
@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.
This does not happen on CI and therefore quite likely is specific to my setup.
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?
@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.
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 ]
]
This comes from here:
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.
Indeed I'm not compiling GHC on Windows. Any idea/lead Andrey?
@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.
I have seen this on Debian/amd64.
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
.
@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
@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
@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
.
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.
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.
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.
Thanks @alpmestan! I'm slowly returning to working mode after holidays, so hope to also close a couple of issues in the coming week.
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?
$ 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?
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 :-)
@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?
@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.
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.
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
?!
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.
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
)
@alpmestan Interesting! Are you saying this is a bug in GHC -- showUnique
is called with minBound + 4
?
@snowleopard We'll soon know. I'm now looking at who's using this result to figure out where the number comes from.
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.
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?
@guibou Hah! @angerman mentionned this to me earlier today. So... maybe :-) @bgamari thoughts?
@guibou @alpmestan Could you link to the "recent changes related to constant folding"? Presumably, there is a ticket/commit somewhere? I'm curious :)
Yes, I strongly suspect this is the culprit.
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 Int
s 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 Int
s. 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
?!
For the record, these are the rules that fire (constant folding happens through rules):
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.
GHC patch: https://phabricator.haskell.org/D5106
Wow, what a bug! Great detective work, @alpmestan and @bgamari :)
:open_mouth:
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.
@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!
Here is the GHC ticket: https://ghc.haskell.org/trac/ghc/ticket/15569
@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.
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
@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! 😮
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?
@alpmestan Great, thank you! Yes, let me close this issue here.
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:
Has anyone else seen this?