Skip to content

Commit

Permalink
perf tools: Fix perf regs mask generation
Browse files Browse the repository at this point in the history
On some architectures (powerpc in particular), the number of registers
exceeds what can be represented in an integer bitmask. Ensure we
generate the proper bitmask on such platforms.

Fixes: 71ad0f5 ("perf tools: Support for DWARF CFI unwinding on post processing")
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
  • Loading branch information
Naveen N. Rao authored and Michael Ellerman committed May 11, 2016
1 parent c452246 commit f478220
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions tools/perf/util/perf_regs.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,18 @@ int perf_reg_value(u64 *valp, struct regs_dump *regs, int id)
int i, idx = 0;
u64 mask = regs->mask;

if (regs->cache_mask & (1 << id))
if (regs->cache_mask & (1ULL << id))
goto out;

if (!(mask & (1 << id)))
if (!(mask & (1ULL << id)))
return -EINVAL;

for (i = 0; i < id; i++) {
if (mask & (1 << i))
if (mask & (1ULL << i))
idx++;
}

regs->cache_mask |= (1 << id);
regs->cache_mask |= (1ULL << id);
regs->cache_regs[id] = regs->regs[idx];

out:
Expand Down

0 comments on commit f478220

Please sign in to comment.