summaryrefslogtreecommitdiffstats
path: root/doc/started/buildc.t
diff options
context:
space:
mode:
Diffstat (limited to 'doc/started/buildc.t')
-rw-r--r--doc/started/buildc.t952
1 files changed, 952 insertions, 0 deletions
diff --git a/doc/started/buildc.t b/doc/started/buildc.t
new file mode 100644
index 0000000000..b4f9f808f2
--- /dev/null
+++ b/doc/started/buildc.t
@@ -0,0 +1,952 @@
+@c
+@c COPYRIGHT (c) 1988-2002.
+@c On-Line Applications Research Corporation (OAR).
+@c All rights reserved.
+@c
+@c $Id$
+@c
+
+@chapter Building the GNU Cross Compiler Toolset
+
+NOTE: This chapter does @b{NOT} apply if you installed
+prebuilt toolset executables for BINUTILS, GCC, NEWLIB,
+and GDB. If you installed prebuilt executables for all
+of those, proceed to @ref{Building RTEMS}. If you require
+a GDB with a special configuration to connect to your
+target board, then proceed to @ref{Building the GNU Debugger GDB}
+for some advice.
+
+This chapter describes the steps required to acquire the
+source code for a GNU cross compiler toolset, apply
+any required RTEMS specific patches, compile that
+toolset and install it.
+
+It is recommended that when toolset binaries are available for
+your particular host, that they be used. Prebuilt binaries
+are much easier to install.
+
+@c
+@c Building BINUTILS GCC and NEWLIB
+@c
+@section Building BINUTILS GCC and NEWLIB
+
+NOTE: This step is NOT required if prebuilt executables for
+BINUTILS, GCC, and NEWLIB were installed.
+
+This section describes the process of building BINUTILS, GCC, and
+NEWLIB using a variety of methods. Included is information on
+obtaining the source code and patches, applying patches, and
+building and installing the tools using multiple methods.
+
+@c
+@c Obtain Source and Patches for BINUTILS GCC and NEWLIB
+@c
+
+@subsection Obtain Source and Patches for BINUTILS GCC and NEWLIB
+
+NOTE: This step is required for all methods of building BINUTILS,
+GCC, and NEWLIB.
+
+This section lists the components required to build BINUTILS, GCC,
+and NEWLIB from source to target RTEMS. These files should be
+placed in your @code{archive} directory. Included are the locations
+of each component as well as any required RTEMS specific patches.
+
+@need 1000
+@subheading @value{GCCUNTAR}
+@example
+ FTP Site: @value{GCCFTPSITE}
+ Directory: @value{GCCFTPDIR}
+ File: @value{GCCTAR}
+@c @ifset use-html
+ URL: @uref{ftp://@value{GCCFTPSITE}@value{GCCFTPDIR}/@value{GCCTAR},,ftp://@value{GCCFTPSITE}@value{GCCFTPDIR}/@value{GCCTAR}}
+@c URL: ftp://@value{GCCFTPSITE}@value{GCCFTPDIR}
+@c @end ifset
+@end example
+
+@need 1000
+@subheading @value{BINUTILSUNTAR}
+@example
+ FTP Site: @value{BINUTILSFTPSITE}
+ Directory: @value{BINUTILSFTPDIR}
+ File: @value{BINUTILSTAR}
+@c @ifset use-html
+ URL: @uref{ftp://@value{BINUTILSFTPSITE}@value{BINUTILSFTPDIR}/@value{BINUTILSTAR},,ftp://@value{BINUTILSFTPSITE}@value{BINUTILSFTPDIR}/@value{BINUTILSTAR}}
+@c URL: ftp://@value{BINUTILSFTPSITE}@value{BINUTILSFTPDIR}/@value{BINUTILSTAR}
+@c @end ifset
+@end example
+
+@need 1000
+@subheading @value{NEWLIBUNTAR}
+@example
+ FTP Site: @value{NEWLIBFTPSITE}
+ Directory: @value{NEWLIBFTPDIR}
+ File: @value{NEWLIBTAR}
+@c @ifset use-html
+ URL: @uref{ftp://@value{NEWLIBFTPSITE}@value{NEWLIBFTPDIR}/@value{NEWLIBTAR},,ftp://@value{NEWLIBFTPSITE}@value{NEWLIBFTPDIR}/@value{NEWLIBTAR}}
+@c URL: ftp://@value{NEWLIBFTPSITE}@value{NEWLIBFTPDIR}/@value{NEWLIBTAR}
+@c @end ifset
+@end example
+
+@need 1000
+@subheading RTEMS Specific Tool Patches and Scripts
+@example
+ FTP Site: @value{RTEMSFTPSITE}
+ Directory: @value{RTEMSFTPDIR}/@value{VERSION}
+@ifset BINUTILSPATCHVERSION
+ File: @value{BINUTILSRTEMSPATCH}
+@end ifset
+@ifset NEWLIBPATCHVERSION
+ File: @value{NEWLIBRTEMSPATCH}
+@end ifset
+@ifset GCCPATCHVERSION
+ File: @value{GCCRTEMSPATCH}
+@end ifset
+@ifset use-html
+@c URL: @uref{ftp://@value{RTEMSFTPSITE}@value{RTEMSFTPDIR}/SOURCES,Download RTEMS Patches and Scripts}
+ URL: ftp://@value{RTEMSFTPSITE}@value{RTEMSFTPDIR}/SOURCES
+@end ifset
+@end example
+
+@c
+@c Unarchiving the Tools
+@c
+@subsection Unarchiving the Tools
+
+NOTE: This step is required if building BINUTILS, GCC, and NEWLIB
+using the procedure described in @ref{Using configure and make}.
+It is @b{NOT} required if using the procedure
+described in @ref{Using RPM to Build BINUTILS GCC and NEWLIB}.
+
+GNU source distributions are archived using @code{tar} and
+compressed using either @code{gzip} or @code{bzip}.
+If compressed with @code{gzip}, the extension @code{.gz} is used.
+If compressed with @code{bzip}, the extension @code{.bz2} is used.
+
+While in the @code{tools} directory, unpack the compressed
+tar files for BINUTILS, GCC, and NEWLIB using the appropriate
+command based upon the compression program used.
+
+@example
+cd tools
+tar xzf ../archive/TOOLNAME.tar.gz # for gzip'ed tools
+tar xjf ../archive/TOOLNAME.tar.bz2 # for bzip'ed tools
+@end example
+
+After the compressed tar files have been unpacked using
+the appropriate commands, the following
+directories will have been created under tools.
+
+@itemize @bullet
+@item @value{BINUTILSUNTAR}
+@item @value{GCCUNTAR}
+@item @value{NEWLIBUNTAR}
+@end itemize
+
+The tree should look something like the following figure:
+
+@example
+@group
+/whatever/prefix/you/choose/
+ archive/
+ @value{GCCTAR}
+ @value{BINUTILSTAR}
+ @value{NEWLIBTAR}
+@ifset GCCPATCHVERSION
+ @value{GCCRTEMSPATCH}
+@end ifset
+@ifset BINUTILSPATCHVERSION
+ @value{BINUTILSRTEMSPATCH}
+@end ifset
+@ifset NEWLIBPATCHVERSION
+ @value{NEWLIBRTEMSPATCH}
+@end ifset
+ tools/
+ @value{BINUTILSUNTAR}/
+ @value{GCCUNTAR}/
+ @value{NEWLIBUNTAR}/
+@end group
+@end example
+
+@c
+@c Applying RTEMS Patches
+@c
+
+@subsection Applying RTEMS Patches
+
+NOTE: This step is required if building BINUTILS, GCC, and NEWLIB
+using the procedures described in @ref{Using configure and make}.
+It is @b{NOT} required if using the procedure
+described in @ref{Using RPM to Build BINUTILS GCC and NEWLIB}.
+
+This section describes the process of applying the RTEMS patches
+to GCC, NEWLIB, and BINUTILS.
+
+@c
+@c GCC patches
+@c
+
+@subheading Apply RTEMS Patch to GCC
+
+@ifclear GCCPATCHVERSION
+No RTEMS specific patches are required for @value{GCCUNTAR} to
+support @value{RTEMSVERSION}.
+@end ifclear
+
+@ifset GCCPATCHVERSION
+
+Apply the patch using the following command sequence:
+
+@example
+cd tools/@value{GCCUNTAR}
+cat ../../archive/@value{GCCRTEMSPATCH} | \
+ patch -p1
+@end example
+
+If the patch was compressed with the @code{gzip} program, it will
+have a suffix of @code{.gz} and you should use @code{zcat} instead
+of @code{cat} as shown above. If the patch was compressed with
+the @code{gzip} program, it will have a suffix of @code{.bz2} and
+you should use @code{bzcat} instead of @code{cat} as shown above.
+
+Check to see if any of these patches have been rejected using the following
+sequence:
+
+@example
+cd tools/@value{GCCUNTAR}
+find . -name "*.rej" -print
+@end example
+
+If any files are found with the .rej extension, a patch has been rejected.
+This should not happen with a good patch file which is properly applied.
+
+@end ifset
+
+@c
+@c BINUTILS patches
+@c
+
+@subheading Apply RTEMS Patch to binutils
+
+@ifclear BINUTILSPATCHVERSION
+No RTEMS specific patches are required for @value{BINUTILSUNTAR} to
+support @value{RTEMSVERSION}.
+@end ifclear
+
+@ifset BINUTILSPATCHVERSION
+Apply the patch using the following command sequence:
+
+@example
+cd tools/@value{BINUTILSUNTAR}
+cat ../../archive/@value{BINUTILSRTEMSPATCH} | \
+ patch -p1
+@end example
+
+If the patch was compressed with the @code{gzip} program, it will
+have a suffix of @code{.gz} and you should use @code{zcat} instead
+of @code{cat} as shown above. If the patch was compressed with
+the @code{gzip} program, it will have a suffix of @code{.bz2} and
+you should use @code{bzcat} instead of @code{cat} as shown above.
+
+Check to see if any of these patches have been rejected using the following
+sequence:
+
+@example
+cd tools/@value{BINUTILSUNTAR}
+find . -name "*.rej" -print
+@end example
+
+If any files are found with the .rej extension, a patch has been rejected.
+This should not happen with a good patch file which is properly applied.
+
+@end ifset
+
+@c
+@c Newlib patches
+@c
+
+@subheading Apply RTEMS Patch to newlib
+
+@ifclear NEWLIBPATCHVERSION
+No RTEMS specific patches are required for @value{NEWLIBUNTAR} to
+support @value{RTEMSVERSION}.
+@end ifclear
+
+@ifset NEWLIBPATCHVERSION
+
+Apply the patch using the following command sequence:
+
+@example
+cd tools/@value{NEWLIBUNTAR}
+cat ../../archive/@value{NEWLIBRTEMSPATCH} | \
+ patch -p1
+@end example
+
+If the patch was compressed with the @code{gzip} program, it will
+have a suffix of @code{.gz} and you should use @code{zcat} instead
+of @code{cat} as shown above. If the patch was compressed with
+the @code{gzip} program, it will have a suffix of @code{.bz2} and
+you should use @code{bzcat} instead of @code{cat} as shown above.
+
+Check to see if any of these patches have been rejected using the following
+sequence:
+
+@example
+cd tools/@value{NEWLIBUNTAR}
+find . -name "*.rej" -print
+@end example
+
+If any files are found with the .rej extension, a patch has been rejected.
+This should not happen with a good patch file which is properly applied.
+
+@end ifset
+
+
+@c
+@c Compiling and Installing BINUTILS GCC and NEWLIB
+@c
+
+@subsection Compiling and Installing BINUTILS GCC and NEWLIB
+
+There are two supported methods to compile and install BINUTILS, GCC,
+and NEWLIB:
+
+@itemize @bullet
+@item RPM
+@item direct invocation of @code{configure} and @code{make}
+@end itemize
+
+Direct invocation of @code{configure} and @code{make} provides more control
+and easier recovery from problems when building.
+
+@c
+@c Using RPM to Build BINUTILS GCC and NEWLIB
+@c
+
+@subsubsection Using RPM to Build BINUTILS GCC and NEWLIB
+
+NOTE: The procedures described in the following sections must
+be completed before this step:
+
+@itemize @bullet
+@item @ref{Obtain Source and Patches for BINUTILS GCC and NEWLIB}
+@end itemize
+
+RPM automatically unarchives the source and applies any needed
+patches so you do @b{NOT} have to manually perform the procedures
+described @ref{Unarchiving the Tools} and
+@ref{Applying RTEMS Patches}.
+
+This section describes the process of building binutils, gcc, and
+newlib using RPM. RPM is a packaging format which can be used to
+distribute binary files as well as to capture the procedure and
+source code used to produce those binary files. Before
+attempting to build any RPM from source, it is necessary to
+ensure that all required source and patches are in the @code{SOURCES}
+directory under the RPM root (probably @code{/usr/src/redhat} or
+@code{/usr/local/src/redhat}) on your machine. This procedure
+starts by installing the source RPMs as shown in the following
+example:
+
+@example
+rpm -i @value{RTEMSRPMPREFIX}i386-rtems-binutils-collection-@value{BINUTILSVERSION}-@value{BINUTILSRPMRELEASE}.nosrc.rpm
+rpm -i @value{RTEMSRPMPREFIX}i386-rtems-gcc-newlib-gcc@value{GCCVERSION}newlib@value{NEWLIBVERSION}-@value{GCCRPMRELEASE}.nosrc.rpm
+@end example
+
+The RTEMS tool source RPMS are called "nosrc" to indicate that one or
+more source files required to produce the RPMs are not present.
+The RTEMS source RPMs typically include all required patches, but do not
+include the large @code{.tar.gz} or @code{.tgz} files for
+each component such as BINUTILS, GCC, or NEWLIB. These are shared
+by all RTEMS RPMs regardless of target CPU and there was no reason
+to duplicate them. You will have to get the required source
+archive files by hand and place them in the @code{SOURCES} directory
+before attempting to build. If you forget to do this, RPM is
+smart -- it will tell you what is missing. To determine what is
+included or referenced by a particular RPM, use a command like the
+following:
+
+@example
+@c Don't use @value{GCC*} below. This is an example
+$ rpm -q -l -p @value{RTEMSRPMPREFIX}i386-rtems-gcc-newlib-gcc3.2.3newlib1.11.0-1.nosrc.rpm
+gcc-3.2.3-rtems-20030507a.diff
+i386-rtems-gcc-3.2.3-newlib-1.11.0.spec
+newlib-1.11.0-rtems-20030507.diff
+@end example
+
+Notice that there are patch files (the @code{.diff} files) and a file
+describing the build procedure and files produced (the @code{.spec} file),
+but no source archives (the @code{*tar.*} files).
+When installing this source RPM
+(@code{rpm -U @value{RTEMSRPMPREFIX}i386-rtems-gcc-newlib-gcc3.2.3newlib1.11.0-1.nosrc.rpm}),
+the @code{.spec} file is placed in the @code{SPECS} directory under the RPM root
+directory, while the @code{*.diff} files are placed into the @code{SOURCES}
+directory.
+
+@c
+@c Configuring and Building BINUTILS using RPM
+@c
+
+@subheading Configuring and Building BINUTILS using RPM
+
+The following example illustrates the invocation of RPM to build a new,
+locally compiled, binutils binary RPM that matches the installed source
+RPM. This example assumes that all of the required source is installed.
+
+@example
+cd <RPM_ROOT_DIRECTORY>/SPECS
+rpm -bb i386-rtems-binutils-@value{BINUTILSVERSION}.spec
+@end example
+
+If the build completes successfully, RPMS like the following will
+be generated in a build-host architecture specific subdirectory
+of the RPMS directory under the RPM root directory.
+
+@example
+@value{RTEMSRPMPREFIX}rtems-base-binutils-@value{BINUTILSVERSION}-@value{BINUTILSRPMRELEASE}.i386.rpm
+@value{RTEMSRPMPREFIX}i386-rtems-binutils-@value{BINUTILSVERSION}-@value{BINUTILSRPMRELEASE}.i386.rpm
+@end example
+
+NOTE: It may be necessary to remove the build tree in the
+@code{BUILD} directory under the RPM root directory.
+
+@c
+@c Configuring and Building GCC and NEWLIB using RPM
+@c
+
+@subheading Configuring and Building GCC and NEWLIB using RPM
+
+The following example illustrates the invocation of RPM to build a new,
+locally compiled, set of GCC and NEWLIB binary RPMs that match the
+installed source RPM. It is also necessary to install the BINUTILS
+RPMs and place them in your PATH. This example assumes that all of
+the required source is installed.
+
+@example
+cd <RPM_ROOT_DIRECTORY>/RPMS/i386
+rpm -i @value{RTEMSRPMPREFIX}rtems-base-binutils-@value{BINUTILSVERSION}-@value{BINUTILSRPMRELEASE}.i386.rpm
+rpm -i @value{RTEMSRPMPREFIX}i386-rtems-binutils-@value{BINUTILSVERSION}-@value{BINUTILSRPMRELEASE}.i386.rpm
+export PATH=@value{RTEMSPREFIX}/bin:$PATH
+cd <RPM_ROOT_DIRECTORY>/SPECS
+rpm -bb i386-rtems-gcc-@value{GCCVERSION}-newlib-@value{NEWLIBVERSION}.spec
+@end example
+
+If the build completes successfully, a set of RPMS like the following will
+be generated in a build-host architecture specific subdirectory
+of the RPMS directory under the RPM root directory.
+
+@example
+@value{RTEMSRPMPREFIX}rtems-base-gcc-gcc@value{GCCVERSION}newlib@value{NEWLIBVERSION}-@value{GCCRPMRELEASE}.i386.rpm
+@value{RTEMSRPMPREFIX}rtems-base-g77-gcc@value{GCCVERSION}newlib@value{NEWLIBVERSION}-@value{GCCRPMRELEASE}.i386.rpm
+@value{RTEMSRPMPREFIX}rtems-base-gcj-gcc@value{GCCVERSION}newlib@value{NEWLIBVERSION}-@value{GCCRPMRELEASE}.i386.rpm
+@value{RTEMSRPMPREFIX}i386-rtems-gcc-gcc@value{GCCVERSION}newlib@value{NEWLIBVERSION}-@value{GCCRPMRELEASE}.i386.rpm
+@value{RTEMSRPMPREFIX}i386-rtems-g77-gcc@value{GCCVERSION}newlib@value{NEWLIBVERSION}-@value{GCCRPMRELEASE}.i386.rpm
+@value{RTEMSRPMPREFIX}i386-rtems-gcj-gcc@value{GCCVERSION}newlib@value{NEWLIBVERSION}-@value{GCCRPMRELEASE}.i386.rpm
+@value{RTEMSRPMPREFIX}i386-rtems-objc-gcc@value{GCCVERSION}newlib@value{NEWLIBVERSION}-@value{GCCRPMRELEASE}.i386.rpm
+@end example
+
+NOTE: Some targets do not support building all languages.
+
+NOTE: It may be necessary to remove the build tree in the
+@code{BUILD} directory under the RPM root directory.
+
+@c
+@c Using configure and make
+@c
+
+@subsubsection Using configure and make
+
+NOTE: The procedures described in the following sections must
+be completed before this step:
+
+@itemize @bullet
+@item @ref{Obtain Source and Patches for BINUTILS GCC and NEWLIB}
+@item @ref{Unarchiving the Tools}
+@item @ref{Applying RTEMS Patches}
+@end itemize
+
+This section describes the process of building binutils, gcc, and
+newlib manually using @code{configure} and @code{make} directly.
+
+@c
+@c Configuring and Building BINUTILS
+@c
+
+@subheading Configuring and Building BINUTILS
+
+The following example illustrates the invocation of
+@code{configure} and @code{make}
+to build and install @value{BINUTILSUNTAR} for the
+sparc-rtems target:
+
+@example
+mkdir b-binutils
+cd b-binutils
+../@value{BINUTILSUNTAR}/configure --target=sparc-rtems \
+ --prefix=@value{RTEMSPREFIX}
+make all
+make info
+make install
+@end example
+
+After @value{BINUTILSUNTAR} is built and installed the
+build directory @code{b-binutils} may be removed.
+
+For more information on the invocation of @code{configure}, please
+refer to the documentation for @value{BINUTILSUNTAR} or
+invoke the @value{BINUTILSUNTAR} @code{configure} command with the
+@code{--help} option.
+
+NOTE: The shell PATH variable needs to be updated to include the path
+the binutils has been installed in. This the prefix used above with
+@file{bin} post-fixed.
+
+@example
+export PATH=$PATH:@value{RTEMSPREFIX}/bin
+@end example
+
+Failure to have the binutils in the path will cause the GCC and NEWLIB
+build to fail with an error message similar to:
+
+@example
+sparc-rtems-ar: command not found
+@end example
+
+@c
+@c Configuring and Building GCC and NEWLIB
+@c
+
+@subheading Configuring and Building GCC and NEWLIB
+
+Before building @value{GCCUNTAR} and @value{NEWLIBUNTAR},
+@value{BINUTILSUNTAR} must be installed and the directory
+containing those executables must be in your PATH.
+
+The C Library is built as a subordinate component of
+@value{GCCUNTAR}. Because of this, the @value{NEWLIBUNTAR}
+directory source must be available inside the @value{GCCUNTAR}
+source tree. This is normally accomplished using a symbolic
+link as shown in this example:
+
+@example
+cd @value{GCCUNTAR}
+ln -s ../@value{NEWLIBUNTAR}/newlib .
+@end example
+
+The following example illustrates the invocation of
+@code{configure} and @code{make}
+to build and install @value{GCCUNTAR} with only
+C and C++ support for the sparc-rtems target:
+
+@example
+mkdir b-gcc
+cd b-gcc
+../@value{GCCUNTAR}/configure --target=sparc-rtems \
+ --with-gnu-as --with-gnu-ld --with-newlib --verbose \
+ --enable-threads --enable-languages="c,c++" \
+ --prefix=@value{RTEMSPREFIX}
+make all
+make info
+make install
+@end example
+
+After @value{GCCUNTAR} is built and installed the
+build directory @code{b-gcc} may be removed.
+
+For more information on the invocation of @code{configure}, please
+refer to the documentation for @value{GCCUNTAR} or
+invoke the @value{GCCUNTAR} @code{configure} command with the
+@code{--help} option.
+
+@c
+@c Building GCC with Ada Support
+@c
+@subheading Building GCC with Ada Support
+
+If you want a GCC toolset that includes support for Ada
+(e.g. GNAT), there are some additional requirements on
+the host environment and additional build steps to perform.
+It is critical that you use the same version of GCC/GNAT as
+the native compiler. GNAT must be compiled with an Ada compiler
+and when building a GNAT cross-compiler, it should be
+the same version of GNAT itself.
+
+The build procedure is the same until the configure step.
+A GCC toolset with GNAT enabled requires that @code{ada}
+be included in the set of enabled languages.
+The following example illustrates the invocation of
+@code{configure} and @code{make}
+to build and install @value{GCCUNTAR} with only
+C, C++, and Ada support for the sparc-rtems target:
+
+@example
+mkdir b-gcc
+cd @value{GCCUNTAR}/gcc/ada
+touch treeprs.ads [es]info.h nmake.ad[bs]
+cd ../../../b-gcc
+../@value{GCCUNTAR}/configure --target=sparc-rtems \
+ --with-gnu-as --with-gnu-ld --with-newlib --verbose \
+ --enable-threads --enable-languages="c,c++,ada" \
+ --prefix=@value{RTEMSPREFIX}
+make all
+make info
+make -C gcc cross-gnattools
+make -C gcc ada.all.cross
+make -C gcc GNATLIBCFLAGS="USER_SELECTED_CPU_CFLAGS" gnatlib
+make install
+@end example
+
+After @value{GCCUNTAR} is built and installed the
+build directory @code{b-gcc} may be removed.
+
+@c
+@c Building the GNU Debugger GDB
+@c
+
+@section Building the GNU Debugger GDB
+
+NOTE: This step is NOT required if prebuilt executables for
+the GNU Debugger GDB were installed.
+
+The GNU Debugger GDB supports many configurations but requires some
+means of communicating between the host computer and target board.
+This communication can be via a serial port, Ethernet, BDM, or ROM emulator.
+The communication protocol can be the GDB remote protocol or GDB
+can talk directly to a ROM monitor. This setup is target board
+specific. The following configurations have been
+successfully used with RTEMS applications:
+
+@itemize @bullet
+@item BDM with ColdFire, 683xx, MPC860 CPUs
+@item Motorola Mxxxbug found on M68xxx VME boards
+@item Motorola PPCbug found on PowerPC VME, CompactPCI, and MTX boards
+@item ARM based Cogent EDP7312
+@item PC's using various Intel and AMD CPUs including i386,
+i486, Pentium and above, and Athlon
+@item PowerPC Instruction Simulator in GDB (PSIM)
+@item MIPS Instruction Simulator in GDB (JMR3904)
+@item Sparc Instruction Simulator in GDB (SIS)
+@item Sparc Instruction Simulator (TSIM)
+@item DINK32 on various PowerPC boards
+@end itemize
+
+GDB is currently RTEMS thread/task aware only if you are using the
+remote debugging support via Ethernet. These are configured
+using gdb targets of the form CPU-RTEMS. Note the capital RTEMS.
+
+It is recommended that when toolset binaries are available for
+your particular host, that they be used. Prebuilt binaries
+are much easier to install but in the case of gdb may or may
+not include support for your particular target board.
+
+@c
+@c Obtain Source and Patches for GDB
+@c
+
+@subsection Obtain Source and Patches for GDB
+
+NOTE: This step is required for all methods of building GDB.
+
+This section lists the components required to build GDB
+from source to target RTEMS. These files should be
+placed in your @code{archive} directory. Included are the locations
+of each component as well as any required RTEMS specific patches.
+
+@need 1000
+@subheading @value{GDBUNTAR}
+@example
+ FTP Site: @value{GDBFTPSITE}
+ Directory: @value{GDBFTPDIR}
+ File: @value{GDBTAR}
+ URL: @uref{@value{GDBFTPURL},,@value{GDBFTPURL}}
+@end example
+
+@need 1000
+@subheading RTEMS Specific Tool Patches and Scripts
+@example
+ FTP Site: @value{RTEMSFTPSITE}
+ Directory: @value{RTEMSFTPDIR}/SOURCES
+@ifset GDBPATCHVERSION
+ File: @value{GDBRTEMSPATCH}
+ URL: @uref{ftp://@value{RTEMSFTPSITE}@value{RTEMSFTPDIR}/SOURCES/@value{GDBRTEMSPATCH},,ftp://@value{RTEMSFTPSITE}@value{RTEMSFTPDIR}/SOURCES/@value{GDBRTEMSPATCH}}
+@end ifset
+@end example
+
+@c
+@c Unarchiving the GDB Distribution
+@c
+@subsection Unarchiving the GDB Distribution
+
+Use the following commands to unarchive the GDB distribution:
+
+@example
+cd tools
+tar xzf ../archive/@value{GDBTAR}
+@end example
+
+The directory @value{GDBUNTAR} is created under the tools directory.
+
+@c
+@c Applying RTEMS Patch to GDB
+@c
+
+@subsection Applying RTEMS Patch to GDB
+
+@ifclear GDBPATCHVERSION
+No RTEMS specific patches are required for @value{GDBVERSION} to
+support @value{RTEMSVERSION}.
+@end ifclear
+
+@ifset GDBPATCHVERSION
+
+Apply the patch using the following command sequence:
+
+@example
+cd tools/@value{GDBUNTAR}
+cat archive/@value{GDBRTEMSPATCH} | \
+ patch -p1
+@end example
+
+If the patch was compressed with the @code{gzip} program, it will
+have a suffix of @code{.gz} and you should use @code{zcat} instead
+of @code{cat} as shown above. If the patch was compressed with
+the @code{gzip} program, it will have a suffix of @code{.bz2} and
+you should use @code{bzcat} instead of @code{cat} as shown above.
+
+Check to see if any of these patches have been rejected using the following
+sequence:
+
+@example
+cd tools/@value{GDBUNTAR}
+find . -name "*.rej" -print
+@end example
+
+If any files are found with the .rej extension, a patch has been rejected.
+This should not happen with a good patch file.
+
+@end ifset
+
+@c
+@c Compiling and Installing the GNU Debugger GDB
+@c
+
+@subsection Compiling and Installing the GNU Debugger GDB
+
+There are three methods of building the GNU Debugger:
+
+@itemize @bullet
+@item RPM
+@item direct invocation of @code{configure} and @code{make}
+@end itemize
+
+Direct invocation of @code{configure} and @code{make} provides more control
+and easier recovery from problems when building.
+
+@c
+@c Using RPM to Build GDB
+@c
+
+@subsubsection Using RPM to Build GDB
+
+This section describes the process of building binutils, gcc, and
+newlib using RPM. RPM is a packaging format which can be used to
+distribute binary files as well as to capture the procedure and
+source code used to produce those binary files. Before
+attempting to build any RPM from source, it is necessary to
+ensure that all required source and patches are in the @code{SOURCES}
+directory under the RPM root (probably @code{/usr/src/redhat} or
+@code{/usr/local/src/redhat}) on your machine. This procedure
+starts by installing the source RPMs as shown in the following
+example:
+
+@example
+rpm -i @value{RTEMSRPMPREFIX}i386-rtems-gdb-collection-@value{GDBVERSION}-@value{GDBRPMRELEASE}.nosrc.rpm
+@end example
+
+Because RTEMS tool RPMS are called "nosrc" to indicate that one or
+more source files required to produce the RPMs are not present.
+The RTEMS source GDB RPM does not include the large @code{.tar.gz} or
+@code{.tgz} files for GDB. This is shared by all RTEMS RPMs
+regardless of target CPU and there was no reason
+to duplicate them. You will have to get the required source
+archive files by hand and place them in the @code{SOURCES} directory
+before attempting to build. If you forget to do this, RPM is
+smart -- it will tell you what is missing. To determine what is
+included or referenced by a particular RPM, use a command like the
+following:
+
+@example
+$ rpm -q -l -p @value{RTEMSRPMPREFIX}i386-rtems-gdb-collection-@value{GDBVERSION}-@value{GDBRPMRELEASE}.nosrc.rpm
+gdb-@value{GDBVERSION}-rtems-@value{GDBPATCHVERSION}.diff
+gdb-@value{GDBVERSION}.tar.gz
+i386-rtems-gdb-@value{GDBVERSION}.spec
+@end example
+
+Notice that there is a patch file (the @code{.diff} file), a source archive
+file (the @code{.tar.gz}), and a file describing the build procedure and
+files produced (the @code{.spec} file). The @code{.spec} file is placed
+in the @code{SPECS} directory under the RPM root directory.
+
+@c
+@c Configuring and Building GDB using RPM
+@c
+
+@subheading Configuring and Building GDB using RPM
+
+The following example illustrates the invocation of RPM to build a new,
+locally compiled, binutils binary RPM that matches the installed source
+RPM. This example assumes that all of the required source is installed.
+
+@example
+cd <RPM_ROOT_DIRECTORY>/SPECS
+rpm -bb i386-rtems-gdb-@value{GDBVERSION}.spec
+@end example
+
+If the build completes successfully, RPMS like the following will
+be generated in a build-host architecture specific subdirectory
+of the RPMS directory under the RPM root directory.
+
+@example
+@value{RTEMSRPMPREFIX}rtems-base-gdb-@value{GDBVERSION}-@value{GDBRPMRELEASE}.i386.rpm
+@value{RTEMSRPMPREFIX}i386-rtems-gdb-@value{GDBVERSION}-@value{GDBRPMRELEASE}.i386.rpm
+@end example
+
+NOTE: It may be necessary to remove the build tree in the
+@code{BUILD} directory under the RPM root directory.
+
+@c
+@c Using the GDB configure Script Directly
+@c
+
+@subsubsection Using the GDB configure Script Directly
+
+This section describes how to configure the GNU debugger for
+RTEMS targets using @code{configure} and @code{make} directly.
+The following example illustrates the invocation of @code{configure}
+and @code{make} to build and install @value{GDBUNTAR} for the
+m68k-rtems target:
+
+@example
+mkdir b-gdb
+cd b-gdb
+../@value{GDBUNTAR}/configure --target=m68k-rtems \
+ --prefix=@value{RTEMSPREFIX}
+make all
+make info
+make install
+@end example
+
+For some configurations, it is necessary to specify extra options
+to @code{configure} to enable and configure option components
+such as a processor simulator. The following is a list of
+configurations for which there are extra options:
+
+@table @b
+@item i960-rtems
+@code{--enable-sim}
+
+@item powerpc-rtems
+@code{--enable-sim --enable-sim-powerpc --enable-sim-timebase --enable-sim-hardware}
+
+@item sparc-rtems
+@code{--enable-sim}
+
+@end table
+
+After @value{GDBUNTAR} is built and installed the
+build directory @code{b-gdb} may be removed.
+
+For more information on the invocation of @code{configure}, please
+refer to the documentation for @value{GDBUNTAR} or
+invoke the @value{GDBUNTAR} @code{configure} command with the
+@code{--help} option.
+
+@c
+@c Common Problems
+@c
+
+@section Common Problems
+
+@subsection Error Message Indicates Invalid Option to Assembler
+
+If a message like this is printed then the new cross compiler
+is most likely using the native assembler instead of the cross
+assembler or vice-versa (native compiler using new cross assembler).
+This can occur for one of the following reasons:
+
+@itemize @bullet
+
+@item Binutils Patch Improperly Applied
+@item Binutils Not Built
+@item Current Directory is in Your PATH
+
+@end itemize
+
+If you are using binutils 2.9.1 or newer with certain older versions of
+gcc, they do not agree on what the name of the newly
+generated cross assembler is. Older binutils called it @code{as.new}
+which became @code{as.new.exe} under Windows. This is not a valid
+file name, so @code{as.new} is now called @code{as-new}. By using the latest
+released tool versions and RTEMS patches, this problem will be avoided.
+
+If binutils did not successfully build the cross assembler, then
+the new cross gcc (@code{xgcc}) used to build the libraries can not
+find it. Make sure the build of the binutils succeeded.
+
+If you include the current directory in your PATH, then there
+is a chance that the native compiler will accidentally use
+the new cross assembler instead of the native one. This usually
+indicates that "." is before the standard system directories
+in your PATH. As a general rule, including "." in your PATH
+is a security risk and should be avoided. Remove "." from
+your PATH.
+
+NOTE: In some environments, it may be difficult to remove "."
+completely from your PATH. In this case, make sure that "."
+is after the system directories containing "as" and "ld".
+
+@subsection Error Messages Indicating Configuration Problems
+
+If you see error messages like the following,
+
+@itemize @bullet
+
+@item cannot configure libiberty
+@item coff-emulation not found
+@item etc.
+
+@end itemize
+
+Then it is likely that one or more of your gnu tools is
+already configured locally in its source tree. You can check
+for this by searching for the @code{config.status} file
+in the various tool source trees. The following command
+does this for the binutils source:
+
+@example
+find @value{BINUTILSUNTAR} -name config.status -print
+@end example
+
+The solution for this is to execute the command
+@code{make distclean} in each of the GNU tools
+root source directory. This should remove all
+generated files including Makefiles.
+
+This situation usually occurs when you have previously
+built the tool source for some non-RTEMS target. The
+generated configuration specific files are still in
+the source tree and the include path specified during
+the RTEMS build accidentally picks up the previous
+configuration. The include path used is something like
+this:
+
+@example
+-I../../@value{BINUTILSUNTAR}/gcc -I/@value{BINUTILSUNTAR}/gcc/include -I.
+@end example
+
+Note that the tool source directory is searched before the
+build directory.
+
+This situation can be avoided entirely by never using
+the source tree as the build directory -- even for
+