sim: watchpoints: change sizeof_pc to sizeof(sim_cia)

Existing ports already have sizeof_pc set to the same size as sim_cia,
so simply make that part of the core code.  We already assume this in
places by way of sim_pc_{get,set}, and this is how it's documented in
the sim-base.h API.

There is code to allow sims to pick different register word sizes from
address sizes, but most ports use the defaults for both (32-bits), and
the few that support multiple register sizes never change the address
size (so address defaults to register).  I can't think of any machine
where the register hardware size would be larger than the address word
size either.  We have ABIs that behave that way (e.g. x32), but the
hardware is still equivalent register sized.
This commit is contained in:
Mike Frysinger
2015-03-23 00:30:52 -04:00
parent 18d4b488f4
commit d4e3adda12
23 changed files with 50 additions and 16 deletions

View File

@@ -1,3 +1,7 @@
2021-01-30 Mike Frysinger <vapier@gentoo.org>
* README-HACKING: Delete reference to sizeof_pc.
2021-01-29 Mike Frysinger <vapier@gentoo.org>
* MAINTAINERS (Global Maintainers): Move myself back.

View File

@@ -267,10 +267,8 @@ And in your insn fetcher:
PROFILE_COUNT_CORE (cpu, target_addr, size_in_bytes, map_exec);
To use the PC profiling code, you simply have to tell the system where to find
your simulator's PC and its size. So in your sim_open() function:
your simulator's PC. So in your sim_open() function:
STATE_WATCHPOINTS (sd)->pc = address_of_cpu0_pc;
STATE_WATCHPOINTS (sd)->sizeof_pc = number_of_bytes_for_pc_storage;
In a typical 32bit system, the sizeof_pc will be 4 bytes.
To profile branches, in every location where a branch insn is executed, call
one of the related helpers:

View File

@@ -1,3 +1,7 @@
2021-01-30 Mike Frysinger <vapier@gentoo.org>
* interp.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc.
2021-01-11 Mike Frysinger <vapier@gentoo.org>
* config.in, configure: Regenerate.

View File

@@ -1694,7 +1694,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
/* XXX: Only first core gets profiled ? */
SIM_CPU *cpu = STATE_CPU (sd, 0);
STATE_WATCHPOINTS (sd)->pc = &cpu->pc;
STATE_WATCHPOINTS (sd)->sizeof_pc = sizeof (cpu->pc);
}
if (sim_pre_argv_init (sd, argv[0]) != SIM_RC_OK)

View File

@@ -1,3 +1,7 @@
2021-01-30 Mike Frysinger <vapier@gentoo.org>
* interp.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc.
2021-01-11 Mike Frysinger <vapier@gentoo.org>
* config.in, configure: Regenerate.

View File

@@ -733,7 +733,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback,
/* XXX: Only first core gets profiled ? */
SIM_CPU *cpu = STATE_CPU (sd, 0);
STATE_WATCHPOINTS (sd)->pc = &PCREG;
STATE_WATCHPOINTS (sd)->sizeof_pc = sizeof (PCREG);
}
if (sim_pre_argv_init (sd, argv[0]) != SIM_RC_OK)

View File

@@ -1,3 +1,9 @@
2021-01-30 Mike Frysinger <vapier@gentoo.org>
* sim-watch.c (schedule_watchpoint): Change sizeof_pc to sizeof
sim_cia.
* sim-watch.h (struct _sim_watchpoints): Delete sizeof_pc.
2021-01-30 Mike Frysinger <vapier@gentoo.org>
* sim-profile.c (profile_pc_init): Change 1 in shifts to 1ULL.

View File

@@ -172,7 +172,7 @@ schedule_watchpoint (SIM_DESC sd,
case pc_watchpoint:
point->event = sim_events_watch_sim (sd,
watch->pc,
watch->sizeof_pc,
sizeof (sim_cia),
HOST_BYTE_ORDER,
point->is_within,
point->arg0, point->arg1,
@@ -377,8 +377,8 @@ static const OPTION watchpoint_options[] =
static const char *default_interrupt_names[] = { "int", 0, };
/* This default handler is "good enough" for targets that just want to trap into
gdb when watchpoints are hit, and have only configured STATE_WATCHPOINTS pc &
sizeof_pc fields. */
gdb when watchpoints are hit, and have only configured the STATE_WATCHPOINTS
pc field. */
static void
default_interrupt_handler (SIM_DESC sd, void *data)
{

View File

@@ -50,7 +50,6 @@ typedef struct _sim_watchpoints {
/* FIXME: In the future this shall be generalized so that any of the
N processors M registers can be watched */
void *pc;
int sizeof_pc;
/* Pointer to the handler for interrupt watchpoints */
/* FIXME: can this be done better? */

View File

@@ -1,3 +1,7 @@
2021-01-30 Mike Frysinger <vapier@gentoo.org>
* sim-if.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc.
2021-01-11 Mike Frysinger <vapier@gentoo.org>
* configure.ac: Call SIM_AC_OPTION_WARNINGS.

View File

@@ -66,7 +66,6 @@ sim_open (kind, callback, abfd, argv)
{
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
STATE_WATCHPOINTS (sd)->pc = &(PC);
STATE_WATCHPOINTS (sd)->sizeof_pc = sizeof (PC);
}
#endif

View File

@@ -1,3 +1,7 @@
2021-01-30 Mike Frysinger <vapier@gentoo.org>
* sim-if.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc.
2021-01-11 Mike Frysinger <vapier@gentoo.org>
* configure.ac: Call SIM_AC_OPTION_WARNINGS.

View File

@@ -72,7 +72,6 @@ sim_open (kind, callback, abfd, argv)
{
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
STATE_WATCHPOINTS (sd)->pc = &(PC);
STATE_WATCHPOINTS (sd)->sizeof_pc = sizeof (PC);
}
#endif

View File

@@ -1,3 +1,7 @@
2021-01-30 Mike Frysinger <vapier@gentoo.org>
* sim-if.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc.
2021-01-11 Mike Frysinger <vapier@gentoo.org>
* configure.ac: Call SIM_AC_OPTION_WARNINGS.

View File

@@ -66,7 +66,6 @@ sim_open (kind, callback, abfd, argv)
{
SIM_CPU *current_cpu = STATE_CPU (sd, 0);
STATE_WATCHPOINTS (sd)->pc = &(PC);
STATE_WATCHPOINTS (sd)->sizeof_pc = sizeof (PC);
}
#endif

View File

@@ -1,3 +1,7 @@
2021-01-30 Mike Frysinger <vapier@gentoo.org>
* interp.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc.
2021-01-11 Mike Frysinger <vapier@gentoo.org>
* config.in, configure: Regenerate.

View File

@@ -356,7 +356,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
/* FIXME: watchpoints code shouldn't need this */
STATE_WATCHPOINTS (sd)->pc = &(PC);
STATE_WATCHPOINTS (sd)->sizeof_pc = sizeof (PC);
STATE_WATCHPOINTS (sd)->interrupt_handler = interrupt_event;
/* Initialize the mechanism for doing insn profiling. */

View File

@@ -1,3 +1,7 @@
2021-01-30 Mike Frysinger <vapier@gentoo.org>
* interp.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc.
2021-01-11 Mike Frysinger <vapier@gentoo.org>
* config.in, configure: Regenerate.

View File

@@ -103,7 +103,6 @@ sim_open (SIM_OPEN_KIND kind,
moment, only support watchpoints causing a breakpoint (gdb
halt). */
STATE_WATCHPOINTS (sd)->pc = &(PC);
STATE_WATCHPOINTS (sd)->sizeof_pc = sizeof (PC);
STATE_WATCHPOINTS (sd)->interrupt_handler = NULL;
STATE_WATCHPOINTS (sd)->interrupt_names = NULL;

View File

@@ -1,3 +1,7 @@
2021-01-30 Mike Frysinger <vapier@gentoo.org>
* interp.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc.
2021-01-11 Mike Frysinger <vapier@gentoo.org>
* config.in, configure: Regenerate.

View File

@@ -1204,7 +1204,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
}
STATE_WATCHPOINTS (sd)->pc = &cpu.asregs.regs[PC_REGNO];
STATE_WATCHPOINTS (sd)->sizeof_pc = sizeof (word);
if (sim_pre_argv_init (sd, argv[0]) != SIM_RC_OK)
{

View File

@@ -1,3 +1,7 @@
2021-01-30 Mike Frysinger <vapier@gentoo.org>
* interp.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc.
2021-01-11 Mike Frysinger <vapier@gentoo.org>
* config.in, configure: Regenerate.

View File

@@ -203,7 +203,6 @@ sim_open (SIM_OPEN_KIND kind,
/* FIXME: should be better way of setting up interrupts */
STATE_WATCHPOINTS (sd)->pc = &(PC);
STATE_WATCHPOINTS (sd)->sizeof_pc = sizeof (PC);
STATE_WATCHPOINTS (sd)->interrupt_handler = do_interrupt;
STATE_WATCHPOINTS (sd)->interrupt_names = interrupt_names;