Lines Matching refs:a2l
226 static int slurp_symtab(bfd *abfd, struct a2l_data *a2l) in slurp_symtab() argument
255 a2l->syms = syms; in slurp_symtab()
263 struct a2l_data *a2l = data; in find_address_in_section() local
266 if (a2l->found) in find_address_in_section()
277 pc = a2l->addr; in find_address_in_section()
292 a2l->found = bfd_find_nearest_line(abfd, section, a2l->syms, pc - vma, in find_address_in_section()
293 &a2l->filename, &a2l->funcname, in find_address_in_section()
294 &a2l->line); in find_address_in_section()
296 if (a2l->filename && !strlen(a2l->filename)) in find_address_in_section()
297 a2l->filename = NULL; in find_address_in_section()
303 struct a2l_data *a2l = NULL; in addr2line_init() local
312 a2l = zalloc(sizeof(*a2l)); in addr2line_init()
313 if (a2l == NULL) in addr2line_init()
316 a2l->abfd = abfd; in addr2line_init()
317 a2l->input = strdup(path); in addr2line_init()
318 if (a2l->input == NULL) in addr2line_init()
321 if (slurp_symtab(abfd, a2l)) in addr2line_init()
324 return a2l; in addr2line_init()
327 if (a2l) { in addr2line_init()
328 zfree((char **)&a2l->input); in addr2line_init()
329 free(a2l); in addr2line_init()
335 static void addr2line_cleanup(struct a2l_data *a2l) in addr2line_cleanup() argument
337 if (a2l->abfd) in addr2line_cleanup()
338 bfd_close(a2l->abfd); in addr2line_cleanup()
339 zfree((char **)&a2l->input); in addr2line_cleanup()
340 zfree(&a2l->syms); in addr2line_cleanup()
341 free(a2l); in addr2line_cleanup()
348 struct a2l_data *a2l = dso__a2l(dso); in inline_list__append_dso_a2l() local
349 struct symbol *inline_sym = new_inline_sym(dso, sym, a2l->funcname); in inline_list__append_dso_a2l()
352 if (a2l->filename) in inline_list__append_dso_a2l()
353 srcline = srcline_from_fileline(a2l->filename, a2l->line); in inline_list__append_dso_a2l()
364 struct a2l_data *a2l = dso__a2l(dso); in addr2line() local
366 if (!a2l) { in addr2line()
367 a2l = addr2line_init(dso_name); in addr2line()
368 dso__set_a2l(dso, a2l); in addr2line()
371 if (a2l == NULL) { in addr2line()
377 a2l->addr = addr; in addr2line()
378 a2l->found = false; in addr2line()
380 bfd_map_over_sections(a2l->abfd, find_address_in_section, a2l); in addr2line()
382 if (!a2l->found) in addr2line()
391 while (bfd_find_inliner_info(a2l->abfd, &a2l->filename, in addr2line()
392 &a2l->funcname, &a2l->line) && in addr2line()
395 if (a2l->filename && !strlen(a2l->filename)) in addr2line()
396 a2l->filename = NULL; in addr2line()
408 *file = a2l->filename ? strdup(a2l->filename) : NULL; in addr2line()
413 *line = a2l->line; in addr2line()
420 struct a2l_data *a2l = dso__a2l(dso); in dso__free_a2l() local
422 if (!a2l) in dso__free_a2l()
425 addr2line_cleanup(a2l); in dso__free_a2l()
453 static void addr2line_subprocess_cleanup(struct child_process *a2l) in addr2line_subprocess_cleanup() argument
455 if (a2l->pid != -1) { in addr2line_subprocess_cleanup()
456 kill(a2l->pid, SIGKILL); in addr2line_subprocess_cleanup()
457 finish_command(a2l); /* ignore result, we don't care */ in addr2line_subprocess_cleanup()
458 a2l->pid = -1; in addr2line_subprocess_cleanup()
459 close(a2l->in); in addr2line_subprocess_cleanup()
460 close(a2l->out); in addr2line_subprocess_cleanup()
463 free(a2l); in addr2line_subprocess_cleanup()
474 struct child_process *a2l = zalloc(sizeof(*a2l)); in addr2line_subprocess_init() local
477 if (a2l == NULL) { in addr2line_subprocess_init()
482 a2l->pid = -1; in addr2line_subprocess_init()
483 a2l->in = -1; in addr2line_subprocess_init()
484 a2l->out = -1; in addr2line_subprocess_init()
485 a2l->no_stderr = 1; in addr2line_subprocess_init()
487 a2l->argv = argv; in addr2line_subprocess_init()
488 start_command_status = start_command(a2l); in addr2line_subprocess_init()
489 a2l->argv = NULL; /* it's not used after start_command; avoid dangling pointers */ in addr2line_subprocess_init()
494 addr2line_subprocess_cleanup(a2l); in addr2line_subprocess_init()
498 return a2l; in addr2line_subprocess_init()
507 static enum a2l_style addr2line_configure(struct child_process *a2l, const char *dso_name) in addr2line_configure() argument
518 if (write(a2l->in, ",\n", 2) != 2) in addr2line_configure()
521 io__init(&io, a2l->out, buf, sizeof(buf)); in addr2line_configure()
698 struct child_process *a2l = dso__a2l(dso); in addr2line() local
711 if (!a2l) { in addr2line()
717 a2l = dso__a2l(dso); in addr2line()
720 if (a2l == NULL) { in addr2line()
725 a2l_style = addr2line_configure(a2l, dso_name); in addr2line()
739 written = len > 0 ? write(a2l->in, buf, len) : -1; in addr2line()
745 io__init(&io, a2l->out, buf, sizeof(buf)); in addr2line()
832 addr2line_subprocess_cleanup(a2l); in addr2line()
839 struct child_process *a2l = dso__a2l(dso); in dso__free_a2l() local
841 if (!a2l) in dso__free_a2l()
844 addr2line_subprocess_cleanup(a2l); in dso__free_a2l()