
		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
aggressively 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
		.
		.
		.


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