Obtaining the Latest GNU Tools Patches

This document describes how to obtain the latest patches for the GNU Tools. It does not describe how to apply those patches to the GNU Tools source archives (that is described elsewhere).

The patches made available are specific to the Digital Systems Laboratory at the University of New South Wales. These patches add certain features to the GNU Tools that are used in the Laboratory, such as fixing a number of minor issues with the tools and making some enhancements to the GNU Tools reference manuals. In general, though, you do not need these patches unless you are recompiling the GNU Tools for use in the Laboratory or for a subject using the Laboratory.

Whilst every effort will be made to keep the patches up-to-date, there is no guarantee that they will be available or current. You can always use the patches stored on this CD-ROM in the [List] gnutools/src directory as a starting point.

The patches for the GNU Tools are made available using CVS, the Concurrent Versions System. Whilst you do not need to know how CVS works to generate the patches, it does help. Please refer to the Concurrent Versions System Web page for more information.

Each of the GNU Tools source archives is imported into a separate CVS module on the machine cvs.zap.org.au. Each version of the archive has a matching tag that identifies it uniquely. These are documented in the table below:

GNU Tools source archive CVS module name CVS tag
binutils-version.tar.gz disyl-binutils BINUTILS_VERSION
gcc-core-version.tar.gz disyl-gcc GCC_VERSION
gcc-g++-version.tar.gz
insight-version.tar.gz disyl-insight INSIGHT_VERSION
newlib-version.tar.gz disyl-newlib NEWLIB_VERSION
make-version.tar.gz disyl-make MAKE_VERSION

The version and VERSION definitions are linked by a simple algorithm: all full-stops in version are replaced by underscores in VERSION. For example, given the binutils-2.13.2.1.tar.gz source archive (ie, binutils version 2.13.2.1), the corresponding CVS tag is BINUTILS_2_13_2_1. Incidentally, notice that both the gcc-core and gcc-g++ archives are merged into one CVS module, disyl-gcc. (By the way, the reason “disyl” is used as a prefix instead of “dslmu” is mainly historical: the project was originally planned to be called DISYL, not DSLMU).

To extract the patch for a given module, you need to use the cvs(1) command. The following command line is all that you need to run:

cvs -q -d:ext:cvs.zap.org.au:/data/cvs rdiff -u -r tag module | sed -e 's/^\+\+\+ module/+++ dirname/' | gzip -9 > dirname.patch.gz

where module is the CVS module name (eg, disyl-binutils), tag is the CVS tag (eg, BINUTILS_2_13_2_1) and dirname is the archive filename without the .tar.gz or .tar.bz2 extension (eg, binutils-2.13.2.1), except that gcc does not include the “core” or “g++” part. Note that this is a single command line, even if your browser splits it up into multiple lines!

So, for example, the command line for gcc version 3.2.1 is:

cvs -q -d:ext:cvs.zap.org.au:/data/cvs rdiff -u -r GCC_3_2_1 disyl-gcc | sed -e 's/^\+\+\+ disyl-gcc/+++ gcc-3.2.1/' | gzip -9 > gcc-3.2.1.patch.gz

If you receive an error from cvs(1) that there is “no such tag”, it means that either (a) you have misspelled the tag name or (b) that version of the archive has not been imported into the CVS repository.

If you wish, you can access the CVS repository using other methods. For more information, please see The ZAP Group’s CVS Web page.