aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2015-03-23 00:24:05 -0400
committerMike Frysinger <vapier@gentoo.org>2015-03-24 01:24:10 -0400
commit596f88276cffbca82e3858da40db7e7cc7aa476e (patch)
treeb8288a6b337b88633b72a38decadfa5028df94bb
parent1bf57e9a2ee7f468c2b2c125bda35a5bcd5923ce (diff)
downloadgdb-596f88276cffbca82e3858da40db7e7cc7aa476e.zip
gdb-596f88276cffbca82e3858da40db7e7cc7aa476e.tar.gz
gdb-596f88276cffbca82e3858da40db7e7cc7aa476e.tar.bz2
sim: profile: disconnect from watchpoint core
The profile code was using STATE_WATCHPOINTS to get access to the PC, but we already have a standard method for getting the pc, so switch to that. This assumes that sizeof_pc is the same size as sim_cia, but 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.
-rw-r--r--sim/common/ChangeLog7
-rw-r--r--sim/common/sim-profile.c16
2 files changed, 11 insertions, 12 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index 85cf559..e41203c 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,5 +1,12 @@
2015-03-24 Mike Frysinger <vapier@gentoo.org>
+ * sim-profile.c (profile_pc_event): Get pc via sim_pc_get. Delete
+ usage of STATE_WATCHPOINTS.
+ (profile_pc_init): Delete STATE_WATCHPOINTS (sd)->pc check. Change
+ STATE_WATCHPOINTS (sd)->sizeof_pc to sizeof (sim_cia).
+
+2015-03-24 Mike Frysinger <vapier@gentoo.org>
+
* tconfig.h: Note SIM_HAVE_PROFILE is deprecated.
2015-03-24 Mike Frysinger <vapier@gentoo.org>
diff --git a/sim/common/sim-profile.c b/sim/common/sim-profile.c
index dbe64de..d473eef 100644
--- a/sim/common/sim-profile.c
+++ b/sim/common/sim-profile.c
@@ -520,15 +520,8 @@ profile_pc_event (SIM_DESC sd,
{
sim_cpu *cpu = (sim_cpu*) data;
PROFILE_DATA *profile = CPU_PROFILE_DATA (cpu);
- address_word pc;
+ address_word pc = sim_pc_get (cpu);
unsigned i;
- switch (STATE_WATCHPOINTS (sd)->sizeof_pc)
- {
- case 2: pc = *(unsigned_2*)(STATE_WATCHPOINTS (sd)->pc) ; break;
- case 4: pc = *(unsigned_4*)(STATE_WATCHPOINTS (sd)->pc) ; break;
- case 8: pc = *(unsigned_8*)(STATE_WATCHPOINTS (sd)->pc) ; break;
- default: pc = 0;
- }
i = (pc - PROFILE_PC_START (profile)) >> PROFILE_PC_SHIFT (profile);
if (i < PROFILE_PC_NR_BUCKETS (profile))
PROFILE_PC_COUNT (profile) [i] += 1; /* Overflow? */
@@ -547,8 +540,7 @@ profile_pc_init (SIM_DESC sd)
{
sim_cpu *cpu = STATE_CPU (sd, n);
PROFILE_DATA *data = CPU_PROFILE_DATA (cpu);
- if (CPU_PROFILE_FLAGS (STATE_CPU (sd, n))[PROFILE_PC_IDX]
- && STATE_WATCHPOINTS (sd)->pc != NULL)
+ if (CPU_PROFILE_FLAGS (STATE_CPU (sd, n))[PROFILE_PC_IDX])
{
int bucket_size;
/* fill in the frequency if not specified */
@@ -571,7 +563,7 @@ profile_pc_init (SIM_DESC sd)
{
/* nr_buckets = (full-address-range / 2) / (bucket_size / 2) */
PROFILE_PC_NR_BUCKETS (data) =
- ((1 << (STATE_WATCHPOINTS (sd)->sizeof_pc) * (8 - 1))
+ ((1 << sizeof (sim_cia) * (8 - 1))
/ (PROFILE_PC_BUCKET_SIZE (data) / 2));
}
else
@@ -590,7 +582,7 @@ profile_pc_init (SIM_DESC sd)
{
if (PROFILE_PC_END (data) == 0)
/* bucket_size = (full-address-range / 2) / (nr_buckets / 2) */
- bucket_size = ((1 << ((STATE_WATCHPOINTS (sd)->sizeof_pc * 8) - 1))
+ bucket_size = ((1 << ((sizeof (sim_cia) * 8) - 1))
/ (PROFILE_PC_NR_BUCKETS (data) / 2));
else
bucket_size = ((PROFILE_PC_END (data)