Lines Matching refs:dso

43 void dso__set_nsinfo(struct dso *dso, struct nsinfo *nsi)  in dso__set_nsinfo()  argument
45 nsinfo__put(RC_CHK_ACCESS(dso)->nsinfo); in dso__set_nsinfo()
46 RC_CHK_ACCESS(dso)->nsinfo = nsi; in dso__set_nsinfo()
49 char dso__symtab_origin(const struct dso *dso) in dso__symtab_origin() argument
73 if (dso == NULL || dso__symtab_type(dso) == DSO_BINARY_TYPE__NOT_FOUND) in dso__symtab_origin()
75 return origin[dso__symtab_type(dso)]; in dso__symtab_origin()
78 bool dso__is_object_file(const struct dso *dso) in dso__is_object_file() argument
80 switch (dso__binary_type(dso)) { in dso__is_object_file()
112 int dso__read_binary_type_filename(const struct dso *dso, in dso__read_binary_type_filename() argument
128 len = __symbol__join_symfs(filename, size, dso__long_name(dso)); in dso__read_binary_type_filename()
159 if (dso__build_id_filename(dso, filename, size, false) == NULL) in dso__read_binary_type_filename()
164 if (dso__build_id_filename(dso, filename, size, true) == NULL) in dso__read_binary_type_filename()
170 snprintf(filename + len, size - len, "%s.debug", dso__long_name(dso)); in dso__read_binary_type_filename()
175 snprintf(filename + len, size - len, "%s", dso__long_name(dso)); in dso__read_binary_type_filename()
184 if (strlen(dso__long_name(dso)) < 9 || in dso__read_binary_type_filename()
185 strncmp(dso__long_name(dso), "/usr/lib/", 9)) { in dso__read_binary_type_filename()
190 snprintf(filename + len, size - len, "%s", dso__long_name(dso) + 4); in dso__read_binary_type_filename()
198 last_slash = dso__long_name(dso) + dso__long_name_len(dso); in dso__read_binary_type_filename()
199 while (last_slash != dso__long_name(dso) && *last_slash != '/') in dso__read_binary_type_filename()
203 dir_size = last_slash - dso__long_name(dso) + 2; in dso__read_binary_type_filename()
208 len += scnprintf(filename + len, dir_size, "%s", dso__long_name(dso)); in dso__read_binary_type_filename()
215 if (!dso__has_build_id(dso)) { in dso__read_binary_type_filename()
220 build_id__snprintf(dso__bid(dso), build_id_hex, sizeof(build_id_hex)); in dso__read_binary_type_filename()
230 __symbol__join_symfs(filename, size, dso__long_name(dso)); in dso__read_binary_type_filename()
236 root_dir, dso__long_name(dso)); in dso__read_binary_type_filename()
241 __symbol__join_symfs(filename, size, dso__long_name(dso)); in dso__read_binary_type_filename()
246 snprintf(filename, size, "%s", dso__long_name(dso)); in dso__read_binary_type_filename()
320 bool dso__needs_decompress(struct dso *dso) in dso__needs_decompress() argument
322 return dso__symtab_type(dso) == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP || in dso__needs_decompress()
323 dso__symtab_type(dso) == DSO_BINARY_TYPE__GUEST_KMODULE_COMP; in dso__needs_decompress()
369 static int decompress_kmodule(struct dso *dso, const char *name, in decompress_kmodule() argument
372 if (!dso__needs_decompress(dso)) in decompress_kmodule()
375 if (dso__comp(dso) == COMP_ID__NONE) in decompress_kmodule()
378 return filename__decompress(name, pathname, len, dso__comp(dso), dso__load_errno(dso)); in decompress_kmodule()
381 int dso__decompress_kmodule_fd(struct dso *dso, const char *name) in dso__decompress_kmodule_fd() argument
383 return decompress_kmodule(dso, name, NULL, 0); in dso__decompress_kmodule_fd()
386 int dso__decompress_kmodule_path(struct dso *dso, const char *name, in dso__decompress_kmodule_path() argument
389 int fd = decompress_kmodule(dso, name, pathname, len); in dso__decompress_kmodule_path()
475 void dso__set_module_info(struct dso *dso, struct kmod_path *m, in dso__set_module_info() argument
479 dso__set_symtab_type(dso, DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE); in dso__set_module_info()
481 dso__set_symtab_type(dso, DSO_BINARY_TYPE__GUEST_KMODULE); in dso__set_module_info()
485 dso__set_symtab_type(dso, dso__symtab_type(dso) + 1); in dso__set_module_info()
486 dso__set_comp(dso, m->comp); in dso__set_module_info()
489 dso__set_is_kmod(dso); in dso__set_module_info()
490 dso__set_short_name(dso, strdup(m->name), true); in dso__set_module_info()
514 static void dso__list_add(struct dso *dso) EXCLUSIVE_LOCKS_REQUIRED(_dso__data_open_lock) in dso__list_add() argument
516 list_add_tail(&dso__data(dso)->open_entry, &dso__data_open); in dso__list_add()
518 dso__data(dso)->dso = dso__get(dso); in dso__list_add()
521 assert(dso__dsos(dso)); in dso__list_add()
525 static void dso__list_del(struct dso *dso) EXCLUSIVE_LOCKS_REQUIRED(_dso__data_open_lock) in dso__list_del() argument
527 list_del_init(&dso__data(dso)->open_entry); in dso__list_del()
530 dso__put(dso__data(dso)->dso); in dso__list_del()
561 char *dso__filename_with_chroot(const struct dso *dso, const char *filename) in dso__filename_with_chroot() argument
563 return filename_with_chroot(nsinfo__pid(dso__nsinfo_const(dso)), filename); in dso__filename_with_chroot()
566 static int __open_dso(struct dso *dso, struct machine *machine) in __open_dso() argument
577 mutex_lock(dso__lock(dso)); in __open_dso()
581 if (dso__read_binary_type_filename(dso, dso__binary_type(dso), in __open_dso()
588 if (errno != ENOENT || dso__nsinfo(dso) == NULL) in __open_dso()
591 new_name = dso__filename_with_chroot(dso, name); in __open_dso()
599 if (dso__needs_decompress(dso)) { in __open_dso()
603 if (dso__decompress_kmodule_path(dso, name, newpath, len) < 0) { in __open_dso()
604 fd = -(*dso__load_errno(dso)); in __open_dso()
618 mutex_unlock(dso__lock(dso)); in __open_dso()
632 static int open_dso(struct dso *dso, struct machine *machine) in open_dso() argument
638 if (dso__binary_type(dso) != DSO_BINARY_TYPE__BUILD_ID_CACHE) { in open_dso()
639 mutex_lock(dso__lock(dso)); in open_dso()
640 nsinfo__mountns_enter(dso__nsinfo(dso), &nsc); in open_dso()
641 mutex_unlock(dso__lock(dso)); in open_dso()
643 fd = __open_dso(dso, machine); in open_dso()
644 if (dso__binary_type(dso) != DSO_BINARY_TYPE__BUILD_ID_CACHE) in open_dso()
648 dso__list_add(dso); in open_dso()
659 static void close_data_fd(struct dso *dso) EXCLUSIVE_LOCKS_REQUIRED(_dso__data_open_lock) in close_data_fd() argument
661 if (dso__data(dso)->fd >= 0) { in close_data_fd()
662 close(dso__data(dso)->fd); in close_data_fd()
663 dso__data(dso)->fd = -1; in close_data_fd()
664 dso__data(dso)->file_size = 0; in close_data_fd()
665 dso__list_del(dso); in close_data_fd()
676 static void close_dso(struct dso *dso) EXCLUSIVE_LOCKS_REQUIRED(_dso__data_open_lock) in close_dso() argument
678 close_data_fd(dso); in close_dso()
684 struct dso *dso; in close_first_dso() local
688 dso = dso_data->dso; in close_first_dso()
690 dso = container_of(dso_data, struct dso, data); in close_first_dso()
692 close_dso(dso); in close_first_dso()
756 void dso__data_close(struct dso *dso) in dso__data_close() argument
759 close_dso(dso); in dso__data_close()
763 static void try_to_open_dso(struct dso *dso, struct machine *machine) in try_to_open_dso() argument
772 struct dso_data *dso_data = dso__data(dso); in try_to_open_dso()
777 if (dso__binary_type(dso) != DSO_BINARY_TYPE__NOT_FOUND) { in try_to_open_dso()
778 dso_data->fd = open_dso(dso, machine); in try_to_open_dso()
783 dso__set_binary_type(dso, binary_type_data[i++]); in try_to_open_dso()
785 dso_data->fd = open_dso(dso, machine); in try_to_open_dso()
789 } while (dso__binary_type(dso) != DSO_BINARY_TYPE__NOT_FOUND); in try_to_open_dso()
806 bool dso__data_get_fd(struct dso *dso, struct machine *machine, int *fd) in dso__data_get_fd() argument
809 if (dso__data(dso)->status == DSO_DATA_STATUS_ERROR) in dso__data_get_fd()
814 try_to_open_dso(dso, machine); in dso__data_get_fd()
816 *fd = dso__data(dso)->fd; in dso__data_get_fd()
824 void dso__data_put_fd(struct dso *dso __maybe_unused) in dso__data_put_fd()
829 bool dso__data_status_seen(struct dso *dso, enum dso_data_status_seen by) in dso__data_status_seen() argument
833 if (dso__data(dso)->status_seen & flag) in dso__data_status_seen()
836 dso__data(dso)->status_seen |= flag; in dso__data_status_seen()
842 static ssize_t bpf_read(struct dso *dso, u64 offset, char *data) in bpf_read() argument
846 struct dso_bpf_prog *dso_bpf_prog = dso__bpf_prog(dso); in bpf_read()
852 dso__data(dso)->status = DSO_DATA_STATUS_ERROR; in bpf_read()
867 static int bpf_size(struct dso *dso) in bpf_size() argument
870 struct dso_bpf_prog *dso_bpf_prog = dso__bpf_prog(dso); in bpf_size()
874 dso__data(dso)->status = DSO_DATA_STATUS_ERROR; in bpf_size()
878 dso__data(dso)->file_size = node->info_linear->info.jited_prog_len; in bpf_size()
884 dso_cache__free(struct dso *dso) in dso_cache__free() argument
886 struct rb_root *root = &dso__data(dso)->cache; in dso_cache__free()
889 mutex_lock(dso__lock(dso)); in dso_cache__free()
898 mutex_unlock(dso__lock(dso)); in dso_cache__free()
901 static struct dso_cache *__dso_cache__find(struct dso *dso, u64 offset) in __dso_cache__find() argument
903 const struct rb_root *root = &dso__data(dso)->cache; in __dso_cache__find()
927 dso_cache__insert(struct dso *dso, struct dso_cache *new) in dso_cache__insert() argument
929 struct rb_root *root = &dso__data(dso)->cache; in dso_cache__insert()
935 mutex_lock(dso__lock(dso)); in dso_cache__insert()
956 mutex_unlock(dso__lock(dso)); in dso_cache__insert()
973 static ssize_t file_read(struct dso *dso, struct machine *machine, in file_read() argument
984 try_to_open_dso(dso, machine); in file_read()
986 if (dso__data(dso)->fd < 0) { in file_read()
987 dso__data(dso)->status = DSO_DATA_STATUS_ERROR; in file_read()
992 ret = pread(dso__data(dso)->fd, data, DSO__DATA_CACHE_SIZE, offset); in file_read()
998 static struct dso_cache *dso_cache__populate(struct dso *dso, in dso_cache__populate() argument
1012 if (dso__binary_type(dso) == DSO_BINARY_TYPE__BPF_PROG_INFO) in dso_cache__populate()
1013 *ret = bpf_read(dso, cache_offset, cache->data); in dso_cache__populate()
1016 if (dso__binary_type(dso) == DSO_BINARY_TYPE__OOL) in dso_cache__populate()
1019 *ret = file_read(dso, machine, cache_offset, cache->data); in dso_cache__populate()
1029 old = dso_cache__insert(dso, cache); in dso_cache__populate()
1039 static struct dso_cache *dso_cache__find(struct dso *dso, in dso_cache__find() argument
1044 struct dso_cache *cache = __dso_cache__find(dso, offset); in dso_cache__find()
1046 return cache ? cache : dso_cache__populate(dso, machine, offset, ret); in dso_cache__find()
1049 static ssize_t dso_cache_io(struct dso *dso, struct machine *machine, in dso_cache_io() argument
1055 cache = dso_cache__find(dso, machine, offset, &ret); in dso_cache_io()
1067 static ssize_t cached_io(struct dso *dso, struct machine *machine, in cached_io() argument
1076 ret = dso_cache_io(dso, machine, offset, p, size, out); in cached_io()
1096 static int file_size(struct dso *dso, struct machine *machine) in file_size() argument
1108 try_to_open_dso(dso, machine); in file_size()
1110 if (dso__data(dso)->fd < 0) { in file_size()
1112 dso__data(dso)->status = DSO_DATA_STATUS_ERROR; in file_size()
1116 if (fstat(dso__data(dso)->fd, &st) < 0) { in file_size()
1120 dso__data(dso)->status = DSO_DATA_STATUS_ERROR; in file_size()
1123 dso__data(dso)->file_size = st.st_size; in file_size()
1130 int dso__data_file_size(struct dso *dso, struct machine *machine) in dso__data_file_size() argument
1132 if (dso__data(dso)->file_size) in dso__data_file_size()
1135 if (dso__data(dso)->status == DSO_DATA_STATUS_ERROR) in dso__data_file_size()
1138 if (dso__binary_type(dso) == DSO_BINARY_TYPE__BPF_PROG_INFO) in dso__data_file_size()
1139 return bpf_size(dso); in dso__data_file_size()
1141 return file_size(dso, machine); in dso__data_file_size()
1151 off_t dso__data_size(struct dso *dso, struct machine *machine) in dso__data_size() argument
1153 if (dso__data_file_size(dso, machine)) in dso__data_size()
1157 return dso__data(dso)->file_size; in dso__data_size()
1160 static ssize_t data_read_write_offset(struct dso *dso, struct machine *machine, in data_read_write_offset() argument
1164 if (dso__data_file_size(dso, machine)) in data_read_write_offset()
1168 if (offset > dso__data(dso)->file_size) in data_read_write_offset()
1174 return cached_io(dso, machine, offset, data, size, out); in data_read_write_offset()
1188 ssize_t dso__data_read_offset(struct dso *dso, struct machine *machine, in dso__data_read_offset() argument
1191 if (dso__data(dso)->status == DSO_DATA_STATUS_ERROR) in dso__data_read_offset()
1194 return data_read_write_offset(dso, machine, offset, data, size, true); in dso__data_read_offset()
1197 uint16_t dso__e_machine(struct dso *dso, struct machine *machine) in dso__e_machine() argument
1202 switch (dso__binary_type(dso)) { in dso__e_machine()
1240 try_to_open_dso(dso, machine); in dso__e_machine()
1241 fd = dso__data(dso)->fd; in dso__e_machine()
1245 if (dso__needs_swap(dso) == DSO_SWAP__UNSET) { in dso__e_machine()
1249 dso__swap_init(dso, eidata); in dso__e_machine()
1251 if (dso__needs_swap(dso) != DSO_SWAP__UNSET && in dso__e_machine()
1253 e_machine = DSO__SWAP(dso, uint16_t, e_machine); in dso__e_machine()
1269 ssize_t dso__data_read_addr(struct dso *dso, struct map *map, in dso__data_read_addr() argument
1275 return dso__data_read_offset(dso, machine, offset, data, size); in dso__data_read_addr()
1288 ssize_t dso__data_write_cache_offs(struct dso *dso, struct machine *machine, in dso__data_write_cache_offs() argument
1293 if (dso__data(dso)->status == DSO_DATA_STATUS_ERROR) in dso__data_write_cache_offs()
1296 return data_read_write_offset(dso, machine, offset, data, size, false); in dso__data_write_cache_offs()
1310 ssize_t dso__data_write_cache_addr(struct dso *dso, struct map *map, in dso__data_write_cache_addr() argument
1316 return dso__data_write_cache_offs(dso, machine, offset, data, size); in dso__data_write_cache_addr()
1322 struct dso *dso = dso__new(name); in dso__new_map() local
1324 if (dso) { in dso__new_map()
1325 map = map__new2(0, dso); in dso__new_map()
1326 dso__put(dso); in dso__new_map()
1332 struct dso *machine__findnew_kernel(struct machine *machine, const char *name, in machine__findnew_kernel()
1338 struct dso *dso = machine__findnew_dso(machine, name); in machine__findnew_kernel() local
1344 if (dso != NULL) { in machine__findnew_kernel()
1345 dso__set_short_name(dso, short_name, false); in machine__findnew_kernel()
1346 dso__set_kernel(dso, dso_type); in machine__findnew_kernel()
1349 return dso; in machine__findnew_kernel()
1352 static void __dso__set_long_name_id(struct dso *dso, const char *name, bool name_allocated) in __dso__set_long_name_id() argument
1354 if (dso__long_name_allocated(dso)) in __dso__set_long_name_id()
1355 free((char *)dso__long_name(dso)); in __dso__set_long_name_id()
1357 RC_CHK_ACCESS(dso)->long_name = name; in __dso__set_long_name_id()
1358 RC_CHK_ACCESS(dso)->long_name_len = strlen(name); in __dso__set_long_name_id()
1359 dso__set_long_name_allocated(dso, name_allocated); in __dso__set_long_name_id()
1362 static void dso__set_long_name_id(struct dso *dso, const char *name, bool name_allocated) in dso__set_long_name_id() argument
1364 struct dsos *dsos = dso__dsos(dso); in dso__set_long_name_id()
1375 __dso__set_long_name_id(dso, name, name_allocated); in dso__set_long_name_id()
1379 __dso__set_long_name_id(dso, name, name_allocated); in dso__set_long_name_id()
1421 void __dso__improve_id(struct dso *dso, const struct dso_id *id) in __dso__improve_id() argument
1423 struct dsos *dsos = dso__dsos(dso); in __dso__improve_id()
1424 struct dso_id *dso_id = dso__id(dso); in __dso__improve_id()
1459 int dso__cmp_id(struct dso *a, struct dso *b) in dso__cmp_id()
1464 void dso__set_long_name(struct dso *dso, const char *name, bool name_allocated) in dso__set_long_name() argument
1466 dso__set_long_name_id(dso, name, name_allocated); in dso__set_long_name()
1469 static void __dso__set_short_name(struct dso *dso, const char *name, bool name_allocated) in __dso__set_short_name() argument
1471 if (dso__short_name_allocated(dso)) in __dso__set_short_name()
1472 free((char *)dso__short_name(dso)); in __dso__set_short_name()
1474 RC_CHK_ACCESS(dso)->short_name = name; in __dso__set_short_name()
1475 RC_CHK_ACCESS(dso)->short_name_len = strlen(name); in __dso__set_short_name()
1476 dso__set_short_name_allocated(dso, name_allocated); in __dso__set_short_name()
1479 void dso__set_short_name(struct dso *dso, const char *name, bool name_allocated) in dso__set_short_name() argument
1481 struct dsos *dsos = dso__dsos(dso); in dso__set_short_name()
1492 __dso__set_short_name(dso, name, name_allocated); in dso__set_short_name()
1496 __dso__set_short_name(dso, name, name_allocated); in dso__set_short_name()
1500 int dso__name_len(const struct dso *dso) in dso__name_len() argument
1502 if (!dso) in dso__name_len()
1505 return dso__long_name_len(dso); in dso__name_len()
1507 return dso__short_name_len(dso); in dso__name_len()
1510 bool dso__loaded(const struct dso *dso) in dso__loaded() argument
1512 return RC_CHK_ACCESS(dso)->loaded; in dso__loaded()
1515 bool dso__sorted_by_name(const struct dso *dso) in dso__sorted_by_name() argument
1517 return RC_CHK_ACCESS(dso)->sorted_by_name; in dso__sorted_by_name()
1520 void dso__set_sorted_by_name(struct dso *dso) in dso__set_sorted_by_name() argument
1522 RC_CHK_ACCESS(dso)->sorted_by_name = true; in dso__set_sorted_by_name()
1525 struct dso *dso__new_id(const char *name, const struct dso_id *id) in dso__new_id()
1527 RC_STRUCT(dso) *dso = zalloc(sizeof(*dso) + strlen(name) + 1); in dso__new_id()
1528 struct dso *res; in dso__new_id()
1531 if (!dso) in dso__new_id()
1534 if (ADD_RC_CHK(res, dso)) { in dso__new_id()
1535 strcpy(dso->name, name); in dso__new_id()
1537 dso->id = *id; in dso__new_id()
1538 dso__set_long_name_id(res, dso->name, false); in dso__new_id()
1539 dso__set_short_name(res, dso->name, false); in dso__new_id()
1540 dso->symbols = RB_ROOT_CACHED; in dso__new_id()
1541 dso->symbol_names = NULL; in dso__new_id()
1542 dso->symbol_names_len = 0; in dso__new_id()
1543 dso->inlined_nodes = RB_ROOT_CACHED; in dso__new_id()
1544 dso->srclines = RB_ROOT_CACHED; in dso__new_id()
1545 dso->data_types = RB_ROOT; in dso__new_id()
1546 dso->global_vars = RB_ROOT; in dso__new_id()
1547 dso->data.fd = -1; in dso__new_id()
1548 dso->data.status = DSO_DATA_STATUS_UNKNOWN; in dso__new_id()
1549 dso->symtab_type = DSO_BINARY_TYPE__NOT_FOUND; in dso__new_id()
1550 dso->binary_type = DSO_BINARY_TYPE__NOT_FOUND; in dso__new_id()
1551 dso->is_64_bit = (sizeof(void *) == 8); in dso__new_id()
1552 dso->loaded = 0; in dso__new_id()
1553 dso->rel = 0; in dso__new_id()
1554 dso->sorted_by_name = 0; in dso__new_id()
1555 dso->has_srcline = 1; in dso__new_id()
1556 dso->a2l_fails = 1; in dso__new_id()
1557 dso->kernel = DSO_SPACE__USER; in dso__new_id()
1558 dso->is_kmod = 0; in dso__new_id()
1559 dso->needs_swap = DSO_SWAP__UNSET; in dso__new_id()
1560 dso->comp = COMP_ID__NONE; in dso__new_id()
1561 mutex_init(&dso->lock); in dso__new_id()
1562 refcount_set(&dso->refcnt, 1); in dso__new_id()
1563 data = &dso->data; in dso__new_id()
1569 data->dso = NULL; /* Set when on the open_entry list. */ in dso__new_id()
1575 struct dso *dso__new(const char *name) in dso__new()
1580 void dso__delete(struct dso *dso) in dso__delete() argument
1582 if (dso__dsos(dso)) in dso__delete()
1583 pr_err("DSO %s is still in rbtree when being deleted!\n", dso__long_name(dso)); in dso__delete()
1586 inlines__tree_delete(&RC_CHK_ACCESS(dso)->inlined_nodes); in dso__delete()
1587 srcline__tree_delete(&RC_CHK_ACCESS(dso)->srclines); in dso__delete()
1588 symbols__delete(&RC_CHK_ACCESS(dso)->symbols); in dso__delete()
1589 RC_CHK_ACCESS(dso)->symbol_names_len = 0; in dso__delete()
1590 zfree(&RC_CHK_ACCESS(dso)->symbol_names); in dso__delete()
1591 annotated_data_type__tree_delete(dso__data_types(dso)); in dso__delete()
1592 global_var_type__tree_delete(dso__global_vars(dso)); in dso__delete()
1594 if (RC_CHK_ACCESS(dso)->short_name_allocated) { in dso__delete()
1595 zfree((char **)&RC_CHK_ACCESS(dso)->short_name); in dso__delete()
1596 RC_CHK_ACCESS(dso)->short_name_allocated = false; in dso__delete()
1599 if (RC_CHK_ACCESS(dso)->long_name_allocated) { in dso__delete()
1600 zfree((char **)&RC_CHK_ACCESS(dso)->long_name); in dso__delete()
1601 RC_CHK_ACCESS(dso)->long_name_allocated = false; in dso__delete()
1604 dso__data_close(dso); in dso__delete()
1605 auxtrace_cache__free(RC_CHK_ACCESS(dso)->auxtrace_cache); in dso__delete()
1606 dso_cache__free(dso); in dso__delete()
1607 dso__free_a2l(dso); in dso__delete()
1608 dso__free_symsrc_filename(dso); in dso__delete()
1609 nsinfo__zput(RC_CHK_ACCESS(dso)->nsinfo); in dso__delete()
1610 mutex_destroy(dso__lock(dso)); in dso__delete()
1611 RC_CHK_FREE(dso); in dso__delete()
1614 struct dso *dso__get(struct dso *dso) in dso__get() argument
1616 struct dso *result; in dso__get()
1618 if (RC_CHK_GET(result, dso)) in dso__get()
1619 refcount_inc(&RC_CHK_ACCESS(dso)->refcnt); in dso__get()
1624 void dso__put(struct dso *dso) in dso__put() argument
1627 if (dso && dso__data(dso) && refcount_read(&RC_CHK_ACCESS(dso)->refcnt) == 2) in dso__put()
1628 dso__data_close(dso); in dso__put()
1630 if (dso && refcount_dec_and_test(&RC_CHK_ACCESS(dso)->refcnt)) in dso__put()
1631 dso__delete(dso); in dso__put()
1633 RC_CHK_PUT(dso); in dso__put()
1636 int dso__swap_init(struct dso *dso, unsigned char eidata) in dso__swap_init() argument
1640 dso__set_needs_swap(dso, DSO_SWAP__NO); in dso__swap_init()
1646 dso__set_needs_swap(dso, DSO_SWAP__YES); in dso__swap_init()
1652 dso__set_needs_swap(dso, DSO_SWAP__YES); in dso__swap_init()
1663 void dso__set_build_id(struct dso *dso, const struct build_id *bid) in dso__set_build_id() argument
1665 dso__id(dso)->build_id = *bid; in dso__set_build_id()
1668 bool dso__build_id_equal(const struct dso *dso, const struct build_id *bid) in dso__build_id_equal() argument
1670 const struct build_id *dso_bid = dso__bid(dso); in dso__build_id_equal()
1686 void dso__read_running_kernel_build_id(struct dso *dso, struct machine *machine) in dso__read_running_kernel_build_id() argument
1695 dso__set_build_id(dso, &bid); in dso__read_running_kernel_build_id()
1698 int dso__kernel_module_get_build_id(struct dso *dso, in dso__kernel_module_get_build_id() argument
1707 const char *name = dso__short_name(dso) + 1; in dso__kernel_module_get_build_id()
1714 dso__set_build_id(dso, &bid); in dso__kernel_module_get_build_id()
1718 static size_t dso__fprintf_buildid(struct dso *dso, FILE *fp) in dso__fprintf_buildid() argument
1722 build_id__snprintf(dso__bid(dso), sbuild_id, sizeof(sbuild_id)); in dso__fprintf_buildid()
1726 size_t dso__fprintf(struct dso *dso, FILE *fp) in dso__fprintf() argument
1729 size_t ret = fprintf(fp, "dso: %s (", dso__short_name(dso)); in dso__fprintf()
1731 if (dso__short_name(dso) != dso__long_name(dso)) in dso__fprintf()
1732 ret += fprintf(fp, "%s, ", dso__long_name(dso)); in dso__fprintf()
1733 ret += fprintf(fp, "%sloaded, ", dso__loaded(dso) ? "" : "NOT "); in dso__fprintf()
1734 ret += dso__fprintf_buildid(dso, fp); in dso__fprintf()
1736 for (nd = rb_first_cached(dso__symbols(dso)); nd; nd = rb_next(nd)) { in dso__fprintf()
1744 enum dso_type dso__type(struct dso *dso, struct machine *machine) in dso__type() argument
1749 if (dso__data_get_fd(dso, machine, &fd)) { in dso__type()
1751 dso__data_put_fd(dso); in dso__type()
1757 int dso__strerror_load(struct dso *dso, char *buf, size_t buflen) in dso__strerror_load() argument
1759 int idx, errnum = *dso__load_errno(dso); in dso__strerror_load()
1819 static const u8 *__dso__read_symbol(struct dso *dso, const char *symfs_filename, in __dso__read_symbol() argument
1832 nsinfo__mountns_enter(dso__nsinfo(dso), &nsc); in __dso__read_symbol()
1868 const u8 *dso__read_symbol(struct dso *dso, const char *symfs_filename, in dso__read_symbol() argument
1880 if (dso__binary_type(dso) == DSO_BINARY_TYPE__BPF_IMAGE) { in dso__read_symbol()
1888 if (dso__binary_type(dso) == DSO_BINARY_TYPE__BPF_PROG_INFO) { in dso__read_symbol()
1894 info_node = perf_env__find_bpf_prog_info(dso__bpf_prog(dso)->env, in dso__read_symbol()
1895 dso__bpf_prog(dso)->id); in dso__read_symbol()
1910 return __dso__read_symbol(dso, symfs_filename, start, len, in dso__read_symbol()