sim: invert sim_state storage

Currently all ports have to declare sim_state themselves in their
sim-main.h and then embed the common sim_state_base & sim_cpu in it.
This dynamic makes it impossible to share common object code among
multiple ports because the core data structure is always different.

Let's invert this relationship: common code declares sim_state, and
if the port actually needs state on a per-instance basis, it can use
the new arch_data field for it.  Most ports don't actually use it,
so they don't need to declare anything at all.

This is the first in a series of changes: it adds a define to select
between the old & new layouts, then converts all the ports that don't
need custom state over to the new layout.
This commit is contained in:
Mike Frysinger 2016-01-21 21:00:25 -05:00
parent 92bc001e1f
commit 383861bd08
33 changed files with 143 additions and 124 deletions

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* cpustate.c: Include defs.h. * cpustate.c: Include defs.h.

View File

@ -22,6 +22,8 @@
#ifndef _SIM_MAIN_H #ifndef _SIM_MAIN_H
#define _SIM_MAIN_H #define _SIM_MAIN_H
#define SIM_HAVE_COMMON_SIM_STATE
#include "sim-basics.h" #include "sim-basics.h"
#include "sim-types.h" #include "sim-types.h"
#include "sim-base.h" #include "sim-base.h"
@ -60,11 +62,4 @@ typedef enum
AARCH64_MAX_REGNO = 67 AARCH64_MAX_REGNO = 67
} aarch64_regno; } aarch64_regno;
/* The simulator state structure used to hold all global variables. */
struct sim_state
{
sim_cpu * cpu[MAX_NR_PROCESSORS];
sim_state_base base;
};
#endif /* _SIM_MAIN_H */ #endif /* _SIM_MAIN_H */

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* armcopro.c, armemu.c, arminit.c, armsupp.c, armvirt.c, iwmmxt.c, * armcopro.c, armemu.c, arminit.c, armsupp.c, armvirt.c, iwmmxt.c,

View File

@ -19,6 +19,8 @@
#ifndef SIM_MAIN_H #ifndef SIM_MAIN_H
#define SIM_MAIN_H #define SIM_MAIN_H
#define SIM_HAVE_COMMON_SIM_STATE
#include "sim-basics.h" #include "sim-basics.h"
#include "sim-base.h" #include "sim-base.h"
#include "bfd.h" #include "bfd.h"
@ -33,11 +35,4 @@ struct _sim_cpu {
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state {
sim_cpu *cpu[MAX_NR_PROCESSORS];
sim_state_base base;
};
#endif #endif

View File

@ -1,3 +1,13 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-base.h (struct sim_state): Update comment.
(struct sim_state): Define.
(STATE_ARCH_DATA): Likewise.
(sim_state_alloc): New define.
(sim_state_alloc_extra): Renamed & add 3rd arg.
* sim-utils.c (sim_state_alloc): Likewise.
(sim_state_alloc_extra): Set arch data.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* callback.c: Replace config.h include with defs.h. * callback.c: Replace config.h include with defs.h.

View File

@ -42,14 +42,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state { If your sim needs to allocate sim-wide state, use STATE_ARCH_DATA. */
sim_cpu *cpu[MAX_NR_PROCESSORS];
... simulator specific members ...
sim_state_base base;
};
Note that `base' appears last. This makes `base.magic' appear last
in the entire struct and helps catch miscompilation errors. */
#ifndef SIM_BASE_H #ifndef SIM_BASE_H
@ -226,8 +219,27 @@ typedef struct {
#define STATE_MAGIC(sd) ((sd)->base.magic) #define STATE_MAGIC(sd) ((sd)->base.magic)
} sim_state_base; } sim_state_base;
#ifdef SIM_HAVE_COMMON_SIM_STATE
/* TODO: Merge sim_state & sim_state_base. */
struct sim_state {
/* All the cpus for this instance. */
sim_cpu *cpu[MAX_NR_PROCESSORS];
/* All the common state. */
sim_state_base base;
/* Pointer for sim target to store arbitrary state data. Normally the
target should define a struct and use it here. */
void *arch_data;
#define STATE_ARCH_DATA(sd) ((sd)->arch_data)
};
#endif
/* Functions for allocating/freeing a sim_state. */ /* Functions for allocating/freeing a sim_state. */
SIM_DESC sim_state_alloc (SIM_OPEN_KIND kind, host_callback *callback); SIM_DESC sim_state_alloc_extra (SIM_OPEN_KIND kind, host_callback *callback,
size_t extra_bytes);
#define sim_state_alloc(kind, callback) sim_state_alloc_extra(kind, callback, 0)
void sim_state_free (SIM_DESC); void sim_state_free (SIM_DESC);
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -48,8 +48,8 @@ zalloc (unsigned long size)
/* Allocate a sim_state struct. */ /* Allocate a sim_state struct. */
SIM_DESC SIM_DESC
sim_state_alloc (SIM_OPEN_KIND kind, sim_state_alloc_extra (SIM_OPEN_KIND kind, host_callback *callback,
host_callback *callback) size_t extra_bytes)
{ {
SIM_DESC sd = ZALLOC (struct sim_state); SIM_DESC sd = ZALLOC (struct sim_state);
@ -57,6 +57,11 @@ sim_state_alloc (SIM_OPEN_KIND kind,
STATE_CALLBACK (sd) = callback; STATE_CALLBACK (sd) = callback;
STATE_OPEN_KIND (sd) = kind; STATE_OPEN_KIND (sd) = kind;
#ifdef SIM_HAVE_COMMON_SIM_STATE
if (extra_bytes)
STATE_ARCH_DATA (sd) = zalloc (extra_bytes);
#endif
#if 0 #if 0
{ {
int cpu_nr; int cpu_nr;

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* cr16_sim.h: Delete config.h include. * cr16_sim.h: Delete config.h include.

View File

@ -19,6 +19,8 @@
#ifndef SIM_MAIN_H #ifndef SIM_MAIN_H
#define SIM_MAIN_H #define SIM_MAIN_H
#define SIM_HAVE_COMMON_SIM_STATE
#include "sim-basics.h" #include "sim-basics.h"
typedef long int word; typedef long int word;
@ -34,11 +36,4 @@ struct _sim_cpu {
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state {
sim_cpu *cpu[MAX_NR_PROCESSORS];
sim_state_base base;
};
#endif #endif

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* d10v_sim.h, gencode.c: Delete config.h include. * d10v_sim.h, gencode.c: Delete config.h include.

View File

@ -19,6 +19,8 @@
#ifndef SIM_MAIN_H #ifndef SIM_MAIN_H
#define SIM_MAIN_H #define SIM_MAIN_H
#define SIM_HAVE_COMMON_SIM_STATE
#include "sim-basics.h" #include "sim-basics.h"
typedef long int word; typedef long int word;
@ -34,11 +36,4 @@ struct _sim_cpu {
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state {
sim_cpu *cpu[MAX_NR_PROCESSORS];
sim_state_base base;
};
#endif #endif

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* interp.c, sim-main.c: Replace config.h include with defs.h. * interp.c, sim-main.c: Replace config.h include with defs.h.

View File

@ -21,6 +21,8 @@
#ifndef SIM_MAIN_H #ifndef SIM_MAIN_H
#define SIM_MAIN_H #define SIM_MAIN_H
#define SIM_HAVE_COMMON_SIM_STATE
#include "sim-basics.h" #include "sim-basics.h"
#include "sim-base.h" #include "sim-base.h"
@ -36,13 +38,6 @@ struct _sim_cpu {
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state {
sim_cpu *cpu[MAX_NR_PROCESSORS];
/* ... simulator specific members ... */
sim_state_base base;
};
extern void step_once (SIM_CPU *); extern void step_once (SIM_CPU *);
extern void initialize_cpu (SIM_DESC, SIM_CPU *); extern void initialize_cpu (SIM_DESC, SIM_CPU *);

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* interp.c: Replace config.h include with defs.h. * interp.c: Replace config.h include with defs.h.

View File

@ -21,6 +21,8 @@
#ifndef SIM_MAIN_H #ifndef SIM_MAIN_H
#define SIM_MAIN_H #define SIM_MAIN_H
#define SIM_HAVE_COMMON_SIM_STATE
#include "sim-basics.h" #include "sim-basics.h"
#include "sim-base.h" #include "sim-base.h"
#include "bfd.h" #include "bfd.h"
@ -36,11 +38,4 @@ struct _sim_cpu {
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state {
sim_cpu *cpu[MAX_NR_PROCESSORS];
sim_state_base base;
};
#endif #endif

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* dv-m68hc11.c, dv-m68hc11eepr.c, dv-m68hc11sio.c, dv-m68hc11spi.c, * dv-m68hc11.c, dv-m68hc11eepr.c, dv-m68hc11sio.c, dv-m68hc11spi.c,

View File

@ -20,6 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef _SIM_MAIN_H #ifndef _SIM_MAIN_H
#define _SIM_MAIN_H #define _SIM_MAIN_H
#define SIM_HAVE_COMMON_SIM_STATE
#include "sim-basics.h" #include "sim-basics.h"
#include "sim-signal.h" #include "sim-signal.h"
#include "sim-base.h" #include "sim-base.h"
@ -560,13 +562,6 @@ extern int m68hc11cpu_clear_oscillator (SIM_DESC sd, const char *port);
extern void m68hc11cpu_set_port (struct hw *me, sim_cpu *cpu, extern void m68hc11cpu_set_port (struct hw *me, sim_cpu *cpu,
unsigned addr, uint8 val); unsigned addr, uint8 val);
/* The current state of the processor; registers, memory, etc. */
struct sim_state {
sim_cpu *cpu[MAX_NR_PROCESSORS];
sim_state_base base;
};
extern void sim_board_reset (SIM_DESC sd); extern void sim_board_reset (SIM_DESC sd);
#define PRINT_TIME 0x01 #define PRINT_TIME 0x01

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* interp.c: Replace config.h include with defs.h. * interp.c: Replace config.h include with defs.h.

View File

@ -19,6 +19,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef SIM_MAIN_H #ifndef SIM_MAIN_H
#define SIM_MAIN_H #define SIM_MAIN_H
#define SIM_HAVE_COMMON_SIM_STATE
#include "sim-basics.h" #include "sim-basics.h"
typedef long int word; typedef long int word;
@ -68,12 +70,5 @@ struct _sim_cpu {
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state {
sim_cpu *cpu[MAX_NR_PROCESSORS];
sim_state_base base;
};
#endif #endif

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* interp.c: Replace config.h include with defs.h. * interp.c: Replace config.h include with defs.h.

View File

@ -18,6 +18,8 @@
#ifndef MICROBLAZE_SIM_MAIN #ifndef MICROBLAZE_SIM_MAIN
#define MICROBLAZE_SIM_MAIN #define MICROBLAZE_SIM_MAIN
#define SIM_HAVE_COMMON_SIM_STATE
#include "microblaze.h" #include "microblaze.h"
#include "sim-basics.h" #include "sim-basics.h"
#include "sim-base.h" #include "sim-base.h"
@ -48,11 +50,4 @@ struct _sim_cpu {
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state {
sim_cpu *cpu[MAX_NR_PROCESSORS];
sim_state_base base;
};
#endif /* MICROBLAZE_SIM_MAIN */ #endif /* MICROBLAZE_SIM_MAIN */

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* dv-mn103cpu.c, dv-mn103int.c, dv-mn103iop.c, dv-mn103ser.c, * dv-mn103cpu.c, dv-mn103int.c, dv-mn103iop.c, dv-mn103ser.c,

View File

@ -22,6 +22,8 @@
#ifndef SIM_MAIN_H #ifndef SIM_MAIN_H
#define SIM_MAIN_H #define SIM_MAIN_H
#define SIM_HAVE_COMMON_SIM_STATE
#define SIM_ENGINE_HALT_HOOK(SD,LAST_CPU,CIA) 0 /* disable this hook */ #define SIM_ENGINE_HALT_HOOK(SD,LAST_CPU,CIA) 0 /* disable this hook */
#include "sim-basics.h" #include "sim-basics.h"
@ -65,17 +67,6 @@ struct _sim_cpu {
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state {
/* the processors proper */
sim_cpu *cpu[MAX_NR_PROCESSORS];
/* The base class. */
sim_state_base base;
};
/* For compatibility, until all functions converted to passing /* For compatibility, until all functions converted to passing
SIM_DESC as an argument */ SIM_DESC as an argument */
extern SIM_DESC simulator; extern SIM_DESC simulator;

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* interp.c: Replace config.h include with defs.h. * interp.c: Replace config.h include with defs.h.

View File

@ -20,6 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef SIM_MAIN_H #ifndef SIM_MAIN_H
#define SIM_MAIN_H #define SIM_MAIN_H
#define SIM_HAVE_COMMON_SIM_STATE
#include "sim-basics.h" #include "sim-basics.h"
#include "sim-base.h" #include "sim-base.h"
#include "bfd.h" #include "bfd.h"
@ -39,11 +41,4 @@ struct _sim_cpu {
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state {
sim_cpu *cpu[MAX_NR_PROCESSORS];
sim_state_base base;
};
#endif #endif

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* msp430-sim.c: Replace config.h include with defs.h. * msp430-sim.c: Replace config.h include with defs.h.

View File

@ -21,6 +21,8 @@
#ifndef _MSP430_MAIN_SIM_H_ #ifndef _MSP430_MAIN_SIM_H_
#define _MSP430_MAIN_SIM_H_ #define _MSP430_MAIN_SIM_H_
#define SIM_HAVE_COMMON_SIM_STATE
#include "sim-basics.h" #include "sim-basics.h"
#include "sim-signal.h" #include "sim-signal.h"
#include "msp430-sim.h" #include "msp430-sim.h"
@ -33,14 +35,6 @@ struct _sim_cpu
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state
{
sim_cpu *cpu[MAX_NR_PROCESSORS];
/* Simulator specific members. */
sim_state_base base;
};
#define MSP430_CPU(sd) (STATE_CPU ((sd), 0)) #define MSP430_CPU(sd) (STATE_CPU ((sd), 0))
#define MSP430_CPU_STATE(sd) (MSP430_CPU ((sd)->state)) #define MSP430_CPU_STATE(sd) (MSP430_CPU ((sd)->state))

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* interp.c: Replace config.h include with defs.h. * interp.c: Replace config.h include with defs.h.

View File

@ -19,6 +19,8 @@
#ifndef PRU_SIM_MAIN #ifndef PRU_SIM_MAIN
#define PRU_SIM_MAIN #define PRU_SIM_MAIN
#define SIM_HAVE_COMMON_SIM_STATE
#include <stdint.h> #include <stdint.h>
#include <stddef.h> #include <stddef.h>
#include "pru.h" #include "pru.h"
@ -83,9 +85,4 @@ struct _sim_cpu {
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state {
sim_cpu *cpu[MAX_NR_PROCESSORS];
sim_state_base base;
};
#endif /* PRU_SIM_MAIN */ #endif /* PRU_SIM_MAIN */

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* interp.c: Replace config.h include with defs.h. * interp.c: Replace config.h include with defs.h.

View File

@ -19,6 +19,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef SIM_MAIN_H #ifndef SIM_MAIN_H
#define SIM_MAIN_H #define SIM_MAIN_H
#define SIM_HAVE_COMMON_SIM_STATE
#include "sim-basics.h" #include "sim-basics.h"
#include "sim-base.h" #include "sim-base.h"
@ -131,11 +133,4 @@ struct _sim_cpu {
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state {
sim_cpu *cpu[MAX_NR_PROCESSORS];
sim_state_base base;
};
#endif #endif

View File

@ -1,3 +1,8 @@
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
(struct sim_state): Delete.
2021-05-16 Mike Frysinger <vapier@gentoo.org> 2021-05-16 Mike Frysinger <vapier@gentoo.org>
* interp.c, simops.c: Include defs.h. * interp.c, simops.c: Include defs.h.

View File

@ -1,6 +1,8 @@
#ifndef SIM_MAIN_H #ifndef SIM_MAIN_H
#define SIM_MAIN_H #define SIM_MAIN_H
#define SIM_HAVE_COMMON_SIM_STATE
/* The v850 has 32bit words, numbered 31 (MSB) to 0 (LSB) */ /* The v850 has 32bit words, numbered 31 (MSB) to 0 (LSB) */
#define WITH_TARGET_WORD_MSB 31 #define WITH_TARGET_WORD_MSB 31
@ -48,18 +50,6 @@ struct _sim_cpu
sim_cpu_base base; sim_cpu_base base;
}; };
struct sim_state {
sim_cpu *cpu[MAX_NR_PROCESSORS];
#if 0
SIM_ADDR rom_size;
SIM_ADDR low_end;
SIM_ADDR high_start;
SIM_ADDR high_base;
void *mem;
#endif
sim_state_base base;
};
/* For compatibility, until all functions converted to passing /* For compatibility, until all functions converted to passing
SIM_DESC as an argument */ SIM_DESC as an argument */
extern SIM_DESC simulator; extern SIM_DESC simulator;