Home | History | Annotate | Line # | Download | only in ppc
      1 
      2 		PSIM - model the PowerPC environment
      3 
      4     Copyright (C) 1994-1996, Andrew Cagney <cagney (a] 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 
     24 RUNNING PSIM:
     25 
     26 
     27 The compressed tar archive psim-test available from:
     28 
     29 	ftp://ftp.ci.com.au/pub/psim/psim-test-1.0.1.tar.gz
     30 or	ftp://cambridge.cygnus.com/pub/psim/psim-test-1.0.1.tar.gz
     31 
     32 contains a number of pre-built programs for running under PSIM.  Each
     33 pre-built binary is built both big and little endian.  The suffixes
     34 .be/.le (executables) .bo/.lo (object files) and .ba/.la (libraries)
     35 are used.
     36 
     37 
     38 To run one of these programs, use:
     39 
     40 	powerpc-unknown-eabi-run <image>
     41 
     42 for instance:
     43 
     44 	powerpc-unknown-eabi-run psim-test/uea/envp
     45 
     46 The program envp prints out your shells environment - very useful!
     47 More generally psim is run as (this is part of the output from the -h
     48 option):
     49 
     50         psim [ <psim-option> ... ] <image> [ <image-arg> ... ]
     51 
     52 Where
     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 
     72 The 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 
     98 The `-H' option gives a long usage output.  This includes a complete
     99 list of all the pre-configured devices.
    100 
    101 
    102     ----------------------------------------------------------------------
    103 
    104 
    105 RUNNING GDB:
    106 
    107 
    108 If you built PSIM with gdb then the following is a quick start
    109 tutorial.
    110 
    111 At present GDB, if configured big-endian (say) unlike PSIM, does not
    112 support the debugging of little endian binaries.  If you find that
    113 your program won't run at all, make certain that GDB and your
    114 program's endianness match.
    115 
    116 
    117 The most important thing is that before you can run the simulator you
    118 must enable it.  For the simulator, gdb is started like any program:
    119 
    120 	$ powerpc-unknown-eabi-gdb psim-test/uea/envp.be
    121 
    122 Next the simulator is enabled.  The command `target sim' accepts the
    123 same options as can be specified on the PSIM command line.
    124 
    125 	(gdb) target sim
    126 
    127 To trace the communication between psim and gdb specify `target sim -t
    128 gdb'.  Once enabled, the binary needs to be loaded, any breakpoints of
    129 interest set, and the program run:
    130 
    131 	(gdb) load
    132 	(gdb) break main
    133 	(gdb) run
    134 	.
    135 	.
    136 	.
    137 
    138 In addition, if you are wanting to run a program described by a device
    139 tree you can `attach' to the simulation using (I assume that you have
    140 applied 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 
    148 Here GDB takes the programs initial state from the attached
    149 device-tree instead of forcing initialisation.
    150 
    151 
    152     ----------------------------------------------------------------------
    153 
    154 
    155 PROFILING:
    156 
    157 
    158 PSIM includes a number of performance monitoring (profiling)
    159 facilities:
    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 
    168 As discussed in the file INSTALL, each can be configured to individual
    169 requirements.
    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 
    194 The output from a performance run (on a P90) for the program
    195 psim-test/profile/bench is below.  In this run psim was fairly
    196 aggressively configured (see the file INSTALL for compile time
    197 configuration).
    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 
    265 PSIM CONFIGURATION - THE DEVICE TREE
    266 
    267 
    268 Internally PSIM's configuration is controlled by a tree data
    269 structure.  This structure, created at run-time, intentionally
    270 resembles the device tree used by OpenBoot firmware to describe a
    271 machines hardware configuration.
    272 
    273 PSIM can either create its device tree using a builtin emulation or
    274 from one read in from a file.
    275 
    276 During 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 
    307 Most importantly earlier additions to the tree are not overridden by
    308 later additions.  Thus, command line options override information
    309 found in the program file and both override any builtin emulation
    310 entries.
    311 
    312 The following is a summary of the most useful runtime configuration
    313 options:
    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 
    353 Devices (if included in the file device_table.c) can also be specified
    354 in a similar way.  For instance, to add a second serial port, a
    355 command like:
    356 
    357 	-o '/iobus@0x400000/console@0x000010'
    358 
    359 would create a `console' device at offset 0x10 within the `iobus' at
    360 memory address 0x400000.
    361 
    362 For more detailed information on device specifiers see the notes on
    363 the function dump_device_tree in the file device.c (found in the
    364 source code).
    365 
    366 
    367     ----------------------------------------------------------------------
    368 
    369 
    370 BUILDING A BUG/OEA DEVELOPMENT ENVIRONMENT
    371 
    372 
    373 Background:
    374 
    375 
    376 Included in many PowerPC systems is Motorola's BUG monitor.  This
    377 monitor includes, for client programs, a set of services that allow
    378 that program to interact with hardware devices such as the console using
    379 a simple system call interface.
    380 
    381 PSIM is able to emulate a number of the services (including the
    382 console IO calls).  If additional services are needed they can easily
    383 be added.
    384 
    385 Cygnus support's newlib library includes includes an interface to the
    386 MOTO BUG services.  The notes below discuss how I both built and run
    387 programs compiled using this library on PSIM.
    388 
    389 The only confusing part about building a development environment based
    390 around newlib/binutils/gcc is a chicken/egg problem with include
    391 files:
    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 
    397 I get around this by installing the problematic include files by hand.
    398 
    399 
    400 Preparation:
    401 
    402 
    403 The following files are needed:
    404 
    405 From your favorite FTP site, the sources to gas/ld and gcc - mine
    406 happens 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 
    411 From 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 
    415 From ftp://ftp.ci.com.au/pub/psim some minor patches and updates to
    416 the 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 
    422 In addition you'll need to decide where you will be installing the
    423 development environment.  You will notice that in the below I install
    424 things well away /usr/local instead installing everything under its
    425 own directory in /applications.
    426 
    427 
    428 Method:
    429 
    430 
    431 These notes are based on an installation performed on a Sun-OS-4/SPARC
    432 host.  For other hosts and other configurations, the below should be
    433 considered 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 
    563 BUILDING A BSD/UEA DEVELOPMENT ENVIRONMENT
    564 
    565 
    566 Background:
    567 
    568 
    569 For a UEA to be useful it needs a supporting run-time environment.
    570 PSIM implements a runtime environment based on the NetBSD system call
    571 interface.
    572 
    573 More than any thing, this user level emulation was the first
    574 implemented because I happened to have the NetBSD source code lying
    575 around.
    576 
    577 
    578 Preparation:
    579 
    580 
    581 This requires the NetBSD-1.1 source tree online.  It can either be
    582 obtained vi ftp:
    583 
    584 	try http://www.netbsd.org  or  ftp://ftp.netbsd.org
    585 
    586 Alternatively obtain one of the NetBSD cdrom's.  Patches to this source
    587 tree that fill out much of the PowerPC code are available in:
    588 
    589 	ftp://ftp.ci.com.au/pub/clayton
    590 
    591 Fetch everything in that directory - diffs, tar archives and scripts.
    592 In 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 
    597 while the compiler (gcc) and assember (binutils) can be found at your
    598 favorite gnu ftp site.  I used versions:
    599 
    600 	gcc-2.7.2.tar.gz
    601 	binutils-2.6.tar.gz
    602 
    603 
    604 
    605 
    606 Method:
    607 
    608 
    609 These notes are based on an installation performed on a Solaris2/x86
    610 host.  For other hosts and other configurations, the below should be
    611 considered 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