* gx sim prototype tweaks
[binutils-gdb.git] / sim / ppc / INSTALL
blob45cb64c784fc9567365e9965e1cb580c39b04597
2                 PSIM - model the PowerPC environment
4     Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au>.
6     ----------------------------------------------------------------------
9                         Building PSIM
11         This file describes how to build the program PSIM
13         o       Walk through a basic build
15         o       Discussion of PSIM's components and
16                 how they relate to the build process
18         o       Detailed description of each of PSIM's
19                 compile time configuration options
22     ----------------------------------------------------------------------
25 BUILDING PSIM:
27 PSIM 1.0.2 is included in GDB-4.16.  To build PSIM you will need the
28 following:
30         gdb-4.16.tar.gz         Available from your favorite GNU
31                                 ftp site
33         gcc                     GCC version two includes suport
34                                 for long long (64bit integer)
35                                 arrithemetic which PSIM uses.  Hence
36                                 it is recommended that you build PSIM
37                                 using GCC.
38                                 
39 Method:
41         1.      Unpack gdb
43                 $ cd .../scratch
44                 $ gunzip < gdb-4.16.tar.gz | tar xf -
47         2.      Configure gdb
49                 First consult the gdb documentation
51                 $ cd .../scratch
52                 $ cd gdb-4.16
53                 $ more README
54                 $ more gdb/README
56                 then something like (I assume SH):
58                 $ CC=gcc ./configure \
59                         --enable-sim-powerpc \
60                         --target=powerpc-unknown-eabi \
61                         --prefix=/applications/psim
64         4.      Build (again specifying GCC)
66                 $ make CC=gcc
68                 alternatively, if you are short on disk space or only
69                 want to build the simulator:
71                 $ ( cd libiberty && make CC=gcc )
72                 $ ( cd bfd && make CC=gcc )
73                 $ ( cd sim/ppc && make CC=gcc )
76         5.      Install
78                 $ make CC=gcc install
80                 or just
82                 $ cp gdb/gdb ~/bin/powerpc-unknown-eabisim-gdb
83                 $ cp sim/ppc/run ~/bin/powerpc-unknown-eabisim-run
86     ----------------------------------------------------------------------
89 UPDATING PSIM:
92 A PSIM is an ongoing development.  Occasional snapshots which both contain new features and fix old bugs are made available.   See the ftp directory:
94         ftp://ftp.ci.com.au/pub/psim/beta
95 or      ftp://cambridge.cygnus.com/pub/psim/beta
97 for the latest version.  To build/install one of these snapshots, you
98 replace the sim/ppc found in the gdb archive with with one from the
99 snapshot.  Then just re-configure and rebuild/install.
101         Procedure:
103         0.      A starting point
105                 $ cd gdb-4.16
108         1.      Remove the old psim directory
110                 $ mv sim/ppc sim/old.ppc
113         2.      Unpack the new one
115                 $ gunzip < ../psim-NNNNNN.tar.gz | tar tf -
116                 $ gunzip < ../psim-NNNNNN.tar.gz | tar tf -
119         3.      Reconfigure/rebuild (as seen above):
121                 $ CC=gcc ./configure \
122                         --enable-sim-powerpc \
123                         --target=powerpc-unknown-eabi \
124                         --prefix=/applications/psim
125                 $ make CC=gcc
128     ----------------------------------------------------------------------
131 UPDATES TO GDB:
133 From time to time, problems involving the integration of PSIM into gdb
134 are found.  While eventually each of these problems is resolved there
135 can be periouds during which a local hack may be needed.
137 At the time of writing the following were outstanding:
139         ATTACH command:
141                 ftp://ftp.ci.com.au/pub/psim/gdb-4.15+attach.diff.gz
142         or      ftp://cambridge.cygnus.com/pub/psim/gdb-4.15+attach.diff.gz
143         
144         PSIM, unlike the other simulators found in GDB, is able to load
145         the description of a target machine (including the initial
146         state of all processor registers) from a file.
148         Unfortunatly GDB does not yet have a standard command that
149         facilitates the use of this feature.  Until such a command is
150         added, the patch (hack?) gdb-4.15+attach.diff.gz can be used to
151         extend GDB's attach command so that it can be used to initialize
152         the simulators configuration from a file.
156     ----------------------------------------------------------------------
159 RUNNING PROGRAMS:
162 See the file:
164         ftp://ftp.ci.com.au/pub/psim/RUN
165 or      ftp://cambridge.cygnus.com/pub/psim/RUN
168     ----------------------------------------------------------------------
171 COMPILE TIME CONFIGURATION OPTIONS:
174 PSIM's compile time configuration is controlled by autoconf.  PSIM's
175 configure script recognises options of the form:
177                 --enable-sim-<option>[=<val>]
179 And can be specified on the configure command line (at the top level
180 of the gdb directory tree) vis:
182                 $ cd gdb-4.15
183                 $ CC=gcc ./configure \
184                         --target=powerpc-unknown-eabisim \
185                         --prefix=/applications/psim \
186                         --enable-sim-inline
187                 $ make CC=gcc
189 For a brief list of PSIM's configuration options, configure --help
190 will list them vis:
192         $ cd sim/ppc
193         $ ./configure --help
195 Each PSIM specific option is discussed in detail below.
199 --enable-sim-cflags=<opts>
202 Specify additional C compiler flags that are to be used when compiling
203 just PSIM.
205 PSIM places heavy demands on both the host machine and its C compiler.
206 So that the builder has better control over the compiler the above
207 option can be used to pass additional options to the compiler while PSIM is being built.
209 Ex: No debug information
211 PSIM can be built with everything inline.  Unfortunately, because of
212 all the debugging information generated the C compiler can grow very
213 very large as a result.  For GCC, the debug information can be
214 restricted with the `-g0' option.  To specify that this option should
215 be include in the CFLAGS when compiling the psim source code use:
217         --enable-sim-cflags=-g0
219 Ex: Additional optimization flags
221 A significant gain in performance can be achieved by tuning the
222 optimization flags passed to the C compiler.  For instance on an x86
223 you may consider:
225         --enable-sim-cflags='-g0 -O2 -fno-strength-reduce -f...'
229 --enable-sim-warnings=<flags>
232 Turn on additional GCC specific checks.
234 Some hosts (NetBSD, Linux, Solaris-2.5) have complete header files
235 that include correct prototypes for all library functions.  On such
236 hosts, PSIM can be built with many more than the standard C checks
237 enabled.  The option --enable-sim-warnings controls this.
239 Ex: Default warnings
241 With just --enable-sim-warnings, the following -W options are enabled:
242 -Werror -Wall -Wpointer-arith -Wmissing-prototypes.
246 --enable-sim-opcode=which
249 Specify the file containing the rules for generating the instruction
250 decode and execute functions from the file ppc-instructions.
252 The form of the instruction decode and execute functions is controlled
253 by an opcode table.  It specifies: the combination of switch
254 statements and jump tables to use when decoding an instruction and how
255 much of each instruction should be decoded before calling the
256 instruction execute function.
258 PSIM includes a number of opcode tables:
260         psim-opcode-simple
261                 Generates a small compact two level switch statement
262                 that will compile quickly and run reasonably fast.
264                 This may be useful on a small machine.
266         psim-opcode-complex
267                 (the default) A fairly aggressive instruction decode
268                 table that includes the breaking out of a number
269                 of special instruction cases (eg RA==0 vs RA!=0).
271         psim-opcode-flat
272                 Identical to complex except a switch statement
273                 is used.  Ideal for when the icache is being
274                 disabled.
276         psim-opcode-stupid
277                 In addition to the instruction decodes performed
278                 by psim-opcode-complex, this also full decodes mtspr,
279                 mfspr, and branch instructions.  The table generated
280                 is very large and, as a consequence, only performs
281                 well on machines with large caches.
283         ppc-opcode-test-1
284         ppc-opcode-test-2
285                 Generate test (but workable) tables.  These exercise
286                 PSIM's ability to generate instruction decode functions
287                 that are a combination of jump-tables and switch statements.
289 The program igen generates the instruction tables from the opcode
290 table and the ppc-instruction table.
294 --enable-sim-switch
297 Enable/disable the use of a switch statement when looking up the
298 attributes of a SPR register.
300 The PowerPC architecture defines a number of Special Purpose Registers
301 (SPR's).  Associated with each of these registers are a number of
302 attributes (such as validity or size) which the instructions
303 mtspr/mfspr query as part of their execution.
305 For PSIM, this information is kept in a table (ppc-spr-table).  The
306 program dgen converts this table into lookup routines (contained in
307 the generated files spreg.h spreg.c) that can be used to query an
308 SPR's attributes.  Those lookup routines are either implemented as
309 a table or alternatively as a number of switch statements:
311         spr_table spr_info[] = { .... };
312         int spr_length(sprs spr) { return spr_info[spr].length; }
316         int spr_length(sprs spr) { switch (spr) { case ..: return ..; } }
318 In general the first implementation (a table) is the most efficient.
319 It may, however, prove that when performing an aggressive optimization
320 where both the SPR is known and the above function is being inlined
321 (with the consequence that GCC can eliminate the switch statement)
322 that the second choice is improves performance.
324 In practice, only a marginal (if any benefit) has ever been seen.
328 --enable-sim-duplicate
331 Create a duplicate copy of each instruction function hardwiring
332 instruction fields that would have otherwise have been variable.
334 As discussed above, igen outputs a C function generated from the file
335 ppc-instructions (using the opcode rules) for each of the
336 instructions.  Thus multiple entries in the instruction decode tables
337 may be pointing back at the same function.  Enabling duplicate, will
338 result in psim creating a duplicate of the instruction's function for
339 each different entry in the instruction decode tables.
341 For instance, given the branch instruction:
343         0.19,6.BO,11.BI,16./,21.528,31.LK
344         ...
345         if (LK) LR = (spreg)IEA(CIA + 4);
346         ...
348 igen as part of its instruction lookup table may have generated two
349 different entries - one for LK=0 and one for LK=1.  With duplicate
350 enabled, igen outputs (almost) duplicate copies of branch function,
351 one with LK hardwired to 0 and one with LK hardwired to 1.
353 By doing this the compiler is provided with additional information that
354 will allow it possibly eliminate dead code.  (such as the assignment
355 to LK if LR==0).
357 Ex: default
359 Because this feature is such a big win, --enable-sim-duplicate is
360 turned on by default.
362 Ex: A small machine
364 Only rarely (eg on a very small host) would this feature need to be
365 disabled (using: --disable-sim-duplicate).
369 --enable-sim-filter=rule
372 Include/exclude PowerPC instructions that are specific to a particular
373 implementation.
375 Some of the PowerPC instructions included in the file ppc-instructions
376 are limited to certain specific PPC implementations.  For instance,
377 the instruction:
379         0.58,6.RT,11.RA,16.DS,30.2:DS:64::Load Word Algebraic
381 Is only valid for the 64bit architecture.  The enable-sim-filter flag
382 is passed to igen so that it can `filter out' any invalid
383 instructions.  The filter rule has the form:
385         -f <name>
387 thus:
389         --enable-sim-filter='-f 64'
391 (the default) would filter out all 64bit instructions.
393 Ex: Remove floating point instructions
395 A given 32bit PowerPC implementation may not include floating point
396 hardware.  Consequently there is little point in including floating
397 point instructions in the instruction table.  The option:
399         --enable-sim-filter='-f 64 -f f'
401 will eliminate all floating point instructions from the instruction
402 table.
406 --enable-sim-icache=size
409 Set the size of the cache used to hold decoded instructions.
411 Psim executes instructions in two separate steps:
413         o       instruction fetch/decode
415         o       instruction execution
417 For a given instruction, the first stage need only be executed once
418 (the first time the instruction is encountered) while the second stage
419 must be executed every time the program `executes' that instruction.
421 Exploiting this, PSIM can maintain a cache of decoded instructions.
422 It will then use the decoded instruction from the cache in preference
423 to fetching/decoding the real instruction from memory.
425 Ex: default
427 Because this feature is normally such a big win, it is enabled by
428 default (with the cache size set to 1024 entries).
430 The 1024 entries equals 4096 bytes (or one page) of instructions.
431 Larger caches can be used but with caution - PSIM does not check for
432 address aliasing within its instruction cache.
434 Ex: disable the cache
436 There may be cases (for instance where the cache has a low hit rate)
437 where the psim performs better with no instruction cache.  For such
438 situations, the cache can be disabled vis: --disable-sim-icache.
442 --enable-sim-inline[=module]
445 Specify the inlining of one or more modules.
447 Many architectures (in particular the x86) suffer from a large
448 function call overhead.  By eliminating function calls (through
449 inlining of functions) a large performance gain can be achieved.
451 In PSIM, modules are inlined in one of two possible ways.  Some
452 modules (such as the byte swapping code) can be inlined into any
453 module that calls them.  Other modules, due to complex
454 interdependencies, are only inlined as a group when compiling the
455 external interface module psim.c.
457 Ex: default
459 By default the modules endian (handle be/le), bits (manipulate
460 bit-fields within words), cpu (the processor object) and events
461 (timers) are inlined in any module that calls them.  This gives a
462 reasonable performance gain with little additional compilation
463 overhead.
465 Ex: recommended  --enable-sim-inline
467 Assuming you machine is reasonably well configured, this option is
468 highly recommended.  On the x86 several orders of magnitude
469 improvement in performance is possible.
471 Ex: fine tuning
473 The file std-config.h contains a detailed description of how the
474 inlining works.  Individual modules can be inlined by specifying them.
475 For if you have a very large cache the model module could be inlined
476 with:
478         --enable-sim-inline=MODEL
482 --enable-sim-bswap
485 (x86 specific) Use the i486/P5/P6 byte swap instruction.
487 PSIM contains generic byte swapping code.  For the x86 (P[4-6]) PSIM
488 can be built so that it uses the bswap instruction instead of relying
489 on the compiler to generate byte swap code.
491 Ex: default
493 By default, when compiling with GCC-2 on an i486/P5/P6 the bswap
494 instruction is used.
498 --enable-sim-endian=endian
501 Specify the byte order of the target.
503 By default, PSIM is able to execute both big and little endian
504 executables.  As a consequence, every byte swap routine includes a
505 test to see if the byte swap is really needed.  By specifying the byte
506 order of the target (and the host below) the need for this test can be
507 eliminated.
509 Clearly setting the byte order of the target is only useful when known
510 before hand.
514 --enable-sim-hostendain=end
517 As above but for the host.
519 Normally this option should not be needed. configure (autoconf) should
520 determine the byte order of the host automatically.  However if for
521 some reason there is a problem, this option can be used to override
522 autoconf.
526 --enable-sim-smp=n
529 Set the maximum number of processors that PSIM can model.
531 Psim can model (with small limitation discussed else where) a
532 multi-processor PowerPC environment.  While the overhead of
533 co-ordinating the execution of a number of processors is relatively
534 small it is still significant when compared to handling only one
535 processor.
537 This option only sets the maximum number of processors that can be
538 simulated.  The number active during a given simulation run us
539 determined at run time.
541 Ex: default
543 By default 5 processors are configured but only one is enabled.
544 Additional processors can be enabled with the runtime option:
546         -o '/openprom/options/smp 5'
548 Ex: recommended
550 Unless you intend studying multi-processor systems there is little reason for having PSIM configured with SMP support.  Specifying:
552         --disable-sim-smp
553 or      --enable-sim-smp=0
555 will eliminate any SMP such as:
557         for (cpu = 0; cpu < nr_cpus; cpu++)
558                 ...
562 --enable-sim-xor-endian=n
565 Set the byte-size of the bus involved in the PowerPC's xor endian byte
566 swapping.
568 The PowerPC's implementation of BE/LE mode is different to what a
569 programmer may first expect.  The details of this implementation are
570 discussed at length in PowerPC documentation.
572 Ex: default
574 By default this is configured with a value of 8 (the bus size of most
575 60x processors).
577 Ex: recommended
579 Unless you are expecting to test/debug PowerPC be/le switching code
580 this option is of little use and should be disabled:
582         --disable-sim-xor-endian
586 --enable-sim-bitsize=n
589 Specify the bit size (32/64) of the PowerPC to be modelled.
591 Note: By default 32 is specified.  The implementation of the 64bit
592 architecture is still under development.
595 --enable-sim-hostbitsize=32|64
597 As above but for the host.
599 NOTE: Psim has yet to be built on a 64bit host.
603 --enable-sim-env=env
606 Hardwire the PowerPC environment being modelled (user, virtual or
607 operating).
609 The PowerPC architecture defines three different levels of compliance
610 to its architectural specification.  These environments are discussed in detail in PowerPC publications.
612         user - normal user programs 
613         virtual - an extension of the user environment (includes timers)
614         operating - kernel code
616 Ex: default
618 By default all three environments are supported.
620 Ex: recommended
622 If you only intend running psim with user (or operating) code then
623 PSIM should be configured accordingly.  For user code, it eliminates:
624 support for timers and events and redundant VM calls.
628 --enable-sim-timebase
631 Enable/disable the time base register.
633 The PowerPC architecture (virtual environment) includes a time base
634 register.  Maintaining that register incurs an overhead in
635 performance that can be eliminated by eliminating time-base register
636 support.
638 Ex: default
640 Normally this option is not used.  Instead --enable-sim-env (above) us
641 used to disable/enable features such as the timebase register.
645 --enable-sim-alignment=align
648 Control the PowerPC's memory access alignment restrictions.
650 The PowerPC in LE mode only allows memory transfers of a correctly
651 aligned size/address.  The above option controls how misaligned
652 accesses are handled.
654         strict          All accesses must be correctly aligned
656         nonstrict       Unaligned access allowed (the are split
657                         into a number of aligned accesses).
659 Ex: default
661 Unless otherwise specified PSIM will auto configure a BE program to
662 allow miss-aligned accesses while a LE program will not.
664 Ex: 604e
666 The recently announced 604e processor allows miss-aligned accesses in both
667 BE and LE modes.  If modeling the 604e then you should specify:
669         --enable-sim-alignment=nonstrict
673 --enable-sim-trace
676 Include code to trace PSIM's internal progress (also controlled by the
677 -t option).
679 Checking to see if a trace message should be output slows down a
680 simulation.  Disabling this option (--disable-sim-trace) eliminates
681 completely that code.
685 --enable-sim-assert
688 Include the code that checks the correctness of parts of PSIM.
690 Eliminating such code (--disable-sim-assert) eliminates internal
691 consistency tests and their overhead.
695 --enable-sim-reserved-bits
698 Include code to check that the reserved fields of the instruction are
699 zero.
701 The PowerPC architecture defines certain fields of some instructions
702 as reserved (`/').  By default, for each instruction, PSIM will check
703 the reserved fields causing an invalid instruction exception if a
704 field is invalid.  Disabling this option eliminates this test.  This
705 is at the slight risk of PSIM treating an invalid instruction as
706 valid.
710 --enable-sim-float
713 Include support for hardware floating point.
717 --enable-sim-monitor=mon
720 Include support for basic instruction counting.
722 If you are not interested in the performance of either you program or
723 the simulator then you can disable this option.
727 --enable-sim-model=which
729 Hardwire the processor that will be used as a reference when modeling
730 execution units.
734 --enable-sim-default-model=which
737 Specify the processor of choice for the execution unit model.
741 --enable-sim-model-issue
744 Include support for the modeling of processor execution units.
746     ----------------------------------------------------------------------
748 TYPICAL CONFIGURATION OPTIONS:
751         VEA CODE ONLY:
753         Here of note are:
755                 o       ramp up the compiler options (some
756                         of the below are P5 specific).
758                 o       disable anything not used
760         CC=gcc ./configure \
761                 --prefix=/applications/psim \
762                 --target=powerpc-unknown-eabi \
763                 --enable-sim-powerpc \
764                 --enable-sim-warnings \
765                 --enable-sim-inline \
766                 --disable-sim-smp \
767                 --enable-sim-bswap \
768                 --enable-sim-duplicate \
769                 --enable-sim-endian=big \
770                 --disable-sim-xor-endian \
771                 --enable-sim-env=user \
772                 --disable-sim-reserved-bits \
773                 --disable-sim-assert \
774                 --disable-sim-trace \
775                 --enable-sim-cflags='-g0 -O2 -fno-strength-reduce -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2'
778         OEA CODE ONLY:
780         The key configuration changes are:
782                 o       turn off the instruction cache.  The overhead
783                         of flushing and reloading it is greater than
784                         not having a cache.
786                 o       use a switch statement (ppc-opcode-flat) for
787                         the instruction decode and then (-O3) fully
788                         inline all functions.
790                 o       --enable-sim-warnings is not present.  GCC (2.7.2)
791                         gets confused by the instruction decode table
792                         generated by igen (contains a perfect switch)
793                         and, as a consequence, generates a bogus warning.
795         CC=gcc ./configure \
796                 --prefix=/applications/psim \
797                 --target=powerpc-unknown-eabi \
798                 --enable-sim-powerpc \
799                 --enable-sim-inline \
800                 --disable-sim-smp \
801                 --enable-sim-bswap \
802                 --enable-sim-duplicate \
803                 --enable-sim-endian=big \
804                 --disable-sim-xor-endian \
805                 --enable-sim-env=operating \
806                 --disable-sim-reserved-bits \
807                 --disable-sim-assert \
808                 --disable-sim-trace \
809                 --enable-sim-opcode=ppc-opcode-flat \
810                 --disable-sim-icache \
811                 --enable-sim-cflags='-g0 -O3 -fno-strength-reduce -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2'