Lines Matching refs:filt

1444 static void addr_filter__free_str(struct addr_filter *filt)  in addr_filter__free_str()  argument
1446 free(filt->str); in addr_filter__free_str()
1447 filt->action = NULL; in addr_filter__free_str()
1448 filt->sym_from = NULL; in addr_filter__free_str()
1449 filt->sym_to = NULL; in addr_filter__free_str()
1450 filt->filename = NULL; in addr_filter__free_str()
1451 filt->str = NULL; in addr_filter__free_str()
1456 struct addr_filter *filt = zalloc(sizeof(*filt)); in addr_filter__new() local
1458 if (filt) in addr_filter__new()
1459 INIT_LIST_HEAD(&filt->list); in addr_filter__new()
1461 return filt; in addr_filter__new()
1464 static void addr_filter__free(struct addr_filter *filt) in addr_filter__free() argument
1466 if (filt) in addr_filter__free()
1467 addr_filter__free_str(filt); in addr_filter__free()
1468 free(filt); in addr_filter__free()
1472 struct addr_filter *filt) in addr_filters__add() argument
1474 list_add_tail(&filt->list, &filts->head); in addr_filters__add()
1479 struct addr_filter *filt) in addr_filters__del() argument
1481 list_del_init(&filt->list); in addr_filters__del()
1493 struct addr_filter *filt, *n; in addr_filters__exit() local
1495 list_for_each_entry_safe(filt, n, &filts->head, list) { in addr_filters__exit()
1496 addr_filters__del(filts, filt); in addr_filters__exit()
1497 addr_filter__free(filt); in addr_filters__exit()
1537 static int parse_action(struct addr_filter *filt) in parse_action() argument
1539 if (!strcmp(filt->action, "filter")) { in parse_action()
1540 filt->start = true; in parse_action()
1541 filt->range = true; in parse_action()
1542 } else if (!strcmp(filt->action, "start")) { in parse_action()
1543 filt->start = true; in parse_action()
1544 } else if (!strcmp(filt->action, "stop")) { in parse_action()
1545 filt->start = false; in parse_action()
1546 } else if (!strcmp(filt->action, "tracestop")) { in parse_action()
1547 filt->start = false; in parse_action()
1548 filt->range = true; in parse_action()
1549 filt->action += 5; /* Change 'tracestop' to 'stop' */ in parse_action()
1597 static int parse_one_filter(struct addr_filter *filt, const char **filter_inp) in parse_one_filter() argument
1602 filt->str = fstr = strdup(*filter_inp); in parse_one_filter()
1606 err = parse_num_or_str(&fstr, NULL, &filt->action, " "); in parse_one_filter()
1610 err = parse_action(filt); in parse_one_filter()
1614 err = parse_addr_size(&fstr, &filt->addr, &filt->sym_from, in parse_one_filter()
1615 &filt->sym_from_idx); in parse_one_filter()
1623 err = parse_addr_size(&fstr, &filt->size, &filt->sym_to, in parse_one_filter()
1624 &filt->sym_to_idx); in parse_one_filter()
1627 filt->range = true; in parse_one_filter()
1634 err = parse_num_or_str(&fstr, NULL, &filt->filename, " ,"); in parse_one_filter()
1641 *filter_inp += fstr - filt->str; in parse_one_filter()
1646 addr_filter__free_str(filt); in parse_one_filter()
1654 struct addr_filter *filt; in addr_filters__parse_bare_filter() local
1659 filt = addr_filter__new(); in addr_filters__parse_bare_filter()
1660 err = parse_one_filter(filt, &fstr); in addr_filters__parse_bare_filter()
1662 addr_filter__free(filt); in addr_filters__parse_bare_filter()
1666 addr_filters__add(filts, filt); in addr_filters__parse_bare_filter()
1806 static int addr_filter__entire_kernel(struct addr_filter *filt) in addr_filter__entire_kernel() argument
1817 filt->addr = args.start; in addr_filter__entire_kernel()
1818 filt->size = args.size; in addr_filter__entire_kernel()
1823 static int check_end_after_start(struct addr_filter *filt, u64 start, u64 size) in check_end_after_start() argument
1825 if (start + size >= filt->addr) in check_end_after_start()
1828 if (filt->sym_from) { in check_end_after_start()
1830 filt->sym_to, start, filt->sym_from, filt->addr); in check_end_after_start()
1833 filt->sym_to, start, filt->addr); in check_end_after_start()
1839 static int addr_filter__resolve_kernel_syms(struct addr_filter *filt) in addr_filter__resolve_kernel_syms() argument
1850 if (filt->sym_from && !strcmp(filt->sym_from, "*")) in addr_filter__resolve_kernel_syms()
1851 return addr_filter__entire_kernel(filt); in addr_filter__resolve_kernel_syms()
1853 if (filt->sym_from) { in addr_filter__resolve_kernel_syms()
1854 err = find_kern_sym(filt->sym_from, &start, &size, in addr_filter__resolve_kernel_syms()
1855 filt->sym_from_idx); in addr_filter__resolve_kernel_syms()
1858 filt->addr = start; in addr_filter__resolve_kernel_syms()
1859 if (filt->range && !filt->size && !filt->sym_to) { in addr_filter__resolve_kernel_syms()
1860 filt->size = size; in addr_filter__resolve_kernel_syms()
1865 if (filt->sym_to) { in addr_filter__resolve_kernel_syms()
1866 err = find_kern_sym(filt->sym_to, &start, &size, in addr_filter__resolve_kernel_syms()
1867 filt->sym_to_idx); in addr_filter__resolve_kernel_syms()
1871 err = check_end_after_start(filt, start, size); in addr_filter__resolve_kernel_syms()
1874 filt->size = start + size - filt->addr; in addr_filter__resolve_kernel_syms()
1881 filt->sym_to ? filt->sym_to : filt->sym_from); in addr_filter__resolve_kernel_syms()
1979 static int addr_filter__entire_dso(struct addr_filter *filt, struct dso *dso) in addr_filter__entire_dso() argument
1986 filt->filename); in addr_filter__entire_dso()
1990 filt->addr = first_sym->start; in addr_filter__entire_dso()
1991 filt->size = last_sym->end - first_sym->start; in addr_filter__entire_dso()
1996 static int addr_filter__resolve_syms(struct addr_filter *filt) in addr_filter__resolve_syms() argument
2002 if (!filt->sym_from && !filt->sym_to) in addr_filter__resolve_syms()
2005 if (!filt->filename) in addr_filter__resolve_syms()
2006 return addr_filter__resolve_kernel_syms(filt); in addr_filter__resolve_syms()
2008 dso = load_dso(filt->filename); in addr_filter__resolve_syms()
2010 pr_err("Failed to load symbols from: %s\n", filt->filename); in addr_filter__resolve_syms()
2014 if (filt->sym_from && !strcmp(filt->sym_from, "*")) { in addr_filter__resolve_syms()
2015 err = addr_filter__entire_dso(filt, dso); in addr_filter__resolve_syms()
2019 if (filt->sym_from) { in addr_filter__resolve_syms()
2020 err = find_dso_sym(dso, filt->sym_from, &start, &size, in addr_filter__resolve_syms()
2021 filt->sym_from_idx); in addr_filter__resolve_syms()
2024 filt->addr = start; in addr_filter__resolve_syms()
2025 if (filt->range && !filt->size && !filt->sym_to) in addr_filter__resolve_syms()
2026 filt->size = size; in addr_filter__resolve_syms()
2029 if (filt->sym_to) { in addr_filter__resolve_syms()
2030 err = find_dso_sym(dso, filt->sym_to, &start, &size, in addr_filter__resolve_syms()
2031 filt->sym_to_idx); in addr_filter__resolve_syms()
2035 err = check_end_after_start(filt, start, size); in addr_filter__resolve_syms()
2039 filt->size = start + size - filt->addr; in addr_filter__resolve_syms()
2048 static char *addr_filter__to_str(struct addr_filter *filt) in addr_filter__to_str() argument
2056 if (filt->filename) { in addr_filter__to_str()
2058 fn = realpath(filt->filename, filename_buf); in addr_filter__to_str()
2063 if (filt->range) { in addr_filter__to_str()
2065 filt->action, filt->addr, filt->size, at, fn); in addr_filter__to_str()
2068 filt->action, filt->addr, at, fn); in addr_filter__to_str()
2078 struct addr_filter *filt; in parse_addr_filter() local
2094 list_for_each_entry(filt, &filts.head, list) { in parse_addr_filter()
2097 err = addr_filter__resolve_syms(filt); in parse_addr_filter()
2101 new_filter = addr_filter__to_str(filt); in parse_addr_filter()