1
2		PSIM - model the PowerPC environment
3
4    Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au>.
5
6    ----------------------------------------------------------------------
7
8			Running PSIM
9
10	This file describes how to run the program PSIM.
11
12	o	Walk through a number of examples from the
13		pre-built tar archive psim-test.
14
15	o	Looks at the device tree used by PSIM.
16
17	o	Notes on building a programmer environment to
18		use with PSIM (BSD/UEA and BUG/OEA)
19
20
21    ----------------------------------------------------------------------
22
23
24RUNNING PSIM:
25
26
27The compressed tar archive psim-test available from:
28
29	ftp://ftp.ci.com.au/pub/psim/psim-test-1.0.1.tar.gz
30or	ftp://cambridge.cygnus.com/pub/psim/psim-test-1.0.1.tar.gz
31
32contains a number of pre-built programs for running under PSIM.  Each
33pre-built binary is built both big and little endian.  The suffixes
34.be/.le (executables) .bo/.lo (object files) and .ba/.la (libraries)
35are used.
36
37
38To run one of these programs, use:
39
40	powerpc-unknown-eabi-run <image>
41
42for instance:
43
44	powerpc-unknown-eabi-run psim-test/uea/envp
45
46The program envp prints out your shells environment - very useful!
47More generally psim is run as (this is part of the output from the -h
48option):
49
50        psim [ <psim-option> ... ] <image> [ <image-arg> ... ]
51
52Where
53
54        <image>       Name of the PowerPC program to run.
55                      This can either be a PowerPC binary or
56                      a text file containing a device tree
57                      specification.
58                      PSIM will attempt to determine from the
59                      specified <image> the intended emulation
60                      environment.
61                      If PSIM gets it wrong, the emulation
62                      environment can be specified using the
63                      `-e' option (described below).
64
65        <image-arg>   Argument to be passed to <image>
66                      These arguments will be passed to
67                      <image> (as standard C argv, argc)
68                      when <image> is started.
69
70        <psim-option> See below
71
72The following are valid <psim-option>s:
73
74        -m <model>    Specify the processor to model (604)
75                      Selects the processor to use when
76                      modeling execution units.  Includes:
77                      604, 603 and 603e
78
79        -e <os-emul>  specify an OS or platform to model
80                      Can be any of the following:
81                      bug - OEA + MOTO BUG ROM calls
82                      netbsd - UEA + NetBSD system calls
83                      chirp - OEA + a few OpenBoot calls
84
85        -i            Print instruction counting statistics
86
87        -I            Print execution unit statistics
88
89        -r <size>     Set RAM size in bytes (OEA environments)
90
91        -t [!]<trace> Enable (disable) <trace> option
92
93        -o <spec>     add device <spec> to the device tree
94
95        -h -? -H      give more detailed usage
96
97
98The `-H' option gives a long usage output.  This includes a complete
99list of all the pre-configured devices.
100
101
102    ----------------------------------------------------------------------
103
104
105RUNNING GDB:
106
107
108If you built PSIM with gdb then the following is a quick start
109tutorial.
110
111At present GDB, if configured big-endian (say) unlike PSIM, does not
112support the debugging of little endian binaries.  If you find that
113your program won't run at all, make certain that GDB and your
114program's endianness match.
115
116
117The most important thing is that before you can run the simulator you
118must enable it.  For the simulator, gdb is started like any program:
119
120	$ powerpc-unknown-eabi-gdb psim-test/uea/envp.be
121
122Next the simulator is enabled.  The command `target sim' accepts the
123same options as can be specified on the PSIM command line.
124
125	(gdb) target sim
126
127To trace the communication between psim and gdb specify `target sim -t
128gdb'.  Once enabled, the binary needs to be loaded, any breakpoints of
129interest set, and the program run:
130
131	(gdb) load
132	(gdb) break main
133	(gdb) run
134	.
135	.
136	.
137
138In addition, if you are wanting to run a program described by a device
139tree you can `attach' to the simulation using (I assume that you have
140applied the attach patch):
141
142	$ cd psim-test/tree
143	$ powerpc-unknown-eabi-gdb
144	(gdb) target sim
145	(gdb) attach device-tree
146	(gdb) run
147
148Here GDB takes the programs initial state from the attached
149device-tree instead of forcing initialisation.
150
151
152    ----------------------------------------------------------------------
153
154
155PROFILING:
156
157
158PSIM includes a number of performance monitoring (profiling)
159facilities:
160
161	o	instruction frequency counting
162
163	o	execution unit modeling (records
164		effective usage of units).
165
166	o	instruction cache performance
167
168As discussed in the file INSTALL, each can be configured to individual
169requirements.
170
171
172	-i	Enable instruction counting.
173
174		The frequency of all instructions is tabulated.  In
175		addition (f configured) the hit/miss rate of the
176		instruction cache is output.
177
178
179	-I	Enable execution unit analysis.
180
181		In addition to counting basic instructions also model
182		the performance of the processors execution units
183
184
185	-m <processor>
186
187		Select the processor to be modelled.
188
189		For execution unit analysis specify the processor that
190		is to be analysed.  By default the 604 is modelled
191		however, support for other processors such as the
192		603 and 603e is included.
193
194The output from a performance run (on a P90) for the program
195psim-test/profile/bench is below.  In this run psim was fairly
196agressively configured (see the file INSTALL for compile time
197configuration).
198
199	CPU #1 executed     41,994 AND instructions.
200	CPU #1 executed    519,785 AND Immediate instructions.
201	CPU #1 executed    680,058 Add instructions.
202	CPU #1 executed     41,994 Add Extended instructions.
203	CPU #1 executed    921,916 Add Immediate instructions.
204	CPU #1 executed    221,199 Add Immediate Carrying instructions.
205	CPU #1 executed    943,823 Add Immediate Shifted instructions.
206	CPU #1 executed    471,909 Add to Zero Extended instructions.
207	CPU #1 executed    571,915 Branch instructions.
208	CPU #1 executed  1,992,403 Branch Conditional instructions.
209	CPU #1 executed    571,910 Branch Conditional to Link Register instructions.
210	CPU #1 executed    320,431 Compare instructions.
211	CPU #1 executed    471,911 Compare Immediate instructions.
212	CPU #1 executed    145,867 Compare Logical instructions.
213	CPU #1 executed    442,414 Compare Logical Immediate instructions.
214	CPU #1 executed          1 Condition Register XOR instruction.
215	CPU #1 executed    103,873 Divide Word instructions.
216	CPU #1 executed    104,275 Divide Word Unsigned instructions.
217	CPU #1 executed    132,510 Extend Sign Byte instructions.
218	CPU #1 executed    178,895 Extend Sign Half Word instructions.
219	CPU #1 executed    871,920 Load Word and Zero instructions.
220	CPU #1 executed     41,994 Move From Condition Register instructions.
221	CPU #1 executed    100,005 Move from Special Purpose Register instructions.
222	CPU #1 executed    100,002 Move to Special Purpose Register instructions.
223	CPU #1 executed    804,619 Multiply Low Word instructions.
224	CPU #1 executed    421,201 OR instructions.
225	CPU #1 executed    471,910 OR Immediate instructions.
226	CPU #1 executed  1,292,020 Rotate Left Word Immediate then AND with Mask instructions.
227	CPU #1 executed    663,613 Shift Left Word instructions.
228	CPU #1 executed  1,151,564 Shift Right Algebraic Word Immediate instructions.
229	CPU #1 executed    871,922 Store Word instructions.
230	CPU #1 executed    100,004 Store Word with Update instructions.
231	CPU #1 executed    887,804 Subtract From instructions.
232	CPU #1 executed     83,988 Subtract From Immediate Carrying instructions.
233	CPU #1 executed          1 System Call instruction.
234	CPU #1 executed    207,746 XOR instructions.
235	
236	CPU #1 executed 23,740,856 cycles.
237	CPU #1 executed 10,242,780 stalls waiting for data.
238	CPU #1 executed          1 stall waiting for a function unit.
239	CPU #1 executed          1 stall waiting for serialization.
240	CPU #1 executed  1,757,900 times a write-back slot was unavailable.
241	CPU #1 executed  1,088,135 branches.
242	CPU #1 executed  2,048,093 conditional branches fell through.
243	CPU #1 executed  1,088,135 successful branch predictions.
244	CPU #1 executed    904,268 unsuccessful branch predictions.
245	CPU #1 executed    742,557 branch if the condition is FALSE conditional branches.
246	CPU #1 executed  1,249,846 branch if the condition is TRUE conditional branches.
247	CPU #1 executed    571,910 branch always conditional branches.
248	CPU #1 executed  9,493,653 1st single cycle integer functional unit instructions.
249	CPU #1 executed  1,220,900 2nd single cycle integer functional unit instructions.
250	CPU #1 executed  1,254,768 multiple cycle integer functional unit instructions.
251	CPU #1 executed  1,843,846 load/store functional unit instructions.
252	CPU #1 executed  3,136,229 branch functional unit instructions.
253	CPU #1 executed 16,949,396 instructions that were accounted for in timing info.
254	CPU #1 executed    871,920 data reads.
255	CPU #1 executed    971,926 data writes.
256	CPU #1 executed        221 icache misses.
257	CPU #1 executed 16,949,396 instructions in total.
258	
259	Simulator speed was 250,731 instructions/second
260
261
262    ----------------------------------------------------------------------
263
264
265PSIM CONFIGURATION - THE DEVICE TREE
266
267
268Internally PSIM's configuration is controlled by a tree data
269structure.  This structure, created at run-time, intentionally
270resembles the device tree used by OpenBoot firmware to describe a
271machines hardware configuration.
272
273PSIM can either create its device tree using a builtin emulation or
274from one read in from a file.
275
276During startup, the device tree is created using the following steps:
277
278	o	Initial empty tree is created
279
280	o	Any tree entry options specified on the
281		command line are merged in (the -o <entry>
282		option is used).
283
284		It should be pointed out that most of the
285		command line options (eg -r, -e, -m, -t
286		are all just short hand for corresponding
287		-o options).
288
289	o	If the specified program is a device tree spec, that
290		is loaded.
291
292		If the specified program is a text file it is assumed
293		that that file contains a further specification of the
294		simulators device tree.  That tree is loaded and
295		merged with the current tree options.
296
297	o	The selected emulation fills out any remaining details.
298
299		By this stage the emulation environment that the program
300		needs will either be specified in the device tree
301		(through the -e option) or determined from the
302		characteristics of the binary.
303
304		The selected emulation will then fill out any missing
305		nodes in the device tree.
306
307Most importantly earlier additions to the tree are not overridden by
308later additions.  Thus, command line options override information
309found in the program file and both override any builtin emulation
310entries.
311
312The following is a summary of the most useful runtime configuration
313options:
314
315	-e <os-emul>
316	-o '/openprom/options/os-emul <os-emul>'
317
318		Run program using the <emulation> run-time
319		environment.
320
321	-r <ram-size>
322	-o '/openprom/options/oea-memory-size <ram-size>'
323
324		Set the size of the first bank of memory
325		(RAM from address 0 up).
326
327	-t print-device-tree
328	-o '/openprom/trace/print-device-tree 1'
329
330	-t dump-device-tree
331	-o '/openprom/trace/dump-device-tree 1'
332
333		Print out the device tree once it has been fully
334		populated. For dump-device-tree, exit simulator after
335		dumping the tree.
336
337		PSIM is able to reload the dumped device tree.
338
339		The format of the dumped tree is under development.
340
341	-o '/openprom/options/smp <N>'
342
343		Enable <N> processors for the simulation run.
344		See the directory psim-test/oea for an example.
345
346	-o '/openprom/options/alignment <N>'
347
348		Where <N> is 1 - nonstrict or 2 - strict.
349		Specify if the missaligned access are allowed
350		(non-strict) or result in an alignment exception
351		(strict).
352
353Devices (if included in the file device_table.c) can also be specified
354in a similar way.  For instance, to add a second serial port, a
355command like:
356
357	-o '/iobus@0x400000/console@0x000010'
358
359would create a `console' device at offset 0x10 within the `iobus' at
360memory address 0x400000.
361
362For more detailed information on device specifiers see the notes on
363the function dump_device_tree in the file device.c (found in the
364source code).
365
366
367    ----------------------------------------------------------------------
368
369
370BUILDING A BUG/OEA DEVELOPMENT ENVIRONMENT
371
372
373Background:
374
375
376Included in many PowerPC systems is Motorola's BUG monitor.  This
377monitor includes, for client programs, a set of services that allow
378that program to interact with hardware devices such as the console using
379a simple system call interface.
380
381PSIM is able to emulate a number of the services (including the
382console IO calls).  If additional services are needed they can easily
383be added.
384
385Cygnus support's newlib library includes includes an interface to the
386MOTO BUG services.  The notes below discuss how I both built and run
387programs compiled using this library on PSIM.
388
389The only confusing part about building a development environment based
390around newlib/binutils/gcc is a chicken/egg problem with include
391files:
392		
393	For GCC to build, a fairly complete set of include
394	files must be installed but newlib won't install its
395	include files until it has been built with gcc ...
396
397I get around this by installing the problematic include files by hand.
398
399
400Preparation:
401
402
403The following files are needed:
404
405From your favorite FTP site, the sources to gas/ld and gcc - mine
406happens to be archie.au :
407
408	ftp://archie.au/gnu/binutils-2.6.tar.gz
409	ftp://archie.au/gnu/gcc-2.7.2.tar.gz
410
411From ftp://ftp.cygnus.com/pub/newlib the source code to a library:
412
413	ftp://ftp.cygnus.com/pub/newlib/newlib-1.7.0.tar.gz
414
415From ftp://ftp.ci.com.au/pub/psim some minor patches and updates to
416the above library:
417
418	ftp://ftp.ci.com.au/pub/psim/newlib-1.7.0+float+ppc-asm.tar.gz
419	ftp://ftp.ci.com.au/pub/psim/newlib-1.7.0+ppc-fix.diff.gz
420	ftp://ftp.ci.com.au/pub/psim/binutils-2.6+note.diff.gz
421
422In addition you'll need to decide where you will be installing the
423development environment.  You will notice that in the below I install
424things well away /usr/local instead installing everything under its
425own directory in /applications.
426
427
428Method:
429
430
431These notes are based on an installation performed on a Sun-OS-4/SPARC
432host.  For other hosts and other configurations, the below should be
433considered as a guideline only.
434
435
436 	o	Sanity check
437
438		$ cd .../scratch	# your scratch directory
439		$ ls -1
440		binutils-2.6.tar.gz
441		binutils-2.6+note.diff.gz
442		gcc-2.7.2,tar.gz
443		newlib-1.7.0+float+ppc-asm.tar.gz
444		newlib-1.7.0+ppc-fix.diff.gz
445		newlib-1.7.0.tar.gz
446
447
448	o	Unpack/build/install binutils
449
450		This is done first so that there is a gas/ld ready
451		for the building of GCC and NEWLIB.
452
453		$ cd .../scratch
454		$ gunzip < binutils-2.6.tar.gz | tar xf -
455		$ cd binutils-2.6
456
457		Optionally apply the note patch
458
459		$ gunzip ../binutils-2.6+note.diff.gz | patch
460
461		Then continue with the build
462
463		$ ./configure --target=powerpc-unknown-eabi \
464                              --prefix=/applications/psim
465		$ make
466		$ make install
467		$ cd ..
468		$ rm -rf binutils-2.6
469
470		This also creates much of the installation directory
471		tree.
472
473
474	o	Unpack newlib, install the include files so that they
475		are ready for GCC's build.
476
477		$ cd .../scratch
478		$ gunzip < newlib-1.7.0.tar.gz | tar xf -
479
480		New lib-1.7.0 had a few minor bugs (fixed in current):
481		the header files float.h and ppc-asm.h were missing;
482		the configure and Makefile's for the rs6000 (ppc) directory
483		contained typos:
484
485		$ cd .../scratch
486		$ cd newlib-1.7.0
487		$ gunzip < ../newlib-1.7.0+float+ppc-asm.tar.gz | tar xvf -
488		$ gunzip < ../newlib-1.7.0+ppc-fix.diff.gz | patch -p1
489		
490		Finally copy the include files to where GCC will see them:
491
492		$ cd .../scratch
493		$ cd newlib-1.7.0/newlib/libc
494		$ tar cf - include | \
495                   ( cd /applications/psim/powerpc-unknown-eabi && tar xf - )
496
497
498	o	Unpack/build gcc
499
500		$ cd .../scratch
501		$ gunzip < gcc-2.7.2,tar.gz | tar xf -
502		$ cd gcc-2.7.2
503		$ ./configure --target=powerpc-unknown-eabi \
504                              --prefix=/applications/psim
505		$ make
506		$ make install
507		$ cd ..
508		$ rm -rf gcc-2.7.2
509
510		Gcc likes to install its own dummy version of float that
511		just returns an error.
512
513		$ more /applications/psim/lib/gcc-lib/powerpc-unknown-eabi/2.7.2/include/float.h
514		$ rm /applications/psim/lib/gcc-lib/powerpc-unknown-eabi/2.7.2/include/float.h
515
516
517	o	Finish building/installing newlib
518
519		$ cd .../scratch
520		$ cd newlib-1.7.0
521		$ ./configure --target=powerpc-unknown-eabi \
522                              --prefix=/applications/psim
523
524		Your path will need to include the recently installed
525		gas/gcc when building.  Either add it to your path or
526		use:
527
528		$ PATH=/applications/psim/bin:$PATH make
529		$ PATH=/applications/psim/bin:$PATH make install
530
531
532	o	Finally, test out the build
533
534		$ cat hello.c
535		main()
536		{
537		  printf("hello world\n");
538		}
539
540		The binary is linked with an entry point less than 0x100000
541		(1mb) so that psim will recognize the binary as needing
542		the BUG/OEA instead of the BSD/UEA runtime environment.
543
544		$ powerpc-unknown-eabi-gcc -v -o hello \
545                    -Wl,-Ttext,0x4000,-Tdata,0x10000 \
546                    /applications/psim/powerpc-unknown-eabi/lib/mvme-crt0.o \
547                    hello.c \
548                    -lc -lmvme
549		$ powerpc-unknown-eabi-objdump -h hello
550		$ powerpc-unknown-eabi-run hello
551
552		It is also possible to force psim to use a specific
553		run-time environment using the -e option vis:
554
555		$ powerpc-unknown-eabi-run -e bug hello
556
557
558
559
560    ----------------------------------------------------------------------
561
562
563BUILDING A BSD/UEA DEVELOPMENT ENVIRONMENT
564
565
566Background:
567
568
569For a UEA to be useful it needs a supporting run-time environment.
570PSIM implements a runtime environment based on the NetBSD system call
571interface.
572
573More than any thing, this user level emulation was the first
574implemented because I happened to have the NetBSD source code lying
575around.
576
577
578Preparation:
579
580
581This requires the NetBSD-1.1 source tree online.  It can either be
582obtained vi ftp:
583
584	try http://www.netbsd.org  or  ftp://ftp.netbsd.org
585
586Alternatively obtain one of the NetBSD cdrom's.  Patches to this source
587tree that fill out much of the PowerPC code are available in:
588
589	ftp://ftp.ci.com.au/pub/clayton
590
591Fetch everything in that directory - diffs, tar archives and scripts.
592In addition patches to the bintuils and gcc are in:
593
594	ftp://ftp.ci.com.au/pub/psim/binutils-2.6+note.diff.gz
595	ftp://ftp.ci.com.au/pub/psim/gcc-2.7.2+sys-types.diff.gz
596
597while the compiler (gcc) and assember (binutils) can be found at your
598favorite gnu ftp site.  I used versions:
599
600	gcc-2.7.2.tar.gz
601	binutils-2.6.tar.gz
602
603
604
605
606Method:
607
608
609These notes are based on an installation performed on a Solaris2/x86
610host.  For other hosts and other configurations, the below should be
611considered as a guideline only.
612
613
614	o	Sanity check
615
616		I assume that you have already obtained the NetBSD-1.1 source
617		code and unpacked it into the directory bsd-src.  While the
618		full NetBSD source tree may not be needed, things are easier
619		if it is all online.
620
621		$ cd .../scratch
622		$ ls -1
623		binutils-2.6.tar.gz
624		binutils-2.6+note.diff.gz
625		clayton-include-960203.diff.gz
626		clayton-lib-960203.diff.gz
627		clayton-lib-960203.tar.gz
628		clayton-sys-960203.diff.gz
629		clayton-sys-960203.tar.gz
630		clayton.chown.sh
631		clayton.install.sh
632		clayton.lorder.sh
633		clayton.make.sh
634		gcc-2.7.2.tar.gz
635		gcc-2.7.2+sys-types.diff.gz
636		make.tar.gz
637		make.diff.gz
638
639
640	o	Prepare the destination directory ready for installation.
641
642		Firstly create many of the needed directories (some are
643		created automatically later):
644
645		$ for d in \
646                    /applications/psim \
647                    /applications/psim/bsd-root \
648                    /applications/psim/bsd-root/usr \
649                    /applications/psim/bsd-root/usr/share \
650                    /applications/psim/bsd-root/usr/share/doc \
651                    /applications/psim/bsd-root/usr/share/doc/psd \
652                    /applications/psim/bsd-root/usr/share/doc/psd/19.curses \
653                    /applications/psim/bsd-root/usr/include \
654                    /applications/psim/bsd-root/usr/lib \
655                    /applications/psim/powerpc-unknown-eabi \
656                    /applications/psim/powerpc-unknown-eabi/bin \
657                    ; \
658                  do test -d $d || mkdir $d ; done
659
660		Next, link the BSD and GNU include directories together.
661		GCC expects include files to be in one location while the
662		bsd install expects them in a second.  The link is in
663		the direction below because bsd's install also insists on
664		a directory (not a link) for its install destination.
665
666		$ rm -rf /applications/psim/powerpc-unknown-eabi/include
667		$ ln -s /applications/psim/bsd-root/usr/include \
668                    /applications/psim/powerpc-unknown-eabi/include
669
670		$ ls -l /applications/psim/powerpc-unknown-eabi/include
671		lrwxr-xr-x  1 cagney  wheel  39 Mar 21 18:09
672		/applications/psim/powerpc-unknown-eabi/include
673		-> /applications/psim/bsd-root/usr/include
674
675
676	o	Build/install Berkeley make
677
678		The tar archive make.tar.gz contains a recent snapshot
679		of bmake from the NetBSD source tree.  The notes below
680		describe how to build/install it.  If you have access
681		to an even more recent version of bmake, use that.
682
683		Unpack the source code:
684
685		$ cd .../scratch
686		$ gunzip < make.tar.gz | tar xf -
687		$ cd make
688
689		Apply the patch in make.diff.gz that fixes a minor
690		problem with a build under Solaris (by now it should
691		be fixed in the NetBSD-current source tree).
692
693		$ gunzip < ../make.diff.gz | more
694		$ gunzip < ../make.diff.gz | patch
695
696		Build it
697
698		$ make -f Makefile.boot 'CC=gcc -g -DPOSIX'
699
700		With bmake built, install it into the target specific bin
701		directory:
702
703		$ cp bmake /applications/psim/powerpc-unknown-eabi/bin/make
704		$ cd ..
705		$ rm -rf make
706
707
708	o	Set up a number of wrapper scripts for bmake so that it works.
709
710		In addition to needing BSD make the build process assumes
711		a number of BSD specific commands.  To get around this
712		several wrapper scripts are available.
713
714		powerpc-unknown-eabi-make (clayton.make.sh)
715
716			Front end to Berkeley make setting it up for a
717			cross compilation
718
719			$ cp clayton.make.sh \
720                          /applications/psim/bin/powerpc-unknown-eabi-make
721			$ chmod a+x \
722                          /applications/psim/bin/powerpc-unknown-eabi-make
723
724		chown (clayton.chown.sh)
725
726			Wrapper that does not do any thing.
727			Avoids the need to be root when installing.
728
729			$ cp clayton.chown.sh \
730                          /applications/psim/powerpc-unknown-eabi/bin/chown
731			$ chmod a+x \
732                          /applications/psim/powerpc-unknown-eabi/bin/chown
733
734		install (clayton.install.sh)
735
736			Wrapper to strip away a number of bsd specific install
737			arguments.
738
739			$ cp clayton.install.sh \
740                          /applications/psim/powerpc-unknown-eabi/bin/install
741			$ chmod a+x \
742                          /applications/psim/powerpc-unknown-eabi/bin/install
743
744		lorder (clayton.lorder.sh)
745
746			Tweaked lorder script that will use nm etc from
747			binutils.
748
749			$ cp clayton.lorder.sh \
750                          /applications/psim/powerpc-unknown-eabi/bin/lorder
751			$ chmod a+x \
752                          /applications/psim/powerpc-unknown-eabi/bin/lorder
753
754
755		printf (?)
756
757			Some operating systems don't include the program
758			printf.  If you host doesn't have one, then a
759			good source is the gnu sh-utils version.
760
761			Again, if that program is missing, then I suggest
762			installing it onto the powerpc specific program
763			directory:
764
765			/applications/psim/powerpc-unknown-eabi/bin
766
767
768	o	Unpack the bsd source code (if you haven't already)
769
770		If you're short on disk space (like me) just unpack:
771
772			sys, lib, share/mk, include, usr.sbin/config,
773			usr.sbin/dbsym, gnu/lib/libg++/g++-include,
774			usr.bin/lex
775
776		Otherwize, assuming you have a CD-DRIVE:
777
778		$ cd .../scratch
779		$ mkdir bsd-src
780		$ cd bsd-src
781		$ for d in /cdrom/bsdisc_12_95_disc2/NetBSD-1.1/source/*11
782                  do
783                    echo $d
784                    cat $d/*.?? | gunzip | tar xf -
785                  done
786
787		Flatten the directory structure a little.
788
789		$ mv usr/src/* .
790		$ rmdir usr/src usr
791		$ cd ..
792
793
794	o	Apply the clayton (PowerPC) patches to your constructed
795		tree.
796
797		$ cd .../scratch
798		$ cd bsd-src
799		
800		Diffs are applied using something like:
801
802		$ gunzip < ../clayton-include-960312.diff.gz | patch -p1
803		$ gunzip < ../clayton-lib-960203.diff.gz | patch -p1
804		$ gunzip < ../clayton-sys-960203.diff.gz | patch -p1
805
806		The patch to sys/dev/pci/ncr.c.rej might fail.
807
808		The tar archives have a different problem, you need
809		to remove the `src' prefix.  I used
810
811		$ ln -s . src
812		$ gunzip < ../clayton-lib-960203.tar.gz | tar xvf -
813		$ gunzip < ../clayton-sys-960203.tar.gz | tar xvf -
814
815		So that src/xxx unpacked into ./xxx
816
817		$ cd ..
818
819
820	o	install Berkeley make's include (mk) files.
821
822		$ cd .../scrath
823		$ cd bsd-src/share
824		$ tar cf - mk | ( cd /applications/psim/bsd-root/usr/share \
825                     && tar xvf - )
826		$ cd ../..
827
828
829	o	Install the include files
830
831		$ cd .../scratch
832		$ cd bsd-src/include
833		$ powerpc-unknown-eabi-make install
834		$ cd ../..
835		
836
837	o	Install a few other include files.
838
839		As discussed above in the section on building libnew,
840		the build process can have chicken/egg problems.  In the
841		case of BSD's libc, it wants to use several include files
842		(from the installed include directory) before they are
843		installed.  Just copy them in as seen below:
844
845		$ cd .../scratch
846		$ cd bsd-src
847		$ cp gnu/lib/libg++/g++-include/values.h \
848                    /applications/psim/powerpc-unknown-eabi/include
849		$ cp lib/libcurses/curses.h \
850                    /applications/psim/powerpc-unknown-eabi/include
851		$ cd ..
852
853
854	o	Unpack/patch/build/install BINUTILS
855
856		$ cd .../scratch
857		$ gunzip < binutils-2.6.tar.gz | tar xf -
858
859		gas (bfd) 2.6 didn't support the reading and writing of
860		note sections.  The patch binutils-2.6+note.diff.gz
861		adds support for this.  PowerPC/ELF boot files being loaded
862		by OpenBoot ROM's should contain a PowerPC note section.
863
864		$ cd .../scratch
865		$ cd binutils-2.6/bfd
866		$ gunzip < ../../binutils-2.6+note.diff.gz | more
867		$ gunzip < ../../binutils-2.6+note.diff.gz | patch
868		$ cd ../..
869
870		Then continue with the build
871
872		$ cd .../scratch
873		$ cd binutils-2.6
874		$ ./configure --target=powerpc-unknown-eabi \
875                              --prefix=/applications/psim
876		$ make
877		$ make install
878		$ cd ..
879		$ rm -rf binutils-2.6
880
881		This has the intended side effect of partially populating
882		the psim directory tree which makes follow on steps easier.
883
884
885	o	Unpack/patch/build/install GCC
886
887		$ cd .../scratch
888		$ gunzip < gcc-2.7.2.tar.gz | tar xf -
889		$ cd gcc-2.7.2
890
891		GCC-2.7.2 and the BSD include files have a conflicting type
892		declaration.  The patch below gets around this problem
893		(it may still be applicable to more recent versions of
894		GCC):
895
896		$ gunzip < ../gcc-2.7.2+sys-types.diff.gz | more
897		$ gunzip < ../gcc-2.7.2+sys-types.diff.gz | patch
898
899		If your version of GCC includes the file ginclude/ppc-asm.h
900		then you should install that header file into the directory:
901		/applications/psim/powerpc-unknown-eabi/include.  More
902		recent versions of GCC expect this file to be installed:
903
904		$ test -r ginclude/ppc-asm.h \
905                  && cp ginclude/ppc-asm.h \
906                     /applications/psim/powerpc-unknown-eabi/include
907
908		Other than that, assuming the include files installed
909		okay, the rest should be fine ....
910
911		$ ./configure --target=powerpc-unknown-eabi \
912                              --prefix=/applications/psim
913		$ make CC=gcc
914		$ make CC=gcc install
915		$ cd ..
916		$ rm -rf gcc-2.7.2
917
918
919	o	Build/install the Berkeley library:
920
921		$ cd .../scratch
922		$ cd bsd-src/lib
923		$ powerpc-unknown-eabi-make
924		$ powerpc-unknown-eabi-make install
925		$ cd ../..
926
927		If you encounter problems check the following (each
928		discussed above):
929
930			o	GCC and BSD have a common include
931				directory
932
933			o	all the missing include files installed
934
935			o	all the wrapper programs installed
936
937
938	o	Build/run a simple BSD program
939
940		$ cd .../scratch
941		$ cd bsd-src/usr.bin/printenv
942		$ powerpc-unknown-eabi-make
943		$ powerpc-unknown-eabi-run printenv
944		.
945		.
946		.
947
948
949    ----------------------------------------------------------------------
950