diff options
Diffstat (limited to 'sim/ppc/RUN')
-rw-r--r-- | sim/ppc/RUN | 949 |
1 files changed, 949 insertions, 0 deletions
diff --git a/sim/ppc/RUN b/sim/ppc/RUN new file mode 100644 index 0000000..6c3cfef --- /dev/null +++ b/sim/ppc/RUN @@ -0,0 +1,949 @@ + + PSIM - model the PowerPC environment + + Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au>. + + ---------------------------------------------------------------------- + + Running PSIM + + This file describes how to run the program PSIM. + + o Walk through a number of examples from the + pre-built tar archive psim-test. + + o Looks at the device tree used by PSIM. + + o Notes on building a programmer environment to + use with PSIM (BSD/UEA and BUG/OEA) + + + ---------------------------------------------------------------------- + + +RUNNING PSIM: + + +The compressed tar archive psim-test available from: + + ftp://ftp.ci.com.au/pub/psim/psim-test-1.0.1.tar.gz +or ftp://cambridge.cygnus.com/pub/psim/psim-test-1.0.1.tar.gz + +contains a number of pre-built programs for running under PSIM. Each +pre-built binary is built both big and little endian. The suffixes +.be/.le (executables) .bo/.lo (object files) and .ba/.la (libraries) +are used. + + +To run one of these programs, use: + + powerpc-unknown-eabi-run <image> + +for instance: + + powerpc-unknown-eabi-run psim-test/uea/envp + +The program envp prints out your shells environment - very useful! +More generally psim is run as (this is part of the output from the -h +option): + + psim [ <psim-option> ... ] <image> [ <image-arg> ... ] + +Where + + <image> Name of the PowerPC program to run. + This can either be a PowerPC binary or + a text file containing a device tree + specification. + PSIM will attempt to determine from the + specified <image> the intended emulation + environment. + If PSIM gets it wrong, the emulation + environment can be specified using the + `-e' option (described below). + + <image-arg> Argument to be passed to <image> + These arguments will be passed to + <image> (as standard C argv, argc) + when <image> is started. + + <psim-option> See below + +The following are valid <psim-option>s: + + -m <model> Specify the processor to model (604) + Selects the processor to use when + modeling execution units. Includes: + 604, 603 and 603e + + -e <os-emul> specify an OS or platform to model + Can be any of the following: + bug - OEA + MOTO BUG ROM calls + netbsd - UEA + NetBSD system calls + chirp - OEA + a few OpenBoot calls + + -i Print instruction counting statistics + + -I Print execution unit statistics + + -r <size> Set RAM size in bytes (OEA environments) + + -t [!]<trace> Enable (disable) <trace> option + + -o <spec> add device <spec> to the device tree + + -h -? -H give more detailed usage + + +The `-H' option gives a long usage output. This includes a complete +list of all the pre-configured devices. + + + ---------------------------------------------------------------------- + + +RUNNING GDB: + + +If you built PSIM with gdb then the following is a quick start +tutorial. + +At present GDB, if configured big-endian (say) unlike PSIM, does not +support the debugging of little endian binaries. If you find that +your program won't run at all, make certain that GDB and your +program's endianness match. + + +The most important thing is that before you can run the simulator you +must enable it. For the simulator, gdb is started like any program: + + $ powerpc-unknown-eabi-gdb psim-test/uea/envp.be + +Next the simulator is enabled. The command `target sim' accepts the +same options as can be specified on the PSIM command line. + + (gdb) target sim + +To trace the communication between psim and gdb specify `target sim -t +gdb'. Once enabled, the binary needs to be loaded, any breakpoints of +interest set, and the program run: + + (gdb) load + (gdb) break main + (gdb) run + . + . + . + +In addition, if you are wanting to run a program described by a device +tree you can `attach' to the simulation using (I assume that you have +applied the attach patch): + + $ cd psim-test/tree + $ powerpc-unknown-eabi-gdb + (gdb) target sim + (gdb) attach device-tree + (gdb) run + +Here GDB takes the programs initial state from the attached +device-tree instead of forcing initialisation. + + + ---------------------------------------------------------------------- + + +PROFILING: + + +PSIM includes a number of performance monitoring (profiling) +facilities: + + o instruction frequency counting + + o execution unit modeling (records + effective usage of units). + + o instruction cache performance + +As discussed in the file INSTALL, each can be configured to individual +requirements. + + + -i Enable instruction counting. + + The frequency of all instructions is tabulated. In + addition (f configured) the hit/miss rate of the + instruction cache is output. + + + -I Enable execution unit analysis. + + In addition to counting basic instructions also model + the performance of the processors execution units + + + -m <processor> + + Select the processor to be modelled. + + For execution unit analysis specify the processor that + is to be analysed. By default the 604 is modelled + however, support for other processors such as the + 603 and 603e is included. + +The output from a performance run (on a P90) for the program +psim-test/profile/bench is below. In this run psim was fairly +agressively configured (see the file INSTALL for compile time +configuration). + + CPU #1 executed 41,994 AND instructions. + CPU #1 executed 519,785 AND Immediate instructions. + CPU #1 executed 680,058 Add instructions. + CPU #1 executed 41,994 Add Extended instructions. + CPU #1 executed 921,916 Add Immediate instructions. + CPU #1 executed 221,199 Add Immediate Carrying instructions. + CPU #1 executed 943,823 Add Immediate Shifted instructions. + CPU #1 executed 471,909 Add to Zero Extended instructions. + CPU #1 executed 571,915 Branch instructions. + CPU #1 executed 1,992,403 Branch Conditional instructions. + CPU #1 executed 571,910 Branch Conditional to Link Register instructions. + CPU #1 executed 320,431 Compare instructions. + CPU #1 executed 471,911 Compare Immediate instructions. + CPU #1 executed 145,867 Compare Logical instructions. + CPU #1 executed 442,414 Compare Logical Immediate instructions. + CPU #1 executed 1 Condition Register XOR instruction. + CPU #1 executed 103,873 Divide Word instructions. + CPU #1 executed 104,275 Divide Word Unsigned instructions. + CPU #1 executed 132,510 Extend Sign Byte instructions. + CPU #1 executed 178,895 Extend Sign Half Word instructions. + CPU #1 executed 871,920 Load Word and Zero instructions. + CPU #1 executed 41,994 Move From Condition Register instructions. + CPU #1 executed 100,005 Move from Special Purpose Register instructions. + CPU #1 executed 100,002 Move to Special Purpose Register instructions. + CPU #1 executed 804,619 Multiply Low Word instructions. + CPU #1 executed 421,201 OR instructions. + CPU #1 executed 471,910 OR Immediate instructions. + CPU #1 executed 1,292,020 Rotate Left Word Immediate then AND with Mask instructions. + CPU #1 executed 663,613 Shift Left Word instructions. + CPU #1 executed 1,151,564 Shift Right Algebraic Word Immediate instructions. + CPU #1 executed 871,922 Store Word instructions. + CPU #1 executed 100,004 Store Word with Update instructions. + CPU #1 executed 887,804 Subtract From instructions. + CPU #1 executed 83,988 Subtract From Immediate Carrying instructions. + CPU #1 executed 1 System Call instruction. + CPU #1 executed 207,746 XOR instructions. + + CPU #1 executed 23,740,856 cycles. + CPU #1 executed 10,242,780 stalls waiting for data. + CPU #1 executed 1 stall waiting for a function unit. + CPU #1 executed 1 stall waiting for serialization. + CPU #1 executed 1,757,900 times a write-back slot was unavailable. + CPU #1 executed 1,088,135 branches. + CPU #1 executed 2,048,093 conditional branches fell through. + CPU #1 executed 1,088,135 successful branch predictions. + CPU #1 executed 904,268 unsuccessful branch predictions. + CPU #1 executed 742,557 branch if the condition is FALSE conditional branches. + CPU #1 executed 1,249,846 branch if the condition is TRUE conditional branches. + CPU #1 executed 571,910 branch always conditional branches. + CPU #1 executed 9,493,653 1st single cycle integer functional unit instructions. + CPU #1 executed 1,220,900 2nd single cycle integer functional unit instructions. + CPU #1 executed 1,254,768 multiple cycle integer functional unit instructions. + CPU #1 executed 1,843,846 load/store functional unit instructions. + CPU #1 executed 3,136,229 branch functional unit instructions. + CPU #1 executed 16,949,396 instructions that were accounted for in timing info. + CPU #1 executed 871,920 data reads. + CPU #1 executed 971,926 data writes. + CPU #1 executed 221 icache misses. + CPU #1 executed 16,949,396 instructions in total. + + Simulator speed was 250,731 instructions/second + + + ---------------------------------------------------------------------- + + +PSIM CONFIGURATION - THE DEVICE TREE + + +Internally PSIM's configuration is controlled by a tree data +structure. This structure, created at run-time, intentionally +resembles the device tree used by OpenBoot firmware to describe a +machines hardware configuration. + +PSIM can either create its device tree using a builtin emulation or +from one read in from a file. + +During startup, the device tree is created using the following steps: + + o Initial empty tree is created + + o Any tree entry options specified on the + command line are merged in (the -o <entry> + option is used). + + It should be pointed out that most of the + command line options (eg -r, -e, -m, -t + are all just short hand for corresponding + -o options). + + o If the specified program is a device tree spec, that + is loaded. + + If the specified program is a text file it is assumed + that that file contains a further specification of the + simulators device tree. That tree is loaded and + merged with the current tree options. + + o The selected emulation fills out any remaining details. + + By this stage the emulation environment that the program + needs will either be specified in the device tree + (through the -e option) or determined from the + characteristics of the binary. + + The selected emulation will then fill out any missing + nodes in the device tree. + +Most importantly earlier additions to the tree are not overridden by +later additions. Thus, command line options override information +found in the program file and both override any builtin emulation +entries. + +The following is a summary of the most useful runtime configuration +options: + + -e <os-emul> + -o '/openprom/options/os-emul <os-emul>' + + Run program using the <emulation> run-time + environment. + + -r <ram-size> + -o '/openprom/options/oea-memory-size <ram-size>' + + Set the size of the first bank of memory + (RAM from address 0 up). + + -t print-device-tree + -o '/openprom/trace/print-device-tree 1' + + -t dump-device-tree + -o '/openprom/trace/dump-device-tree 1' + + Print out the device tree once it has been fully + populated. For dump-device-tree, exit simulator after + dumping the tree. + + PSIM is able to reload the dumped device tree. + + The format of the dumped tree is under development. + + -o '/openprom/options/smp <N>' + + Enable <N> processors for the simulation run. + See the directory psim-test/oea for an example. + + -o '/openprom/options/alignment <N>' + + Where <N> is 1 - nonstrict or 2 - strict. + Specify if the missaligned access are allowed + (non-strict) or result in an alignment exception + (strict). + +Devices (if included in the file device_table.c) can also be specified +in a similar way. For instance, to add a second serial port, a +command like: + + -o '/iobus@0x400000/console@0x000010' + +would create a `console' device at offset 0x10 within the `iobus' at +memory address 0x400000. + +For more detailed information on device specifiers see the notes on +the function dump_device_tree in the file device.c (found in the +source code). + + + ---------------------------------------------------------------------- + + +BUILDING A BUG/OEA DEVELOPMENT ENVIRONMENT + + +Background: + + +Included in many PowerPC systems is Motorola's BUG monitor. This +monitor includes, for client programs, a set of services that allow +that program to interact with hardware devices such as the console using +a simple system call interface. + +PSIM is able to emulate a number of the services (including the +console IO calls). If additional services are needed they can easily +be added. + +Cygnus support's newlib library includes includes an interface to the +MOTO BUG services. The notes below discuss how I both built and run +programs compiled using this library on PSIM. + +The only confusing part about building a development environment based +around newlib/binutils/gcc is a chicken/egg problem with include +files: + + For GCC to build, a fairly complete set of include + files must be installed but newlib won't install its + include files until it has been built with gcc ... + +I get around this by installing the problematic include files by hand. + + +Preparation: + + +The following files are needed: + +From your favorite FTP site, the sources to gas/ld and gcc - mine +happens to be archie.au : + + ftp://archie.au/gnu/binutils-2.6.tar.gz + ftp://archie.au/gnu/gcc-2.7.2.tar.gz + +From ftp://ftp.cygnus.com/pub/newlib the source code to a library: + + ftp://ftp.cygnus.com/pub/newlib/newlib-1.7.0.tar.gz + +From ftp://ftp.ci.com.au/pub/psim some minor patches and updates to +the above library: + + ftp://ftp.ci.com.au/pub/psim/newlib-1.7.0+float+ppc-asm.tar.gz + ftp://ftp.ci.com.au/pub/psim/newlib-1.7.0+ppc-fix.diff.gz + ftp://ftp.ci.com.au/pub/psim/binutils-2.6+note.diff.gz + +In addition you'll need to decide where you will be installing the +development environment. You will notice that in the below I install +things well away /usr/local instead installing everything under its +own directory in /applications. + + +Method: + + +These notes are based on an installation performed on a Sun-OS-4/SPARC +host. For other hosts and other configurations, the below should be +considered as a guideline only. + + + o Sanity check + + $ cd .../scratch # your scratch directory + $ ls -1 + binutils-2.6.tar.gz + binutils-2.6+note.diff.gz + gcc-2.7.2,tar.gz + newlib-1.7.0+float+ppc-asm.tar.gz + newlib-1.7.0+ppc-fix.diff.gz + newlib-1.7.0.tar.gz + + + o Unpack/build/install binutils + + This is done first so that there is a gas/ld ready + for the building of GCC and NEWLIB. + + $ cd .../scratch + $ gunzip < binutils-2.6.tar.gz | tar xf - + $ cd binutils-2.6 + + Optionally apply the note patch + + $ gunzip ../binutils-2.6+note.diff.gz | patch + + Then continue with the build + + $ ./configure --target=powerpc-unknown-eabi \ + --prefix=/applications/psim + $ make + $ make install + $ cd .. + $ rm -rf binutils-2.6 + + This also creates much of the installation directory + tree. + + + o Unpack newlib, install the include files so that they + are ready for GCC's build. + + $ cd .../scratch + $ gunzip < newlib-1.7.0.tar.gz | tar xf - + + New lib-1.7.0 had a few minor bugs (fixed in current): + the header files float.h and ppc-asm.h were missing; + the configure and Makefile's for the rs6000 (ppc) directory + contained typos: + + $ cd .../scratch + $ cd newlib-1.7.0 + $ gunzip < ../newlib-1.7.0+float+ppc-asm.tar.gz | tar xvf - + $ gunzip < ../newlib-1.7.0+ppc-fix.diff.gz | patch -p1 + + Finally copy the include files to where GCC will see them: + + $ cd .../scratch + $ cd newlib-1.7.0/newlib/libc + $ tar cf - include | \ + ( cd /applications/psim/powerpc-unknown-eabi && tar xf - ) + + + o Unpack/build gcc + + $ cd .../scratch + $ gunzip < gcc-2.7.2,tar.gz | tar xf - + $ cd gcc-2.7.2 + $ ./configure --target=powerpc-unknown-eabi \ + --prefix=/applications/psim + $ make + $ make install + $ cd .. + $ rm -rf gcc-2.7.2 + + Gcc likes to install its own dummy version of float that + just returns an error. + + $ more /applications/psim/lib/gcc-lib/powerpc-unknown-eabi/2.7.2/include/float.h + $ rm /applications/psim/lib/gcc-lib/powerpc-unknown-eabi/2.7.2/include/float.h + + + o Finish building/installing newlib + + $ cd .../scratch + $ cd newlib-1.7.0 + $ ./configure --target=powerpc-unknown-eabi \ + --prefix=/applications/psim + + Your path will need to include the recently installed + gas/gcc when building. Either add it to your path or + use: + + $ PATH=/applications/psim/bin:$PATH make + $ PATH=/applications/psim/bin:$PATH make install + + + o Finally, test out the build + + $ cat hello.c + main() + { + printf("hello world\n"); + } + + The binary is linked with an entry point less than 0x100000 + (1mb) so that psim will recognize the binary as needing + the BUG/OEA instead of the BSD/UEA runtime environment. + + $ powerpc-unknown-eabi-gcc -v -o hello \ + -Wl,-Ttext,0x4000,-Tdata,0x10000 \ + /applications/psim/powerpc-unknown-eabi/lib/mvme-crt0.o \ + hello.c \ + -lc -lmvme + $ powerpc-unknown-eabi-objdump -h hello + $ powerpc-unknown-eabi-run hello + + It is also possible to force psim to use a specific + run-time environment using the -e option vis: + + $ powerpc-unknown-eabi-run -e bug hello + + + + + ---------------------------------------------------------------------- + + +BUILDING A BSD/UEA DEVELOPMENT ENVIRONMENT + + +Background: + + +For a UEA to be useful it needs a supporting run-time environment. +PSIM implements a runtime environment based on the NetBSD system call +interface. + +More than any thing, this user level emulation was the first +implemented because I happened to have the NetBSD source code lying +around. + + +Preparation: + + +This requires the NetBSD-1.1 source tree online. It can either be +obtained vi ftp: + + try http://www.netbsd.org or ftp://ftp.netbsd.org + +Alternatively obtain one of the NetBSD cdrom's. Patches to this source +tree that fill out much of the PowerPC code are available in: + + ftp://ftp.ci.com.au/pub/clayton + +Fetch everything in that directory - diffs, tar archives and scripts. +In addition patches to the bintuils and gcc are in: + + ftp://ftp.ci.com.au/pub/psim/binutils-2.6+note.diff.gz + ftp://ftp.ci.com.au/pub/psim/gcc-2.7.2+sys-types.diff.gz + +while the compiler (gcc) and assember (binutils) can be found at your +favorite gnu ftp site. I used versions: + + gcc-2.7.2.tar.gz + binutils-2.6.tar.gz + + + + +Method: + + +These notes are based on an installation performed on a Solaris2/x86 +host. For other hosts and other configurations, the below should be +considered as a guideline only. + + + o Sanity check + + I assume that you have already obtained the NetBSD-1.1 source + code and unpacked it into the directory bsd-src. While the + full NetBSD source tree may not be needed, things are easier + if it is all online. + + $ cd .../scratch + $ ls -1 + binutils-2.6.tar.gz + binutils-2.6+note.diff.gz + clayton-include-960203.diff.gz + clayton-lib-960203.diff.gz + clayton-lib-960203.tar.gz + clayton-sys-960203.diff.gz + clayton-sys-960203.tar.gz + clayton.chown.sh + clayton.install.sh + clayton.lorder.sh + clayton.make.sh + gcc-2.7.2.tar.gz + gcc-2.7.2+sys-types.diff.gz + make.tar.gz + make.diff.gz + + + o Prepare the destination directory ready for installation. + + Firstly create many of the needed directories (some are + created automatically later): + + $ for d in \ + /applications/psim \ + /applications/psim/bsd-root \ + /applications/psim/bsd-root/usr \ + /applications/psim/bsd-root/usr/share \ + /applications/psim/bsd-root/usr/share/doc \ + /applications/psim/bsd-root/usr/share/doc/psd \ + /applications/psim/bsd-root/usr/share/doc/psd/19.curses \ + /applications/psim/bsd-root/usr/include \ + /applications/psim/bsd-root/usr/lib \ + /applications/psim/powerpc-unknown-eabi \ + /applications/psim/powerpc-unknown-eabi/bin \ + ; \ + do test -d $d || mkdir $d ; done + + Next, link the BSD and GNU include directories together. + GCC expects include files to be in one location while the + bsd install expects them in a second. The link is in + the direction below because bsd's install also insists on + a directory (not a link) for its install destination. + + $ rm -rf /applications/psim/powerpc-unknown-eabi/include + $ ln -s /applications/psim/bsd-root/usr/include \ + /applications/psim/powerpc-unknown-eabi/include + + $ ls -l /applications/psim/powerpc-unknown-eabi/include + lrwxr-xr-x 1 cagney wheel 39 Mar 21 18:09 + /applications/psim/powerpc-unknown-eabi/include + -> /applications/psim/bsd-root/usr/include + + + o Build/install Berkeley make + + The tar archive make.tar.gz contains a recent snapshot + of bmake from the NetBSD source tree. The notes below + describe how to build/install it. If you have access + to an even more recent version of bmake, use that. + + Unpack the source code: + + $ cd .../scratch + $ gunzip < make.tar.gz | tar xf - + $ cd make + + Apply the patch in make.diff.gz that fixes a minor + problem with a build under Solaris (by now it should + be fixed in the NetBSD-current source tree). + + $ gunzip < ../make.diff.gz | more + $ gunzip < ../make.diff.gz | patch + + Build it + + $ make -f Makefile.boot 'CC=gcc -g -DPOSIX' + + With bmake built, install it into the target specific bin + directory: + + $ cp bmake /applications/psim/powerpc-unknown-eabi/bin/make + $ cd .. + $ rm -rf make + + + o Set up a number of wrapper scripts for bmake so that it works. + + In addition to needing BSD make the build process assumes + a number of BSD specific commands. To get around this + several wrapper scripts are available. + + powerpc-unknown-eabi-make (clayton.make.sh) + + Front end to Berkeley make setting it up for a + cross compilation + + $ cp clayton.make.sh \ + /applications/psim/bin/powerpc-unknown-eabi-make + $ chmod a+x \ + /applications/psim/bin/powerpc-unknown-eabi-make + + chown (clayton.chown.sh) + + Wrapper that does not do any thing. + Avoids the need to be root when installing. + + $ cp clayton.chown.sh \ + /applications/psim/powerpc-unknown-eabi/bin/chown + $ chmod a+x \ + /applications/psim/powerpc-unknown-eabi/bin/chown + + install (clayton.install.sh) + + Wrapper to strip away a number of bsd specific install + arguments. + + $ cp clayton.install.sh \ + /applications/psim/powerpc-unknown-eabi/bin/install + $ chmod a+x \ + /applications/psim/powerpc-unknown-eabi/bin/install + + lorder (clayton.lorder.sh) + + Tweaked lorder script that will use nm etc from + binutils. + + $ cp clayton.lorder.sh \ + /applications/psim/powerpc-unknown-eabi/bin/lorder + $ chmod a+x \ + /applications/psim/powerpc-unknown-eabi/bin/lorder + + + printf (?) + + Some operating systems don't include the program + printf. If you host doesn't have one, then a + good source is the gnu sh-utils version. + + Again, if that program is missing, then I suggest + installing it onto the powerpc specific program + directory: + + /applications/psim/powerpc-unknown-eabi/bin + + + o Unpack the bsd source code (if you haven't already) + + If you're short on disk space (like me) just unpack: + + sys, lib, share/mk, include, usr.sbin/config, + usr.sbin/dbsym, gnu/lib/libg++/g++-include, + usr.bin/lex + + Otherwize, assuming you have a CD-DRIVE: + + $ cd .../scratch + $ mkdir bsd-src + $ cd bsd-src + $ for d in /cdrom/bsdisc_12_95_disc2/NetBSD-1.1/source/*11 + do + echo $d + cat $d/*.?? | gunzip | tar xf - + done + + Flatten the directory structure a little. + + $ mv usr/src/* . + $ rmdir usr/src usr + $ cd .. + + + o Apply the clayton (PowerPC) patches to your constructed + tree. + + $ cd .../scratch + $ cd bsd-src + + Diffs are applied using something like: + + $ gunzip < ../clayton-include-960312.diff.gz | patch -p1 + $ gunzip < ../clayton-lib-960203.diff.gz | patch -p1 + $ gunzip < ../clayton-sys-960203.diff.gz | patch -p1 + + The patch to sys/dev/pci/ncr.c.rej might fail. + + The tar archives have a different problem, you need + to remove the `src' prefix. I used + + $ ln -s . src + $ gunzip < ../clayton-lib-960203.tar.gz | tar xvf - + $ gunzip < ../clayton-sys-960203.tar.gz | tar xvf - + + So that src/xxx unpacked into ./xxx + + $ cd .. + + + o install Berkeley make's include (mk) files. + + $ cd .../scrath + $ cd bsd-src/share + $ tar cf - mk | ( cd /applications/psim/bsd-root/usr/share \ + && tar xvf - ) + $ cd ../.. + + + o Install the include files + + $ cd .../scratch + $ cd bsd-src/include + $ powerpc-unknown-eabi-make install + $ cd ../.. + + + o Install a few other include files. + + As discussed above in the section on building libnew, + the build process can have chicken/egg problems. In the + case of BSD's libc, it wants to use several include files + (from the installed include directory) before they are + installed. Just copy them in as seen below: + + $ cd .../scratch + $ cd bsd-src + $ cp gnu/lib/libg++/g++-include/values.h \ + /applications/psim/powerpc-unknown-eabi/include + $ cp lib/libcurses/curses.h \ + /applications/psim/powerpc-unknown-eabi/include + $ cd .. + + + o Unpack/patch/build/install BINUTILS + + $ cd .../scratch + $ gunzip < binutils-2.6.tar.gz | tar xf - + + gas (bfd) 2.6 didn't support the reading and writing of + note sections. The patch binutils-2.6+note.diff.gz + adds support for this. PowerPC/ELF boot files being loaded + by OpenBoot ROM's should contain a PowerPC note section. + + $ cd .../scratch + $ cd binutils-2.6/bfd + $ gunzip < ../../binutils-2.6+note.diff.gz | more + $ gunzip < ../../binutils-2.6+note.diff.gz | patch + $ cd ../.. + + Then continue with the build + + $ cd .../scratch + $ cd binutils-2.6 + $ ./configure --target=powerpc-unknown-eabi \ + --prefix=/applications/psim + $ make + $ make install + $ cd .. + $ rm -rf binutils-2.6 + + This has the intended side effect of partially populating + the psim directory tree which makes follow on steps easier. + + + o Unpack/patch/build/install GCC + + $ cd .../scratch + $ gunzip < gcc-2.7.2.tar.gz | tar xf - + $ cd gcc-2.7.2 + + GCC-2.7.2 and the BSD include files have a conflicting type + declaration. The patch below gets around this problem + (it may still be applicable to more recent versions of + GCC): + + $ gunzip < ../gcc-2.7.2+sys-types.diff.gz | more + $ gunzip < ../gcc-2.7.2+sys-types.diff.gz | patch + + If your version of GCC includes the file ginclude/ppc-asm.h + then you should install that header file into the directory: + /applications/psim/powerpc-unknown-eabi/include. More + recent versions of GCC expect this file to be installed: + + $ test -r ginclude/ppc-asm.h \ + && cp ginclude/ppc-asm.h \ + /applications/psim/powerpc-unknown-eabi/include + + Other than that, assuming the include files installed + okay, the rest should be fine .... + + $ ./configure --target=powerpc-unknown-eabi \ + --prefix=/applications/psim + $ make CC=gcc + $ make CC=gcc install + $ cd .. + $ rm -rf gcc-2.7.2 + + + o Build/install the Berkeley library: + + $ cd .../scratch + $ cd bsd-src/lib + $ powerpc-unknown-eabi-make + $ powerpc-unknown-eabi-make install + $ cd ../.. + + If you encounter problems check the following (each + discussed above): + + o GCC and BSD have a common include + directory + + o all the missing include files installed + + o all the wrapper programs installed + + + o Build/run a simple BSD program + + $ cd .../scratch + $ cd bsd-src/usr.bin/printenv + $ powerpc-unknown-eabi-make + $ powerpc-unknown-eabi-run printenv + . + . + . + + + ---------------------------------------------------------------------- |