
		PSIM - model the PowerPC environment

    Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au>.

    ----------------------------------------------------------------------

			Running PSIM

	This file describes how to run the program PSIM.

	o	Walk through a number of examples from the
		pre-built tar archive psim-test.

	o	Looks at the device tree used by PSIM.

	o	Notes on building a programmer environment to
		use with PSIM (BSD/UEA and BUG/OEA)


    ----------------------------------------------------------------------


RUNNING PSIM:


The compressed tar archive psim-test available from:

	ftp://ftp.ci.com.au/pub/psim/psim-test-1.0.1.tar.gz
or	ftp://cambridge.cygnus.com/pub/psim/psim-test-1.0.1.tar.gz

contains a number of pre-built programs for running under PSIM.  Each
pre-built binary is built both big and little endian.  The suffixes
.be/.le (executables) .bo/.lo (object files) and .ba/.la (libraries)
are used.


To run one of these programs, use:

	powerpc-unknown-eabi-run <image>

for instance:

	powerpc-unknown-eabi-run psim-test/uea/envp

The program envp prints out your shells environment - very useful!
More generally psim is run as (this is part of the output from the -h
option):

        psim [ <psim-option> ... ] <image> [ <image-arg> ... ]

Where

        <image>       Name of the PowerPC program to run.
                      This can either be a PowerPC binary or
                      a text file containing a device tree
                      specification.
                      PSIM will attempt to determine from the
                      specified <image> the intended emulation
                      environment.
                      If PSIM gets it wrong, the emulation
                      environment can be specified using the
                      `-e' option (described below).

        <image-arg>   Argument to be passed to <image>
                      These arguments will be passed to
                      <image> (as standard C argv, argc)
                      when <image> is started.

        <psim-option> See below

The following are valid <psim-option>s:

        -m <model>    Specify the processor to model (604)
                      Selects the processor to use when
                      modeling execution units.  Includes:
                      604, 603 and 603e

        -e <os-emul>  specify an OS or platform to model
                      Can be any of the following:
                      bug - OEA + MOTO BUG ROM calls
                      netbsd - UEA + NetBSD system calls
                      chirp - OEA + a few OpenBoot calls

        -i            Print instruction counting statistics

        -I            Print execution unit statistics

        -r <size>     Set RAM size in bytes (OEA environments)

        -t [!]<trace> Enable (disable) <trace> option

        -o <spec>     add device <spec> to the device tree

        -h -? -H      give more detailed usage


The `-H' option gives a long usage output.  This includes a complete
list of all the pre-configured devices.


    ----------------------------------------------------------------------


RUNNING GDB:


If you built PSIM with gdb then the following is a quick start
tutorial.

At present GDB, if configured big-endian (say) unlike PSIM, does not
support the debugging of little endian binaries.  If you find that
your program won't run at all, make certain that GDB and your
program's endianness match.


The most important thing is that before you can run the simulator you
must enable it.  For the simulator, gdb is started like any program:

	$ powerpc-unknown-eabi-gdb psim-test/uea/envp.be

Next the simulator is enabled.  The command `target sim' accepts the
same options as can be specified on the PSIM command line.

	(gdb) target sim

To trace the communication between psim and gdb specify `target sim -t
gdb'.  Once enabled, the binary needs to be loaded, any breakpoints of
interest set, and the program run:

	(gdb) load
	(gdb) break main
	(gdb) run
	.
	.
	.

In addition, if you are wanting to run a program described by a device
tree you can `attach' to the simulation using (I assume that you have
applied the attach patch):

	$ cd psim-test/tree
	$ powerpc-unknown-eabi-gdb
	(gdb) target sim
	(gdb) attach device-tree
	(gdb) run

Here GDB takes the programs initial state from the attached
device-tree instead of forcing initialisation.


    ----------------------------------------------------------------------


PROFILING:


PSIM includes a number of performance monitoring (profiling)
facilities:

	o	instruction frequency counting

	o	execution unit modeling (records
		effective usage of units).

	o	instruction cache performance

As discussed in the file INSTALL, each can be configured to individual
requirements.


	-i	Enable instruction counting.

		The frequency of all instructions is tabulated.  In
		addition (f configured) the hit/miss rate of the
		instruction cache is output.


	-I	Enable execution unit analysis.

		In addition to counting basic instructions also model
		the performance of the processors execution units


	-m <processor>

		Select the processor to be modelled.

		For execution unit analysis specify the processor that
		is to be analysed.  By default the 604 is modelled
		however, support for other processors such as the
		603 and 603e is included.

The output from a performance run (on a P90) for the program
psim-test/profile/bench is below.  In this run psim was fairly
agressively configured (see the file INSTALL for compile time
configuration).

	CPU #1 executed     41,994 AND instructions.
	CPU #1 executed    519,785 AND Immediate instructions.
	CPU #1 executed    680,058 Add instructions.
	CPU #1 executed     41,994 Add Extended instructions.
	CPU #1 executed    921,916 Add Immediate instructions.
	CPU #1 executed    221,199 Add Immediate Carrying instructions.
	CPU #1 executed    943,823 Add Immediate Shifted instructions.
	CPU #1 executed    471,909 Add to Zero Extended instructions.
	CPU #1 executed    571,915 Branch instructions.
	CPU #1 executed  1,992,403 Branch Conditional instructions.
	CPU #1 executed    571,910 Branch Conditional to Link Register instructions.
	CPU #1 executed    320,431 Compare instructions.
	CPU #1 executed    471,911 Compare Immediate instructions.
	CPU #1 executed    145,867 Compare Logical instructions.
	CPU #1 executed    442,414 Compare Logical Immediate instructions.
	CPU #1 executed          1 Condition Register XOR instruction.
	CPU #1 executed    103,873 Divide Word instructions.
	CPU #1 executed    104,275 Divide Word Unsigned instructions.
	CPU #1 executed    132,510 Extend Sign Byte instructions.
	CPU #1 executed    178,895 Extend Sign Half Word instructions.
	CPU #1 executed    871,920 Load Word and Zero instructions.
	CPU #1 executed     41,994 Move From Condition Register instructions.
	CPU #1 executed    100,005 Move from Special Purpose Register instructions.
	CPU #1 executed    100,002 Move to Special Purpose Register instructions.
	CPU #1 executed    804,619 Multiply Low Word instructions.
	CPU #1 executed    421,201 OR instructions.
	CPU #1 executed    471,910 OR Immediate instructions.
	CPU #1 executed  1,292,020 Rotate Left Word Immediate then AND with Mask instructions.
	CPU #1 executed    663,613 Shift Left Word instructions.
	CPU #1 executed  1,151,564 Shift Right Algebraic Word Immediate instructions.
	CPU #1 executed    871,922 Store Word instructions.
	CPU #1 executed    100,004 Store Word with Update instructions.
	CPU #1 executed    887,804 Subtract From instructions.
	CPU #1 executed     83,988 Subtract From Immediate Carrying instructions.
	CPU #1 executed          1 System Call instruction.
	CPU #1 executed    207,746 XOR instructions.
	
	CPU #1 executed 23,740,856 cycles.
	CPU #1 executed 10,242,780 stalls waiting for data.
	CPU #1 executed          1 stall waiting for a function unit.
	CPU #1 executed          1 stall waiting for serialization.
	CPU #1 executed  1,757,900 times a write-back slot was unavailable.
	CPU #1 executed  1,088,135 branches.
	CPU #1 executed  2,048,093 conditional branches fell through.
	CPU #1 executed  1,088,135 successful branch predictions.
	CPU #1 executed    904,268 unsuccessful branch predictions.
	CPU #1 executed    742,557 branch if the condition is FALSE conditional branches.
	CPU #1 executed  1,249,846 branch if the condition is TRUE conditional branches.
	CPU #1 executed    571,910 branch always conditional branches.
	CPU #1 executed  9,493,653 1st single cycle integer functional unit instructions.
	CPU #1 executed  1,220,900 2nd single cycle integer functional unit instructions.
	CPU #1 executed  1,254,768 multiple cycle integer functional unit instructions.
	CPU #1 executed  1,843,846 load/store functional unit instructions.
	CPU #1 executed  3,136,229 branch functional unit instructions.
	CPU #1 executed 16,949,396 instructions that were accounted for in timing info.
	CPU #1 executed    871,920 data reads.
	CPU #1 executed    971,926 data writes.
	CPU #1 executed        221 icache misses.
	CPU #1 executed 16,949,396 instructions in total.
	
	Simulator speed was 250,731 instructions/second


    ----------------------------------------------------------------------


PSIM CONFIGURATION - THE DEVICE TREE


Internally PSIM's configuration is controlled by a tree data
structure.  This structure, created at run-time, intentionally
resembles the device tree used by OpenBoot firmware to describe a
machines hardware configuration.

PSIM can either create its device tree using a builtin emulation or
from one read in from a file.

During startup, the device tree is created using the following steps:

	o	Initial empty tree is created

	o	Any tree entry options specified on the
		command line are merged in (the -o <entry>
		option is used).

		It should be pointed out that most of the
		command line options (eg -r, -e, -m, -t
		are all just short hand for corresponding
		-o options).

	o	If the specified program is a device tree spec, that
		is loaded.

		If the specified program is a text file it is assumed
		that that file contains a further specification of the
		simulators device tree.  That tree is loaded and
		merged with the current tree options.

	o	The selected emulation fills out any remaining details.

		By this stage the emulation environment that the program
		needs will either be specified in the device tree
		(through the -e option) or determined from the
		characteristics of the binary.

		The selected emulation will then fill out any missing
		nodes in the device tree.

Most importantly earlier additions to the tree are not overridden by
later additions.  Thus, command line options override information
found in the program file and both override any builtin emulation
entries.

The following is a summary of the most useful runtime configuration
options:

	-e <os-emul>
	-o '/openprom/options/os-emul <os-emul>'

		Run program using the <emulation> run-time
		environment.

	-r <ram-size>
	-o '/openprom/options/oea-memory-size <ram-size>'

		Set the size of the first bank of memory
		(RAM from address 0 up).

	-t print-device-tree
	-o '/openprom/trace/print-device-tree 1'

	-t dump-device-tree
	-o '/openprom/trace/dump-device-tree 1'

		Print out the device tree once it has been fully
		populated. For dump-device-tree, exit simulator after
		dumping the tree.

		PSIM is able to reload the dumped device tree.

		The format of the dumped tree is under development.

	-o '/openprom/options/smp <N>'

		Enable <N> processors for the simulation run.
		See the directory psim-test/oea for an example.

	-o '/openprom/options/alignment <N>'

		Where <N> is 1 - nonstrict or 2 - strict.
		Specify if the missaligned access are allowed
		(non-strict) or result in an alignment exception
		(strict).

Devices (if included in the file device_table.c) can also be specified
in a similar way.  For instance, to add a second serial port, a
command like:

	-o '/iobus@0x400000/console@0x000010'

would create a `console' device at offset 0x10 within the `iobus' at
memory address 0x400000.

For more detailed information on device specifiers see the notes on
the function dump_device_tree in the file device.c (found in the
source code).


    ----------------------------------------------------------------------


BUILDING A BUG/OEA DEVELOPMENT ENVIRONMENT


Background:


Included in many PowerPC systems is Motorola's BUG monitor.  This
monitor includes, for client programs, a set of services that allow
that program to interact with hardware devices such as the console using
a simple system call interface.

PSIM is able to emulate a number of the services (including the
console IO calls).  If additional services are needed they can easily
be added.

Cygnus support's newlib library includes includes an interface to the
MOTO BUG services.  The notes below discuss how I both built and run
programs compiled using this library on PSIM.

The only confusing part about building a development environment based
around newlib/binutils/gcc is a chicken/egg problem with include
files:
		
	For GCC to build, a fairly complete set of include
	files must be installed but newlib won't install its
	include files until it has been built with gcc ...

I get around this by installing the problematic include files by hand.


Preparation:


The following files are needed:

From your favorite FTP site, the sources to gas/ld and gcc - mine
happens to be archie.au :

	ftp://archie.au/gnu/binutils-2.6.tar.gz
	ftp://archie.au/gnu/gcc-2.7.2.tar.gz

From ftp://ftp.cygnus.com/pub/newlib the source code to a library:

	ftp://ftp.cygnus.com/pub/newlib/newlib-1.7.0.tar.gz

From ftp://ftp.ci.com.au/pub/psim some minor patches and updates to
the above library:

	ftp://ftp.ci.com.au/pub/psim/newlib-1.7.0+float+ppc-asm.tar.gz
	ftp://ftp.ci.com.au/pub/psim/newlib-1.7.0+ppc-fix.diff.gz
	ftp://ftp.ci.com.au/pub/psim/binutils-2.6+note.diff.gz

In addition you'll need to decide where you will be installing the
development environment.  You will notice that in the below I install
things well away /usr/local instead installing everything under its
own directory in /applications.


Method:


These notes are based on an installation performed on a Sun-OS-4/SPARC
host.  For other hosts and other configurations, the below should be
considered as a guideline only.


 	o	Sanity check

		$ cd .../scratch	# your scratch directory
		$ ls -1
		binutils-2.6.tar.gz
		binutils-2.6+note.diff.gz
		gcc-2.7.2,tar.gz
		newlib-1.7.0+float+ppc-asm.tar.gz
		newlib-1.7.0+ppc-fix.diff.gz
		newlib-1.7.0.tar.gz


	o	Unpack/build/install binutils

		This is done first so that there is a gas/ld ready
		for the building of GCC and NEWLIB.

		$ cd .../scratch
		$ gunzip < binutils-2.6.tar.gz | tar xf -
		$ cd binutils-2.6

		Optionally apply the note patch

		$ gunzip ../binutils-2.6+note.diff.gz | patch

		Then continue with the build

		$ ./configure --target=powerpc-unknown-eabi \
                              --prefix=/applications/psim
		$ make
		$ make install
		$ cd ..
		$ rm -rf binutils-2.6

		This also creates much of the installation directory
		tree.


	o	Unpack newlib, install the include files so that they
		are ready for GCC's build.

		$ cd .../scratch
		$ gunzip < newlib-1.7.0.tar.gz | tar xf -

		New lib-1.7.0 had a few minor bugs (fixed in current):
		the header files float.h and ppc-asm.h were missing;
		the configure and Makefile's for the rs6000 (ppc) directory
		contained typos:

		$ cd .../scratch
		$ cd newlib-1.7.0
		$ gunzip < ../newlib-1.7.0+float+ppc-asm.tar.gz | tar xvf -
		$ gunzip < ../newlib-1.7.0+ppc-fix.diff.gz | patch -p1
		
		Finally copy the include files to where GCC will see them:

		$ cd .../scratch
		$ cd newlib-1.7.0/newlib/libc
		$ tar cf - include | \
                   ( cd /applications/psim/powerpc-unknown-eabi && tar xf - )


	o	Unpack/build gcc

		$ cd .../scratch
		$ gunzip < gcc-2.7.2,tar.gz | tar xf -
		$ cd gcc-2.7.2
		$ ./configure --target=powerpc-unknown-eabi \
                              --prefix=/applications/psim
		$ make
		$ make install
		$ cd ..
		$ rm -rf gcc-2.7.2

		Gcc likes to install its own dummy version of float that
		just returns an error.

		$ more /applications/psim/lib/gcc-lib/powerpc-unknown-eabi/2.7.2/include/float.h
		$ rm /applications/psim/lib/gcc-lib/powerpc-unknown-eabi/2.7.2/include/float.h


	o	Finish building/installing newlib

		$ cd .../scratch
		$ cd newlib-1.7.0
		$ ./configure --target=powerpc-unknown-eabi \
                              --prefix=/applications/psim

		Your path will need to include the recently installed
		gas/gcc when building.  Either add it to your path or
		use:

		$ PATH=/applications/psim/bin:$PATH make
		$ PATH=/applications/psim/bin:$PATH make install


	o	Finally, test out the build

		$ cat hello.c
		main()
		{
		  printf("hello world\n");
		}

		The binary is linked with an entry point less than 0x100000
		(1mb) so that psim will recognize the binary as needing
		the BUG/OEA instead of the BSD/UEA runtime environment.

		$ powerpc-unknown-eabi-gcc -v -o hello \
                    -Wl,-Ttext,0x4000,-Tdata,0x10000 \
                    /applications/psim/powerpc-unknown-eabi/lib/mvme-crt0.o \
                    hello.c \
                    -lc -lmvme
		$ powerpc-unknown-eabi-objdump -h hello
		$ powerpc-unknown-eabi-run hello

		It is also possible to force psim to use a specific
		run-time environment using the -e option vis:

		$ powerpc-unknown-eabi-run -e bug hello




    ----------------------------------------------------------------------


BUILDING A BSD/UEA DEVELOPMENT ENVIRONMENT


Background:


For a UEA to be useful it needs a supporting run-time environment.
PSIM implements a runtime environment based on the NetBSD system call
interface.

More than any thing, this user level emulation was the first
implemented because I happened to have the NetBSD source code lying
around.


Preparation:


This requires the NetBSD-1.1 source tree online.  It can either be
obtained vi ftp:

	try http://www.netbsd.org  or  ftp://ftp.netbsd.org

Alternatively obtain one of the NetBSD cdrom's.  Patches to this source
tree that fill out much of the PowerPC code are available in:

	ftp://ftp.ci.com.au/pub/clayton

Fetch everything in that directory - diffs, tar archives and scripts.
In addition patches to the bintuils and gcc are in:

	ftp://ftp.ci.com.au/pub/psim/binutils-2.6+note.diff.gz
	ftp://ftp.ci.com.au/pub/psim/gcc-2.7.2+sys-types.diff.gz

while the compiler (gcc) and assember (binutils) can be found at your
favorite gnu ftp site.  I used versions:

	gcc-2.7.2.tar.gz
	binutils-2.6.tar.gz




Method:


These notes are based on an installation performed on a Solaris2/x86
host.  For other hosts and other configurations, the below should be
considered as a guideline only.


	o	Sanity check

		I assume that you have already obtained the NetBSD-1.1 source
		code and unpacked it into the directory bsd-src.  While the
		full NetBSD source tree may not be needed, things are easier
		if it is all online.

		$ cd .../scratch
		$ ls -1
		binutils-2.6.tar.gz
		binutils-2.6+note.diff.gz
		clayton-include-960203.diff.gz
		clayton-lib-960203.diff.gz
		clayton-lib-960203.tar.gz
		clayton-sys-960203.diff.gz
		clayton-sys-960203.tar.gz
		clayton.chown.sh
		clayton.install.sh
		clayton.lorder.sh
		clayton.make.sh
		gcc-2.7.2.tar.gz
		gcc-2.7.2+sys-types.diff.gz
		make.tar.gz
		make.diff.gz


	o	Prepare the destination directory ready for installation.

		Firstly create many of the needed directories (some are
		created automatically later):

		$ for d in \
                    /applications/psim \
                    /applications/psim/bsd-root \
                    /applications/psim/bsd-root/usr \
                    /applications/psim/bsd-root/usr/share \
                    /applications/psim/bsd-root/usr/share/doc \
                    /applications/psim/bsd-root/usr/share/doc/psd \
                    /applications/psim/bsd-root/usr/share/doc/psd/19.curses \
                    /applications/psim/bsd-root/usr/include \
                    /applications/psim/bsd-root/usr/lib \
                    /applications/psim/powerpc-unknown-eabi \
                    /applications/psim/powerpc-unknown-eabi/bin \
                    ; \
                  do test -d $d || mkdir $d ; done

		Next, link the BSD and GNU include directories together.
		GCC expects include files to be in one location while the
		bsd install expects them in a second.  The link is in
		the direction below because bsd's install also insists on
		a directory (not a link) for its install destination.

		$ rm -rf /applications/psim/powerpc-unknown-eabi/include
		$ ln -s /applications/psim/bsd-root/usr/include \
                    /applications/psim/powerpc-unknown-eabi/include

		$ ls -l /applications/psim/powerpc-unknown-eabi/include
		lrwxr-xr-x  1 cagney  wheel  39 Mar 21 18:09
		/applications/psim/powerpc-unknown-eabi/include
		-> /applications/psim/bsd-root/usr/include


	o	Build/install Berkeley make

		The tar archive make.tar.gz contains a recent snapshot
		of bmake from the NetBSD source tree.  The notes below
		describe how to build/install it.  If you have access
		to an even more recent version of bmake, use that.

		Unpack the source code:

		$ cd .../scratch
		$ gunzip < make.tar.gz | tar xf -
		$ cd make

		Apply the patch in make.diff.gz that fixes a minor
		problem with a build under Solaris (by now it should
		be fixed in the NetBSD-current source tree).

		$ gunzip < ../make.diff.gz | more
		$ gunzip < ../make.diff.gz | patch

		Build it

		$ make -f Makefile.boot 'CC=gcc -g -DPOSIX'

		With bmake built, install it into the target specific bin
		directory:

		$ cp bmake /applications/psim/powerpc-unknown-eabi/bin/make
		$ cd ..
		$ rm -rf make


	o	Set up a number of wrapper scripts for bmake so that it works.

		In addition to needing BSD make the build process assumes
		a number of BSD specific commands.  To get around this
		several wrapper scripts are available.

		powerpc-unknown-eabi-make (clayton.make.sh)

			Front end to Berkeley make setting it up for a
			cross compilation

			$ cp clayton.make.sh \
                          /applications/psim/bin/powerpc-unknown-eabi-make
			$ chmod a+x \
                          /applications/psim/bin/powerpc-unknown-eabi-make

		chown (clayton.chown.sh)

			Wrapper that does not do any thing.
			Avoids the need to be root when installing.

			$ cp clayton.chown.sh \
                          /applications/psim/powerpc-unknown-eabi/bin/chown
			$ chmod a+x \
                          /applications/psim/powerpc-unknown-eabi/bin/chown

		install (clayton.install.sh)

			Wrapper to strip away a number of bsd specific install
			arguments.

			$ cp clayton.install.sh \
                          /applications/psim/powerpc-unknown-eabi/bin/install
			$ chmod a+x \
                          /applications/psim/powerpc-unknown-eabi/bin/install

		lorder (clayton.lorder.sh)

			Tweaked lorder script that will use nm etc from
			binutils.

			$ cp clayton.lorder.sh \
                          /applications/psim/powerpc-unknown-eabi/bin/lorder
			$ chmod a+x \
                          /applications/psim/powerpc-unknown-eabi/bin/lorder


		printf (?)

			Some operating systems don't include the program
			printf.  If you host doesn't have one, then a
			good source is the gnu sh-utils version.

			Again, if that program is missing, then I suggest
			installing it onto the powerpc specific program
			directory:

			/applications/psim/powerpc-unknown-eabi/bin


	o	Unpack the bsd source code (if you haven't already)

		If you're short on disk space (like me) just unpack:

			sys, lib, share/mk, include, usr.sbin/config,
			usr.sbin/dbsym, gnu/lib/libg++/g++-include,
			usr.bin/lex

		Otherwize, assuming you have a CD-DRIVE:

		$ cd .../scratch
		$ mkdir bsd-src
		$ cd bsd-src
		$ for d in /cdrom/bsdisc_12_95_disc2/NetBSD-1.1/source/*11
                  do
                    echo $d
                    cat $d/*.?? | gunzip | tar xf -
                  done

		Flatten the directory structure a little.

		$ mv usr/src/* .
		$ rmdir usr/src usr
		$ cd ..


	o	Apply the clayton (PowerPC) patches to your constructed
		tree.

		$ cd .../scratch
		$ cd bsd-src
		
		Diffs are applied using something like:

		$ gunzip < ../clayton-include-960312.diff.gz | patch -p1
		$ gunzip < ../clayton-lib-960203.diff.gz | patch -p1
		$ gunzip < ../clayton-sys-960203.diff.gz | patch -p1

		The patch to sys/dev/pci/ncr.c.rej might fail.

		The tar archives have a different problem, you need
		to remove the `src' prefix.  I used

		$ ln -s . src
		$ gunzip < ../clayton-lib-960203.tar.gz | tar xvf -
		$ gunzip < ../clayton-sys-960203.tar.gz | tar xvf -

		So that src/xxx unpacked into ./xxx

		$ cd ..


	o	install Berkeley make's include (mk) files.

		$ cd .../scrath
		$ cd bsd-src/share
		$ tar cf - mk | ( cd /applications/psim/bsd-root/usr/share \
                     && tar xvf - )
		$ cd ../..


	o	Install the include files

		$ cd .../scratch
		$ cd bsd-src/include
		$ powerpc-unknown-eabi-make install
		$ cd ../..
		

	o	Install a few other include files.

		As discussed above in the section on building libnew,
		the build process can have chicken/egg problems.  In the
		case of BSD's libc, it wants to use several include files
		(from the installed include directory) before they are
		installed.  Just copy them in as seen below:

		$ cd .../scratch
		$ cd bsd-src
		$ cp gnu/lib/libg++/g++-include/values.h \
                    /applications/psim/powerpc-unknown-eabi/include
		$ cp lib/libcurses/curses.h \
                    /applications/psim/powerpc-unknown-eabi/include
		$ cd ..


	o	Unpack/patch/build/install BINUTILS

		$ cd .../scratch
		$ gunzip < binutils-2.6.tar.gz | tar xf -

		gas (bfd) 2.6 didn't support the reading and writing of
		note sections.  The patch binutils-2.6+note.diff.gz
		adds support for this.  PowerPC/ELF boot files being loaded
		by OpenBoot ROM's should contain a PowerPC note section.

		$ cd .../scratch
		$ cd binutils-2.6/bfd
		$ gunzip < ../../binutils-2.6+note.diff.gz | more
		$ gunzip < ../../binutils-2.6+note.diff.gz | patch
		$ cd ../..

		Then continue with the build

		$ cd .../scratch
		$ cd binutils-2.6
		$ ./configure --target=powerpc-unknown-eabi \
                              --prefix=/applications/psim
		$ make
		$ make install
		$ cd ..
		$ rm -rf binutils-2.6

		This has the intended side effect of partially populating
		the psim directory tree which makes follow on steps easier.


	o	Unpack/patch/build/install GCC

		$ cd .../scratch
		$ gunzip < gcc-2.7.2.tar.gz | tar xf -
		$ cd gcc-2.7.2

		GCC-2.7.2 and the BSD include files have a conflicting type
		declaration.  The patch below gets around this problem
		(it may still be applicable to more recent versions of
		GCC):

		$ gunzip < ../gcc-2.7.2+sys-types.diff.gz | more
		$ gunzip < ../gcc-2.7.2+sys-types.diff.gz | patch

		If your version of GCC includes the file ginclude/ppc-asm.h
		then you should install that header file into the directory:
		/applications/psim/powerpc-unknown-eabi/include.  More
		recent versions of GCC expect this file to be installed:

		$ test -r ginclude/ppc-asm.h \
                  && cp ginclude/ppc-asm.h \
                     /applications/psim/powerpc-unknown-eabi/include

		Other than that, assuming the include files installed
		okay, the rest should be fine ....

		$ ./configure --target=powerpc-unknown-eabi \
                              --prefix=/applications/psim
		$ make CC=gcc
		$ make CC=gcc install
		$ cd ..
		$ rm -rf gcc-2.7.2


	o	Build/install the Berkeley library:

		$ cd .../scratch
		$ cd bsd-src/lib
		$ powerpc-unknown-eabi-make
		$ powerpc-unknown-eabi-make install
		$ cd ../..

		If you encounter problems check the following (each
		discussed above):

			o	GCC and BSD have a common include
				directory

			o	all the missing include files installed

			o	all the wrapper programs installed


	o	Build/run a simple BSD program

		$ cd .../scratch
		$ cd bsd-src/usr.bin/printenv
		$ powerpc-unknown-eabi-make
		$ powerpc-unknown-eabi-run printenv
		.
		.
		.


    ----------------------------------------------------------------------
