]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - sim/common/sim-config.h
Update years in copyright notice for the GDB files.
[thirdparty/binutils-gdb.git] / sim / common / sim-config.h
index 1205920ab88f9fd1ca03f003eca4509deb2d3b6e..616ec17e5fad21abc4472e86fe5b7bc8c5f98662 100644 (file)
@@ -1,26 +1,28 @@
-/*  This file is part of the program psim.
+/* The common simulator framework for GDB, the GNU Debugger.
 
-    Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au>
+   Copyright 2002-2013 Free Software Foundation, Inc.
 
-    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.
+   Contributed by Andrew Cagney and Red Hat.
 
-    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 file is part of GDB.
 
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+
+#ifndef SIM_CONFIG_H
+#define SIM_CONFIG_H
 
-#ifndef _PSIM_CONFIG_H_
-#define _PSIM_CONFIG_H_
 
 /* Host dependant:
 
@@ -55,7 +57,6 @@
 
 #if defined(__linux__)
 # include <endian.h>
-# include <asm/byteorder.h>
 # if defined(__LITTLE_ENDIAN) && !defined(LITTLE_ENDIAN)
 #  define LITTLE_ENDIAN __LITTLE_ENDIAN
 # endif
 
 /* INSERT HERE - additional hosts that do not have LITTLE_ENDIAN and
    BIG_ENDIAN definitions available.  */
+\f
+/* Until devices and tree properties are sorted out, tell sim-config.c
+   not to call the tree_find_foo fns.  */
+#define WITH_TREE_PROPERTIES 0
 
 
 /* endianness of the host/target:
 #define WITH_TARGET_BYTE_ORDER         0 /*unknown*/
 #endif
 
+#ifndef WITH_DEFAULT_TARGET_BYTE_ORDER
+#define WITH_DEFAULT_TARGET_BYTE_ORDER 0 /* fatal */
+#endif
+
 extern int current_host_byte_order;
 #define CURRENT_HOST_BYTE_ORDER (WITH_HOST_BYTE_ORDER \
                                 ? WITH_HOST_BYTE_ORDER \
@@ -235,12 +244,16 @@ extern int current_target_byte_order;
 
 /* XOR endian.
 
-   In addition to the above, the simulator can support the's horrible
-   XOR endian mode (for instance implemented by the PowerPC).  This
-   feature makes it possible to control the endian mode of a processor
-   using the MSR. */
+   In addition to the above, the simulator can support the horrible
+   XOR endian mode (as found in the PowerPC and MIPS ISA).  See
+   sim-core for more information.
 
-/* #define WITH_XOR_ENDIAN             8 */
+   If WITH_XOR_ENDIAN is non-zero, it specifies the number of bytes
+   potentially involved in the XOR munge. A typical value is 8. */
+
+#ifndef WITH_XOR_ENDIAN
+#define WITH_XOR_ENDIAN                0
+#endif
 
 
 
@@ -258,37 +271,43 @@ extern int current_target_byte_order;
 
    Sets a limit on the number of processors that can be simulated.  If
    WITH_SMP is set to zero (0), the simulator is restricted to
-   suporting only on processor (and as a consequence leaves the SMP
+   suporting only one processor (and as a consequence leaves the SMP
    code out of the build process).
 
    The actual number of processors is taken from the device
    /options/smp@<nr-cpu> */
 
-#if defined (WITH_SMP)
-
-#if WITH_SMP
+#if defined (WITH_SMP) && (WITH_SMP > 0)
 #define MAX_NR_PROCESSORS              WITH_SMP
-#else
-#define MAX_NR_PROCESSORS              1
 #endif
 
+#ifndef MAX_NR_PROCESSORS
+#define MAX_NR_PROCESSORS              1
 #endif
 
 
+/* Size of target word, address and OpenFirmware Cell:
 
-/* Word size of host/target:
+   The target word size is determined by the natural size of its
+   reginsters.
 
-   Set these according to your host and target requirements.  At this
-   point in time, I've only compiled (not run) for a 64bit and never
-   built for a 64bit host.  This will always remain a compile time
-   option */
+   On most hosts, the address and cell are the same size as a target
+   word.  */
 
 #ifndef WITH_TARGET_WORD_BITSIZE
-#define WITH_TARGET_WORD_BITSIZE        32 /* compiled only */
+#define WITH_TARGET_WORD_BITSIZE        32
 #endif
 
-#ifndef WITH_HOST_WORD_BITSIZE
-#define WITH_HOST_WORD_BITSIZE         32 /* 64bit ready? */
+#ifndef WITH_TARGET_ADDRESS_BITSIZE
+#define WITH_TARGET_ADDRESS_BITSIZE    WITH_TARGET_WORD_BITSIZE
+#endif
+
+#ifndef WITH_TARGET_CELL_BITSIZE
+#define WITH_TARGET_CELL_BITSIZE       WITH_TARGET_WORD_BITSIZE
+#endif
+
+#ifndef WITH_TARGET_FLOATING_POINT_BITSIZE
+#define WITH_TARGET_FLOATING_POINT_BITSIZE 64
 #endif
 
 
@@ -314,48 +333,62 @@ extern int current_target_byte_order;
    expect to see (VEA includes things like coherency and the time
    base) while OEA is what an operating system expects to see.  By
    setting these to specific values, the build process is able to
-   eliminate non relevent environment code
+   eliminate non relevent environment code.
 
-   CURRENT_ENVIRONMENT specifies which of vea or oea is required for
-   the current runtime. */
+   STATE_ENVIRONMENT(sd) specifies which of vea or oea is required for
+   the current runtime.
 
-#if defined (WITH_ENVIRONMENT)
+   ALL_ENVIRONMENT is used during configuration as a value for
+   WITH_ENVIRONMENT to indicate the choice is runtime selectable.
+   The default is then USER_ENVIRONMENT [since allowing the user to choose
+   the default at configure time seems like featuritis and since people using
+   OPERATING_ENVIRONMENT have more to worry about than selecting the
+   default].
+   ALL_ENVIRONMENT is also used to set STATE_ENVIRONMENT to the
+   "uninitialized" state.  */
 
-#define USER_ENVIRONMENT               1
-#define VIRTUAL_ENVIRONMENT            2
-#define OPERATING_ENVIRONMENT          3
+enum sim_environment {
+  ALL_ENVIRONMENT,
+  USER_ENVIRONMENT,
+  VIRTUAL_ENVIRONMENT,
+  OPERATING_ENVIRONMENT
+};
 
-extern int current_environment;
-#define CURRENT_ENVIRONMENT (WITH_ENVIRONMENT \
-                            ? WITH_ENVIRONMENT \
-                            : current_environment)
+/* If the simulator specified SIM_AC_OPTION_ENVIRONMENT, indicate so.  */
+#ifdef WITH_ENVIRONMENT
+#define SIM_HAVE_ENVIRONMENT
+#endif
 
+/* If the simulator doesn't specify SIM_AC_OPTION_ENVIRONMENT in its
+   configure.in, the only supported environment is the user environment.  */
+#ifndef WITH_ENVIRONMENT
+#define WITH_ENVIRONMENT USER_ENVIRONMENT
 #endif
 
+#define DEFAULT_ENVIRONMENT (WITH_ENVIRONMENT != ALL_ENVIRONMENT \
+                            ? WITH_ENVIRONMENT \
+                            : USER_ENVIRONMENT)
 
+/* To be prepended to simulator calls with absolute file paths and
+   chdir:ed at startup.  */
+extern char *simulator_sysroot;
 
-/* Callback/Default Memory.
+/* Callback & Modulo Memory.
 
    Core includes a builtin memory type (raw_memory) that is
    implemented using an array.  raw_memory does not require any
    additional functions etc.
 
    Callback memory is where the core calls a core device for the data
-   it requires.
+   it requires.  Callback memory can be layered using priorities.
 
-   Default memory is an extenstion of this where for addresses that do
-   not map into either a callback or core memory range a default map
-   can be used.
+   Modulo memory is a variation on raw_memory where ADDRESS & (MODULO
+   - 1) is used as the index into the memory array.
 
-   The OEA model uses callback memory for devices and default memory
-   for buses.
+   The OEA model uses callback memory for devices.
 
    The VEA model uses callback memory to capture `page faults'.
 
-   While it may be possible to eliminate callback/default memory (and
-   hence also eliminate an additional test per memory fetch) it
-   probably is not worth the effort.
-
    BTW, while raw_memory could have been implemented as a callback,
    profiling has shown that there is a biger win (at least for the
    x86) in eliminating a function call for the most common
@@ -365,33 +398,50 @@ extern int current_environment;
 #define WITH_CALLBACK_MEMORY           1
 #endif
 
+#ifndef WITH_MODULO_MEMORY
+#define WITH_MODULO_MEMORY              0
+#endif
+
 
 
 /* Alignment:
 
-   The PowerPC may or may not handle miss aligned transfers.  An
-   implementation normally handles miss aligned transfers in big
-   endian mode but generates an exception in little endian mode.
+   A processor architecture may or may not handle miss aligned
+   transfers.
+
+   As alternatives: both little and big endian modes take an exception
+   (STRICT_ALIGNMENT); big and little endian models handle mis aligned
+   transfers (NONSTRICT_ALIGNMENT); or the address is forced into
+   alignment using a mask (FORCED_ALIGNMENT).
 
-   This model.  Instead allows both little and big endian modes to
-   either take exceptions or handle miss aligned transfers.
+   Mixed alignment should be specified when the simulator needs to be
+   able to change the alignment requirements on the fly (eg for
+   bi-endian support). */
+
+enum sim_alignments {
+  MIXED_ALIGNMENT,
+  NONSTRICT_ALIGNMENT,
+  STRICT_ALIGNMENT,
+  FORCED_ALIGNMENT,
+};
+
+extern enum sim_alignments current_alignment;
+
+#if !defined (WITH_ALIGNMENT)
+#define WITH_ALIGNMENT 0
+#endif
+
+#if !defined (WITH_DEFAULT_ALIGNMENT)
+#define WITH_DEFAULT_ALIGNMENT 0 /* fatal */
+#endif
 
-   If 0 is specified then for big-endian mode miss alligned accesses
-   are permitted (NONSTRICT_ALIGNMENT) while in little-endian mode the
-   processor will fault on them (STRICT_ALIGNMENT). */
 
-#if defined (WITH_ALIGNMENT)
 
-#define NONSTRICT_ALIGNMENT                    1
-#define STRICT_ALIGNMENT               2
 
-extern int current_alignment;
 #define CURRENT_ALIGNMENT (WITH_ALIGNMENT \
                           ? WITH_ALIGNMENT \
                           : current_alignment)
 
-#endif
-
 
 
 /* Floating point suport:
@@ -414,15 +464,40 @@ extern int current_floating_point;
 
 
 
+/* Engine module.
+
+   Use the common start/stop/restart framework (sim-engine).
+   Simulators using the other modules but not the engine should define
+   WITH_ENGINE=0. */
+
+#ifndef WITH_ENGINE
+#define WITH_ENGINE                    1
+#endif
+
+
+
 /* Debugging:
 
-   Control the inclusion of debugging code. */
+   Control the inclusion of debugging code.
+   Debugging is only turned on in rare circumstances [say during development]
+   and is not intended to be turned on otherwise.  */
+
+#ifndef WITH_DEBUG
+#define WITH_DEBUG                     0
+#endif
 
 /* Include the tracing code.  Disabling this eliminates all tracing
    code */
 
 #ifndef WITH_TRACE
-#define WITH_TRACE                      1
+#define WITH_TRACE                      (-1)
+#endif
+
+/* Include the profiling code.  Disabling this eliminates all profiling
+   code.  */
+
+#ifndef WITH_PROFILE
+#define WITH_PROFILE                   (-1)
 #endif
 
 
@@ -507,30 +582,17 @@ extern int current_stdio;
 #endif
 
 
-/* complete/verify/print the simulator configuration */
+/* Set the default state configuration, before parsing argv.  */
 
+extern void sim_config_default (SIM_DESC sd);
 
-/* For prefered_target_byte_order arugment */
+/* Complete and verify the simulator configuration.  */
 
-#if defined (bfd_little_endian)
-#define PREFERED_TARGET_BYTE_ORDER(IMAGE) ((IMAGE) == NULL \
-                                          ? 0 \
-                                          : bfd_little_endian(IMAGE) \
-                                          ? LITTLE_ENDIAN \
-                                          : BIG_ENDIAN)
-#else
-#define PREFERED_TARGET_BYTE_ORDER(IMAGE) ((IMAGE) == NULL \
-                                          ? 0 \
-                                          : !(IMAGE)->xvec->byteorder_big_p \
-                                          ? LITTLE_ENDIAN \
-                                          : BIG_ENDIAN)
-#endif
+extern SIM_RC sim_config (SIM_DESC sd);
 
-
-extern void sim_config (SIM_DESC sd,
-                       int prefered_target_byte_order);
+/* Print the simulator configuration.  */
 
 extern void print_sim_config (SIM_DESC sd);
 
 
-#endif /* _PSIM_CONFIG_H */
+#endif