diff --git a/HACKING.md b/HACKING.md index 2b0493155a..3891e9defe 100644 --- a/HACKING.md +++ b/HACKING.md @@ -288,7 +288,7 @@ In this example, `10.0.0.2` will be sent up to 16 jobs and the local machine wil When a compilation is in progress, the status of jobs on all remote machines can be visualized in the terminal with `distccmon-text` or graphically as a GTK application with `distccmon-gnome`. -One thing to keep in mind is that linking object files happens on the coordinating machine, which can be a bottleneck. See the next section speeding up this process. +One thing to keep in mind is that linking object files happens on the coordinating machine, which can be a bottleneck. See the next sections speeding up this process. ### Using the `gold` linker @@ -298,6 +298,24 @@ Linking Scylla can be slow. The gold linker can replace GNU ld and often speeds $ sudo alternatives --config ld ``` +### Using split dwarf + +With debug info enabled, most of the link time is spent copying and +relocating it. It is possible to leave most of the debug info out of +the link by writing it to a side .dwo file. This is done by passing +`-gsplit-dwarf` to gcc. + +Unfortunately just `-gsplit-dwarf` would slow down `gdb` startup. To +avoid that the gold linker can be told to create an index with +`--gdb-index`. + +More info at https://gcc.gnu.org/wiki/DebugFission. + +Both options can be enable by passing `--split-dwarf` to configure.py. + +Note that distcc is *not* compatible with it, but icecream +(https://github.com/icecc/icecream) is. + ### Testing changes in Seastar with Scylla Sometimes Scylla development is closely tied with a feature being developed in Seastar. It can be useful to compile Scylla with a particular check-out of Seastar. diff --git a/configure.py b/configure.py index 4e8a885d44..7245084fbd 100755 --- a/configure.py +++ b/configure.py @@ -433,6 +433,8 @@ arg_parser.add_argument('--python', action='store', dest='python', default='pyth help='Python3 path') add_tristate(arg_parser, name='hwloc', dest='hwloc', help='hwloc support') add_tristate(arg_parser, name='xen', dest='xen', help='Xen support') +arg_parser.add_argument('--split-dwarf', dest='split_dwarf', action='store_true', default=False, + help='use of split dwarf (https://gcc.gnu.org/wiki/DebugFission) to speed up linking') arg_parser.add_argument('--enable-gcc6-concepts', dest='gcc6_concepts', action='store_true', default=False, help='enable experimental support for C++ Concepts as implemented in GCC 6') arg_parser.add_argument('--enable-alloc-failure-injector', dest='alloc_failure_injector', action='store_true', default=False, @@ -1030,6 +1032,8 @@ if args.gcc6_concepts: seastar_flags += ['--enable-gcc6-concepts'] if args.alloc_failure_injector: seastar_flags += ['--enable-alloc-failure-injector'] +if args.split_dwarf: + seastar_flags += ['--split-dwarf'] debug_flags = ' ' + debug_compress_flag(compiler=args.cxx) + ' ' + dbgflag modes['debug']['opt'] += debug_flags