diff options
author | Michael Meissner <gnu@the-meissners.org> | 1996-02-16 15:51:57 +0000 |
---|---|---|
committer | Michael Meissner <gnu@the-meissners.org> | 1996-02-16 15:51:57 +0000 |
commit | 6cf9d64e778bd2f95d6f0a24de13333f437b760c (patch) | |
tree | 2f30abb27c8bb8e8a15a4c621ac00ee63cde9b26 /sim/ppc | |
parent | 81afee37d0a016cd3e671693c165916893ac3e60 (diff) | |
download | fsf-binutils-gdb-6cf9d64e778bd2f95d6f0a24de13333f437b760c.zip fsf-binutils-gdb-6cf9d64e778bd2f95d6f0a24de13333f437b760c.tar.gz fsf-binutils-gdb-6cf9d64e778bd2f95d6f0a24de13333f437b760c.tar.bz2 |
Update to rev 1.0 from andrew
Diffstat (limited to 'sim/ppc')
-rw-r--r-- | sim/ppc/.Sanitize | 6 | ||||
-rw-r--r-- | sim/ppc/.gdbinit | 2 | ||||
-rw-r--r-- | sim/ppc/PROBLEMS | 34 | ||||
-rw-r--r-- | sim/ppc/README | 352 | ||||
-rw-r--r-- | sim/ppc/README.psim | 700 | ||||
-rw-r--r-- | sim/ppc/RUN | 888 | ||||
-rw-r--r-- | sim/ppc/configure.in | 7 |
7 files changed, 1252 insertions, 737 deletions
diff --git a/sim/ppc/.Sanitize b/sim/ppc/.Sanitize index c0984a4..40da08b 100644 --- a/sim/ppc/.Sanitize +++ b/sim/ppc/.Sanitize @@ -23,11 +23,15 @@ Do-first: Things-to-keep: +.gdbinit +BUGS COPYING COPYING.LIB ChangeLog +INSTALL Makefile.in -README.psim +README +RUN PROBLEMS basics.h bits.c diff --git a/sim/ppc/.gdbinit b/sim/ppc/.gdbinit new file mode 100644 index 0000000..e1e62d6 --- /dev/null +++ b/sim/ppc/.gdbinit @@ -0,0 +1,2 @@ +set output-radix 16 +break error diff --git a/sim/ppc/PROBLEMS b/sim/ppc/PROBLEMS deleted file mode 100644 index d88daa4..0000000 --- a/sim/ppc/PROBLEMS +++ /dev/null @@ -1,34 +0,0 @@ - See the ChangeLog file looking for lines taged with the word FIXME. - - COREFILE.C: The implementation of corefile.c (defined by - corefile.h) isn't the best. It is intended to be functionaly - correct rather than fast. One option being considered - is to add a data cache to reduce the overhead of the most - common case of data read/writes. - - HTAB (page) code for OEA model untested. Some of the vm code - instructions unimplemented. - - Lacks PowerOpen (a.k.a. XCOFF a.k.a. AIX) and NT startups. The - PowerOpen worked until I added the ELF one. - - Missing VEA system calls. - - Missing or commented out instructions. - - 64bit target untested. - - 64bit host broken. For instance use of scanf "%x", &long long. - - Event code for pending events from within signal handlers not - finished/tested. - - Better and more devices. - - PORTABILITY (Notes taken from Michael Meissner): Heavy use of the ## - operator - fix using the clasic X/**/Y hack; Use of the signed - keyword. In particular, signed char has no analogue in classic C - (though most implementations of classic C use signed chars); Use of - long long which restricts the target compiler to be GCC. - - diff --git a/sim/ppc/README b/sim/ppc/README new file mode 100644 index 0000000..f617fd2 --- /dev/null +++ b/sim/ppc/README @@ -0,0 +1,352 @@ + + + PSIM 1.0 - Model of the PowerPC Environment + + + Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au>. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + + ---------------------------------------------------------------------- + + +PSIM is a program written in extended ANSI-C that implements an +instruction level simulation of the PowerPC environment. + +The PowerPC Architecture is described as having three levels of +compliance: + + UEA - User Environment Architecture + VEA - Virtual Environment Architecture + OEA - Operating Environment Architecture + +PSIM implements all three levels of the PowerPC architecture and, in +addition, includes (for each level) a corresponding simulated run-time +environment. + +In addition, PSIM, to the functional unit level, models the +performance of most of the current PowerPC implementations +(contributed by Michael Meissner). This detailed performance +monitoring (unlike many other simulators) resulting in only a +relatively marginal reduction in the simulators performance. + + +A description of how to build PSIM is contained in the file: + + ftp://ftp.ci.com.au/pub/psim/INSTALL + or ftp://cambridge.cygnus.com/pub/psim/INSTALL + +while an overview of how to use PSIM is in: + + ftp://ftp.ci.com.au/pub/psim/RUN +or ftp://cambridge.cygnus.com/pub/psim/RUN + +This file is found in: + + ftp://ftp.ci.com.au/pub/psim/README +or ftp://cambridge.cygnus.com/pub/psim/README + + +Thanks goes firstly to: + + Corinthian Engineering Pty Ltd + Highland Logic Pty Ltd + Cygnus Support + +who provided the resources needed for making this software available +on the Internet. + +More importantly I'd like to thank the following individuals who each +contributed in their own unique way: + + Allen Briggs, Bett Koch, David Edelsohn, Gordon Irlam, + Michael Meissner, Bob Mercier, Richard Perini, Dale Rahn, + Richard Stallman, Mitchele Walker + + + Andrew Cagney + Feb, 1995 + + + ---------------------------------------------------------------------- + + + What features does PSIM include? + + Monitoring and modeling + + PSIM includes (thanks to Michael Meissner) + a detailed model of most of the PowerPC + implementations to the functional unit level. + + + SMP + + The PowerPC ISA defines SMP synchronizing instructions. + This simulator implements a limited, but functional, + subset of the PowerPC synchronization instructions + behaviour. Programs that restrict their synchronization + primitives to those that work with this functional + sub-set (eg P() and V()) are able to run on the SMP + version of PSIM. + + People intending to use this system should study + the code implementing the lwarx instruction. + + ENDIAN SUPPORT + + PSIM implements the PowerPC's big and little (xor + endian) modes and correctly simulates code that + switches between these two modes. + + In addition, psim can model a true little-endian + machine. + + ISA (Instruction Set Architecture) models + + PSIM includes a model of the UEA, VEA and OEA. This + includes the time base registers (VEA) and HTAB + and BATS (OEA). + + In addition, a preliminary model of the 64 bit + PowerPC architecture is implemented. + + IO Hardware + + PSIM's internals are based around the concept + of a Device Tree. This tree intentionally + resembles that of the Device Tree found in + OpenBoot firmware. PSIM is flexible enough + to allow the user to fully configure this device + tree (and consequently the hardware model) at + run time. + + Run-time environments: + + PSIM's UEA model includes emulation for BSD + based UNIX system calls. + + PSIM's OEA model includes emulation of either: + + o OpenBoot client interface + + o MOTO's BUG interface. + + + Floating point + + Preliminary support for floating point is included. + + + Who would be interested in PSIM? + + o the curious + + Using psim, gdb, gcc and binutils the curious + user can construct an environment that allows + them to play with PowerPC Environment without + the need for real hardware. + + + o the analyst + + PSIM includes many (contributed) monitoring + features which (unlike many other simulators) + do not come with a great penalty in performance. + + Thus the performance analyst is able to use + this simulator to analyse the performance of + the system under test. + + If PSIM doesn't monitor a components of interest, + the source code is freely available, and hence + there is no hinderance to changing things + to meet a specific analysts needs. + + + o the serious SW developer + + PSIM models all three levels of the PowerPC + Architecture: UEA, VEA and OEA. Further, + the internal design is such that PSIM can + be extended to support additional requirements. + + + What performance analysis measurements can PSIM perform? + + Below is the output from a recent analysis run + (contributed by Michael Meissner): + + For the following program: + + long + simple_rand () + { + static unsigned long seed = 47114711; + unsigned long this = seed * 1103515245 + 12345; + seed = this; + /* cut-cut-cut - see the file RUN.psim */ + } + + Here is the current output generated with the -I switch on a P90 + (the compiler used is the development version of GCC with a new + scheduler replacing the old one): + + CPU #1 executed 41,994 AND instructions. + CPU #1 executed 519,785 AND Immediate 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 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 + + + What motivated PSIM? + + As an idea, psim was first discussed seriously during mid + 1994. At that time its main objectives were: + + + o good performance + + Many simulators loose out by only providing + a binary interface to the internals. This + interface eventually becomes a bottle neck + in the simulators performance. + + It was intended that PSIM would avoid this + problem by giving the user access to the + full source code. + + Further, by exploiting the power of modern + compilers it was hoped that PSIM would achieve + good performance with out having to compromise + its internal design. + + + o practical portability + + Rather than try to be portable to every + C compiler on every platform, it was decided + that PSIM would restrict its self to supporting + ANSI compilers that included the extension + of a long long type. + + GCC is one such compiler, consequently PSIM + should be portable to any machine running GCC. + + + o flexibility in its design + + PSIM should allow the user to select the + features required and customise the build + accordingly. By having the source code, + the compiler is able to eliminate any un + used features of the simulator. + + After all, let the compiler do the work. + + + o SMP + + A model that allowed the simulation of + SMP platforms with out the large overhead + often encountered with such models. + + + PSIM achieves each of these objectives. + + + Is PSIM PowerPC Platform (PPCP) (nee CHRP) Compliant? + + No. + + Among other things it does not have an Apple ROM socket. + + + Could PSIM be extended so that it models a CHRP machine? + + Yes. + + PSIM has been designed with the CHRP spec in mind. To model + a CHRP desktop the following would need to be added: + + o An apple ROM socket :-) + + o Model of each of the desktop IO devices + + o An OpenPIC device. + + o RTAS (Run Time Abstraction Services). + + o A fully populated device tree. + + + Is the source code available? + + Yes. + + The source code to PSIM is available under the terms of + the GNU Public Licence. This allows you to distribute + the source code for free but with certain conditions. + + See the file: + + ftp://archie.au/gnu/COPYING + + For details of the terms and conditions. + + + Where do I send bugs or report problems? + + There is a mailing list (subscribe through majordomo@ci.com.au) at: + + powerpc-psim@ci.com.au + + If I get the ftp archive updated I post a note to that mailing list. + In addition your welcome to send bugs or problems either to me or to + that e-mail list. + + This list currently averages zero articles a day. + + + Does PSIM have any limitations or problems? + + PSIM can't run rs6000/AIX binaries - At present PSIM can only + simulate static executables. Since an AIX executable is + never static, PSIM is unable to simulate its execution. + + PSIM is still under development - consequently there are going + to be bugs. + + See the file BUGS (included in the distribution) for any + other outstanding issues. + diff --git a/sim/ppc/README.psim b/sim/ppc/README.psim deleted file mode 100644 index 518b412..0000000 --- a/sim/ppc/README.psim +++ /dev/null @@ -1,700 +0,0 @@ - - PSIM - model a PowerPC platform - - Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au>. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - -This directory contains the source code to the program PSIM. - - -What is PSIM? - - PSIM is an ANSI C program that implements an instruction - level model of the PowerPC architecture. - - It can be configured to model various PowerPC platforms - and include: - - o A user program environment (UEA) complete - with emulated system calls - - to - - o A hardware platform with several processors - interacting with each other and various - modeled hardware devices. - - For each of these models PSIM is able perform a detailed - analysis of the machines performance. - - - -Who would be interested in PSIM? - - o the curious - - Using psim, gdb, gcc and binutils the curious - user can contruct an environment that allows - them to play with PowerPC user programs with out - the need for real hardware. - - - o the analyst - - PSIM includes many (contributed) monitoring - features which (unlike many other simulators) - do not come with a great penalty in performance. - - Thus the performance analyst is able to use - this simulator to model the inpact of changes - to the system they are analysing. Be that - system a compiler or real hardware platform. - - If PSIM doesn't monitor a components of interest, - the source code is freely available, and hence - there is no hinderance to changing things - to meet a specific analysts needs. - - - o the serious SW developer - - PSIM models all three levels of the PowerPC - Architecture: UEA, VEA and OEA. Further, - the internal design is such that PSIM can - be extended to suport additional - development requirements. Such requirements - might include (for the UEA) a new Operating - System emulation through to (for the OEA) - a model of a different hardware platform. - - -What features does PSIM have? - - - Monitoring and modeling - - PSIM includes (thanks to Michael Meissner) - a detailed model of the various PowerPC - implementations schedulers. - - - SMP - - The PowerPC ISA defines SMP synchronizing instructions - this simulator models a limited subset of their - behavor. Consequently, if you limit code to the - use the modeled behavour, PSIM can be used to - model SMP PowerPC platforms. - - People intending to use this system should study - the code implementing the lwarx etc instructions. - - ENDIAN SUPORT - - PSIM implements the PowerPC's big and little (xor - endian) modes and correctly simulates code that - switches between these two modes. - - In addition, psim can model a true little-endian - machine. - - ISA models (Instruction Set Architecture) - - PSIM includes a model of the UEA, VEA and OEA. This - inclues the time base registers (VEA) and HTAB - and BATS (OEA). - - In addition, a preliminary model of the 64 bit - PowerPC architecture is implemented. - - Hardware - - PSIM's internals are based around the concept - of a Device Tree. This tree intentionaly - resembles that of the Device Tree found in - OpenBoot firmware. PSIM is flexable enough - to allow the user to fully configure the - actual hardware model from a device tree - specification that is read in from a file. - - A user can either run a program using one of - PSIM's built in hardware models specify a - custom hardware model that should be simulated. - - A user is also able to quickly add a model - of new hardware devices so that they can be - included in a custom hardware model. - - OS-Emulation - - PSIM's UEA model includes emulation for UNIX system - calls. - - PSIM's OEA model includes emulation of either: - - o OpenBoot client interface - - o MOTO's BUG interface. - - - Floating point - - Preliminary suport for floating point is included. - - - -What performance analysis measurements can PSIM perform? - - Below is the output from a recent analysis run - (contributed by Michael Meissner): - - For the following program: - - long - simple_rand () - { - static unsigned long seed = 47114711; - unsigned long this = seed * 1103515245 + 12345; - seed = this; - return this >> 8; - } - - unsigned long int - random_bitstring () - { - unsigned long int x; - int ran, n_bits; - int tot_bits = 0; - - x = 0; - for (;;) - { - ran = simple_rand (); - n_bits = (ran >> 1) % 16; - tot_bits += n_bits; - - if (n_bits == 0) - return x; - else - { - x <<= n_bits; - if (ran & 1) - x |= (1 << n_bits) - 1; - - if (tot_bits > 8 * sizeof (long) + 6) - return x; - } - } - } - - #define ABS(x) ((x) >= 0 ? (x) : -(x)) - - main () - { - int i; - - for (i = 0; i < 50000; i++) - { - unsigned long x, y; - x = random_bitstring (); - y = random_bitstring (); - - if (sizeof (int) == sizeof (long)) - goto save_time; - - { unsigned long xx = x, yy = y, r1, r2; - if (yy == 0) continue; - r1 = xx / yy; - r2 = xx % yy; - if (r2 >= yy || r1 * yy + r2 != xx) - abort (); - } - { signed long xx = x, yy = y, r1, r2; - if ((unsigned long) xx << 1 == 0 && yy == -1) - continue; - r1 = xx / yy; - r2 = xx % yy; - if (ABS (r2) >= (unsigned long) ABS (yy) || (signed long) (r1 * yy + r2) != xx) - abort (); - } - save_time: - { unsigned int xx = x, yy = y, r1, r2; - if (yy == 0) continue; - r1 = xx / yy; - r2 = xx % yy; - if (r2 >= yy || r1 * yy + r2 != xx) - abort (); - } - { signed int xx = x, yy = y, r1, r2; - if ((unsigned int) xx << 1 == 0 && yy == -1) - continue; - r1 = xx / yy; - r2 = xx % yy; - if (ABS (r2) >= (unsigned int) ABS (yy) || (signed int) (r1 * yy + r2) != xx) - abort (); - } - { unsigned short xx = x, yy = y, r1, r2; - if (yy == 0) continue; - r1 = xx / yy; - r2 = xx % yy; - if (r2 >= yy || r1 * yy + r2 != xx) - abort (); - } - { signed short xx = x, yy = y, r1, r2; - r1 = xx / yy; - r2 = xx % yy; - if (ABS (r2) >= (unsigned short) ABS (yy) || (signed short) (r1 * yy + r2) != xx) - abort (); - } - { unsigned char xx = x, yy = y, r1, r2; - if (yy == 0) continue; - r1 = xx / yy; - r2 = xx % yy; - if (r2 >= yy || r1 * yy + r2 != xx) - abort (); - } - { signed char xx = x, yy = y, r1, r2; - r1 = xx / yy; - r2 = xx % yy; - if (ABS (r2) >= (unsigned char) ABS (yy) || (signed char) (r1 * yy + r2) != xx) - abort (); - } - } - - exit (0); - } - - Here is the current output generated with the -I switch on a 90 Mhz - pentium (the compiler used is the devlopment version of GCC with a new - scheduler replacing the old one): - - 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 writeback slot was unavilable. - 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 - - - -What motivated PSIM? - - As an idea, psim was first discussed seriously during mid - 1994. At that time its main objectives were: - - - o good performance - - Many simulators loose out by only providing - a binary interface to the internals. This - interface eventually becomes a bottle neck - in the simulators performance. - - It was intended that PSIM would avoid this - problem by giving the user access to the - full source code. - - Further, by exploiting the power of modern - compilers it was hoped that PSIM would achieve - good performance with out having to compromize - its internal design. - - - o practical portability - - Rather than try to be portable to every - C compiler on every platform, it was decided - that PSIM would restrict its self to suporting - ANSI compilers that included the extension - of a long long type. - - GCC is one such compiler, consequenly PSIM - should be portable to any machine running GCC. - - - o flexability in its design - - PSIM should allow the user to select the - features required and customize the build - accordingly. By having the source code, - the compler is able to eliminate any un - used features of the simulator. - - After all, let the compiler do the work. - - - o SMP - - A model that allowed the simulation of - SMP platforms with out the large overhead - often encountered with such models. - - - PSIM achieves each of these objectives. - - -Is PSIM PowerPC Platform (PPCP) (nee CHRP) Compliant? - - No. - - Among other things it does not have an Apple ROM socket. - - -Can PSIM be configured so that it models a CHRP machine? - - Yes. - - PSIM has been designed with the CHRP spec in mind. To model - a CHRP desktop a user would need to add the following: - - o An apple rom socket :-) - - o Model of each of the desktop IO devices - (some may already be implemented). - - o An OpenPIC (Open Programmable Interrupt - Controller) device. (it may by now be - implemented). - - o RTAS (Run Time Abstraction Services). - - o A fully populated device tree. - - -Is the source code available? - - Yes. - - The source code to PSIM is available under the terms of - the GNU Public Licence. This allows you to distribute - the source code for free but with certain conditions. - - -How do I build PSIM? - - To build PSIM you will need the following files: - - - gdb-4.15.tar.gz From your favorite GNU ftp site. - I've also tested psim with - gdb-4.15.1. If you would prefer - a graphical development environment - then PSIM can also be built with - gdbtk. - - - ftp://ftp.ci.com.au/pub/clayton/README.pim - - This file. - - - ftp://ftp.ci.com.au/pub/clayton/gdb-4.15+psim.diff.gz - - Firstly this file contains a few - minor changes to gdb-4.15 so that it - will build PSIM as part of GDB. - - - ftp://ftp.ci.com.au/pub/clayton/gdb-4.15+note.diff.gz - - Add suport for note sections (used - by OpenBoot PowerPC programs). - - - ftp://ftp.ci.com.au/pub/clayton/gdb-4.15+attach.diff.gz - - Allow the gdb attach command to - work with simulators. - - - ftp://ftp.ci.com.au/pub/clayton/psim-960119.tar.gz - - This contains the psim files proper. - - - gcc Again available from your favorite - GNU ftp site. - - - patch Sun's patch behaves a little wierd - and doesn't appear to like creating - empty files. You may want to consider - installing gnu's patch. - - - Procedure: - - 0. A starting point - - $ ls -1 - gdb-4.15+attach.diff.gz - gdb-4.15+note.diff.gz - gdb-4.15+psim.diff.gz - gdb-4.15+psim.diff.gz - gdb-4.15.tar.gz - psim-960119.tar.gz - - - 1. Unpack gdb - - $ gunzip < gdb-4.15.tar.gz | tar xf - - - - 2. Change to the gdb directory, apply the psim patches and unpack - the psim files. - - $ cd gdb-4.15 - - $ gunzip < ../gdb-4.15+psim.diff.gz | more - $ gunzip < ../gdb-4.15+psim.diff.gz | patch -p1 - - $ gunzip < ../gdb-4.15+psim-960119.tar.gz | tar tvf - - $ gunzip < ../gdb-4.15+psim-960119.tar.gz | tar xvf - - - You may also want to consider applying the `attach' and - `note' patches that are available vis: - - $ gunzip < ../gdb-4.15+attach.diff.gz | more - $ gunzip < ../gdb-4.15+attach.diff.gz | patch -p - - $ gunzip < ../gdb-4.15+note.diff.gz | more - $ gunzip < ../gdb-4.15+note.diff.gz | patch -p - - - 3. Configure gdb - - $ more gdb/README - - then something like (I assume SH): - - $ CC=gcc ./configure --target=powerpc-unknown-eabisim - - eabisim is needed as by default (because PSIM needs GCC) the - simulator is not built. - - [If building with a more recent gdb snapshot then the - command: - - $CC=gcc ./configure --enable-sim-powerpc - - is used.] - - 4. Build - - $ make CC=gcc - - alternativly, if you are short on disk space or just want the - simulator built: - - $ ( cd libiberty && make CC=gcc ) - $ ( cd bfd && make CC=gcc ) - $ ( cd sim/ppc && make CC=gcc ) - - - 5. Install - - $ make CC=gcc install - - or just - - $ cp gdb/gdb ~/bin/powerpc-unknown-eabisim-gdb - $ cp sim/ppc/run ~/bin/powerpc-unknown-eabisim-run - - -Is there a more recent version of PSIM and if so, how would I build it? - - A PSIM is an ongoing development, occasional snapshots - (that include new features) are made available. Several of - the more recent snapshots are: - - <to-be-advised> - - To build/install one of these snapshots, you replace the - current gdb/sim/ppc directory with the one in the update, - re-configure and rebuild. - - Procedure: - - 0. A starting point - - $ cd gdb-4.15 - - - 1. Remove the old psim directory - - $ mv sim/ppc sim/old.ppc - - - 2. Unpack the new one - - $ gunzip < ../psim-960105.tar.gz | tar tf - - $ gunzip < ../psim-960105.tar.gz | tar tf - - - - 3. Reconfig/rebuild (as seen above): - - $ CC=gcc ./configure --target=powerpc-unknown-eabisim - $ make CC=gcc - - -Are there any example programs that can be run on PSIM? - - Psim has a simple test suite that is used to ensure - that fixes do not introduce new bugs. This test suite - like psim is updated: - - ftp://ftp.ci.com.au/pub/clayton/psim-test-960118.tar.gz - - Prebuilt test programs for PSIM. - Includes examples of UEA, VEA and - OEA code. - Requires gcc-2.7.2 and binutils-2.6 - to rebuild. - - -How do I use the simulator? - - - I assume that you've unpacked a psim-test archive. - - - 1. As a standalone program - - Print out the users environment: - - $ powerpc-unknown-eabisim-run psim-test/uea/envp - - Print out the arguments: - - $ powerpc-unknown-eabisim-run psim-test/uea/argv a b c - - Check that sbrk works: - - $ powerpc-unknown-eabisim-run psim-test/uea/break - - - 2. Example of running GDB: - - The main thing to note is that before you can run the simulator - you must enable it. The example below illustrates this: - - $ powerpc-unknown-eabisim-gdb psim-test/uea/envp - (gdb) target sim - (gdb) load - (gdb) break main - (gdb) run - . - . - . - - - 3. Using a device tree as a description of a machine - (I assume that you have applied the attach bug). - - $ cd psim-test/tree - $ powerpc-unknown-eabisim-gdb - (gdb) target sim - (gdb) attach device-tree - (gdb) run - - or - - $ cd psim-test/tree - $ powerpc-unknown-eabisim-run device-tree - - -Where do I send bugs or report problems? - - There is a mailing list (subscribe through majordomo@ci.com.au) (that - is almost never used) at: - - powerpc-psim@ci.com.au - - If I get the ftp archive updated I post a note to that mailing list. - In addition your welcome to send bugs or problems either to me or to - that e-mail list. - - -Does PSIM have any limitations or problems? - - See the file PROBLEMS (included in the distribution) for any - outstanding issues. - - -Who helped? - - Thanks go to the following who each helped in their own - way: - - Allen Briggs, Bett Koch, David Edelsohn, Gordon Irlam, - Michael Meissner, Bob Mercier, Richard Perini, Dale Rahn - Richard Stallman, Mitchele Walker diff --git a/sim/ppc/RUN b/sim/ppc/RUN new file mode 100644 index 0000000..eaf4918 --- /dev/null +++ b/sim/ppc/RUN @@ -0,0 +1,888 @@ + + 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.tar.gz +or ftp://cambridge.cygnus.com/pub/psim/psim-test-1.0.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> + +vis + + 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 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.6.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 +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 a patch to binutils is in: + + ftp://ftp.ci.com.au/pub/psim/binutils-2.6+note.diff.gz + +Finally you'll require a compiler and assembler/linker: + + 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.tar.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-utils-960203.tar.gz + clayton.chown.sh + clayton.install.sh + clayton.lorder.sh + clayton.make.sh + clayton.usr.bin.make.diff + gcc-2.7.2.tar.gz + gcc-2.7.2+sys-types.diff.gz + + + o Unpack the bsd source code (if you haven't already) + + $ 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 Unpack/build/install binutils + + $ 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 has the intended side effect of partially populating + the psim directory tree which makes follow on steps easier. + + + o Fill out the install directory with a few additions (if + install -d works, this can be simplified). + + $ mkdir \ + /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 \ + + + o Make the bsd and gnu include directories point to the same + location. + + 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. + + $ ln -s ../bsd-root/usr/include \ + /applications/psim/powerpc-unknown-eabi/include + + + + o Build/install Berkeley make + + In building Berkeley make from the NetBSD-1.1 source tree + a number of problems may be encountered. + + These problems have been fixed in NetBSD-current (after + 4/2/96 (ie start Feb)) you should probably obtain that + version of make. Alternatively, you can try following the + notes below that got make working on a Solaris-2.5/x86 + host. + + $ cd .../scratch + $ cd bsd-src/usr.bin/make + $ pwd + .../scratch/bsd-src/usr.bin/make + + Copy/stub some additional include files that your host may not + have. + + $ cp ../../include/ranlib.h ranlib.h + $ mkdir sys + $ cp ../../sys/sys/cdefs.h sys/cdefs.h + $ mkdir machine + $ touch machine/cdefs.h + + Edit/fix some of the BSDisms. The patch file indicated + contains fixes I found when compiling on my host, your + host will probably differ. + + $ gunzip < ../../../clayton.usr.bin.make.diff.gz | patch + + Build it with some extra flags (again your flags will differ): + + $ 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 ../../.. + + + o Patch/install Berkeley make's include (mk) files. + + $ cd .../share + $ cd bsd-src/share + $ tar cf - mk | ( cd /applications/psim/bsd-root/usr/share \ + && tar xf - ) + $ cd ../.. + + + 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) + + Front end to Berkeley make setting it up for a + cross compilation + + /applications/psim/bin/powerpc-unknown-eabi-make + + chown (clayton.chown) + + Wrapper that does not do any thing. + Avoids the need to be root when installing. + + /applications/psim/powerpc-unknown-eabi/bin + + install (clayton.install) + + Wrapper to strip away a number of bsd specific install + arguments. + + /applications/psim/powerpc-unknown-eabi/bin/install + + lorder (clayton.lorder) + + Tweaked lorder script that will use nm etc from + binutils. + + /applications/psim/powerpc-unknown-eabi/bin/lorder + + + o Apply the remaining patches for the BSD source tree + + $ cd .../scratch + $ cd bsd-src + + Diffs are applied using something like: + + $ gunzip < ../clayton-include-960203.diff.gz | more + ... + + 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 xtf - + ... + + So that src/xxx unpacked into ./xxx + + + $ 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 with building libnew, the bsd build process has + several include file problems. + + $ 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 Build/install gcc + + $ cd .../scratch + $ gunzip < gcc-2.7.2,tar.gz | tar xf - + $ cd gcc-2.7.2 + + GCC and BSD (for PowerPC) have a conflicting type + declaration. The patch below gets around this + problem: + + $ gunzip < ../gcc-2.7.2+sys-types.diff.gz | patch + + 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 try the following: an include + file not yet installed; a directory not yet created; + running the hosts version of a program instead of a + bsd version. + + o Build/run a simple BSD program + + $ cd .../scratch + $ cd bsd-src/usr.bin/printenv + $ powerpc-unknown-eabi-make + $ powerpc-unknown-eabi-run printenv + . + . + . + + + ---------------------------------------------------------------------- diff --git a/sim/ppc/configure.in b/sim/ppc/configure.in index ac0f407..e3d2dc3 100644 --- a/sim/ppc/configure.in +++ b/sim/ppc/configure.in @@ -205,7 +205,7 @@ AC_ARG_ENABLE(sim-smp, esac if test x"$silent" != x"yes" && test x"$sim_smp" != x""; then echo "Setting smp flags = $sim_smp" 6>&1 -fi],[sim_smp="-DWITH_SMP=0" +fi],[sim_smp="-DWITH_SMP=5" if test x"$silent" != x"yes"; then echo "Setting smp flags = $sim_smp" 6>&1 fi])dnl @@ -216,7 +216,10 @@ AC_ARG_ENABLE(sim-xor-endian, yes) sim_xor_endian="-DWITH_XOR_ENDIAN=8";; no) sim_xor_endian="-DWITH_XOR_ENDIAN=0";; *) sim_xor_endian="-DWITH_XOR_ENDIAN=$enableval";; -esac],[sim_xor_endian=""])dnl +esac +if test x"$silent" != x"yes" && test x"$sim_xor_endian" != x""; then + echo "Setting xor-endian flag = $sim_xor_endian" 6>&1 +fi],[sim_xor_endian=""])dnl AC_ARG_ENABLE(sim-bitsize, [ --enable-sim-bitsize=n Specify target bitsize (32 or 64).], |