Lines Matching refs:dso
32 static int dso__load_kernel_sym(struct dso *dso, struct map *map);
33 static int dso__load_guest_kernel_sym(struct dso *dso, struct map *map);
489 void dso__reset_find_symbol_cache(struct dso *dso) in dso__reset_find_symbol_cache() argument
494 dso->last_find_result[type].addr = 0; in dso__reset_find_symbol_cache()
495 dso->last_find_result[type].symbol = NULL; in dso__reset_find_symbol_cache()
499 void dso__insert_symbol(struct dso *dso, enum map_type type, struct symbol *sym) in dso__insert_symbol() argument
501 __symbols__insert(&dso->symbols[type], sym, dso->kernel); in dso__insert_symbol()
504 if (dso->last_find_result[type].addr >= sym->start && in dso__insert_symbol()
505 (dso->last_find_result[type].addr < sym->end || in dso__insert_symbol()
507 dso->last_find_result[type].symbol = sym; in dso__insert_symbol()
511 struct symbol *dso__find_symbol(struct dso *dso, in dso__find_symbol() argument
514 if (dso->last_find_result[type].addr != addr || dso->last_find_result[type].symbol == NULL) { in dso__find_symbol()
515 dso->last_find_result[type].addr = addr; in dso__find_symbol()
516 dso->last_find_result[type].symbol = symbols__find(&dso->symbols[type], addr); in dso__find_symbol()
519 return dso->last_find_result[type].symbol; in dso__find_symbol()
522 struct symbol *dso__first_symbol(struct dso *dso, enum map_type type) in dso__first_symbol() argument
524 return symbols__first(&dso->symbols[type]); in dso__first_symbol()
527 struct symbol *dso__last_symbol(struct dso *dso, enum map_type type) in dso__last_symbol() argument
529 return symbols__last(&dso->symbols[type]); in dso__last_symbol()
548 struct symbol *dso__find_symbol_by_name(struct dso *dso, enum map_type type, in dso__find_symbol_by_name() argument
551 struct symbol *s = symbols__find_by_name(&dso->symbol_names[type], name, in dso__find_symbol_by_name()
554 s = symbols__find_by_name(&dso->symbol_names[type], name, in dso__find_symbol_by_name()
559 void dso__sort_by_name(struct dso *dso, enum map_type type) in dso__sort_by_name() argument
561 dso__set_sorted_by_name(dso, type); in dso__sort_by_name()
562 return symbols__sort_by_name(&dso->symbol_names[type], in dso__sort_by_name()
563 &dso->symbols[type]); in dso__sort_by_name()
630 struct dso *dso; member
669 struct rb_root *root = &a->dso->symbols[a->map->type]; in map__process_kallsym_symbol()
696 static int dso__load_all_kallsyms(struct dso *dso, const char *filename, in dso__load_all_kallsyms() argument
699 struct process_kallsyms_args args = { .map = map, .dso = dso, }; in dso__load_all_kallsyms()
703 static int dso__split_kallsyms_for_kcore(struct dso *dso, struct map *map) in dso__split_kallsyms_for_kcore() argument
709 struct rb_root old_root = dso->symbols[map->type]; in dso__split_kallsyms_for_kcore()
710 struct rb_root *root = &dso->symbols[map->type]; in dso__split_kallsyms_for_kcore()
740 symbols__insert(&curr_map->dso->symbols[curr_map->type], pos); in dso__split_kallsyms_for_kcore()
745 dso->adjust_symbols = 1; in dso__split_kallsyms_for_kcore()
755 static int dso__split_kallsyms(struct dso *dso, struct map *map, u64 delta) in dso__split_kallsyms() argument
762 struct rb_root *root = &dso->symbols[map->type]; in dso__split_kallsyms()
784 if (strcmp(curr_map->dso->short_name, module)) { in dso__split_kallsyms()
786 dso->kernel == DSO_TYPE_GUEST_KERNEL && in dso__split_kallsyms()
795 dso__set_loaded(curr_map->dso, in dso__split_kallsyms()
810 if (curr_map->dso->loaded && in dso__split_kallsyms()
822 struct dso *ndso; in dso__split_kallsyms()
835 if (dso->kernel == DSO_TYPE_GUEST_KERNEL) in dso__split_kallsyms()
848 ndso->kernel = dso->kernel; in dso__split_kallsyms()
867 symbols__insert(&curr_map->dso->symbols[curr_map->type], pos); in dso__split_kallsyms()
879 dso->kernel == DSO_TYPE_GUEST_KERNEL && in dso__split_kallsyms()
881 dso__set_loaded(curr_map->dso, curr_map->type); in dso__split_kallsyms()
1065 mi = find_module(old_map->dso->short_name, &modules); in do_validate_kcore_modules()
1144 struct dso *dso; member
1154 map = map__new2(start, md->dso, md->type); in kcore_mapfn()
1166 static int dso__load_kcore(struct dso *dso, struct map *map, in dso__load_kcore() argument
1195 md.dso = dso; in dso__load_kcore()
1211 dso->is_64_bit = is_64_bit; in dso__load_kcore()
1229 sym = dso__first_symbol(dso, map->type); in dso__load_kcore()
1267 if (dso->kernel == DSO_TYPE_GUEST_KERNEL) in dso__load_kcore()
1268 dso->binary_type = DSO_BINARY_TYPE__GUEST_KCORE; in dso__load_kcore()
1270 dso->binary_type = DSO_BINARY_TYPE__KCORE; in dso__load_kcore()
1271 dso__set_long_name(dso, strdup(kcore_filename), true); in dso__load_kcore()
1314 int __dso__load_kallsyms(struct dso *dso, const char *filename, in __dso__load_kallsyms() argument
1322 if (dso__load_all_kallsyms(dso, filename, map) < 0) in __dso__load_kallsyms()
1328 symbols__fixup_end(&dso->symbols[map->type]); in __dso__load_kallsyms()
1329 symbols__fixup_duplicate(&dso->symbols[map->type]); in __dso__load_kallsyms()
1331 if (dso->kernel == DSO_TYPE_GUEST_KERNEL) in __dso__load_kallsyms()
1332 dso->symtab_type = DSO_BINARY_TYPE__GUEST_KALLSYMS; in __dso__load_kallsyms()
1334 dso->symtab_type = DSO_BINARY_TYPE__KALLSYMS; in __dso__load_kallsyms()
1336 if (!no_kcore && !dso__load_kcore(dso, map, filename)) in __dso__load_kallsyms()
1337 return dso__split_kallsyms_for_kcore(dso, map); in __dso__load_kallsyms()
1339 return dso__split_kallsyms(dso, map, delta); in __dso__load_kallsyms()
1342 int dso__load_kallsyms(struct dso *dso, const char *filename, in dso__load_kallsyms() argument
1345 return __dso__load_kallsyms(dso, filename, map, false); in dso__load_kallsyms()
1348 static int dso__load_perf_map(const char *map_path, struct dso *dso, in dso__load_perf_map() argument
1391 symbols__insert(&dso->symbols[map->type], sym); in dso__load_perf_map()
1406 static bool dso__is_compatible_symtab_type(struct dso *dso, bool kmod, in dso__is_compatible_symtab_type() argument
1417 return !kmod && dso->kernel == DSO_TYPE_USER; in dso__is_compatible_symtab_type()
1422 return dso->kernel == DSO_TYPE_KERNEL; in dso__is_compatible_symtab_type()
1427 return dso->kernel == DSO_TYPE_GUEST_KERNEL; in dso__is_compatible_symtab_type()
1437 return kmod && dso->symtab_type == type; in dso__is_compatible_symtab_type()
1487 int dso__load(struct dso *dso, struct map *map) in dso__load() argument
1502 const char *map_path = dso->long_name; in dso__load()
1504 perfmap = strncmp(dso->name, "/tmp/perf-", 10) == 0; in dso__load()
1506 if (dso->nsinfo && (dso__find_perf_map(newmapname, in dso__load()
1507 sizeof(newmapname), &dso->nsinfo) == 0)) { in dso__load()
1512 nsinfo__mountns_enter(dso->nsinfo, &nsc); in dso__load()
1513 pthread_mutex_lock(&dso->lock); in dso__load()
1516 if (dso__loaded(dso, map->type)) { in dso__load()
1526 if (dso->kernel) { in dso__load()
1527 if (dso->kernel == DSO_TYPE_KERNEL) in dso__load()
1528 ret = dso__load_kernel_sym(dso, map); in dso__load()
1529 else if (dso->kernel == DSO_TYPE_GUEST_KERNEL) in dso__load()
1530 ret = dso__load_guest_kernel_sym(dso, map); in dso__load()
1533 machine__map_x86_64_entry_trampolines(machine, dso); in dso__load()
1537 dso->adjust_symbols = 0; in dso__load()
1551 ret = dso__load_perf_map(map_path, dso, map); in dso__load()
1552 dso->symtab_type = ret > 0 ? DSO_BINARY_TYPE__JAVA_JIT : in dso__load()
1564 kmod = dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE || in dso__load()
1565 dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP || in dso__load()
1566 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE || in dso__load()
1567 dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP; in dso__load()
1574 if (!dso->has_build_id && in dso__load()
1575 is_regular_file(dso->long_name)) { in dso__load()
1576 __symbol__join_symfs(name, PATH_MAX, dso->long_name); in dso__load()
1578 dso__set_build_id(dso, build_id); in dso__load()
1598 if (!dso__is_compatible_symtab_type(dso, kmod, symtab_type)) in dso__load()
1601 if (dso__read_binary_type_filename(dso, symtab_type, in dso__load()
1609 sirc = symsrc__init(ss, dso, name, symtab_type); in dso__load()
1612 nsinfo__mountns_enter(dso->nsinfo, &nsc); in dso__load()
1623 if (!dso->symsrc_filename) in dso__load()
1624 dso->symsrc_filename = strdup(name); in dso__load()
1655 ret = dso__load_sym(dso, map, syms_ss, runtime_ss, kmod); in dso__load()
1662 nr_plt = dso__synthesize_plt_symbols(dso, runtime_ss, map); in dso__load()
1671 if (ret < 0 && strstr(dso->name, " (deleted)") != NULL) in dso__load()
1674 dso__set_loaded(dso, map->type); in dso__load()
1675 pthread_mutex_unlock(&dso->lock); in dso__load()
1690 if (map->dso && strcmp(map->dso->short_name, name) == 0) in map_groups__find_by_name()
1701 int dso__load_vmlinux(struct dso *dso, struct map *map, in dso__load_vmlinux() argument
1714 if (dso->kernel == DSO_TYPE_GUEST_KERNEL) in dso__load_vmlinux()
1719 if (symsrc__init(&ss, dso, symfs_vmlinux, symtab_type)) in dso__load_vmlinux()
1722 err = dso__load_sym(dso, map, &ss, &ss, 0); in dso__load_vmlinux()
1726 if (dso->kernel == DSO_TYPE_GUEST_KERNEL) in dso__load_vmlinux()
1727 dso->binary_type = DSO_BINARY_TYPE__GUEST_VMLINUX; in dso__load_vmlinux()
1729 dso->binary_type = DSO_BINARY_TYPE__VMLINUX; in dso__load_vmlinux()
1730 dso__set_long_name(dso, vmlinux, vmlinux_allocated); in dso__load_vmlinux()
1731 dso__set_loaded(dso, map->type); in dso__load_vmlinux()
1738 int dso__load_vmlinux_path(struct dso *dso, struct map *map) in dso__load_vmlinux_path() argument
1747 err = dso__load_vmlinux(dso, map, vmlinux_path[i], false); in dso__load_vmlinux_path()
1753 filename = dso__build_id_filename(dso, NULL, 0, false); in dso__load_vmlinux_path()
1755 err = dso__load_vmlinux(dso, map, filename, true); in dso__load_vmlinux_path()
1811 static char *dso__find_kallsyms(struct dso *dso, struct map *map) in dso__find_kallsyms() argument
1818 if (!dso->has_build_id) { in dso__find_kallsyms()
1828 is_host = dso__build_id_equal(dso, host_build_id); in dso__find_kallsyms()
1844 build_id__sprintf(dso->build_id, sizeof(dso->build_id), sbuild_id); in dso__find_kallsyms()
1869 static int dso__load_kernel_sym(struct dso *dso, struct map *map) in dso__load_kernel_sym() argument
1895 return dso__load_vmlinux(dso, map, symbol_conf.vmlinux_name, false); in dso__load_kernel_sym()
1899 err = dso__load_vmlinux_path(dso, map); in dso__load_kernel_sym()
1908 kallsyms_allocated_filename = dso__find_kallsyms(dso, map); in dso__load_kernel_sym()
1915 err = dso__load_kallsyms(dso, kallsyms_filename, map); in dso__load_kernel_sym()
1920 if (err > 0 && !dso__is_kcore(dso)) { in dso__load_kernel_sym()
1921 dso->binary_type = DSO_BINARY_TYPE__KALLSYMS; in dso__load_kernel_sym()
1922 dso__set_long_name(dso, DSO__NAME_KALLSYMS, false); in dso__load_kernel_sym()
1930 static int dso__load_guest_kernel_sym(struct dso *dso, struct map *map) in dso__load_guest_kernel_sym() argument
1950 err = dso__load_vmlinux(dso, map, in dso__load_guest_kernel_sym()
1964 err = dso__load_kallsyms(dso, kallsyms_filename, map); in dso__load_guest_kernel_sym()
1967 if (err > 0 && !dso__is_kcore(dso)) { in dso__load_guest_kernel_sym()
1968 dso->binary_type = DSO_BINARY_TYPE__GUEST_KALLSYMS; in dso__load_guest_kernel_sym()
1970 dso__set_long_name(dso, strdup(path), true); in dso__load_guest_kernel_sym()