Lines Matching refs:a2l
89 static int slurp_symtab(bfd *abfd, struct a2l_data *a2l) in slurp_symtab() argument
118 a2l->syms = syms; in slurp_symtab()
126 struct a2l_data *a2l = data; in find_address_in_section() local
129 if (a2l->found) in find_address_in_section()
140 pc = a2l->addr; in find_address_in_section()
155 a2l->found = bfd_find_nearest_line(abfd, section, a2l->syms, pc - vma, in find_address_in_section()
156 &a2l->filename, &a2l->funcname, in find_address_in_section()
157 &a2l->line); in find_address_in_section()
159 if (a2l->filename && !strlen(a2l->filename)) in find_address_in_section()
160 a2l->filename = NULL; in find_address_in_section()
166 struct a2l_data *a2l = NULL; in addr2line_init() local
176 a2l = zalloc(sizeof(*a2l)); in addr2line_init()
177 if (a2l == NULL) in addr2line_init()
180 a2l->abfd = abfd; in addr2line_init()
181 a2l->input = strdup(path); in addr2line_init()
182 if (a2l->input == NULL) in addr2line_init()
185 if (slurp_symtab(abfd, a2l)) in addr2line_init()
188 return a2l; in addr2line_init()
191 if (a2l) { in addr2line_init()
192 zfree((char **)&a2l->input); in addr2line_init()
193 free(a2l); in addr2line_init()
199 static void addr2line_cleanup(struct a2l_data *a2l) in addr2line_cleanup() argument
201 if (a2l->abfd) in addr2line_cleanup()
202 bfd_close(a2l->abfd); in addr2line_cleanup()
203 zfree((char **)&a2l->input); in addr2line_cleanup()
204 zfree(&a2l->syms); in addr2line_cleanup()
205 free(a2l); in addr2line_cleanup()
212 struct a2l_data *a2l = dso__a2l(dso); in inline_list__append_dso_a2l() local
213 struct symbol *inline_sym = new_inline_sym(dso, sym, a2l->funcname); in inline_list__append_dso_a2l()
216 if (a2l->filename) in inline_list__append_dso_a2l()
217 srcline = srcline_from_fileline(a2l->filename, a2l->line); in inline_list__append_dso_a2l()
228 struct a2l_data *a2l = dso__a2l(dso); in libbfd__addr2line() local
230 if (!a2l) { in libbfd__addr2line()
231 a2l = addr2line_init(dso_name); in libbfd__addr2line()
232 dso__set_a2l(dso, a2l); in libbfd__addr2line()
235 if (a2l == NULL) { in libbfd__addr2line()
241 a2l->addr = addr; in libbfd__addr2line()
242 a2l->found = false; in libbfd__addr2line()
244 bfd_map_over_sections(a2l->abfd, find_address_in_section, a2l); in libbfd__addr2line()
246 if (!a2l->found) in libbfd__addr2line()
255 while (bfd_find_inliner_info(a2l->abfd, &a2l->filename, in libbfd__addr2line()
256 &a2l->funcname, &a2l->line) && in libbfd__addr2line()
259 if (a2l->filename && !strlen(a2l->filename)) in libbfd__addr2line()
260 a2l->filename = NULL; in libbfd__addr2line()
272 *file = a2l->filename ? strdup(a2l->filename) : NULL; in libbfd__addr2line()
277 *line = a2l->line; in libbfd__addr2line()
284 struct a2l_data *a2l = dso__a2l(dso); in dso__free_a2l_libbfd() local
286 if (!a2l) in dso__free_a2l_libbfd()
289 addr2line_cleanup(a2l); in dso__free_a2l_libbfd()