[[!meta copyright="Copyright © 2007, 2008, 2010, 2011 Free Software Foundation,
Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

[[!tag open_issue_gdb]]

Here's what's to be done for maintaining GNU GDB.

[[!toc levels=2]]


# [[General information|/gdb]]


# [[Sources|source_repositories/gdb]]


# Configuration

Last reviewed up to the [[Git mirror's 09ddc54333cdbc2f695fd83cbf091a7d5a1c3604
(2011-09-06) sources|source_repositories/gdb]].

  * Globally

      * a.out, COFF, PE image support and 64 bit support are not interesting.

      * In the testsuites, `.exp` and `.d` files very likely should not only
        care for `*-*-linux*`, but also `*-*-gnu*`.  (If the need to be
        conditionalized like this at all.)

  * `bfd/`

    See [[binutils]].

  * `libdecnumber/`

    Should/can probably align to GNU/Linux.

  * Have a look at config/i386/i386gnu.mh.

  * configure.tgt

      * glibc-tdep et al. also for GNU/Hurd?


# Build

Here's a log of a GDB build run; this is from our [[Git repository's
695f61ff0f378e1680964128585044799de27015 (2011-09-06)
sources|source_repositories/gdb]], run on kepler.SCHWINGE and coulomb.SCHWINGE.

    $ export LC_ALL=C
    $ ../master/configure --prefix="$PWD".install SHELL=/bin/dash CC=gcc-4.6 CXX=g++-4.6 --disable-werror 2>&1 | tee log_build
    [...]
    $ make 2>&1 | tee log_build_
    [...]

Different hosts may default to different shells and compiler versions; thus
harmonized.

There are several occurences of *error: dereferencing type-punned pointer will
break strict-aliasing rules* in the MIG-generated stub files; thus no `-Werror`
until that is resolved.

This takes up around 140 MiB and needs roughly 6 min on kepler.SCHWINGE and 30
min on coulomb.SCHWINGE.


## Analysis

x86 GNU/Linux' and GNU/Hurd's configurations are slightly different, thus mask
out most of the differences that are due to GNU/Linux supporting more core file
formats and more emulation vectors.

    $ diff -wu <(ssh kepler.SCHWINGE 'cd tmp/source/gdb/ && cat hurd/master.build/log_build* | sed -e "s%\(/media/data\)\?${PWD}%[...]%g"' | sed -f open_issues/gdb/log_build-linux.sed) <(ssh coulomb.SCHWINGE 'cd tmp/gdb/ && cat hurd/master.build/log_build* | sed "s%\(/media/erich\)\?${PWD}%[...]%g"' | sed -f open_issues/gdb/log_build-hurd.sed) > open_issues/gdb/log_build.diff

[[log_build.diff]].

  * Why do we specify `-D_GNU_SOURCE`, and GNU/Linux doesn't?

  * Why does GNU/Linux have an additional `-ldl -rdynamic` when linking `gdb`?


# Install

    $ make install 2>&1 | tee log_install
    [...]

This takes up around 50 MiB, and needs roughly 1 min on kepler.SCHWINGE and 3
min on coulomb.SCHWINGE.


## Analysis

    $ diff -wu <(ssh kepler.SCHWINGE 'cd tmp/source/gdb/ && cat hurd/master.build/log_install | sed -e "s%\(/media/data\)\?${PWD}%[...]%g"' | sed -f open_issues/gdb/log_install-linux.sed) <(ssh coulomb.SCHWINGE 'cd tmp/gdb/ && cat hurd/master.build/log_install | sed "s%\(/media/erich\)\?${PWD}%[...]%g"' | sed -f open_issues/gdb/log_install-hurd.sed) > open_issues/gdb/log_install.diff

[[log_install.diff]].

  * `libtool: finish`: `ldconfig` is not run for the Hurd.


# Testsuite

On GNU/Hurd, hampered by the [[term_blocking]] issue.

    $ make -k check
    [...]

This needs roughly TODO min on kepler.SCHWINGE, and TODO min on
coulomb.SCHWINGE.

    $ ssh kepler.SCHWINGE 'cd tmp/source/gdb/ && sed < hurd/master.build/gdb/testsuite/gdb.sum -e "s%\(/media/data\)\?${PWD}%[...]%g"' > open_issues/gdb/sum_linux
    $ ssh coulomb.SCHWINGE 'cd tmp/gdb/ && sed < hurd/master.build/gdb/testsuite/gdb.sum -e "s%\(/media/erich\)\?${PWD}%[...]%g"' > open_issues/gdb/sum_hurd

Comparing the results files, [[sum_linux]] to [[sum_hurd]]:

    $ diff -u -F ^Running open_issues/gdb/sum_linux open_issues/gdb/sum_hurd > open_issues/gdb/sum.diff

[[open_issues/gdb/sum.diff]].


## Analysis

TODO.