Subject: re: Importing gdb-5.3 ....
To: None <tech-toolchain@netbsd.org>
From: matthew green <mrg@eterna.com.au>
List: tech-toolchain
Date: 07/20/2003 11:51:16
whoops, lets try that again...


   When we import gdb-5.3 and gcc-3.3.1, will we be keeping the current method
   of using gnu/dist/toolchain or are we going to switch [back] to
   gnu/dist/{gdb,gcc,binutils}?  The latter has the advantage in that it
   directly reflect how the GNU toolchain bits are split into distributions but
   it will mean duplication of some of the binutils bits (bfd, opcodes) and, of
   course, libiberty.


i'd like to split things back up.  there are several reasons for
this, and while i'd really prefer that we didn't from an aesthetic
and code-sharing point of view, maintenence issues seem
significantly more severe with the current method.

rationale for splitting up the merged tools:

        - GCC, GDB & binutils release at different intervals and
	the shared code between them in the latest release is never
	quite identical.  for instance, GDB 5.3 & binutils 2.13.2.1's
	bfd library both had different sets of changes from
	bfd-current such that it was difficult to determine exactly
	what was new and what was old.  that means that we are using
	a different set of libraries for our tools than everyone else
	is, giving potential rise to "netbsd only" bugs.

        - because of the above, updating any single component of the
        toolchain requires extra testing and integration effort than
        should be necessary.  updating toolchain components has
	proven to be difficult, making it simpler helps.  the
	"bfd_read deprecated" messages from GDB in -current are due
	to this sharing.

        - there is some additional work in maintaining two copies
        of libbfd & libopcodes and 3 copies of libiberty.  libibery
        should never be changed, and changes to libbfd & libopcodes
        should not be common, and should always be sent back to the
        FSF anyway.  while this will entail some additional work it
        is likely to be outweighted by the better maintainibility of
        the intree toolchain, and really should only entail applying
	the same patches to both places.


what i'd like to see happen is:

        - import latest versions of gdb, binutils & gcc (any order!)
        into gnu/dist/<foo>.  these are all currently empty (but do
        have old history in some/all cases.)  that won't affect
        anything currently working.

        - split src/tools/toolchain into src/tools/{gcc,binutils,gdb},
        make sure that binutils is built before gcc and only build
        gdb if MKCROSSGDB is set.  (the cross gdb feature is too useful
        to get rid of.)  we should be able to make these use either
        of gnu/dist/{,toolchain/}<foo> with a simple change to the
        path-to-./configure.

        - for mknative, simply split the script into 3 scripts.  it
        is already largely modular and will easily break up.  change
        this to workon the gnu/dist/<foo> versions.

        - for gnu/usr.bin/{gdb,binutils,gcc}, change the makefiles to
        allow for either version.  as ports upgrade to the new versions,
        regenerate their files with mknative (see above).

        - do not use gnu/lib/lib{bfd,opcodes,iberty} for new tools.
        build separate versions between gdb & binutils.  build a shared
        libbfd for binutils and install that into /usr/lib, but build
        a separate static libbfd for gdb.  (hmm, what about ports with
        new binutils but old gdb... then gdb is goin to be wanting the
        new libbfd, which isn't so bad maybe... the alternative is to
        upgrade binutils after gdb... this is a one-time issue.)
	we can just copy gnu/lib/lib{bfd,opcodes} into
	gnu/usr.bin/binutils and build/link/install them from there..


in my mind, the only way we can really have a merged tree is if we
tracked the CVS versions of all tree parts of the tools and i don't
think anyone would want us to do that :-)



.mrg.