Lines Matching +full:input +full:- +full:style

1 // SPDX-License-Identifier: GPL-2.0
21 #include "util/llvm-c-helpers.h"
26 #include "subcmd/run-command.h"
59 return -1; in inline_list__append()
61 ilist->symbol = symbol; in inline_list__append()
62 ilist->srcline = srcline; in inline_list__append()
65 list_add_tail(&ilist->list, &node->val); in inline_list__append()
67 list_add(&ilist->list, &node->val); in inline_list__append()
72 /* basename version that takes a const input string */
112 if (base_sym && strcmp(funcname, base_sym->name) == 0) { in new_inline_sym()
118 assert(!base_sym->inlined); in new_inline_sym()
121 inline_sym = symbol__new(base_sym ? base_sym->start : 0, in new_inline_sym()
122 base_sym ? (base_sym->end - base_sym->start) : 0, in new_inline_sym()
123 base_sym ? base_sym->binding : 0, in new_inline_sym()
124 base_sym ? base_sym->type : 0, in new_inline_sym()
127 inline_sym->inlined = 1; in new_inline_sym()
199 const char *input; member
223 return -1; in bfd_error()
255 a2l->syms = syms; in slurp_symtab()
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()
316 a2l->abfd = abfd; in addr2line_init()
317 a2l->input = strdup(path); in addr2line_init()
318 if (a2l->input == NULL) in addr2line_init()
328 zfree((char **)&a2l->input); in addr2line_init()
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()
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()
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()
455 if (a2l->pid != -1) { in addr2line_subprocess_cleanup()
456 kill(a2l->pid, SIGKILL); 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()
471 "-e", binary_path, in addr2line_subprocess_init()
472 "-a", "-i", "-f", 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()
489 a2l->argv = NULL; /* it's not used after start_command; avoid dangling pointers */ in addr2line_subprocess_init()
510 static enum a2l_style style; in addr2line_configure() local
518 if (write(a2l->in, ",\n", 2) != 2) in addr2line_configure()
521 io__init(&io, a2l->out, buf, sizeof(buf)); in addr2line_configure()
524 style = LLVM; in addr2line_configure()
527 pr_debug("Detected LLVM addr2line style\n"); in addr2line_configure()
529 style = GNU_BINUTILS; in addr2line_configure()
532 pr_debug("Detected binutils addr2line style\n"); in addr2line_configure()
543 pr_debug("Unknown/broken addr2line style\n"); in addr2line_configure()
551 lines--; in addr2line_configure()
556 return style; in addr2line_configure()
560 enum a2l_style style, in read_addr2line_record() argument
570 * -1 ==> error in read_addr2line_record()
571 * 0 ==> sentinel (or other ill-formed) record read in read_addr2line_record()
577 int ret = -1; in read_addr2line_record()
590 * - for the first line an address like 0x1234, in read_addr2line_record()
591 * - the binutils sentinel 0x0000000000000000, in read_addr2line_record()
592 * - the llvm-addr2line the sentinel ',' character, in read_addr2line_record()
593 * - the function name line for an inlined function. in read_addr2line_record()
599 if (style == LLVM && line_len == 2 && line[0] == ',') { in read_addr2line_record()
600 /* Found the llvm-addr2line sentinel character. */ in read_addr2line_record()
603 } else if (style == GNU_BINUTILS && (!first || addr != 0)) { in read_addr2line_record()
657 style == GNU_BINUTILS) { in read_addr2line_record()
702 int record_status = -1; in addr2line()
735 * for llvm-addr2line, so that we can detect when it has finished giving 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()
749 case -1: in addr2line()
759 * binutils, also force a non-zero address as we're no longer in addr2line()
765 case -1: in addr2line()
804 * info. This isn't the first record and force the address to non-zero in addr2line()
862 INIT_LIST_HEAD(&node->val); in addr2inlines()
863 node->addr = addr; in addr2inlines()
914 strndup(sym->name, sym->namelen) : SRCLINE_UNKNOWN; in __get_srcline()
917 if (asprintf(&srcline, "%s+%" PRIu64, show_sym ? sym->name : "", in __get_srcline()
918 ip - sym->start) < 0) in __get_srcline()
979 struct rb_node **p = &tree->rb_root.rb_node; in srcline__tree_insert()
990 node->addr = addr; in srcline__tree_insert()
991 node->srcline = srcline; in srcline__tree_insert()
996 if (addr < i->addr) in srcline__tree_insert()
997 p = &(*p)->rb_left; in srcline__tree_insert()
999 p = &(*p)->rb_right; in srcline__tree_insert()
1003 rb_link_node(&node->rb_node, parent, p); in srcline__tree_insert()
1004 rb_insert_color_cached(&node->rb_node, tree, leftmost); in srcline__tree_insert()
1009 struct rb_node *n = tree->rb_root.rb_node; in srcline__tree_find()
1015 if (addr < i->addr) in srcline__tree_find()
1016 n = n->rb_left; in srcline__tree_find()
1017 else if (addr > i->addr) in srcline__tree_find()
1018 n = n->rb_right; in srcline__tree_find()
1020 return i->srcline; in srcline__tree_find()
1033 next = rb_next(&pos->rb_node); in srcline__tree_delete()
1034 rb_erase_cached(&pos->rb_node, tree); in srcline__tree_delete()
1035 zfree_srcline(&pos->srcline); in srcline__tree_delete()
1056 list_for_each_entry_safe(ilist, tmp, &node->val, list) { in inline_node__delete()
1057 list_del_init(&ilist->list); in inline_node__delete()
1058 zfree_srcline(&ilist->srcline); in inline_node__delete()
1060 if (ilist->symbol && ilist->symbol->inlined) in inline_node__delete()
1061 symbol__delete(ilist->symbol); in inline_node__delete()
1071 struct rb_node **p = &tree->rb_root.rb_node; in inlines__tree_insert()
1073 const u64 addr = inlines->addr; in inlines__tree_insert()
1080 if (addr < i->addr) in inlines__tree_insert()
1081 p = &(*p)->rb_left; in inlines__tree_insert()
1083 p = &(*p)->rb_right; in inlines__tree_insert()
1087 rb_link_node(&inlines->rb_node, parent, p); in inlines__tree_insert()
1088 rb_insert_color_cached(&inlines->rb_node, tree, leftmost); in inlines__tree_insert()
1093 struct rb_node *n = tree->rb_root.rb_node; in inlines__tree_find()
1099 if (addr < i->addr) in inlines__tree_find()
1100 n = n->rb_left; in inlines__tree_find()
1101 else if (addr > i->addr) in inlines__tree_find()
1102 n = n->rb_right; in inlines__tree_find()
1117 next = rb_next(&pos->rb_node); in inlines__tree_delete()
1118 rb_erase_cached(&pos->rb_node, tree); in inlines__tree_delete()