Lines Matching refs:d

71 static struct addr_location *get_al(struct dlfilter *d)  in get_al()  argument
73 struct addr_location *al = d->al; in get_al()
75 if (!al->thread && machine__resolve(d->machine, al, d->sample) < 0) in get_al()
80 static struct thread *get_thread(struct dlfilter *d) in get_thread() argument
82 struct addr_location *al = get_al(d); in get_thread()
89 struct dlfilter *d = (struct dlfilter *)ctx; in dlfilter__resolve_ip() local
90 struct perf_dlfilter_al *d_al = d->d_ip_al; in dlfilter__resolve_ip()
93 if (!d->ctx_valid) in dlfilter__resolve_ip()
100 al = get_al(d); in dlfilter__resolve_ip()
106 d_al->is_kernel_ip = machine__kernel_ip(d->machine, d->sample->ip); in dlfilter__resolve_ip()
115 struct dlfilter *d = (struct dlfilter *)ctx; in dlfilter__resolve_addr() local
116 struct perf_dlfilter_al *d_addr_al = d->d_addr_al; in dlfilter__resolve_addr()
117 struct addr_location *addr_al = d->addr_al; in dlfilter__resolve_addr()
119 if (!d->ctx_valid || !d->d_sample->addr_correlates_sym) in dlfilter__resolve_addr()
127 struct thread *thread = get_thread(d); in dlfilter__resolve_addr()
131 thread__resolve(thread, addr_al, d->sample); in dlfilter__resolve_addr()
136 d_addr_al->is_kernel_ip = machine__kernel_ip(d->machine, d->sample->addr); in dlfilter__resolve_addr()
143 struct dlfilter *d = (struct dlfilter *)ctx; in dlfilter__args() local
150 if (!d->ctx_valid && !d->in_start && !d->in_stop) in dlfilter__args()
153 *dlargc = d->dlargc; in dlfilter__args()
154 return d->dlargv; in dlfilter__args()
164 struct dlfilter *d = (struct dlfilter *)ctx; in dlfilter__resolve_address() local
170 if (!d->ctx_valid || !d_al_p) in dlfilter__resolve_address()
173 thread = get_thread(d); in dlfilter__resolve_address()
178 thread__find_symbol_fb(thread, d->sample->cpumode, address, &al); in dlfilter__resolve_address()
182 d_al.is_kernel_ip = machine__kernel_ip(d->machine, address); in dlfilter__resolve_address()
215 struct dlfilter *d = (struct dlfilter *)ctx; in dlfilter__insn() local
222 if (!d->ctx_valid) in dlfilter__insn()
225 if (d->sample->ip && !d->sample->insn_len) { in dlfilter__insn()
226 struct addr_location *al = d->al; in dlfilter__insn()
228 if (!al->thread && machine__resolve(d->machine, al, d->sample) < 0) in dlfilter__insn()
235 script_fetch_insn(d->sample, al->thread, machine); in dlfilter__insn()
239 if (!d->sample->insn_len) in dlfilter__insn()
242 *len = d->sample->insn_len; in dlfilter__insn()
244 return (__u8 *)d->sample->insn; in dlfilter__insn()
249 struct dlfilter *d = (struct dlfilter *)ctx; in dlfilter__srcline() local
257 if (!d->ctx_valid || !line_no) in dlfilter__srcline()
260 al = get_al(d); in dlfilter__srcline()
277 struct dlfilter *d = (struct dlfilter *)ctx; in dlfilter__attr() local
279 if (!d->ctx_valid) in dlfilter__attr()
282 return &d->evsel->core.attr; in dlfilter__attr()
297 struct dlfilter *d = (struct dlfilter *)ctx; in dlfilter__object_code() local
302 if (!d->ctx_valid) in dlfilter__object_code()
305 al = get_al(d); in dlfilter__object_code()
310 machine__kernel_ip(d->machine, ip) == machine__kernel_ip(d->machine, d->sample->ip)) in dlfilter__object_code()
311 return code_read(ip, al->map, d->machine, buf, len); in dlfilter__object_code()
315 thread__find_map_fb(al->thread, d->sample->cpumode, ip, &a); in dlfilter__object_code()
316 ret = a.map ? code_read(ip, a.map, d->machine, buf, len) : -1; in dlfilter__object_code()
366 static int dlfilter__init(struct dlfilter *d, const char *file, int dlargc, char **dlargv) in dlfilter__init() argument
382 memset(d, 0, sizeof(*d)); in dlfilter__init()
383 d->file = find_dlfilter(file); in dlfilter__init()
384 if (!d->file) in dlfilter__init()
386 d->dlargc = dlargc; in dlfilter__init()
387 d->dlargv = dlargv; in dlfilter__init()
391 static void dlfilter__exit(struct dlfilter *d) in dlfilter__exit() argument
393 zfree(&d->file); in dlfilter__exit()
396 static int dlfilter__open(struct dlfilter *d) in dlfilter__open() argument
398 d->handle = dlopen(d->file, RTLD_NOW); in dlfilter__open()
399 if (!d->handle) { in dlfilter__open()
400 pr_err("dlopen failed for: '%s'\n", d->file); in dlfilter__open()
403 d->start = dlsym(d->handle, "start"); in dlfilter__open()
404 d->filter_event = dlsym(d->handle, "filter_event"); in dlfilter__open()
405 d->filter_event_early = dlsym(d->handle, "filter_event_early"); in dlfilter__open()
406 d->stop = dlsym(d->handle, "stop"); in dlfilter__open()
407 d->fns = dlsym(d->handle, "perf_dlfilter_fns"); in dlfilter__open()
408 if (d->fns) in dlfilter__open()
409 memcpy(d->fns, &perf_dlfilter_fns, sizeof(struct perf_dlfilter_fns)); in dlfilter__open()
413 static int dlfilter__close(struct dlfilter *d) in dlfilter__close() argument
415 return dlclose(d->handle); in dlfilter__close()
420 struct dlfilter *d = malloc(sizeof(*d)); in dlfilter__new() local
422 if (!d) in dlfilter__new()
425 if (dlfilter__init(d, file, dlargc, dlargv)) in dlfilter__new()
428 if (dlfilter__open(d)) in dlfilter__new()
431 return d; in dlfilter__new()
434 dlfilter__exit(d); in dlfilter__new()
436 free(d); in dlfilter__new()
440 static void dlfilter__free(struct dlfilter *d) in dlfilter__free() argument
442 if (d) { in dlfilter__free()
443 dlfilter__exit(d); in dlfilter__free()
444 free(d); in dlfilter__free()
448 int dlfilter__start(struct dlfilter *d, struct perf_session *session) in dlfilter__start() argument
450 if (d) { in dlfilter__start()
451 d->session = session; in dlfilter__start()
452 if (d->start) { in dlfilter__start()
455 d->in_start = true; in dlfilter__start()
456 ret = d->start(&d->data, d); in dlfilter__start()
457 d->in_start = false; in dlfilter__start()
464 static int dlfilter__stop(struct dlfilter *d) in dlfilter__stop() argument
466 if (d && d->stop) { in dlfilter__stop()
469 d->in_stop = true; in dlfilter__stop()
470 ret = d->stop(d->data, d); in dlfilter__stop()
471 d->in_stop = false; in dlfilter__stop()
477 void dlfilter__cleanup(struct dlfilter *d) in dlfilter__cleanup() argument
479 if (d) { in dlfilter__cleanup()
480 dlfilter__stop(d); in dlfilter__cleanup()
481 dlfilter__close(d); in dlfilter__cleanup()
482 dlfilter__free(d); in dlfilter__cleanup()
488 int dlfilter__do_filter_event(struct dlfilter *d, in dlfilter__do_filter_event() argument
502 d->event = event; in dlfilter__do_filter_event()
503 d->sample = sample; in dlfilter__do_filter_event()
504 d->evsel = evsel; in dlfilter__do_filter_event()
505 d->machine = machine; in dlfilter__do_filter_event()
506 d->al = al; in dlfilter__do_filter_event()
507 d->addr_al = addr_al; in dlfilter__do_filter_event()
508 d->d_sample = &d_sample; in dlfilter__do_filter_event()
509 d->d_ip_al = &d_ip_al; in dlfilter__do_filter_event()
510 d->d_addr_al = &d_addr_al; in dlfilter__do_filter_event()
566 d->ctx_valid = true; in dlfilter__do_filter_event()
569 ret = d->filter_event_early(d->data, &d_sample, d); in dlfilter__do_filter_event()
571 ret = d->filter_event(d->data, &d_sample, d); in dlfilter__do_filter_event()
573 d->ctx_valid = false; in dlfilter__do_filter_event()