Lines Matching defs:filt

2100 static void addr_filter__free_str(struct addr_filter *filt)
2102 zfree(&filt->str);
2103 filt->action = NULL;
2104 filt->sym_from = NULL;
2105 filt->sym_to = NULL;
2106 filt->filename = NULL;
2111 struct addr_filter *filt = zalloc(sizeof(*filt));
2113 if (filt)
2114 INIT_LIST_HEAD(&filt->list);
2116 return filt;
2119 static void addr_filter__free(struct addr_filter *filt)
2121 if (filt)
2122 addr_filter__free_str(filt);
2123 free(filt);
2127 struct addr_filter *filt)
2129 list_add_tail(&filt->list, &filts->head);
2134 struct addr_filter *filt)
2136 list_del_init(&filt->list);
2148 struct addr_filter *filt, *n;
2150 list_for_each_entry_safe(filt, n, &filts->head, list) {
2151 addr_filters__del(filts, filt);
2152 addr_filter__free(filt);
2192 static int parse_action(struct addr_filter *filt)
2194 if (!strcmp(filt->action, "filter")) {
2195 filt->start = true;
2196 filt->range = true;
2197 } else if (!strcmp(filt->action, "start")) {
2198 filt->start = true;
2199 } else if (!strcmp(filt->action, "stop")) {
2200 filt->start = false;
2201 } else if (!strcmp(filt->action, "tracestop")) {
2202 filt->start = false;
2203 filt->range = true;
2204 filt->action += 5; /* Change 'tracestop' to 'stop' */
2252 static int parse_one_filter(struct addr_filter *filt, const char **filter_inp)
2257 filt->str = fstr = strdup(*filter_inp);
2261 err = parse_num_or_str(&fstr, NULL, &filt->action, " ");
2265 err = parse_action(filt);
2269 err = parse_addr_size(&fstr, &filt->addr, &filt->sym_from,
2270 &filt->sym_from_idx);
2278 err = parse_addr_size(&fstr, &filt->size, &filt->sym_to,
2279 &filt->sym_to_idx);
2282 filt->range = true;
2289 err = parse_num_or_str(&fstr, NULL, &filt->filename, " ,");
2296 *filter_inp += fstr - filt->str;
2301 addr_filter__free_str(filt);
2309 struct addr_filter *filt;
2314 filt = addr_filter__new();
2315 err = parse_one_filter(filt, &fstr);
2317 addr_filter__free(filt);
2321 addr_filters__add(filts, filt);
2472 static int addr_filter__entire_kernel(struct addr_filter *filt)
2483 filt->addr = args.start;
2484 filt->size = args.size;
2489 static int check_end_after_start(struct addr_filter *filt, u64 start, u64 size)
2491 if (start + size >= filt->addr)
2494 if (filt->sym_from) {
2496 filt->sym_to, start, filt->sym_from, filt->addr);
2499 filt->sym_to, start, filt->addr);
2505 static int addr_filter__resolve_kernel_syms(struct addr_filter *filt)
2516 if (filt->sym_from && !strcmp(filt->sym_from, "*"))
2517 return addr_filter__entire_kernel(filt);
2519 if (filt->sym_from) {
2520 err = find_kern_sym(filt->sym_from, &start, &size,
2521 filt->sym_from_idx);
2524 filt->addr = start;
2525 if (filt->range && !filt->size && !filt->sym_to) {
2526 filt->size = size;
2531 if (filt->sym_to) {
2532 err = find_kern_sym(filt->sym_to, &start, &size,
2533 filt->sym_to_idx);
2537 err = check_end_after_start(filt, start, size);
2540 filt->size = start + size - filt->addr;
2547 filt->sym_to ? filt->sym_to : filt->sym_from);
2646 static int addr_filter__entire_dso(struct addr_filter *filt, struct dso *dso)
2650 filt->filename);
2654 filt->addr = 0;
2655 filt->size = dso->data.file_size;
2660 static int addr_filter__resolve_syms(struct addr_filter *filt)
2666 if (!filt->sym_from && !filt->sym_to)
2669 if (!filt->filename)
2670 return addr_filter__resolve_kernel_syms(filt);
2672 dso = load_dso(filt->filename);
2674 pr_err("Failed to load symbols from: %s\n", filt->filename);
2678 if (filt->sym_from && !strcmp(filt->sym_from, "*")) {
2679 err = addr_filter__entire_dso(filt, dso);
2683 if (filt->sym_from) {
2684 err = find_dso_sym(dso, filt->sym_from, &start, &size,
2685 filt->sym_from_idx);
2688 filt->addr = start;
2689 if (filt->range && !filt->size && !filt->sym_to)
2690 filt->size = size;
2693 if (filt->sym_to) {
2694 err = find_dso_sym(dso, filt->sym_to, &start, &size,
2695 filt->sym_to_idx);
2699 err = check_end_after_start(filt, start, size);
2703 filt->size = start + size - filt->addr;
2712 static char *addr_filter__to_str(struct addr_filter *filt)
2720 if (filt->filename) {
2722 fn = realpath(filt->filename, filename_buf);
2727 if (filt->range) {
2729 filt->action, filt->addr, filt->size, at, fn);
2732 filt->action, filt->addr, at, fn);
2742 struct addr_filter *filt;
2758 list_for_each_entry(filt, &filts.head, list) {
2761 err = addr_filter__resolve_syms(filt);
2765 new_filter = addr_filter__to_str(filt);