Building GHC happens in two stages: First you have to prepare the tree
with make boot
; and second, you build the compiler and
associated libraries with make all
. The boot
stage builds some tools used during the main build process, generates
parsers and other pre-computed source, and finally computes dependency
information. There is considerable detail on the build process in GHC's
Building Guide.
If you are hacking the compiler or like to play with unstable
development versions, chances are that the compiler someday just crashes
on you. Then, it is a good idea to load the core
into
gdb
as usual, but unfortunately there is usually not too
much useful information.
The next step, then, is somewhat tedious. You should build a compiler
producing programs with a runtime system that has debugging turned on
and use that to build the crashing compiler. There are many sanity
checks in the RTS, which may detect inconsistency before they lead to a
crash and you may include more debugging information, which helps
gdb.
For a RTS with debugging turned on, add the following
to build.mk
(see also the comment in
config.mk.in
that you find when searching for
GhcRtsHcOpts
):
GhcRtsHcOpts+=-optc-DDEBUG GhcRtsCcOpts+=-g EXTRA_LD_OPTS=-lbfd -liberty
Then go into fptools/ghc/rts
and make clean boot &&
make all
. With the resulting runtime system, you have to re-link
the compiler. Go into fptools/ghc/compiler
, delete the
file hsc
(up to version 4.08) or
ghc-<version>
, and execute make all
.
The EXTRA_LD_OPTS
are necessary as some of the debugging
code uses the BFD library, which in turn requires liberty
.
I would also recommend (in 4.11 and from 5.0 upwards) adding these linker
options to the files package.conf
and
package.conf.inplace
in the directory
fptools/ghc/driver/
to the extra_ld_opts
entry
of the package RTS
. Otherwise, you have to supply them
whenever you compile and link a program with a compiler that uses the
debugging RTS for the programs it produces.
To run GHC up to version 4.08 in gdb
, first invoke the
compiler as usual, but pass it the option -v
. This will
show you the exact invocation of the compiler proper hsc
.
Run hsc
with these options in gdb
. The
development version 4.11 and stable releases from 5.0 on do no longer
use the Perl driver; so, you can run them directly with gdb.
Debugging a compiler during building from HC files.
If you are boot strapping the compiler on new platform from HC files and
it crashes somewhere during the build (e.g., when compiling the
libraries), do as explained above, but you may have to re-configure the
build system with --enable-hc-boot
before re-making the
code in fptools/ghc/driver/
.
If you do this with a compiler up to version 4.08, run the build process
with make EXTRA_HC_OPTS=-v
to get the exact arguments with
which you have to invoke hsc
in gdb
.
Last modified: Sun Apr 24 22:16:30 CEST 2005