X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=sim%2Fcommon%2Fsim-model.h;h=690e95ffbddee6ec00b7657bc8553ab6543c6c66;hb=584a927c5ad0d18e9995a0049066b6c503bb7482;hp=d24a2729e6edbbe7aa34b73412efbdea76a52b39;hpb=e4d013fc0f3df3200be2dca48ed2e330e8a4ddf9;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/common/sim-model.h b/sim/common/sim-model.h index d24a2729e6..690e95ffbd 100644 --- a/sim/common/sim-model.h +++ b/sim/common/sim-model.h @@ -1,6 +1,5 @@ /* Architecture, machine, and model support. - Copyright (C) 1997, 1998, 1999, 2007, 2008, 2009 - Free Software Foundation, Inc. + Copyright (C) 1997-2019 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. @@ -22,6 +21,11 @@ along with this program. If not, see . */ architecture = one of sparc, mips, sh, etc. in the sparc architecture, mach = one of v6, v7, v8, sparclite, etc. in the v8 mach, model = one of supersparc, etc. + + To use the model framework, your arch needs to do a few things: + (1) Call SIM_AC_OPTION_DEFAULT_MODEL() in configure.ac. + (2) Define enum mach_attr in sim-main.h. + (3) Define sim_machs array (and all the callbacks it uses). */ /* This file is intended to be included by sim-basics.h. */ @@ -43,6 +47,15 @@ typedef struct { #define MAX_UNITS 1 #endif +#ifndef WITH_DEFAULT_MODEL +/* Just a stub for ports that do not define models. */ +enum mach_attr { _MACH_NONE }; +# define WITH_DEFAULT_MODEL NULL +# define WITH_MODEL_P 0 +#else +# define WITH_MODEL_P 1 +#endif + typedef int (MODEL_FN) (sim_cpu *, void *); typedef struct { @@ -69,7 +82,7 @@ typedef struct { This is zero if the SCACHE isn't in use for this variant. */ int scache_elm_size; #define IMP_PROPS_SCACHE_ELM_SIZE(cpu_props) ((cpu_props)->scache_elm_size) -} MACH_IMP_PROPERTIES; +} SIM_MACH_IMP_PROPERTIES; /* A machine variant. */ @@ -93,7 +106,7 @@ typedef struct { #define MACH_MODELS(m) ((m)->models) /* Pointer to the implementation properties of this mach. */ - const MACH_IMP_PROPERTIES *imp_props; + const SIM_MACH_IMP_PROPERTIES *imp_props; #define MACH_IMP_PROPS(m) ((m)->imp_props) /* Called by sim_model_set when the model of a cpu is set. */ @@ -104,14 +117,14 @@ typedef struct { Used by cgen simulators to initialize the insn descriptor table. */ void (* prepare_run) (sim_cpu *); #define MACH_PREPARE_RUN(m) ((m)->prepare_run) -} MACH; +} SIM_MACH; /* A model (implementation) of a machine. */ typedef struct model { const char *name; #define MODEL_NAME(m) ((m)->name) - const MACH *mach; + const SIM_MACH *mach; #define MODEL_MACH(m) ((m)->mach) /* An enum that distinguished the model. */ int num; @@ -121,21 +134,21 @@ typedef struct model { #define MODEL_TIMING(m) ((m)->timing) void (* init) (sim_cpu *); #define MODEL_INIT(m) ((m)->init) -} MODEL; +} SIM_MODEL; /* Tables of supported machines. */ /* ??? In a simulator of multiple architectures, will need multiple copies of this. Have an `archs' array that contains a pointer to the machs array for each (which in turn has a pointer to the models array for each). */ -extern const MACH *sim_machs[]; +extern const SIM_MACH *sim_machs[]; /* Model module handlers. */ extern MODULE_INSTALL_FN sim_model_install; /* Support routines. */ -extern void sim_model_set (SIM_DESC sd_, sim_cpu *cpu_, const MODEL *model_); -extern const MODEL * sim_model_lookup (const char *name_); -extern const MACH * sim_mach_lookup (const char *name_); -extern const MACH * sim_mach_lookup_bfd_name (const char *bfd_name_); +extern void sim_model_set (SIM_DESC sd_, sim_cpu *cpu_, const SIM_MODEL *model_); +extern const SIM_MODEL *sim_model_lookup (const char *name_); +extern const SIM_MACH *sim_mach_lookup (const char *name_); +extern const SIM_MACH *sim_mach_lookup_bfd_name (const char *bfd_name_); #endif /* SIM_MODEL_H */