Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf tools: Add location to pmu event terms

Saving the terms location within term struct, so it could be used later
for report.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1429729824-13932-6-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Jiri Olsa and committed by
Arnaldo Carvalho de Melo
cecf3a2e 36adec85

+36 -20
+24 -8
tools/perf/util/parse-events.c
··· 25 25 extern int parse_events_debug; 26 26 #endif 27 27 int parse_events_parse(void *data, void *scanner); 28 + int parse_events_term__num(struct parse_events_term **term, 29 + int type_term, char *config, u64 num, 30 + YYLTYPE *loc_term, YYLTYPE *loc_val); 31 + int parse_events_term__str(struct parse_events_term **term, 32 + int type_term, char *config, char *str, 33 + YYLTYPE *loc_term, YYLTYPE *loc_val); 28 34 29 35 static struct perf_pmu_event_symbol *perf_pmu_events_list; 30 36 /* ··· 1548 1542 1549 1543 static int new_term(struct parse_events_term **_term, int type_val, 1550 1544 int type_term, char *config, 1551 - char *str, u64 num) 1545 + char *str, u64 num, int err_term, int err_val) 1552 1546 { 1553 1547 struct parse_events_term *term; 1554 1548 ··· 1560 1554 term->type_val = type_val; 1561 1555 term->type_term = type_term; 1562 1556 term->config = config; 1557 + term->err_term = err_term; 1558 + term->err_val = err_val; 1563 1559 1564 1560 switch (type_val) { 1565 1561 case PARSE_EVENTS__TERM_TYPE_NUM: ··· 1580 1572 } 1581 1573 1582 1574 int parse_events_term__num(struct parse_events_term **term, 1583 - int type_term, char *config, u64 num) 1575 + int type_term, char *config, u64 num, 1576 + YYLTYPE *loc_term, YYLTYPE *loc_val) 1584 1577 { 1585 1578 return new_term(term, PARSE_EVENTS__TERM_TYPE_NUM, type_term, 1586 - config, NULL, num); 1579 + config, NULL, num, 1580 + loc_term ? loc_term->first_column : 0, 1581 + loc_val ? loc_val->first_column : 0); 1587 1582 } 1588 1583 1589 1584 int parse_events_term__str(struct parse_events_term **term, 1590 - int type_term, char *config, char *str) 1585 + int type_term, char *config, char *str, 1586 + YYLTYPE *loc_term, YYLTYPE *loc_val) 1591 1587 { 1592 1588 return new_term(term, PARSE_EVENTS__TERM_TYPE_STR, type_term, 1593 - config, str, 0); 1589 + config, str, 0, 1590 + loc_term ? loc_term->first_column : 0, 1591 + loc_val ? loc_val->first_column : 0); 1594 1592 } 1595 1593 1596 1594 int parse_events_term__sym_hw(struct parse_events_term **term, ··· 1610 1596 if (config) 1611 1597 return new_term(term, PARSE_EVENTS__TERM_TYPE_STR, 1612 1598 PARSE_EVENTS__TERM_TYPE_USER, config, 1613 - (char *) sym->symbol, 0); 1599 + (char *) sym->symbol, 0, 0, 0); 1614 1600 else 1615 1601 return new_term(term, PARSE_EVENTS__TERM_TYPE_STR, 1616 1602 PARSE_EVENTS__TERM_TYPE_USER, 1617 - (char *) "event", (char *) sym->symbol, 0); 1603 + (char *) "event", (char *) sym->symbol, 1604 + 0, 0, 0); 1618 1605 } 1619 1606 1620 1607 int parse_events_term__clone(struct parse_events_term **new, 1621 1608 struct parse_events_term *term) 1622 1609 { 1623 1610 return new_term(new, term->type_val, term->type_term, term->config, 1624 - term->val.str, term->val.num); 1611 + term->val.str, term->val.num, 1612 + term->err_term, term->err_val); 1625 1613 } 1626 1614 1627 1615 void parse_events__free_terms(struct list_head *terms)
+4 -4
tools/perf/util/parse-events.h
··· 74 74 int type_term; 75 75 struct list_head list; 76 76 bool used; 77 + 78 + /* error string indexes for within parsed string */ 79 + int err_term; 80 + int err_val; 77 81 }; 78 82 79 83 struct parse_events_error { ··· 98 94 }; 99 95 100 96 int parse_events__is_hardcoded_term(struct parse_events_term *term); 101 - int parse_events_term__num(struct parse_events_term **_term, 102 - int type_term, char *config, u64 num); 103 - int parse_events_term__str(struct parse_events_term **_term, 104 - int type_term, char *config, char *str); 105 97 int parse_events_term__sym_hw(struct parse_events_term **term, 106 98 char *config, unsigned idx); 107 99 int parse_events_term__clone(struct parse_events_term **new,
+8 -8
tools/perf/util/parse-events.y
··· 231 231 232 232 ALLOC_LIST(head); 233 233 ABORT_ON(parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER, 234 - $1, 1)); 234 + $1, 1, &@1, NULL)); 235 235 list_add_tail(&term->list, head); 236 236 237 237 ALLOC_LIST(list); ··· 251 251 252 252 ALLOC_LIST(head); 253 253 ABORT_ON(parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER, 254 - &pmu_name, 1)); 254 + &pmu_name, 1, &@1, NULL)); 255 255 list_add_tail(&term->list, head); 256 256 257 257 ALLOC_LIST(list); ··· 449 449 struct parse_events_term *term; 450 450 451 451 ABORT_ON(parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER, 452 - $1, $3)); 452 + $1, $3, &@1, &@3)); 453 453 $$ = term; 454 454 } 455 455 | ··· 458 458 struct parse_events_term *term; 459 459 460 460 ABORT_ON(parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER, 461 - $1, $3)); 461 + $1, $3, &@1, &@3)); 462 462 $$ = term; 463 463 } 464 464 | ··· 476 476 struct parse_events_term *term; 477 477 478 478 ABORT_ON(parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER, 479 - $1, 1)); 479 + $1, 1, &@1, NULL)); 480 480 $$ = term; 481 481 } 482 482 | ··· 493 493 { 494 494 struct parse_events_term *term; 495 495 496 - ABORT_ON(parse_events_term__str(&term, (int)$1, NULL, $3)); 496 + ABORT_ON(parse_events_term__str(&term, (int)$1, NULL, $3, &@1, &@3)); 497 497 $$ = term; 498 498 } 499 499 | ··· 501 501 { 502 502 struct parse_events_term *term; 503 503 504 - ABORT_ON(parse_events_term__num(&term, (int)$1, NULL, $3)); 504 + ABORT_ON(parse_events_term__num(&term, (int)$1, NULL, $3, &@1, &@3)); 505 505 $$ = term; 506 506 } 507 507 | ··· 509 509 { 510 510 struct parse_events_term *term; 511 511 512 - ABORT_ON(parse_events_term__num(&term, (int)$1, NULL, 1)); 512 + ABORT_ON(parse_events_term__num(&term, (int)$1, NULL, 1, &@1, NULL)); 513 513 $$ = term; 514 514 } 515 515