On Thu, Sep 24, 2020 at 05:39:03PM -0700, Ian Rogers wrote: > perf_event_attr bp_addr is a u64. parse-events.y parses it as a u64, but > casts it to a void* and then parse-events.c casts it back to a u64. > Rather than all the casts, change the type of the address to be a u64. > This removes an issue noted in: > https://lore.kernel.org/lkml/[email protected]/ > > Signed-off-by: Ian Rogers <[email protected]>
Acked-by: Jiri Olsa <[email protected]> thanks, jirka > --- > tools/perf/util/parse-events.c | 4 ++-- > tools/perf/util/parse-events.h | 2 +- > tools/perf/util/parse-events.y | 8 ++++---- > 3 files changed, 7 insertions(+), 7 deletions(-) > > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c > index 667cbca1547a..f82ef1e840b2 100644 > --- a/tools/perf/util/parse-events.c > +++ b/tools/perf/util/parse-events.c > @@ -940,12 +940,12 @@ do { \ > } > > int parse_events_add_breakpoint(struct list_head *list, int *idx, > - void *ptr, char *type, u64 len) > + u64 addr, char *type, u64 len) > { > struct perf_event_attr attr; > > memset(&attr, 0, sizeof(attr)); > - attr.bp_addr = (unsigned long) ptr; > + attr.bp_addr = addr; > > if (parse_breakpoint_type(type, &attr)) > return -EINVAL; > diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h > index 00cde7d2e30c..e80c9b74f2f2 100644 > --- a/tools/perf/util/parse-events.h > +++ b/tools/perf/util/parse-events.h > @@ -190,7 +190,7 @@ int parse_events_add_cache(struct list_head *list, int > *idx, > struct parse_events_error *error, > struct list_head *head_config); > int parse_events_add_breakpoint(struct list_head *list, int *idx, > - void *ptr, char *type, u64 len); > + u64 addr, char *type, u64 len); > int parse_events_add_pmu(struct parse_events_state *parse_state, > struct list_head *list, char *name, > struct list_head *head_config, > diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y > index 645bf4f1859f..d5b6aff82f21 100644 > --- a/tools/perf/util/parse-events.y > +++ b/tools/perf/util/parse-events.y > @@ -511,7 +511,7 @@ PE_PREFIX_MEM PE_VALUE '/' PE_VALUE ':' PE_MODIFIER_BP > sep_dc > list = alloc_list(); > ABORT_ON(!list); > err = parse_events_add_breakpoint(list, &parse_state->idx, > - (void *)(uintptr_t) $2, $6, $4); > + $2, $6, $4); > free($6); > if (err) { > free(list); > @@ -528,7 +528,7 @@ PE_PREFIX_MEM PE_VALUE '/' PE_VALUE sep_dc > list = alloc_list(); > ABORT_ON(!list); > if (parse_events_add_breakpoint(list, &parse_state->idx, > - (void *)(uintptr_t) $2, NULL, > $4)) { > + $2, NULL, $4)) { > free(list); > YYABORT; > } > @@ -544,7 +544,7 @@ PE_PREFIX_MEM PE_VALUE ':' PE_MODIFIER_BP sep_dc > list = alloc_list(); > ABORT_ON(!list); > err = parse_events_add_breakpoint(list, &parse_state->idx, > - (void *)(uintptr_t) $2, $4, 0); > + $2, $4, 0); > free($4); > if (err) { > free(list); > @@ -561,7 +561,7 @@ PE_PREFIX_MEM PE_VALUE sep_dc > list = alloc_list(); > ABORT_ON(!list); > if (parse_events_add_breakpoint(list, &parse_state->idx, > - (void *)(uintptr_t) $2, NULL, > 0)) { > + $2, NULL, 0)) { > free(list); > YYABORT; > } > -- > 2.28.0.681.g6f77f65b4e-goog >

