diff options
Diffstat (limited to 'tools/perf/util/parse-events.c')
-rw-r--r-- | tools/perf/util/parse-events.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 77b43fe43d55..7f8ec6ce2823 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c | |||
@@ -526,7 +526,7 @@ do { \ | |||
526 | } | 526 | } |
527 | 527 | ||
528 | int parse_events_add_breakpoint(struct list_head *list, int *idx, | 528 | int parse_events_add_breakpoint(struct list_head *list, int *idx, |
529 | void *ptr, char *type) | 529 | void *ptr, char *type, u64 len) |
530 | { | 530 | { |
531 | struct perf_event_attr attr; | 531 | struct perf_event_attr attr; |
532 | 532 | ||
@@ -536,14 +536,15 @@ int parse_events_add_breakpoint(struct list_head *list, int *idx, | |||
536 | if (parse_breakpoint_type(type, &attr)) | 536 | if (parse_breakpoint_type(type, &attr)) |
537 | return -EINVAL; | 537 | return -EINVAL; |
538 | 538 | ||
539 | /* | 539 | /* Provide some defaults if len is not specified */ |
540 | * We should find a nice way to override the access length | 540 | if (!len) { |
541 | * Provide some defaults for now | 541 | if (attr.bp_type == HW_BREAKPOINT_X) |
542 | */ | 542 | len = sizeof(long); |
543 | if (attr.bp_type == HW_BREAKPOINT_X) | 543 | else |
544 | attr.bp_len = sizeof(long); | 544 | len = HW_BREAKPOINT_LEN_4; |
545 | else | 545 | } |
546 | attr.bp_len = HW_BREAKPOINT_LEN_4; | 546 | |
547 | attr.bp_len = len; | ||
547 | 548 | ||
548 | attr.type = PERF_TYPE_BREAKPOINT; | 549 | attr.type = PERF_TYPE_BREAKPOINT; |
549 | attr.sample_period = 1; | 550 | attr.sample_period = 1; |
@@ -1121,7 +1122,7 @@ void print_tracepoint_events(const char *subsys_glob, const char *event_glob, | |||
1121 | return; | 1122 | return; |
1122 | 1123 | ||
1123 | for_each_subsystem(sys_dir, sys_dirent, sys_next) { | 1124 | for_each_subsystem(sys_dir, sys_dirent, sys_next) { |
1124 | if (subsys_glob != NULL && | 1125 | if (subsys_glob != NULL && |
1125 | !strglobmatch(sys_dirent.d_name, subsys_glob)) | 1126 | !strglobmatch(sys_dirent.d_name, subsys_glob)) |
1126 | continue; | 1127 | continue; |
1127 | 1128 | ||
@@ -1132,7 +1133,7 @@ void print_tracepoint_events(const char *subsys_glob, const char *event_glob, | |||
1132 | continue; | 1133 | continue; |
1133 | 1134 | ||
1134 | for_each_event(sys_dirent, evt_dir, evt_dirent, evt_next) { | 1135 | for_each_event(sys_dirent, evt_dir, evt_dirent, evt_next) { |
1135 | if (event_glob != NULL && | 1136 | if (event_glob != NULL && |
1136 | !strglobmatch(evt_dirent.d_name, event_glob)) | 1137 | !strglobmatch(evt_dirent.d_name, event_glob)) |
1137 | continue; | 1138 | continue; |
1138 | 1139 | ||
@@ -1305,7 +1306,7 @@ static void print_symbol_events(const char *event_glob, unsigned type, | |||
1305 | 1306 | ||
1306 | for (i = 0; i < max; i++, syms++) { | 1307 | for (i = 0; i < max; i++, syms++) { |
1307 | 1308 | ||
1308 | if (event_glob != NULL && | 1309 | if (event_glob != NULL && |
1309 | !(strglobmatch(syms->symbol, event_glob) || | 1310 | !(strglobmatch(syms->symbol, event_glob) || |
1310 | (syms->alias && strglobmatch(syms->alias, event_glob)))) | 1311 | (syms->alias && strglobmatch(syms->alias, event_glob)))) |
1311 | continue; | 1312 | continue; |
@@ -1366,7 +1367,7 @@ void print_events(const char *event_glob, bool name_only) | |||
1366 | printf("\n"); | 1367 | printf("\n"); |
1367 | 1368 | ||
1368 | printf(" %-50s [%s]\n", | 1369 | printf(" %-50s [%s]\n", |
1369 | "mem:<addr>[:access]", | 1370 | "mem:<addr>[/len][:access]", |
1370 | event_type_descriptors[PERF_TYPE_BREAKPOINT]); | 1371 | event_type_descriptors[PERF_TYPE_BREAKPOINT]); |
1371 | printf("\n"); | 1372 | printf("\n"); |
1372 | } | 1373 | } |