Messages in this thread Patch in this message | | | From | Jacob Shin <> | Subject | [PATCH 3/5] perf tools: Add breakpoint address mask to the mem event parser | Date | Wed, 12 Dec 2012 10:30:41 -0600 |
| |
From: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Allow perf tool to pass in breakpoint address mask to match an address range, i.e.:
$ perf stat -e mem:0x1000:w:0xf a.out
Will count writes to [0x1000 ~ 0x1010)
Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> Signed-off-by: Jacob Shin <jacob.shin@amd.com> --- tools/perf/util/parse-events.c | 3 ++- tools/perf/util/parse-events.h | 2 +- tools/perf/util/parse-events.y | 14 ++++++++++++-- 3 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 2d8d53be..2679e48 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -466,12 +466,13 @@ do { \ } int parse_events_add_breakpoint(struct list_head **list, int *idx, - void *ptr, char *type) + void *ptr, char *type, void *msk) { struct perf_event_attr attr; memset(&attr, 0, sizeof(attr)); attr.bp_addr = (unsigned long) ptr; + attr.bp_addr_mask = (unsigned long) msk; 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 b7af80b..5b7905c 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -92,7 +92,7 @@ int parse_events_add_numeric(struct list_head **list, int *idx, int parse_events_add_cache(struct list_head **list, int *idx, char *type, char *op_result1, char *op_result2); int parse_events_add_breakpoint(struct list_head **list, int *idx, - void *ptr, char *type); + void *ptr, char *type, void *msk); int parse_events_add_pmu(struct list_head **list, int *idx, char *pmu , struct list_head *head_config); void parse_events__set_leader(char *name, struct list_head *list); diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index 0f9914a..e8ac05d 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -254,13 +254,23 @@ PE_NAME_CACHE_TYPE } event_legacy_mem: +PE_PREFIX_MEM PE_VALUE ':' PE_MODIFIER_BP ':' PE_VALUE sep_dc +{ + struct parse_events_data__events *data = _data; + struct list_head *list = NULL; + + ABORT_ON(parse_events_add_breakpoint(&list, &data->idx, + (void *) $2, $4, (void *) $6)); + $$ = list; +} +| PE_PREFIX_MEM PE_VALUE ':' PE_MODIFIER_BP sep_dc { struct parse_events_data__events *data = _data; struct list_head *list = NULL; ABORT_ON(parse_events_add_breakpoint(&list, &data->idx, - (void *) $2, $4)); + (void *) $2, $4, NULL)); $$ = list; } | @@ -270,7 +280,7 @@ PE_PREFIX_MEM PE_VALUE sep_dc struct list_head *list = NULL; ABORT_ON(parse_events_add_breakpoint(&list, &data->idx, - (void *) $2, NULL)); + (void *) $2, NULL, NULL)); $$ = list; } -- 1.7.9.5
| |