xref: /netbsd-src/external/gpl3/gdb/dist/sim/common/sim-basics.h (revision 88241920d21b339bf319c0e979ffda80c49a2936)
14e98e3e1Schristos /* The common simulator framework for GDB, the GNU Debugger.
24e98e3e1Schristos 
3*88241920Schristos    Copyright 2002-2024 Free Software Foundation, Inc.
44e98e3e1Schristos 
54e98e3e1Schristos    Contributed by Andrew Cagney and Red Hat.
64e98e3e1Schristos 
74e98e3e1Schristos    This file is part of GDB.
84e98e3e1Schristos 
94e98e3e1Schristos    This program is free software; you can redistribute it and/or modify
104e98e3e1Schristos    it under the terms of the GNU General Public License as published by
114e98e3e1Schristos    the Free Software Foundation; either version 3 of the License, or
124e98e3e1Schristos    (at your option) any later version.
134e98e3e1Schristos 
144e98e3e1Schristos    This program is distributed in the hope that it will be useful,
154e98e3e1Schristos    but WITHOUT ANY WARRANTY; without even the implied warranty of
164e98e3e1Schristos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
174e98e3e1Schristos    GNU General Public License for more details.
184e98e3e1Schristos 
194e98e3e1Schristos    You should have received a copy of the GNU General Public License
204e98e3e1Schristos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
214e98e3e1Schristos 
224e98e3e1Schristos 
23212397c6Schristos #ifndef SIM_BASICS_H
24212397c6Schristos #define SIM_BASICS_H
254e98e3e1Schristos 
264e98e3e1Schristos 
274e98e3e1Schristos /* Basic configuration */
284e98e3e1Schristos 
294b169a6bSchristos #include "defs.h"
304e98e3e1Schristos 
314e98e3e1Schristos /* Basic host dependant mess - hopefully <stdio.h> + <stdarg.h> will
324e98e3e1Schristos    bring potential conflicts out in the open */
334e98e3e1Schristos 
344b169a6bSchristos #include <setjmp.h>
354e98e3e1Schristos #include <stdarg.h>
364e98e3e1Schristos #include <stdio.h>
374e98e3e1Schristos 
384e98e3e1Schristos 
39ba340e45Schristos #ifndef min
40ba340e45Schristos #define min(a, b) ((a) < (b) ? (a) : (b))
41ba340e45Schristos #endif
42ba340e45Schristos #ifndef max
43ba340e45Schristos #define max(a, b) ((a) > (b) ? (a) : (b))
44ba340e45Schristos #endif
45ba340e45Schristos 
464e98e3e1Schristos 
474e98e3e1Schristos /* Global types that code manipulates */
484e98e3e1Schristos 
494e98e3e1Schristos struct hw;
504e98e3e1Schristos struct _sim_fpu;
514e98e3e1Schristos 
524e98e3e1Schristos 
534e98e3e1Schristos /* Generic address space (maps) and access attributes */
544e98e3e1Schristos 
554e98e3e1Schristos enum {
564e98e3e1Schristos   read_map = 0,
574e98e3e1Schristos   write_map = 1,
584e98e3e1Schristos   exec_map = 2,
594e98e3e1Schristos   io_map = 3,
604e98e3e1Schristos   nr_maps = 32, /* something small */
614e98e3e1Schristos };
624e98e3e1Schristos 
634e98e3e1Schristos enum {
644e98e3e1Schristos   access_invalid = 0,
654e98e3e1Schristos   access_read = 1 << read_map,
664e98e3e1Schristos   access_write = 1 << write_map,
674e98e3e1Schristos   access_exec = 1 << exec_map,
684e98e3e1Schristos   access_io = 1 << io_map,
694e98e3e1Schristos };
704e98e3e1Schristos 
714e98e3e1Schristos enum {
724e98e3e1Schristos   access_read_write = (access_read | access_write),
734e98e3e1Schristos   access_read_exec = (access_read | access_exec),
744e98e3e1Schristos   access_write_exec = (access_write | access_exec),
754e98e3e1Schristos   access_read_write_exec = (access_read | access_write | access_exec),
764e98e3e1Schristos   access_read_io = (access_read | access_io),
774e98e3e1Schristos   access_write_io = (access_write | access_io),
784e98e3e1Schristos   access_read_write_io = (access_read | access_write | access_io),
794e98e3e1Schristos   access_exec_io = (access_exec | access_io),
804e98e3e1Schristos   access_read_exec_io = (access_read | access_exec | access_io),
814e98e3e1Schristos   access_write_exec_io = (access_write | access_exec | access_io),
824e98e3e1Schristos   access_read_write_exec_io = (access_read | access_write | access_exec | access_io),
834e98e3e1Schristos };
844e98e3e1Schristos 
854e98e3e1Schristos 
864e98e3e1Schristos /* disposition of an object when things are reset */
874e98e3e1Schristos 
884e98e3e1Schristos typedef enum {
89*88241920Schristos   permanent_object,
904e98e3e1Schristos   temporary_object,
914e98e3e1Schristos } object_disposition;
924e98e3e1Schristos 
934e98e3e1Schristos 
944e98e3e1Schristos /* Memory transfer types */
954e98e3e1Schristos 
964e98e3e1Schristos typedef enum _transfer_type {
974e98e3e1Schristos   read_transfer,
984e98e3e1Schristos   write_transfer,
994e98e3e1Schristos } transfer_type;
1004e98e3e1Schristos 
1014e98e3e1Schristos 
1024e98e3e1Schristos /* directions */
1034e98e3e1Schristos 
1044e98e3e1Schristos typedef enum {
1054e98e3e1Schristos   bidirect_port,
1064e98e3e1Schristos   input_port,
1074e98e3e1Schristos   output_port,
1084e98e3e1Schristos } port_direction;
1094e98e3e1Schristos 
1104e98e3e1Schristos 
1114e98e3e1Schristos 
1124e98e3e1Schristos /* Basic definitions - ordered so that nothing calls what comes after it.  */
1134e98e3e1Schristos 
1144b169a6bSchristos #include "sim/sim.h"
1154e98e3e1Schristos 
1164e98e3e1Schristos #include "sim-config.h"
1174e98e3e1Schristos 
1184e98e3e1Schristos #include "sim-inline.h"
1194e98e3e1Schristos 
1204e98e3e1Schristos #include "sim-types.h"
1214e98e3e1Schristos #include "sim-bits.h"
1224e98e3e1Schristos #include "sim-endian.h"
1234e98e3e1Schristos 
1244e98e3e1Schristos #include "sim-utils.h"
1254e98e3e1Schristos 
1264e98e3e1Schristos /* Note: Only the simpler interfaces are defined here.  More heavy
1274e98e3e1Schristos    weight objects, such as core and events, are defined in the more
1284e98e3e1Schristos    serious sim-base.h header. */
1294e98e3e1Schristos 
130212397c6Schristos #endif /* SIM_BASICS_H */
131