From: Mike Frysinger Date: Mon, 23 Mar 2015 04:30:52 +0000 (-0400) Subject: sim: watchpoints: change sizeof_pc to sizeof(sim_cia) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d4e3adda1225d29b99f7bc81cc711806ecaacb70;p=binutils-gdb.git 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. --- diff --git a/sim/ChangeLog b/sim/ChangeLog index b42b8247906..5e1ebca21ee 100644 --- a/sim/ChangeLog +++ b/sim/ChangeLog @@ -1,3 +1,7 @@ +2021-01-30 Mike Frysinger + + * README-HACKING: Delete reference to sizeof_pc. + 2021-01-29 Mike Frysinger * MAINTAINERS (Global Maintainers): Move myself back. diff --git a/sim/README-HACKING b/sim/README-HACKING index 583a559d2b0..9953f99fc81 100644 --- a/sim/README-HACKING +++ b/sim/README-HACKING @@ -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: diff --git a/sim/avr/ChangeLog b/sim/avr/ChangeLog index 0f837b25524..2854ff87eaf 100644 --- a/sim/avr/ChangeLog +++ b/sim/avr/ChangeLog @@ -1,3 +1,7 @@ +2021-01-30 Mike Frysinger + + * interp.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc. + 2021-01-11 Mike Frysinger * config.in, configure: Regenerate. diff --git a/sim/avr/interp.c b/sim/avr/interp.c index 3aff8816187..ba89eb532d9 100644 --- a/sim/avr/interp.c +++ b/sim/avr/interp.c @@ -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) diff --git a/sim/bfin/ChangeLog b/sim/bfin/ChangeLog index 36acbdc40af..70910b2c609 100644 --- a/sim/bfin/ChangeLog +++ b/sim/bfin/ChangeLog @@ -1,3 +1,7 @@ +2021-01-30 Mike Frysinger + + * interp.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc. + 2021-01-11 Mike Frysinger * config.in, configure: Regenerate. diff --git a/sim/bfin/interp.c b/sim/bfin/interp.c index e26a8221b20..ef23de3ede7 100644 --- a/sim/bfin/interp.c +++ b/sim/bfin/interp.c @@ -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) diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog index dbf030d502f..c7d64392882 100644 --- a/sim/common/ChangeLog +++ b/sim/common/ChangeLog @@ -1,3 +1,9 @@ +2021-01-30 Mike Frysinger + + * 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 * sim-profile.c (profile_pc_init): Change 1 in shifts to 1ULL. diff --git a/sim/common/sim-watch.c b/sim/common/sim-watch.c index 6d177298597..9ccd472465a 100644 --- a/sim/common/sim-watch.c +++ b/sim/common/sim-watch.c @@ -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) { diff --git a/sim/common/sim-watch.h b/sim/common/sim-watch.h index 1fd66fc1bf5..52a8d12795d 100644 --- a/sim/common/sim-watch.h +++ b/sim/common/sim-watch.h @@ -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? */ diff --git a/sim/frv/ChangeLog b/sim/frv/ChangeLog index 5fa03620f91..83770c3067a 100644 --- a/sim/frv/ChangeLog +++ b/sim/frv/ChangeLog @@ -1,3 +1,7 @@ +2021-01-30 Mike Frysinger + + * sim-if.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc. + 2021-01-11 Mike Frysinger * configure.ac: Call SIM_AC_OPTION_WARNINGS. diff --git a/sim/frv/sim-if.c b/sim/frv/sim-if.c index 636890bd2cb..bea84002cd3 100644 --- a/sim/frv/sim-if.c +++ b/sim/frv/sim-if.c @@ -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 diff --git a/sim/iq2000/ChangeLog b/sim/iq2000/ChangeLog index f609759169c..79e49390575 100644 --- a/sim/iq2000/ChangeLog +++ b/sim/iq2000/ChangeLog @@ -1,3 +1,7 @@ +2021-01-30 Mike Frysinger + + * sim-if.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc. + 2021-01-11 Mike Frysinger * configure.ac: Call SIM_AC_OPTION_WARNINGS. diff --git a/sim/iq2000/sim-if.c b/sim/iq2000/sim-if.c index 07169402c99..de90e731c1a 100644 --- a/sim/iq2000/sim-if.c +++ b/sim/iq2000/sim-if.c @@ -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 diff --git a/sim/m32r/ChangeLog b/sim/m32r/ChangeLog index 551e12b7bcc..73e00643416 100644 --- a/sim/m32r/ChangeLog +++ b/sim/m32r/ChangeLog @@ -1,3 +1,7 @@ +2021-01-30 Mike Frysinger + + * sim-if.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc. + 2021-01-11 Mike Frysinger * configure.ac: Call SIM_AC_OPTION_WARNINGS. diff --git a/sim/m32r/sim-if.c b/sim/m32r/sim-if.c index 08003b50fd6..2d2f5e47cb4 100644 --- a/sim/m32r/sim-if.c +++ b/sim/m32r/sim-if.c @@ -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 diff --git a/sim/mips/ChangeLog b/sim/mips/ChangeLog index 94827d5df31..068d3067e38 100644 --- a/sim/mips/ChangeLog +++ b/sim/mips/ChangeLog @@ -1,3 +1,7 @@ +2021-01-30 Mike Frysinger + + * interp.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc. + 2021-01-11 Mike Frysinger * config.in, configure: Regenerate. diff --git a/sim/mips/interp.c b/sim/mips/interp.c index 49e5f716757..852f362eb40 100644 --- a/sim/mips/interp.c +++ b/sim/mips/interp.c @@ -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. */ diff --git a/sim/mn10300/ChangeLog b/sim/mn10300/ChangeLog index 3932e81d8c6..45fdcad8500 100644 --- a/sim/mn10300/ChangeLog +++ b/sim/mn10300/ChangeLog @@ -1,3 +1,7 @@ +2021-01-30 Mike Frysinger + + * interp.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc. + 2021-01-11 Mike Frysinger * config.in, configure: Regenerate. diff --git a/sim/mn10300/interp.c b/sim/mn10300/interp.c index 418f3f00a39..c41797a855b 100644 --- a/sim/mn10300/interp.c +++ b/sim/mn10300/interp.c @@ -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; diff --git a/sim/moxie/ChangeLog b/sim/moxie/ChangeLog index c01b323fe16..4a10ac365ba 100644 --- a/sim/moxie/ChangeLog +++ b/sim/moxie/ChangeLog @@ -1,3 +1,7 @@ +2021-01-30 Mike Frysinger + + * interp.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc. + 2021-01-11 Mike Frysinger * config.in, configure: Regenerate. diff --git a/sim/moxie/interp.c b/sim/moxie/interp.c index f895af6f1bb..c5f9ed64160 100644 --- a/sim/moxie/interp.c +++ b/sim/moxie/interp.c @@ -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) { diff --git a/sim/v850/ChangeLog b/sim/v850/ChangeLog index 4f2ccc7cfc5..b99ca24dcfb 100644 --- a/sim/v850/ChangeLog +++ b/sim/v850/ChangeLog @@ -1,3 +1,7 @@ +2021-01-30 Mike Frysinger + + * interp.c (sim_open): Delete STATE_WATCHPOINTS (sd)->sizeof_pc. + 2021-01-11 Mike Frysinger * config.in, configure: Regenerate. diff --git a/sim/v850/interp.c b/sim/v850/interp.c index 10d8a67a6fb..24d7ddc297d 100644 --- a/sim/v850/interp.c +++ b/sim/v850/interp.c @@ -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;